From 9974038527c32d1a4f2a49eb213308e3791bb874 Mon Sep 17 00:00:00 2001 From: Tristan Rhodes Date: Mon, 29 Aug 2022 06:11:04 -0600 Subject: [PATCH 01/98] Initial commit --- .../resource-bar/assets/Blue laser (01).png | Bin 0 -> 744 bytes examples/resource-bar/assets/Fly_1.png | Bin 0 -> 4229 bytes examples/resource-bar/assets/Fly_10.png | Bin 0 -> 4349 bytes examples/resource-bar/assets/Fly_2.png | Bin 0 -> 4232 bytes examples/resource-bar/assets/Fly_3.png | Bin 0 -> 4450 bytes examples/resource-bar/assets/Fly_4.png | Bin 0 -> 4458 bytes examples/resource-bar/assets/Fly_5.png | Bin 0 -> 4387 bytes examples/resource-bar/assets/Fly_6.png | Bin 0 -> 4515 bytes examples/resource-bar/assets/Fly_7.png | Bin 0 -> 4558 bytes examples/resource-bar/assets/Fly_8.png | Bin 0 -> 4499 bytes examples/resource-bar/assets/Fly_9.png | Bin 0 -> 4445 bytes .../assets/Meteor Detailed_Large.png | Bin 0 -> 1147 bytes .../assets/Meteor Detailed_Small.png | Bin 0 -> 804 bytes examples/resource-bar/assets/Moon.png | Bin 0 -> 3328 bytes .../resource-bar/assets/Ranger_Carry_1.png | Bin 0 -> 325 bytes .../resource-bar/assets/Ranger_Carry_2.png | Bin 0 -> 295 bytes .../resource-bar/assets/Ranger_Carry_3.png | Bin 0 -> 312 bytes .../resource-bar/assets/Ranger_Carry_4.png | Bin 0 -> 295 bytes .../resource-bar/assets/Ranger_Climb_1.png | Bin 0 -> 288 bytes .../resource-bar/assets/Ranger_Climb_2.png | Bin 0 -> 305 bytes .../resource-bar/assets/Ranger_Climb_3.png | Bin 0 -> 288 bytes .../resource-bar/assets/Ranger_Climb_4.png | Bin 0 -> 299 bytes .../resource-bar/assets/Ranger_Daze_1.png | Bin 0 -> 295 bytes .../resource-bar/assets/Ranger_Daze_2.png | Bin 0 -> 303 bytes .../resource-bar/assets/Ranger_Daze_3.png | Bin 0 -> 295 bytes .../resource-bar/assets/Ranger_Daze_4.png | Bin 0 -> 303 bytes examples/resource-bar/assets/Ranger_Dead.png | Bin 0 -> 254 bytes .../resource-bar/assets/Ranger_Get Up.png | Bin 0 -> 289 bytes .../resource-bar/assets/Ranger_Headbutt_1.png | Bin 0 -> 335 bytes .../resource-bar/assets/Ranger_Headbutt_2.png | Bin 0 -> 333 bytes examples/resource-bar/assets/Ranger_Hurt.png | Bin 0 -> 339 bytes .../resource-bar/assets/Ranger_Idle 1_1.png | Bin 0 -> 321 bytes .../resource-bar/assets/Ranger_Idle 1_2.png | Bin 0 -> 320 bytes .../resource-bar/assets/Ranger_Idle 1_3.png | Bin 0 -> 316 bytes .../resource-bar/assets/Ranger_Idle 1_4.png | Bin 0 -> 322 bytes .../resource-bar/assets/Ranger_Idle 2_1.png | Bin 0 -> 291 bytes .../resource-bar/assets/Ranger_Idle 2_2.png | Bin 0 -> 292 bytes .../resource-bar/assets/Ranger_Idle 2_3.png | Bin 0 -> 285 bytes .../resource-bar/assets/Ranger_Idle 2_4.png | Bin 0 -> 291 bytes .../assets/Ranger_Jump Kick_1.png | Bin 0 -> 304 bytes .../assets/Ranger_Jump Kick_2.png | Bin 0 -> 330 bytes .../assets/Ranger_Jump Kick_3.png | Bin 0 -> 307 bytes .../assets/Ranger_Jump Kick_4.png | Bin 0 -> 304 bytes .../resource-bar/assets/Ranger_Kick 1.png | Bin 0 -> 357 bytes .../resource-bar/assets/Ranger_Kick 2.png | Bin 0 -> 354 bytes .../resource-bar/assets/Ranger_Knockdown.png | Bin 0 -> 333 bytes .../assets/Ranger_Over Throw_1.png | Bin 0 -> 297 bytes .../assets/Ranger_Over Throw_2.png | Bin 0 -> 310 bytes .../resource-bar/assets/Ranger_Pick Up 2.png | Bin 0 -> 321 bytes .../resource-bar/assets/Ranger_Pick Up.png | Bin 0 -> 320 bytes .../resource-bar/assets/Ranger_Punch 1.png | Bin 0 -> 336 bytes .../resource-bar/assets/Ranger_Punch 2.png | Bin 0 -> 363 bytes examples/resource-bar/assets/Ranger_Run_1.png | Bin 0 -> 299 bytes examples/resource-bar/assets/Ranger_Run_2.png | Bin 0 -> 315 bytes examples/resource-bar/assets/Ranger_Run_3.png | Bin 0 -> 302 bytes examples/resource-bar/assets/Ranger_Run_4.png | Bin 0 -> 309 bytes examples/resource-bar/assets/Ranger_Stab.png | Bin 0 -> 337 bytes .../resource-bar/assets/Ranger_Strafe 1_1.png | Bin 0 -> 324 bytes .../resource-bar/assets/Ranger_Strafe 1_2.png | Bin 0 -> 291 bytes .../resource-bar/assets/Ranger_Strafe 1_3.png | Bin 0 -> 324 bytes .../resource-bar/assets/Ranger_Strafe 1_4.png | Bin 0 -> 291 bytes .../resource-bar/assets/Ranger_Strafe 2_1.png | Bin 0 -> 320 bytes .../resource-bar/assets/Ranger_Strafe 2_2.png | Bin 0 -> 294 bytes .../resource-bar/assets/Ranger_Strafe 2_3.png | Bin 0 -> 320 bytes .../resource-bar/assets/Ranger_Strafe 2_4.png | Bin 0 -> 294 bytes .../resource-bar/assets/Ranger_Walk 1_1.png | Bin 0 -> 321 bytes .../resource-bar/assets/Ranger_Walk 1_2.png | Bin 0 -> 291 bytes .../resource-bar/assets/Ranger_Walk 1_3.png | Bin 0 -> 308 bytes .../resource-bar/assets/Ranger_Walk 1_4.png | Bin 0 -> 291 bytes .../resource-bar/assets/Ranger_Walk 2_1.png | Bin 0 -> 294 bytes .../resource-bar/assets/Ranger_Walk 2_2.png | Bin 0 -> 309 bytes .../resource-bar/assets/Ranger_Walk 2_3.png | Bin 0 -> 294 bytes .../resource-bar/assets/Ranger_Walk 2_4.png | Bin 0 -> 286 bytes .../resource-bar/assets/Ranger_Walk 3_1.png | Bin 0 -> 315 bytes .../resource-bar/assets/Ranger_Walk 3_2.png | Bin 0 -> 291 bytes .../resource-bar/assets/Ranger_Walk 3_3.png | Bin 0 -> 316 bytes .../resource-bar/assets/Ranger_Walk 3_4.png | Bin 0 -> 294 bytes .../resource-bar/assets/Silver shield.png | Bin 0 -> 781 bytes .../resource-bar/assets/Star_LargeNarrow.png | Bin 0 -> 707 bytes .../resource-bar/assets/Star_LargeWide.png | Bin 0 -> 641 bytes examples/resource-bar/assets/Star_Medium.png | Bin 0 -> 386 bytes examples/resource-bar/assets/Star_Small.png | Bin 0 -> 294 bytes .../assets/Upgraded Potion Blue_No Shadow.png | Bin 0 -> 3338 bytes .../assets/Upgraded Potion Blue_Shadow.png | Bin 0 -> 3447 bytes examples/resource-bar/game.json | 18824 ++++++++++++++++ 85 files changed, 18824 insertions(+) create mode 100644 examples/resource-bar/assets/Blue laser (01).png create mode 100644 examples/resource-bar/assets/Fly_1.png create mode 100644 examples/resource-bar/assets/Fly_10.png create mode 100644 examples/resource-bar/assets/Fly_2.png create mode 100644 examples/resource-bar/assets/Fly_3.png create mode 100644 examples/resource-bar/assets/Fly_4.png create mode 100644 examples/resource-bar/assets/Fly_5.png create mode 100644 examples/resource-bar/assets/Fly_6.png create mode 100644 examples/resource-bar/assets/Fly_7.png create mode 100644 examples/resource-bar/assets/Fly_8.png create mode 100644 examples/resource-bar/assets/Fly_9.png create mode 100644 examples/resource-bar/assets/Meteor Detailed_Large.png create mode 100644 examples/resource-bar/assets/Meteor Detailed_Small.png create mode 100644 examples/resource-bar/assets/Moon.png create mode 100644 examples/resource-bar/assets/Ranger_Carry_1.png create mode 100644 examples/resource-bar/assets/Ranger_Carry_2.png create mode 100644 examples/resource-bar/assets/Ranger_Carry_3.png create mode 100644 examples/resource-bar/assets/Ranger_Carry_4.png create mode 100644 examples/resource-bar/assets/Ranger_Climb_1.png create mode 100644 examples/resource-bar/assets/Ranger_Climb_2.png create mode 100644 examples/resource-bar/assets/Ranger_Climb_3.png create mode 100644 examples/resource-bar/assets/Ranger_Climb_4.png create mode 100644 examples/resource-bar/assets/Ranger_Daze_1.png create mode 100644 examples/resource-bar/assets/Ranger_Daze_2.png create mode 100644 examples/resource-bar/assets/Ranger_Daze_3.png create mode 100644 examples/resource-bar/assets/Ranger_Daze_4.png create mode 100644 examples/resource-bar/assets/Ranger_Dead.png create mode 100644 examples/resource-bar/assets/Ranger_Get Up.png create mode 100644 examples/resource-bar/assets/Ranger_Headbutt_1.png create mode 100644 examples/resource-bar/assets/Ranger_Headbutt_2.png create mode 100644 examples/resource-bar/assets/Ranger_Hurt.png create mode 100644 examples/resource-bar/assets/Ranger_Idle 1_1.png create mode 100644 examples/resource-bar/assets/Ranger_Idle 1_2.png create mode 100644 examples/resource-bar/assets/Ranger_Idle 1_3.png create mode 100644 examples/resource-bar/assets/Ranger_Idle 1_4.png create mode 100644 examples/resource-bar/assets/Ranger_Idle 2_1.png create mode 100644 examples/resource-bar/assets/Ranger_Idle 2_2.png create mode 100644 examples/resource-bar/assets/Ranger_Idle 2_3.png create mode 100644 examples/resource-bar/assets/Ranger_Idle 2_4.png create mode 100644 examples/resource-bar/assets/Ranger_Jump Kick_1.png create mode 100644 examples/resource-bar/assets/Ranger_Jump Kick_2.png create mode 100644 examples/resource-bar/assets/Ranger_Jump Kick_3.png create mode 100644 examples/resource-bar/assets/Ranger_Jump Kick_4.png create mode 100644 examples/resource-bar/assets/Ranger_Kick 1.png create mode 100644 examples/resource-bar/assets/Ranger_Kick 2.png create mode 100644 examples/resource-bar/assets/Ranger_Knockdown.png create mode 100644 examples/resource-bar/assets/Ranger_Over Throw_1.png create mode 100644 examples/resource-bar/assets/Ranger_Over Throw_2.png create mode 100644 examples/resource-bar/assets/Ranger_Pick Up 2.png create mode 100644 examples/resource-bar/assets/Ranger_Pick Up.png create mode 100644 examples/resource-bar/assets/Ranger_Punch 1.png create mode 100644 examples/resource-bar/assets/Ranger_Punch 2.png create mode 100644 examples/resource-bar/assets/Ranger_Run_1.png create mode 100644 examples/resource-bar/assets/Ranger_Run_2.png create mode 100644 examples/resource-bar/assets/Ranger_Run_3.png create mode 100644 examples/resource-bar/assets/Ranger_Run_4.png create mode 100644 examples/resource-bar/assets/Ranger_Stab.png create mode 100644 examples/resource-bar/assets/Ranger_Strafe 1_1.png create mode 100644 examples/resource-bar/assets/Ranger_Strafe 1_2.png create mode 100644 examples/resource-bar/assets/Ranger_Strafe 1_3.png create mode 100644 examples/resource-bar/assets/Ranger_Strafe 1_4.png create mode 100644 examples/resource-bar/assets/Ranger_Strafe 2_1.png create mode 100644 examples/resource-bar/assets/Ranger_Strafe 2_2.png create mode 100644 examples/resource-bar/assets/Ranger_Strafe 2_3.png create mode 100644 examples/resource-bar/assets/Ranger_Strafe 2_4.png create mode 100644 examples/resource-bar/assets/Ranger_Walk 1_1.png create mode 100644 examples/resource-bar/assets/Ranger_Walk 1_2.png create mode 100644 examples/resource-bar/assets/Ranger_Walk 1_3.png create mode 100644 examples/resource-bar/assets/Ranger_Walk 1_4.png create mode 100644 examples/resource-bar/assets/Ranger_Walk 2_1.png create mode 100644 examples/resource-bar/assets/Ranger_Walk 2_2.png create mode 100644 examples/resource-bar/assets/Ranger_Walk 2_3.png create mode 100644 examples/resource-bar/assets/Ranger_Walk 2_4.png create mode 100644 examples/resource-bar/assets/Ranger_Walk 3_1.png create mode 100644 examples/resource-bar/assets/Ranger_Walk 3_2.png create mode 100644 examples/resource-bar/assets/Ranger_Walk 3_3.png create mode 100644 examples/resource-bar/assets/Ranger_Walk 3_4.png create mode 100644 examples/resource-bar/assets/Silver shield.png create mode 100644 examples/resource-bar/assets/Star_LargeNarrow.png create mode 100644 examples/resource-bar/assets/Star_LargeWide.png create mode 100644 examples/resource-bar/assets/Star_Medium.png create mode 100644 examples/resource-bar/assets/Star_Small.png create mode 100644 examples/resource-bar/assets/Upgraded Potion Blue_No Shadow.png create mode 100644 examples/resource-bar/assets/Upgraded Potion Blue_Shadow.png create mode 100644 examples/resource-bar/game.json diff --git a/examples/resource-bar/assets/Blue laser (01).png b/examples/resource-bar/assets/Blue laser (01).png new file mode 100644 index 0000000000000000000000000000000000000000..b76aaf7a042d56165a0d3cbadd2ce85216838081 GIT binary patch literal 744 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Fly_2.png b/examples/resource-bar/assets/Fly_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e37ddf9bf1830197f8a2776f0ffd3d8175ba0e1b GIT binary patch literal 4232 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Fly_5.png b/examples/resource-bar/assets/Fly_5.png new file mode 100644 index 0000000000000000000000000000000000000000..1c2448c96f473aa54eb1662a940d52b0d8a53b9a GIT binary patch literal 4387 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Fly_6.png b/examples/resource-bar/assets/Fly_6.png new file mode 100644 index 0000000000000000000000000000000000000000..8cc09c7e0c8f15563b9763c3affadbb1b5c6266a GIT binary patch literal 4515 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 Bw2c4& literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Fly_7.png b/examples/resource-bar/assets/Fly_7.png new file mode 100644 index 0000000000000000000000000000000000000000..6999696b33edbb9d601b3129d67b9889a8239e08 GIT binary patch literal 4558 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 sPx# literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Fly_8.png b/examples/resource-bar/assets/Fly_8.png new file mode 100644 index 0000000000000000000000000000000000000000..971127eb538214098e0d58f44022b4af16426994 GIT binary patch literal 4499 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Fly_9.png b/examples/resource-bar/assets/Fly_9.png new file mode 100644 index 0000000000000000000000000000000000000000..551ababd4e85aaceccaf0d932d0ab0eb0b4bfef9 GIT binary patch literal 4445 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Meteor Detailed_Large.png b/examples/resource-bar/assets/Meteor Detailed_Large.png new file mode 100644 index 0000000000000000000000000000000000000000..72c1816ed83c03c7d5d16b9ec4da3943870423a7 GIT binary patch literal 1147 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Carry_1.png b/examples/resource-bar/assets/Ranger_Carry_1.png new file mode 100644 index 0000000000000000000000000000000000000000..b10bcecc3a8dd5dc9764cca1c0431f56160bdb90 GIT binary patch literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*3v{E{-7{-e)IW&sepe=6jO5y_I!Q8U1*?kA z$=IUy^rG(<-)Y1$3IUv#24yVGr4e0;y2bWGPf2Tsu1T-Q`BzR&+yAxGiJ)B zITs&?G-)r)uuHbIpW103QBb*O&WZVt=j6_G*(`bTrr5_bD_b_`l>4dfXxdw>rNHIB zPnpXNj2Cg$?r%7EIjBSa>}iLe)7LRsbcNn{1`ISV`@iy0XB4ude`@%$AjK*2qpE{-7{-cKjp4({$FMgH?7}o$f_fet*59nl7?P^@NG$6(+&y z1@3uYMIJJ}p55cbn=5HIf3`^33a$^n#|+zUN}t%Q>C*a>uRqOSQt=mdKI;Vst07rgrt^fc4 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Carry_3.png b/examples/resource-bar/assets/Ranger_Carry_3.png new file mode 100644 index 0000000000000000000000000000000000000000..8a6f8463792e3d8d643e3fca23241aa059792b34 GIT binary patch literal 312 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*6(~E{-7{-e)J@Ct4JpyOs92R``*T@c_~_W9yzn;_R+@&2pd^fXC1s-1qw<`Z+s zxM=qC3CtJyCEIuRr2eQmS9HWXyg}Yb^y#MWoNr9MA07I`)BkSP6oGo?H|eF3-5QV2 z+?(|(U}{9!|DLZmL(Tpr94OgwXO3BY*I#Chnvw@o1;c;*Y|zqJ-^r!D-c#Gcw&}FQ zEGdbNn{1`ISV`@iy0XB4ude`@%$AjK*2qpE{-7{-cKjp4({$FMgH?7}o$f_fet*59nl7?P^@NG$6(+&y z1@3uYMIJJ}p55cbn=5HIf3`^33a$^n#|+zUN}t%Q>C*a>uRqOSQt=mdKI;Vst07rgrt^fc4 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Climb_1.png b/examples/resource-bar/assets/Ranger_Climb_1.png new file mode 100644 index 0000000000000000000000000000000000000000..0afc09013a3bc8eab636d10b11789780cffebea8 GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*6n^E{-7{-ft(J<~?K};BuF-+-gy4%*!sb zAPH5Ao@tS}b8fnd?L0WyZJW*fm`hy07HIw|y33uPR(p(lqmA(Nn{1`ISV`@iy0XB4ude`@%$AjK*3|4E{-7{-e)IX0q8mz-pV9EF0hJ1qtmFuzss_Z++B^saMT(6%HG#nrvy9a%1L^@1L(V z+5Bdj=gGXvfo)Cor33f56^;fx;GCy*w1_c4)nci|V)c_tB!9Yb8MkcbIv}uY8n?om z?z3vrYZOAh>wWxGk@|372vB*_)<8GODTnlS%T_%O2us(S7C7}vy7=aX&GW^-?9Z-e zeDde>N+zev51G1!MLyh?xSuY?#xFi+l7QXx`r7H8v*N{pK4S26^>bP0l+XkKty*=> literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Climb_3.png b/examples/resource-bar/assets/Ranger_Climb_3.png new file mode 100644 index 0000000000000000000000000000000000000000..0afc09013a3bc8eab636d10b11789780cffebea8 GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*6n^E{-7{-ft(J<~?K};BuF-+-gy4%*!sb zAPH5Ao@tS}b8fnd?L0WyZJW*fm`hy07HIw|y33uPR(p(lqmA(Nn{1`ISV`@iy0XB4ude`@%$AjK*0l^E{-7{-d88yX@?qG4^}xE{C8k{Qor(!&?fbxAF3LI sr>{wvwVvyZt-HLIv$K5b|7k&Sy+>-N*YYWB1p0-+)78&qol`;+0FsGr+W-In literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Daze_1.png b/examples/resource-bar/assets/Ranger_Daze_1.png new file mode 100644 index 0000000000000000000000000000000000000000..40335b810debc83addf38258e05b37711b2117c9 GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*2qpE{-7{-ghS*6g+Ie!E)8{-%AbMAG6n8 za^v#m+}6jzwt;2wjY<{kVrGv!k^Iy1H(U8`)C(?C< zzeHXYi2C&GB}2%IFAd8Sw=^*Dy=37L6lVW$Ca75aR~O&IRib-c=2;ni=F{Sl<8*j` zcE2D)%EO}icT3)HymNTZqb&^Y0%tq*>=d4mbf%s8OV2zrp?`)4G*i!`F!z})sPJaLMb+nA?pV$2Gh_si|yzokHbFnGH9xvXNn{1`ISV`@iy0XB4ude`@%$AjK*1xPE{-7{-bW{0S6?YD{v$0-d%q zrWANEe*4UIqoQ(8&kt+0GlI`pPjgiq&yi9(=I7YOGF{|_aaobdoah1#o-$TH&D|6J xafdJc(QtEhP>loE)xQ%o9+;+B6-)@SyC^+(M)vR5WNn{1`ISV`@iy0XB4ude`@%$AjK*2qpE{-7{-ghS*6g+Ie!E)8{-%AbMAG6n8 za^v#m+}6jzwt;2wjY<{kVrGv!k^Iy1H(U8`)C(?C< zzeHXYi2C&GB}2%IFAd8Sw=^*Dy=37L6lVW$Ca75aR~O&IRib-c=2;ni=F{Sl<8*j` zcE2D)%EO}icT3)HymNTZqb&^Y0%tq*>=d4mbf%s8OV2zrp?`)4G*i!`F!z})sPJaLMb+nA?pV$2Gh_si|yzokHbFnGH9xvXNn{1`ISV`@iy0XB4ude`@%$AjK*1xPE{-7{-d86b(gFPJOy}PH~UN=gR$8 zPNb_kznY}$&uuVqJ$F>w6;=+9M;vVhoh&8GJ9c~j71dm*DO}50|7wMg^$d-Oh=$F& z^3DuXo|IIVER^*Tv2o(ud;G|zcI^emY2F=L)=eUzabhQ|&y^}a{Li#O=Ov4pW~}GG vrQSg~j&p%TW9y^Jj_?hfGxc;f^9T5ZxPs{9%~4Ve?`L^}G+esB6iBg_1o;L32LguQ+xUWk0-OaNk;M!Q ze1}1p@p%4<6rf@&`JhRS3j3^P6 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Get Up.png b/examples/resource-bar/assets/Ranger_Get Up.png new file mode 100644 index 0000000000000000000000000000000000000000..57503f5e2abad9ada3d8b94c70cac86bab66f090 GIT binary patch literal 289 zcmV++0p9+JP)U`iy*0GJ^Z8Ni>s8P5JV z*O#CH;JgotHc&u;uwa@miXkMs0Go?IhC%^mI)KGJEb*Y*j^qu(Ng12d38qBki~_U` ny*$JjD=-7l%Q~zDC^i59R!&_)GIz&c00000NkvXXu0mjfIIwMo literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Headbutt_1.png b/examples/resource-bar/assets/Ranger_Headbutt_1.png new file mode 100644 index 0000000000000000000000000000000000000000..f2e4b6b21deafdd65ae4d70f25e415d2e2a8006e GIT binary patch literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^5anMpx_fv7sn6}@1s)=@*XzeaNX?q{_YCxFSpk2 za$|qZvCfW9>|nz6W0U585oJH2yz|Ko*PuwRs(YIy!tH|71*g^AZ1Vb3Yp;>6>oak4 zMB33wwcIZHES?pd$5&Zq2C*%jaK7W8*4)pP;@LkoF>HKx#aQoZbJRKRkOrIGB~Ll3 zOl(i?k2mlwX3R1XJu+o|48x_jUspC&-}0X--R@#r5FS&w0z3LY!*-gC|!Q zt+(q@|Mco`h0=OE7ynIpjOTWiG`^18@9i(}FZBz{CiDFa*Nta=V(OiqaY?wqH?3ns d0`u{Y%$J1@C9OIa@C@i*22WQ%mvv4FO#rmPgyR4J literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Headbutt_2.png b/examples/resource-bar/assets/Ranger_Headbutt_2.png new file mode 100644 index 0000000000000000000000000000000000000000..1587e1d40e57c29b7a228c5e70ebaef5380d734e GIT binary patch literal 333 zcmeAS@N?(olHy`uVBq!ia0vp^5anMpx`4<7sn6}@3T`5@*Y;;aoz0r{_YCxFSpk2 za$|qZ5h8D3#OB<)a+Z3e;XpRo`h;OEybxk3+$}xU3Z>v{xP|$=?vrC?x{DF+0UkGE@wDXG;_wOz!^v1 zy0$64II7ET&(9G1^BjYKUVnJ-i{%^p*U7X-Mt!^}`nmW{(SlPiZSyQMT0Yt4=`K3C zWuK()lCNhol-A}asofNBD9#EEh@b60lk?90o|z5juQ7i(qpB%y@S{V~nDJ}H%mVIz c2MTK#-ncEXcqyLg4)iU9r>mdKI;Vst01MTDdH?_b literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Hurt.png b/examples/resource-bar/assets/Ranger_Hurt.png new file mode 100644 index 0000000000000000000000000000000000000000..b87e3f660eb04ce54df213f1da309e5dc002dbe6 GIT binary patch literal 339 zcmV-Z0j&OsP)Ljib$BxqlaZ=RQ^<6KH)7Y*J zZW)GqVTD9T;w+gH@Z{qm58mHx4*XXcvX4cP!jUCGha?n>WRK6S_t*XTwK~ciU~-aJ zII2yd00^N7y4WOukjPZPq=kYn1L(AB0^ zSwl4y5x|jI0qne1G&}gMz_Wjp!D*-p7}y|Evutt@`hVzlr{H3q!aa=TzW6UxYk=fd z2PW=wl_UwclsJc?8L*9UZW{m72dw@0m`y`9Nn{1`ISV`@iy0XB4ude`@%$AjK*4LCE{-7{-diVKu%rEgO+E?7_vU5^aN!PDE*$1;1&k6id+NpKAe1Ch7!uWOT6dYQYxsXqRKsMA7bd&XG{4rujQpMP>FmdiRMKQ62U53tHo}e$ISQKH!)NPb(s_hF0Emlwq~B;g_W1h Qfj(sLboFyt=akR{0DGx_fdBvi literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Idle 1_2.png b/examples/resource-bar/assets/Ranger_Idle 1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..ca4b41cc5c6da5ffaabbf41f7b6793bf00f7b364 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*6h?E{-7{-diVK#AyN-v5;`>Iu4kK6>iA zTGy3o@^*U|M1TEmS~nppY5oOKqeCm=ZZ1l6IvTq~e22NwkA*u=2R%3JSty=X#i+%k zoe?2c(wecD|NWvEx%Hkewili;;z_)wV|aRjU3fSH@9Dj}n3gr{4;OEo8Cl;X3C8y) z%>1T*VCPnzOX;7lO!#+crsMe^Ojq>IS1?q2q)nJNP0@7Dk!`gMYYs1ByxOs~7U)3+ MPgg&ebxsLQ0LIdQwEzGB literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Idle 1_3.png b/examples/resource-bar/assets/Ranger_Idle 1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..60486c3e3d891da592df28e24868e72f8fbbfed7 GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*5WiE{-7{-e)IWc;o$oRX|fkG>RmTDNskWbD%~2ezxKt-1eJ?ow~jzWL_U z=Dls&aI&3W{DSANO2=T1*k*ALX|zpgOrdg&PxpGC1-kN7nII=7BNVw(AGrnZLq&D;%VGVB_9z&P)O&ui9_ z^~%j>F4~zcsegH9LHUk`b87zo8Gd=BO_(`N(ezJe?r(Nn{1`ISV`@iy0XB4ude`@%$AjK*8&tE{-7{-e)IW>v|Z>y2hI|bbcZ;B^P#-k3MyyL-a93o!?0AcRaX3gO9HuOqeP>kz(oEk6xPfv0 z37_NK1^SEG=C7{J^7wygW@Gs-hUd#X{xNn{1`ISV`@iy0XB4ude`@%$AjK*1fJE{-7{-cKjpiFz8Z z7KztZaB*fP&U3J;%`-W|z9iu6 j?k!AlvD294g%0sGGPQhe>~8!E^aF#ZtDnm{r-UW|w3u&F literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Idle 2_2.png b/examples/resource-bar/assets/Ranger_Idle 2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..ff5a8b797dab762c64a7f7267a91ecaab8bd6efd GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*61!E{-7{-cKi8-h2H|6bTwV$KAI ktL2%J5qg)~_&F0Nn{1`ISV`@iy0XB4ude`@%$AjK*3F(E{-7{-cKi87`=wzbDX4)0bxw&woQ@|EpD^S^sf zo2UAAQvZ!TG7Vg^asf{!^{d%2W}RT)oBURd!YEvXx5QxAwSlr*<{an^LB{Ts5v5;-V literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Idle 2_4.png b/examples/resource-bar/assets/Ranger_Idle 2_4.png new file mode 100644 index 0000000000000000000000000000000000000000..d0a962a3ed9081025f194a64f747bab326d3b9e8 GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*1fJE{-7{-cKi8P_3r z&AT2bwevqzoN{Kfty^Ik^hzs)!=b|c!al>fusrnDdTxjmd$U3jzpOyi?@CN0cy m9G~^pGORvb^1#x literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Jump Kick_1.png b/examples/resource-bar/assets/Ranger_Jump Kick_1.png new file mode 100644 index 0000000000000000000000000000000000000000..76eba54a610ac349b489073edc434581a6ef0e06 GIT binary patch literal 304 zcmeAS@N?(olHy`uVBq!ia0vp^5anMpx{wY7sn6}@3#}~@*Y;;X}P)J{oNJXPqs#v z_VQg5gTem@t@5HPj!Q1<(!EdBmPYDnB{e6-PVG#Eyn^6`?rQX+otzh@ruW_ z>yM|Uo}aYqq*{)hEra%#uMLY7H=UIBXW4m@P1pF%(sbs@F&_#-y%p{jEVIF(wbgdA)ymmg2c(MU=37rt6qPQT`()AAduJOi y6)!%vscWI3XlY=ribPu>sS-eLkym-elF{r5}E)Mns}N3 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Jump Kick_2.png b/examples/resource-bar/assets/Ranger_Jump Kick_2.png new file mode 100644 index 0000000000000000000000000000000000000000..cf7de8dba740e31105228fc0bf6e58e5a62d5440 GIT binary patch literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^5anMpx}K^7sn6}@1s*r^Byt~aJkD^ZncPYU5Tr- zh#RL`a`obqw-i$CA9*f*u(eXyyW^Aps;>UuTSHQGZm095)t+WxdH;NEYVanMpx_Bl7sn6}@3#|A3m!7yakIgYci_WM1es#wANzoPN4i<@qWvP|-wp!eFd%NU7psH5PyT`jaMUI?*|J(7@ z=Brs6N7~Bu4+zJ_3FJ08an&ikXk#i$jQH#$wranMpx{wY7sn6}@3#}~@*Y;;X}P)J{oNJXPqs#v z_VQg5gTem@t@5HPj!Q1<(!EdBmPYDnB{e6-PVG#Eyn^6`?rQX+otzh@ruW_ z>yM|Uo}aYqq*{)hEra%#uMLY7H=UIBXW4m@P1pF%(sbs@F&_#-y%p{jEVIF(wbgdA)ymmg2c(MU=37rt6qPQT`()AAduJOi y6)!%vscWI3XlY=ribPu>sS-eLkym-elF{r5}E)Mns}N3 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Kick 1.png b/examples/resource-bar/assets/Ranger_Kick 1.png new file mode 100644 index 0000000000000000000000000000000000000000..6aa08719c7acb2b6ff126b8a9980e58a713e67a9 GIT binary patch literal 357 zcmV-r0h<1aP)CGR`)zX}F@Piv(_9urE73x{B%%OG6z8B(i8et^05zf-fVZZP zlJZCZFHYUFOtQa=RR*Cw1@Zaa`*!r>{dH7ZRy+gR`*d#Top3*DrsDu~=3LDHnt>N5 zPh1BjC6WR&8OS(M+^zs_qXD6dFq26%gt(6HL1R(|2Jf5L0S9;8<+TQP9o3QR#7W#5@t2mQ{Ab5;l&1Qz zn#}yje%F?O@wi_O3@-;%K_q}PpA0Jsna5NRF#~E2?+DN;2Jq3N`TN?r_ucua&O*!p zA!xo<$tAK-ZktNrZAHcc$Fd+bC<1YSD{z15d_m!f#yHo{A5U}HVh0(30nLQ(Ab4sD zFV-MuGH0eUIQB|$Co|KMPOepeLeoI%v&aH4M%H^(^b){S{{?Jao-DvZ zQGn1$b^zgUvjgx8mn9&$E?NW3t}7B?)0T|s3si=2x1gKkz5oCK07*qoM6N<$f{?zL ArT_o{ literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Knockdown.png b/examples/resource-bar/assets/Ranger_Knockdown.png new file mode 100644 index 0000000000000000000000000000000000000000..8cf1f73366ea2b536234af7e5684de8810b7fc23 GIT binary patch literal 333 zcmV-T0kZyyP)RH2<^;rjgjxYSUlcdDsA)_oDhsR%0K=&>k`{o2>5!_mz|@EUbiU-qu#b}^ zjcE3csDRQO#LQ={x%)Q?nAGrA3_A_G*po+}7q=ISy2cHFg6ICdgOVw+D znE@C>9B`Dy2)FoV0GWfN>H~1G*%|<2l1#a3&2D)D2Nh}%F5b7+9ylomNoBKp#anMpx{1F7sn6}@3#{!@*XnaaoNoHKj#S7pG~6K z1`^6k_Dc+X-+hsqfUSzvfdDZpxzS*o#&-Ai%S6IsGzAdi3rj$7k=o1D{S3j3^P6anMpx|jw7sn6}@3#{!@*XnaaoNoHKj(_*k5uhz zFA{n#oI1LV?>AGRll_EGOM)kN7mIK8QJZ{Hesg2nL4)gWe+gM;AJUHy;QDK^{CEEk zgW$I@HP)9+Q+MCFULvV#{LS=eap)rs^M|Ta&KUC7-c`TH@T|(vVM?0 z#@)oiW4>PcTh#Za`>bshjDhC%wYtplm0kxqr)*-rTpJP-yfb7w&|3_iu6{1-oD!M< DZliUV literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Pick Up 2.png b/examples/resource-bar/assets/Ranger_Pick Up 2.png new file mode 100644 index 0000000000000000000000000000000000000000..149abd6b18aa8d5aa205b212233b19753a1ea44b GIT binary patch literal 321 zcmV-H0lxl;P)VG>%JzfSnDM}tv|omPHOk3 z)hl2H6ae0=t0e$`+zmInR{)M63=o`q2d5!%Zv>$Vw6n|sU}ga+I-K9PeVA|0PpX0{ z00hoCn>@l?Ths>;Tu!3S12Nqn)uaM}Na8G1=cWJdEufMt>pp-JU>E^n3I-7TXe$yy z^a!bqWxO=Mh}VXfbXFBaNvHAwrLzInDW|}1PIvc+i%)w9qwK{sN|;83P TcoTnV00000NkvXXu0mjf&(C~i literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Pick Up.png b/examples/resource-bar/assets/Ranger_Pick Up.png new file mode 100644 index 0000000000000000000000000000000000000000..98c79b41a60e1009d4422d8196e326db39e4d77c GIT binary patch literal 320 zcmV-G0l)ryD zDi6Q`_%~oy{bCPbKA+-&`_lsxhz0OwX8;MIu>@kSK$@}5081JWW@q#3+W2=KO}J^wnWA+q}i;{rle6x zRSOL#A$hn3AQA;g%CrSwlCSsS_DO@UiylBrMS#!Vju~gO&;l$#_4WgeS?ux+9L_kN zg|tljb&;3-_q_>Y*D?zdU>g=xEx@6_>NrCavR(y<%}G&vg&4q{G}sDDrwhDRF5?P000057v8 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Punch 2.png b/examples/resource-bar/assets/Ranger_Punch 2.png new file mode 100644 index 0000000000000000000000000000000000000000..24ccad91ae7cee77a2df02a8e7a03e5341f58a00 GIT binary patch literal 363 zcmV-x0hIoUP)`-WS_V+P2wP zZDxK#*QzF9IvM|V*qd!0?exi^Uv*Q$NTHR&LWxt zK)_t8WQl4h2uPW`xphtUdk~q!`vXM47+@RRce?J~U<0PHU<`A8#9iM@nolyY=I-B^ z<0r_El_+^sq>Lalq-=?lNfR5x>XEs4A1GJLS!hRBIg3Qc0t@guK56iNssfmHmw>rY zxfhPrs8?>F=BLMXj%#c#RZ#|OM2-r7wd1d;%9I7-+%o+=gG~X!^0>=InWTW2IgZN# zIRpHa!3LBVaNpIWL^%U*5k-$G0i+BhUm6QQ#(@3divc2ooW29xgNZ9um*4;Z002ov JPDHLkV1j-@n&AKd literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Run_1.png b/examples/resource-bar/assets/Ranger_Run_1.png new file mode 100644 index 0000000000000000000000000000000000000000..ff1001ee89642b3a1c890393e16ea56312cef295 GIT binary patch literal 299 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*0l^E{-7{-diUf%Y?R$1DgbUc358ZiExy#u~a|s tf6?@$73XhhIX+>#8U5g;X5-|bu+H@n*Q4$V{sQ`i!PC{xWt~$(69596cX|K- literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Run_2.png b/examples/resource-bar/assets/Ranger_Run_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a93642fdaa142f241add59baa806324efe63db87 GIT binary patch literal 315 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*0;1E{-7{-diVKwyFdk%#?dHSVKCnVxo zoJ1gN&?5~MEeqd$d+mBN;^V#-a(jGP7m;*l!rYsZ3(g2_Ft%ov+C2BB=z=o>4zib8 z-0M!M#auJ(uol<1ITF;^65#Cf|2ZqqdGR%OnD*O+ZgB9j=d5fn?Vmg~6X-VvPgg&e IbxsLQ05$`66#xJL literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Run_3.png b/examples/resource-bar/assets/Ranger_Run_3.png new file mode 100644 index 0000000000000000000000000000000000000000..bee1f8da9b74987edff5ccf1e36f8285e3240664 GIT binary patch literal 302 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*7VFE{-7{-g_rq)Qpy;~aBuP3iO zw7GxQ6}5ahUW2qt=b0lEvyM$rSm2#|h<6U3;pIPOYxJZV(l{k5d3h&1%VD_4lfavJ zM!>)&ci)})ZZ-E@q(WXcB-{<@kb271wot%$W{aB0_3{Koldcu}wtk&>%tQ0iWZQVw wj?7a&KmIHA{@;>W(tK05;8)0j$SI%L{y6%*{?wYA0rU=or>mdKI;Vst0G0W8i2wiq literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Run_4.png b/examples/resource-bar/assets/Ranger_Run_4.png new file mode 100644 index 0000000000000000000000000000000000000000..08a20a67e2d7cdd5b9c2e1af47a076c540775c06 GIT binary patch literal 309 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*3XAyMi zr!!V8hgTIbOK^QmTqY1dZ`nPDwq*z6?5{Qv*} literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Stab.png b/examples/resource-bar/assets/Ranger_Stab.png new file mode 100644 index 0000000000000000000000000000000000000000..b9db5c0977a056bff9423488311a0239d28e5a61 GIT binary patch literal 337 zcmV-X0j~auP)Z2-k2y?|EB`J!?wGahzq&NpgDH4TD1lE$42&APsAf#ur zz(7u;-{K_eU@XrZIVn>PQ30@fKx;pp`#u|%{rq@GJu(x(kNu*FZ0klBH`)kv)cODf z$SLyC;{qwiSt1UsgN5d@>EyoYqVex_Rgo_WSb!Bc-Mb-TeC{G3h?-qECN2)y1D8fj zU1-yETooZ`-DA{iTx10Tu?bQEmmJeH!YV{Pjn@cJ@+`DJVC;=1k!bGbnLx?M8W*X+ jqGj!$g|-h=M>XOP{&Z~t`1|_W00000NkvXXu0mjfKHi75 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Strafe 1_1.png b/examples/resource-bar/assets/Ranger_Strafe 1_1.png new file mode 100644 index 0000000000000000000000000000000000000000..db3154f65878219e7eeadefcec4d66762a875b1c GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*5`yE{-7{-diW#DT{SrJ-b>3=mY;w2$om#; z(_YeA^79MRoD28GCj>=hJQP-N=B`Mz*{m-9Zq|ioCC^*6j17HsD~cHXL~ITj=_@Qf zu|QAX&?{(0`R^H3)wymn%B_#3i0uA#s*B z&|sFoOzSoA2Rr+D-t3%tMdi}{s;Bd(@7vFyelmH_k?O!KA)Dz^OP;k(`NS$0F+c3L SjD#4_lMJ4&elF{r5}E*ZihjfZ literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Strafe 1_2.png b/examples/resource-bar/assets/Ranger_Strafe 1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..10a48c75457d681298c896d3327159067364f61e GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*1fJE{-7{-cKjpiFz8Z z7KztZaB*fP&U3J;%`-W|z9iu6 j?k!AlvD294g%0sGGPQhe>~8!E^aF#ZtDnm{r-UW|w3u&F literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Strafe 1_3.png b/examples/resource-bar/assets/Ranger_Strafe 1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..db3154f65878219e7eeadefcec4d66762a875b1c GIT binary patch literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*5`yE{-7{-diW#DT{SrJ-b>3=mY;w2$om#; z(_YeA^79MRoD28GCj>=hJQP-N=B`Mz*{m-9Zq|ioCC^*6j17HsD~cHXL~ITj=_@Qf zu|QAX&?{(0`R^H3)wymn%B_#3i0uA#s*B z&|sFoOzSoA2Rr+D-t3%tMdi}{s;Bd(@7vFyelmH_k?O!KA)Dz^OP;k(`NS$0F+c3L SjD#4_lMJ4&elF{r5}E*ZihjfZ literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Strafe 1_4.png b/examples/resource-bar/assets/Ranger_Strafe 1_4.png new file mode 100644 index 0000000000000000000000000000000000000000..10a48c75457d681298c896d3327159067364f61e GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*1fJE{-7{-cKjpiFz8Z z7KztZaB*fP&U3J;%`-W|z9iu6 j?k!AlvD294g%0sGGPQhe>~8!E^aF#ZtDnm{r-UW|w3u&F literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Strafe 2_1.png b/examples/resource-bar/assets/Ranger_Strafe 2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..6be5770dae8c010f7fa9d062337b193fc3b188b5 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*6h?E{-7{-diV~=4CSEaoNuNuEd2q=4F?e zMvoBF+3zeDbI-seBGzAtH9IQ5jW;+{VtjRy;B7~IcQZl01MlnC@7 NgQu&X%Q~loCIC-pcr*Y2 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Strafe 2_2.png b/examples/resource-bar/assets/Ranger_Strafe 2_2.png new file mode 100644 index 0000000000000000000000000000000000000000..83aa5d42f44c56b075406175a144312734dc70b7 GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*8OfE{-7{-ft(L7CdCY<8qg=+-ec)x)N7u z5jW1Z-n~6`$2QFo~Qa`Dr<6@zy%&dA+ zi6=ZDXxjl#`_o2q5?9XOqkUzQ?t`Cu;W}ZP;)!AO zc5zBmRs32~&C?tiJ=1uK;F(*e<}B<ojN1KXHu! np-)kby}C8(ty-^dP7aFO?4Gn=wxXgO=nV!>S3j3^P6Nn{1`ISV`@iy0XB4ude`@%$AjK*6h?E{-7{-diV~=4CSEaoNuNuEd2q=4F?e zMvoBF+3zeDbI-seBGzAtH9IQ5jW;+{VtjRy;B7~IcQZl01MlnC@7 NgQu&X%Q~loCIC-pcr*Y2 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Strafe 2_4.png b/examples/resource-bar/assets/Ranger_Strafe 2_4.png new file mode 100644 index 0000000000000000000000000000000000000000..83aa5d42f44c56b075406175a144312734dc70b7 GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*8OfE{-7{-ft(L7CdCY<8qg=+-ec)x)N7u z5jW1Z-n~6`$2QFo~Qa`Dr<6@zy%&dA+ zi6=ZDXxjl#`_o2q5?9XOqkUzQ?t`Cu;W}ZP;)!AO zc5zBmRs32~&C?tiJ=1uK;F(*e<}B<ojN1KXHu! np-)kby}C8(ty-^dP7aFO?4Gn=wxXgO=nV!>S3j3^P6Nn{1`ISV`@iy0XB4ude`@%$AjK*4LCE{-7{-diVKu%rEgO+E?7_vU65eN!PDE*$1;1&k6id+NpKAe1Ch7!uWOT6dYQYxsXqRKsMA7bd&XG{4rujQpMP>FmdiRMKQ6Y>2U53tHo}e$ISQKH!)NPb(s_hF0EnIc|XsvQR__t P(1#43u6{1-oD!MNn{1`ISV`@iy0XB4ude`@%$AjK*1fJE{-7{-cKi8_o!*{^^VgG= zPexu++>&zmG^@qJ%iLWt8JUlS7qCUW(0v?d8#!aihGkXPoi;B{xXd+A=Rl`J|KS2% zjiQO&W;U$tOAO9$^WSr4ey_p#Z!?OyUrDR)6#lbqf%L!cOp6tLGk%(zF_!vEB{9cn lJk#6TF!glN181ijjN+~>pS}OMF#`R-;OXk;vd$@?2>@Y6af1K= literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Walk 1_3.png b/examples/resource-bar/assets/Ranger_Walk 1_3.png new file mode 100644 index 0000000000000000000000000000000000000000..663b38022e306f3feefa835d1c2425e2f5575d30 GIT binary patch literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*5uqE{-7{-g_rs=Tt+A`B^-Sbk|G} zv`q0*#$nAWkFIC8t9(r3Nn{1`ISV`@iy0XB4ude`@%$AjK*1fJE{-7{-cKi8_o!*{^^VgG= zPexu++>&zmG^@qJ%iLWt8JUlS7qCUW(0v?d8#!aihGkXPoi;B{xXd+A=Rl`J|KS2% zjiQO&W;U$tOAO9$^WSr4ey_p#Z!?OyUrDR)6#lbqf%L!cOp6tLGk%(zF_!vEB{9cn lJk#6TF!glN181ijjN+~>pS}OMF#`R-;OXk;vd$@?2>@Y6af1K= literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Walk 2_1.png b/examples/resource-bar/assets/Ranger_Walk 2_1.png new file mode 100644 index 0000000000000000000000000000000000000000..83aa5d42f44c56b075406175a144312734dc70b7 GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*8OfE{-7{-ft(L7CdCY<8qg=+-ec)x)N7u z5jW1Z-n~6`$2QFo~Qa`Dr<6@zy%&dA+ zi6=ZDXxjl#`_o2q5?9XOqkUzQ?t`Cu;W}ZP;)!AO zc5zBmRs32~&C?tiJ=1uK;F(*e<}B<ojN1KXHu! np-)kby}C8(ty-^dP7aFO?4Gn=wxXgO=nV!>S3j3^P6Nn{1`ISV`@iy0XB4ude`@%$AjK*3X`SA*6HTfk~b?Q!C$<2Qzy_@44$rjF6*2Ung9r# Bag_i7 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Walk 2_3.png b/examples/resource-bar/assets/Ranger_Walk 2_3.png new file mode 100644 index 0000000000000000000000000000000000000000..83aa5d42f44c56b075406175a144312734dc70b7 GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*8OfE{-7{-ft(L7CdCY<8qg=+-ec)x)N7u z5jW1Z-n~6`$2QFo~Qa`Dr<6@zy%&dA+ zi6=ZDXxjl#`_o2q5?9XOqkUzQ?t`Cu;W}ZP;)!AO zc5zBmRs32~&C?tiJ=1uK;F(*e<}B<ojN1KXHu! np-)kby}C8(ty-^dP7aFO?4Gn=wxXgO=nV!>S3j3^P6Nn{1`ISV`@iy0XB4ude`@%$AjK*7zPE{-7{-ghUR=500*aJkD^Zso>*Y)dUMfnxDFP{bPM=Z` z@#s7?Veur9(kMB_iv9BaKWiCxs5IAW9oVPp`~F)t>zDa24*xkNn{1`ISV`@iy0XB4ude`@%$AjK*0;1E{-7{-diW#b1Bc1~VZ(($X#>)@KT&w38r6cT*){ofp;o|1q2^hM^s z<#L?NC$HBaTvF*6&NWNSjxoidIlV3Y*2hD!OnXJjwL;_$Mr0lA6F$rFYS|NJGd^g$j9UU#ijV0Y!PC{x JWt~$(69C{Md|m(m literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Walk 3_2.png b/examples/resource-bar/assets/Ranger_Walk 3_2.png new file mode 100644 index 0000000000000000000000000000000000000000..10a48c75457d681298c896d3327159067364f61e GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*1fJE{-7{-cKjpiFz8Z z7KztZaB*fP&U3J;%`-W|z9iu6 j?k!AlvD294g%0sGGPQhe>~8!E^aF#ZtDnm{r-UW|w3u&F literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Walk 3_3.png b/examples/resource-bar/assets/Ranger_Walk 3_3.png new file mode 100644 index 0000000000000000000000000000000000000000..913690aeee361b606a755bbb750af9710daa3e47 GIT binary patch literal 316 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*5WiE{-7{-e)Jh<~?M<)3TZI|IH53AE(3C z98BmDsLIQ^>G#-%VdeZ1ufIF8wM_p`eq-XgFMjQX+wQeTHb^C%*`;@0anp(Czblnr z-dm=&<;mI0j1~*$vx~G|xO70>L3B&OmY(!^FAw;#*_)WM?~-li*=qn)k!Z0f^I5|p zfxR!zI(K+-|E;~F9xu1v>&5%WcIuoDip>s4?Bhz9ygpNVfzgjy+nD}*3TZH$BE`cx z!#>ZFVY$%dSJF?|v^p}s^4eTU+7kJ_eWLW2yo*lzYc&-VmhvB&*BiToe;GT_a}1uY KelF{r5}E+lseYLN literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Ranger_Walk 3_4.png b/examples/resource-bar/assets/Ranger_Walk 3_4.png new file mode 100644 index 0000000000000000000000000000000000000000..2cf94df74f59454d4dbef1e4e28ff32d6a4263ff GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*8OfE{-7{-cKhT6g*_W!*Z9g-pY&d=ZB@* zw-#)el2Ej1@kIS?qU;iKZ_f0Jc$PnQKV;syMDfwvD6Y+0J_R1WIpI*w{^I+t{M&cg zs7;)^HcQDpM~=^-)sNL-t$0dlps^Nvg=5wx#T6H9!s9~%tS8)KySUF`x(?ro+NsNK zwmsOuDcg1CjX+XD;=F5iAB*bWwNys^t}#pa?Kbr-W1Vz>>Hlhmld0)af2ZCI__8|Y m#)8JQdrQ+2N+r$qcyj2=HMaf!CG-L0R|Zd4KbLh*2~7Y2#d16V literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Silver shield.png b/examples/resource-bar/assets/Silver shield.png new file mode 100644 index 0000000000000000000000000000000000000000..9f691ed5b602056652f24989353b9befdfe7c5f4 GIT binary patch literal 781 zcmV+o1M>WdP)^@puT@paY1+qcF`$|JAaOd&|tqVp+G+TKpE}(NJOv&}ljW*z7 z`-0ZodY2i|%vDX5?UXrg?tLgw(D$DMZNQmwjn;heCOOe}0vubzO=N|jYX6&7ec>K` z*&%5=)NWoXX|7g?q zW#a9uzLL&yJVbT~uJym#!{JcbuYL_&eZl06zOK%u^#Bi%9qC-D+r3^-*-MQktpf(< z>dS`4jeuwIeR?5X`tnb}g=&M=u`*eIeOvn&q`Rh^6VbI)K1)R%4gV4$Ki zn34y7puW>O^T8nNG=Wa{A~a~Z*|Jlgy@Nkc-+B9)zZ#T7w;(_y$6F|{Kl>T7<86hC zK-lBi@etq&=AMi?38ibW=FWkCOg$FnQwlqh;qK%fU3D4yxJ*4a80hbzHq5s9 zTce^IACb85CSPggQ5Ry7hANeRdqQ<3U52ki#nL~JqTK=+Bl8V0W#zsA001p?MObuG zZ)S9NVRB^vVtFoNY;SL5WO*)Qa(QrcZ!T$VVP|D7P)Z)9b1s0M%T00000 LNkvXXu0mjfHZX6x literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Star_LargeNarrow.png b/examples/resource-bar/assets/Star_LargeNarrow.png new file mode 100644 index 0000000000000000000000000000000000000000..6ce8f2055e763e8782c9776314ff98b870bcd75d GIT binary patch literal 707 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?I3?vN&YJLDImUKs7M+SzC{oH>NS%G|m0G|-o z|2V+;^S92QzXO*9DnEbzHjsNePj>~7!&egI7tEh8A3y(n|NZ&#_VxQ28XW5!7#NsT zJY5_^GVZ;-aoU$DP^97E<%We!&a7=*J)#m?1|beB8X_1=7Vt_)8sFlFXq8~>%%7&7khF}ap3$TzM%X8OWSe3gi9q%m$wP8u(52M z9Ik%hR{_)W`F0DIS3O{ATXkG7VbQG;#^9^lxL2&O+u0y|HC+5c(BA^a=d0$+CCp`P zRhWVY&tPm(z=H!=&U{Uem1sQ8yI~9C=c{ZHu`?P@OGHF9{M2IO+NQuN?ZI%mAYpGK z%Y^-`nl~JTBG{Ptx9{5gZXI*OmkK+@-+j*oH~p_LQ&fB$+0xRxoRd@bzN$)1&Fmkn z>)tsxte@S}zrkLx|9ws8Z^4rvube+|E0O!Q>J-m9dw!E&K$5{I(O!P29w`e2YV*Ivj-HI`rg!ANX=km zC_Tf_pq0kpz-!Eq&?CuUaEOQDMKT)$j{$QPNS%G}T0G|-o z|NsA=KYs^I-U5N=&Q|1S7&mcJ&YShS3HPeB?RZZZ4g76CFlYXiJ4(o+97OY_5k_cg{G`M?L+JD<`cjbV- o-U9_$EKjyFN^fASXZyjn@>5?x(s3IlV6tHFboFyt=akR{09Q&2wg3PC literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Star_Medium.png b/examples/resource-bar/assets/Star_Medium.png new file mode 100644 index 0000000000000000000000000000000000000000..315be23ea1c59acf4c3690db38087e05a19a3a65 GIT binary patch literal 386 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?I3?vN&YJLDImUKs7M+SzC{oH>NS%G|&0G|-o z|9AmV6;NLF((NiBi@PMqFS!4HJb(TB^ZxVY84ezOa1JQ^$C4kD}p zQPJfGLPF*|Kx(?>KC4F9i}-IA|ZdsCB`sU<=n4 zp`HWpY?#jP)%|czyNPi}-KXXa8yWLHnNI(DKqp_Ij_IAujdk%&yEXE)F2+tWXZ)FX zYQD|xS_95ydn(nR9XI^{;mvs`Lnga|8K(p}CUUC^WG;}_6v|Xwa6#)rL(po6+K48$ snwg8lSh(a_PEClH0l5z5%!qT`3+ipmdKI;Vst0FYjy*#H0l literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Star_Small.png b/examples/resource-bar/assets/Star_Small.png new file mode 100644 index 0000000000000000000000000000000000000000..7eae179500e972fa3be1baf1ecc83781cd0c34db GIT binary patch literal 294 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?K3?%mjbVdLvmUKs7M+SzC{oH>NS%G|>0G|-o z|6l;*0clo-ltVxkb4ie2@ceiNL#e6`Aa|Rmi(^Q{;kQ>d^0pfAxCWj-EOfJ7RYFlY zV2OeOm$CsHtLTXu&8zicIi0_D+8qrQiQbmb(f|Snno4;N6tN`iV=}O{iwJcW*ICuh zop$v!>*QCD8{?VWIMfna5+KwJmJWf*41!5Q3Qj&uE`J)Y9JtH6vvD)G7jw1v6}Gm2 z&Z?6c6lSw9993ahp~h(MbBKjSQdmI5$05M*ppM_J=Ch~L8BWPHSbg9T5&(i42L0E! W4wS!koL&g@0fVQjpUXO@geCwsb7Iv1 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Upgraded Potion Blue_No Shadow.png b/examples/resource-bar/assets/Upgraded Potion Blue_No Shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..ab09a747c91c34b594281cba0551cd6f03daa023 GIT binary patch literal 3338 zcmV+l4fXPgP)uJ@VVD_U zC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$OrQF$}6R&?d%y_c8YA7_1Q zpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X z6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv1)yUy0P^?0*fb9UASvow z`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q{wNRKos+;6rV8ldy0Owz z(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E` zvOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G41dM~{UdP z6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4Es0sQWIt5*Tu0n&*J!lk~ zf_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+AA{TB3-ERLHar49hi4Ih z5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=natP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+e zdD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVb znL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0WMyP6Wy582WNT#4$d1qu znl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8dZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iutvy=3T65Yu+7a4Yv^%sX zb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i^lS773}6Fm1Fpe-gF!>I zp{*g$u-szvGhed; zvo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*ZvFf(^Xl-N7w{EeXveC4O zv)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx)P8cQ&Qi|OhNWW;>JChY zI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_WICNY@+|jrX%s^&6b2i>5 zeqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!ql}XcFH*PieWwLj2ZSq`7 zV9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I-?$tAVKYn8-l({mqQ$Q8{ zO!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;cwT88(J6|n-WB%w`m$h~4 zpmp)YIh_3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dlbFb#!9eY1iCsp6Bajj|H zr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syTu9enWavU5N9)I?I-1m1* z_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$mU2Q)a|9JSc+Uc4zvS-T9 z63!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;;JuhGEb?H5K#o@~7t9DmU zU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX=)z6+o0o6-+`4{y+3mqQ z%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@>;2q1Vm)$Z)P1z?N$8UY zW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHsy69KwU-!MxeeuI@&cF4| zM9z%A)VV8tGge1YH zcqtMBkq)^if*>pu1X%~`5Omm8y13ZI7P2l99b8xtBoAp2nIL)amMut7hiyRyHj7n? zq}%JDZ(AeGwU$`gjG~`BX7>95Q3lY%F;S@+EUv7P?CI7%WQIjoYl*F$b`mi- zKRKsm;(1a0vMI+ZK`7TirD|w;IA%TOM^8^1-fDA%wC=LQ(PZ?K@#J zv;XmwR00{vgLF_h}O#}X3%Y6aZLF^Xf!z2*EzqF=*8#W!_586nK UclPvvuJ@VVD_U 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 Z_6HWOik#HSo^JpE002ovPDHLkV1n)bn;-xH literal 0 HcmV?d00001 diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json new file mode 100644 index 000000000..41c09dddb --- /dev/null +++ b/examples/resource-bar/game.json @@ -0,0 +1,18824 @@ +{ + "firstLayout": "", + "gdVersion": { + "build": 99, + "major": 4, + "minor": 0, + "revision": 0 + }, + "properties": { + "adaptGameResolutionAtRuntime": true, + "folderProject": false, + "orientation": "landscape", + "packageName": "com.example.gamename", + "pixelsRounding": false, + "projectUuid": "dcdbdf13-00be-4e01-88bc-1cb673a81d14", + "scaleMode": "linear", + "sizeOnStartupMode": "", + "templateSlug": "", + "useExternalSourceFiles": false, + "version": "1.0.0", + "name": "Extension: Resource Bar", + "description": "", + "author": "", + "windowWidth": 800, + "windowHeight": 600, + "latestCompilationDirectory": "", + "maxFPS": 60, + "minFPS": 20, + "verticalSync": false, + "platformSpecificAssets": {}, + "loadingScreen": { + "backgroundColor": 0, + "backgroundFadeInDuration": 0.2, + "backgroundImageResourceName": "", + "gdevelopLogoStyle": "light", + "logoAndProgressFadeInDuration": 0.2, + "logoAndProgressLogoFadeInDelay": 0.2, + "minDuration": 1.5, + "progressBarColor": 16777215, + "progressBarHeight": 20, + "progressBarMaxWidth": 200, + "progressBarMinWidth": 40, + "progressBarWidthPercent": 30, + "showGDevelopSplash": true, + "showProgressBar": true + }, + "authorIds": [], + "categories": [], + "playableDevices": [], + "extensionProperties": [], + "platforms": [ + { + "name": "GDevelop JS platform" + } + ], + "currentPlatform": "GDevelop JS platform" + }, + "resources": { + "resources": [ + { + "alwaysLoaded": false, + "file": "assets/Ranger_Carry_1.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Carry_1.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Carry_1.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Carry_2.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Carry_2.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Carry_2.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Carry_3.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Carry_3.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Carry_3.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Carry_4.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Carry_4.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Carry_4.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Climb_1.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Climb_1.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Climb_1.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Climb_2.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Climb_2.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Climb_2.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Climb_3.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Climb_3.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Climb_3.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Climb_4.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Climb_4.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Climb_4.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Daze_1.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Daze_1.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Daze_1.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Daze_2.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Daze_2.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Daze_2.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Daze_3.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Daze_3.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Daze_3.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Daze_4.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Daze_4.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Daze_4.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Dead.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Dead.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Dead.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Get Up.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Get Up.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Get Up.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Headbutt_1.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Headbutt_1.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Headbutt_1.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Headbutt_2.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Headbutt_2.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Headbutt_2.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Hurt.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Hurt.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Hurt.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Idle 1_1.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Idle 1_1.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Idle 1_1.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Idle 1_2.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Idle 1_2.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Idle 1_2.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Idle 1_3.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Idle 1_3.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Idle 1_3.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Idle 1_4.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Idle 1_4.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Idle 1_4.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Idle 2_1.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Idle 2_1.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Idle 2_1.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Idle 2_2.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Idle 2_2.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Idle 2_2.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Idle 2_3.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Idle 2_3.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Idle 2_3.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Idle 2_4.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Idle 2_4.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Idle 2_4.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Jump Kick_1.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Jump Kick_1.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Jump Kick_1.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Jump Kick_2.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Jump Kick_2.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Jump Kick_2.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Jump Kick_3.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Jump Kick_3.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Jump Kick_3.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Jump Kick_4.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Jump Kick_4.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Jump Kick_4.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Kick 1.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Kick 1.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Kick 1.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Kick 2.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Kick 2.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Kick 2.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Knockdown.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Knockdown.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Knockdown.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Over Throw_1.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Over Throw_1.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Over Throw_1.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Over Throw_2.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Over Throw_2.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Over Throw_2.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Pick Up 2.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Pick Up 2.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Pick Up 2.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Pick Up.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Pick Up.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Pick Up.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Punch 1.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Punch 1.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Punch 1.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Punch 2.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Punch 2.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Punch 2.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Run_1.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Run_1.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Run_1.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Run_2.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Run_2.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Run_2.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Run_3.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Run_3.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Run_3.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Run_4.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Run_4.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Run_4.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Stab.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Stab.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Stab.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Strafe 1_1.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Strafe 1_1.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Strafe 1_1.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Strafe 1_2.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Strafe 1_2.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Strafe 1_2.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Strafe 1_3.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Strafe 1_3.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Strafe 1_3.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Strafe 1_4.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Strafe 1_4.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Strafe 1_4.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Strafe 2_1.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Strafe 2_1.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Strafe 2_1.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Strafe 2_2.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Strafe 2_2.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Strafe 2_2.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Strafe 2_3.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Strafe 2_3.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Strafe 2_3.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Strafe 2_4.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Strafe 2_4.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Strafe 2_4.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Walk 1_1.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Walk 1_1.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Walk 1_1.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Walk 1_2.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Walk 1_2.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Walk 1_2.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Walk 1_3.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Walk 1_3.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Walk 1_3.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Walk 1_4.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Walk 1_4.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Walk 1_4.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Walk 2_1.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Walk 2_1.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Walk 2_1.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Walk 2_2.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Walk 2_2.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Walk 2_2.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Walk 2_3.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Walk 2_3.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Walk 2_3.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Walk 2_4.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Walk 2_4.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Walk 2_4.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Walk 3_1.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Walk 3_1.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Walk 3_1.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Walk 3_2.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Walk 3_2.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Walk 3_2.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Walk 3_3.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Walk 3_3.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Walk 3_3.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Ranger_Walk 3_4.png", + "kind": "image", + "metadata": "", + "name": "Ranger_Walk 3_4.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Walk 3_4.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Fly_1.png", + "kind": "image", + "metadata": "", + "name": "Fly_1.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_1.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Fly_10.png", + "kind": "image", + "metadata": "", + "name": "Fly_10.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_10.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Fly_2.png", + "kind": "image", + "metadata": "", + "name": "Fly_2.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_2.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Fly_3.png", + "kind": "image", + "metadata": "", + "name": "Fly_3.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_3.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Fly_4.png", + "kind": "image", + "metadata": "", + "name": "Fly_4.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_4.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Fly_5.png", + "kind": "image", + "metadata": "", + "name": "Fly_5.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_5.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Fly_6.png", + "kind": "image", + "metadata": "", + "name": "Fly_6.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_6.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Fly_7.png", + "kind": "image", + "metadata": "", + "name": "Fly_7.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_7.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Fly_8.png", + "kind": "image", + "metadata": "", + "name": "Fly_8.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_8.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Fly_9.png", + "kind": "image", + "metadata": "", + "name": "Fly_9.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_9.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Star_LargeNarrow.png", + "kind": "image", + "metadata": "", + "name": "Star_LargeNarrow.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Simple Space/stars/Star_LargeNarrow.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Star_LargeWide.png", + "kind": "image", + "metadata": "", + "name": "Star_LargeWide.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Simple Space/stars/Star_LargeWide.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Star_Medium.png", + "kind": "image", + "metadata": "", + "name": "Star_Medium.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Simple Space/stars/Star_Medium.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Star_Small.png", + "kind": "image", + "metadata": "", + "name": "Star_Small.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Simple Space/stars/Star_Small.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Blue laser (01).png", + "kind": "image", + "metadata": "", + "name": "Blue laser (01).png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Space Shooter/PNG/Lasers/Blue laser (01).png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Silver shield.png", + "kind": "image", + "metadata": "", + "name": "Silver shield.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Space Shooter/PNG/Power-ups/Silver shield.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Meteor Detailed_Large.png", + "kind": "image", + "metadata": "", + "name": "Meteor Detailed_Large.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Simple Space/meteors/Meteor Detailed_Large.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Meteor Detailed_Small.png", + "kind": "image", + "metadata": "", + "name": "Meteor Detailed_Small.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Simple Space/meteors/Meteor Detailed_Small.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Upgraded Potion Blue_No Shadow.png", + "kind": "image", + "metadata": "", + "name": "Upgraded Potion Blue_No Shadow.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/32x32 Fantasy Icons Pack v2/Icons/Healing Items/Upgraded Potion Blue_No Shadow.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Upgraded Potion Blue_Shadow.png", + "kind": "image", + "metadata": "", + "name": "Upgraded Potion Blue_Shadow.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/32x32 Fantasy Icons Pack v2/Icons/Healing Items/Upgraded Potion Blue_Shadow.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Moon.png", + "kind": "image", + "metadata": "", + "name": "Moon.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Background/Moon.png", + "name": "gdevelop-asset-store" + } + } + ], + "resourceFolders": [] + }, + "objects": [], + "objectsGroups": [], + "variables": [], + "layouts": [ + { + "b": 0, + "disableInputWhenNotFocused": true, + "mangledName": "Game", + "name": "Game", + "oglFOV": 90, + "oglZFar": 500, + "oglZNear": 1, + "r": 0, + "standardSortMethod": true, + "stopSoundsOnStartup": true, + "title": "", + "v": 0, + "uiSettings": { + "grid": true, + "gridType": "rectangular", + "gridWidth": 16, + "gridHeight": 16, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.2, + "snap": true, + "zoomFactor": 0.8599999999999999, + "windowMask": false + }, + "objectsGroups": [], + "variables": [], + "instances": [ + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Health_Bar", + "persistentUuid": "a703603b-6259-4e18-bfa0-7d8794e4f837", + "width": 0, + "x": 192, + "y": 112, + "zOrder": 1, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Shield_Bar", + "persistentUuid": "b581caf8-44ee-423e-b57e-cdd910fb7374", + "width": 0, + "x": 192, + "y": 224, + "zOrder": 2, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "ResourceMouseX_Bar", + "persistentUuid": "17a23f4a-a442-4b52-8380-9f2b6a9c2494", + "width": 0, + "x": 192, + "y": 544, + "zOrder": 3, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 80, + "layer": "", + "name": "Fly", + "persistentUuid": "e0b70af7-7a81-41c3-88ac-88305df91ed2", + "width": 128, + "x": 481.13275146484375, + "y": 293, + "zOrder": 4, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 128, + "layer": "", + "name": "Moon", + "persistentUuid": "8428ea9d-6d1e-41b0-9f54-1840f3378846", + "width": 129.1327362060547, + "x": 480, + "y": 272, + "zOrder": 0, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Health_Text", + "persistentUuid": "921b2f28-8bee-4ab2-a6cc-1ee823c5215e", + "width": 0, + "x": 48, + "y": 96, + "zOrder": 9, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Shield_Text", + "persistentUuid": "a231209b-a5d8-4280-868d-1e9beb31527b", + "width": 0, + "x": 48, + "y": 208, + "zOrder": 10, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "ResourceMouseX_Text", + "persistentUuid": "07fda015-55f8-4959-80fc-f1ee3074d028", + "width": 0, + "x": 32, + "y": 512, + "zOrder": 11, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Title_Text", + "persistentUuid": "29ae792c-1331-430c-aadf-70fa8d9e36d6", + "width": 0, + "x": 208, + "y": 16, + "zOrder": 12, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ], + "objects": [ + { + "assetStoreId": "", + "name": "Health_Bar", + "tags": "", + "type": "PrimitiveDrawing::Drawer", + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "DraggableSliderControl", + "type": "DraggableSliderControl::DraggableSliderControl", + "ValueMin": 0, + "ValueMax": 1, + "TickSpacing": 0, + "ThumbShape": "rectangle", + "ThumbWidth": 20, + "ThumbHeight": 20, + "ThumbColor": "74;144;226", + "ThumbOpacity": 255, + "TrackLength": 200, + "TrackThickness": 16, + "InactiveTrackColor": "", + "InactiveTrackOpacity": 96, + "ActiveTrackColor": " ", + "ActiveTrackOpacity": 255, + "HaloRadius": 24, + "HaloOpacityHover": 32, + "HaloOpacityClick": 64, + "RoundedTrack": false, + "Enabled": true, + "IsBeingDragged": false, + "Value": 0, + "ThumbOffset": 0, + "NeedRedraw": true, + "IsHovered": false, + "MouseX": 0, + "MouseY": 0, + "CurrentHaloRadius": 0, + "HaloGrowSpeed": 0.2, + "TargetHaloRadius": 0 + }, + { + "name": "DrawResourceBar", + "type": "DrawResourceBar::DrawResourceBar", + "DraggableSliderBehavior": "DraggableSliderControl" + } + ], + "fillOpacity": 255, + "outlineSize": 1, + "outlineOpacity": 255, + "fillColor": { + "b": 255, + "g": 255, + "r": 255 + }, + "outlineColor": { + "b": 0, + "g": 0, + "r": 0 + }, + "absoluteCoordinates": false, + "clearBetweenFrames": true + }, + { + "assetStoreId": "", + "name": "MiniHealth_Bar", + "tags": "", + "type": "PrimitiveDrawing::Drawer", + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "DraggableSliderControl", + "type": "DraggableSliderControl::DraggableSliderControl", + "ValueMin": 0, + "ValueMax": 1, + "TickSpacing": 0, + "ThumbShape": "rectangle", + "ThumbWidth": 20, + "ThumbHeight": 20, + "ThumbColor": "11;255;0", + "ThumbOpacity": 255, + "TrackLength": 50, + "TrackThickness": 4, + "InactiveTrackColor": "", + "InactiveTrackOpacity": 96, + "ActiveTrackColor": " ", + "ActiveTrackOpacity": 255, + "HaloRadius": 24, + "HaloOpacityHover": 32, + "HaloOpacityClick": 64, + "RoundedTrack": false, + "Enabled": true, + "IsBeingDragged": false, + "Value": 0, + "ThumbOffset": 0, + "NeedRedraw": true, + "IsHovered": false, + "MouseX": 0, + "MouseY": 0, + "CurrentHaloRadius": 0, + "HaloGrowSpeed": 0.2, + "TargetHaloRadius": 0 + }, + { + "name": "DrawResourceBar", + "type": "DrawResourceBar::DrawResourceBar", + "DraggableSliderBehavior": "DraggableSliderControl" + }, + { + "name": "Sticker", + "type": "Sticker::Sticker", + "OnlyFollowPosition": true + } + ], + "fillOpacity": 255, + "outlineSize": 1, + "outlineOpacity": 255, + "fillColor": { + "b": 255, + "g": 255, + "r": 255 + }, + "outlineColor": { + "b": 0, + "g": 0, + "r": 0 + }, + "absoluteCoordinates": false, + "clearBetweenFrames": true + }, + { + "assetStoreId": "", + "name": "Shield_Bar", + "tags": "", + "type": "PrimitiveDrawing::Drawer", + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "DraggableSliderControl", + "type": "DraggableSliderControl::DraggableSliderControl", + "ValueMin": 0, + "ValueMax": 1, + "TickSpacing": 0, + "ThumbShape": "rectangle", + "ThumbWidth": 20, + "ThumbHeight": 20, + "ThumbColor": "144;19;254", + "ThumbOpacity": 255, + "TrackLength": 200, + "TrackThickness": 16, + "InactiveTrackColor": "", + "InactiveTrackOpacity": 96, + "ActiveTrackColor": " ", + "ActiveTrackOpacity": 255, + "HaloRadius": 24, + "HaloOpacityHover": 32, + "HaloOpacityClick": 64, + "RoundedTrack": false, + "Enabled": true, + "IsBeingDragged": false, + "Value": 0, + "ThumbOffset": 0, + "NeedRedraw": true, + "IsHovered": false, + "MouseX": 0, + "MouseY": 0, + "CurrentHaloRadius": 0, + "HaloGrowSpeed": 0.2, + "TargetHaloRadius": 0 + }, + { + "name": "DrawResourceBar", + "type": "DrawResourceBar::DrawResourceBar", + "DraggableSliderBehavior": "DraggableSliderControl" + } + ], + "fillOpacity": 255, + "outlineSize": 1, + "outlineOpacity": 255, + "fillColor": { + "b": 255, + "g": 255, + "r": 255 + }, + "outlineColor": { + "b": 0, + "g": 0, + "r": 0 + }, + "absoluteCoordinates": false, + "clearBetweenFrames": true + }, + { + "assetStoreId": "", + "name": "ResourceMouseX_Bar", + "tags": "", + "type": "PrimitiveDrawing::Drawer", + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "DraggableSliderControl", + "type": "DraggableSliderControl::DraggableSliderControl", + "ValueMin": 0, + "ValueMax": 1, + "TickSpacing": 0, + "ThumbShape": "circle", + "ThumbWidth": 20, + "ThumbHeight": 20, + "ThumbColor": "248;231;28", + "ThumbOpacity": 255, + "TrackLength": 200, + "TrackThickness": 16, + "InactiveTrackColor": "", + "InactiveTrackOpacity": 96, + "ActiveTrackColor": " ", + "ActiveTrackOpacity": 255, + "HaloRadius": 24, + "HaloOpacityHover": 32, + "HaloOpacityClick": 64, + "RoundedTrack": true, + "Enabled": true, + "IsBeingDragged": false, + "Value": 0, + "ThumbOffset": 0, + "NeedRedraw": true, + "IsHovered": false, + "MouseX": 0, + "MouseY": 0, + "CurrentHaloRadius": 0, + "HaloGrowSpeed": 0.2, + "TargetHaloRadius": 0 + }, + { + "name": "DrawResourceBar", + "type": "DrawResourceBar::DrawResourceBar", + "DraggableSliderBehavior": "DraggableSliderControl" + } + ], + "fillOpacity": 255, + "outlineSize": 1, + "outlineOpacity": 255, + "fillColor": { + "b": 255, + "g": 255, + "r": 255 + }, + "outlineColor": { + "b": 0, + "g": 0, + "r": 0 + }, + "absoluteCoordinates": false, + "clearBetweenFrames": true + }, + { + "assetStoreId": "48a2d179a1921276abe3f99ce3cf195fa7c310bc511fa215d9647c3fb9027921", + "name": "Fly", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Health", + "type": "Health::Health", + "Health": 100, + "DamageCooldown": 0, + "MaxHealth": 100, + "IsJustDamaged": false, + "HealthRegenRate": 0, + "HealthRegenDelay": 0, + "AllowOverHealing": false, + "HitAtLeastOnce": false + }, + { + "name": "ShakeObject_PositionAngleScale", + "type": "ShakeObject::ShakeObject_PositionAngleScale" + }, + { + "name": "Shield", + "type": "Health::Shield", + "RequireHealth": "Health", + "MaxShieldPoints": 30, + "ShieldDuration": 5, + "ShieldPoints": 0, + "ShieldRegenRate": 0, + "ShieldBlocksExcessDamage": false, + "ShieldRegenDelay": 0, + "RegenShieldWhenZeroPoints": false, + "IsShieldJustDamaged": false + } + ], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.05000000074505806, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "Fly_1.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_2.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_3.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_4.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_5.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_6.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_7.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_8.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_9.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_10.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "574655a4565bd983af8f5dd98e0fd8cda3bd67cf929c00d3db317e898322e06b", + "name": "Star", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "LargeNarrow", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Star_LargeNarrow.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "LargeWide", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Star_LargeWide.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Medium", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Star_Medium.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Small", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Star_Small.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "8d92592738465177b86ec18299ef6e6394ae24eeb7a7d6dfdcbbdb55fab902aa", + "name": "BlueLaser01", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Blue laser (01).png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "794ab341df538c9b3bdad418dfdcccc7be5d90f3d0b5929d6d528a542c6ed3ae", + "name": "SilverShield", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [ + { + "effectType": "Outline", + "name": "Effect", + "doubleParameters": { + "padding": 2, + "thickness": 2 + }, + "stringParameters": { + "color": "255;255;255" + }, + "booleanParameters": {} + } + ], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Silver shield.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 14.592423439025879, + "y": 15.103429794311523 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "d2bc2d266f5bb666ef68023abc14f51bc8fe8b5222af931efa378ac10c50f98a", + "name": "MeteorDetailed", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "Large", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "Meteor Detailed_Large.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 65.07723999023438, + "y": 63.82252502441406 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 20, + "y": 20 + }, + { + "x": 110, + "y": 20 + }, + { + "x": 110, + "y": 110 + }, + { + "x": 20, + "y": 110 + } + ] + ] + } + ] + } + ] + }, + { + "name": "Small", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "Meteor Detailed_Small.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 65.07723999023438, + "y": 63.82252502441406 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 20, + "y": 20 + }, + { + "x": 110, + "y": 20 + }, + { + "x": 110, + "y": 110 + }, + { + "x": 20, + "y": 110 + } + ] + ] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "a1e62f5a19d1fe476e2ad0b8977768d020cc1dc55423427f79a486664cebb631", + "name": "UpgradedPotionBlue", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "No Shadow", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Upgraded Potion Blue_No Shadow.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 15.793042182922363, + "y": 15.89681625366211 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Shadow", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Upgraded Potion Blue_Shadow.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 15.793042182922363, + "y": 15.89681625366211 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "c2ce913ddbcd055c4e49a1c01b63aff1a3d59e4e1c1845db4c38aedda3712d3a", + "name": "Moon", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Sticker", + "type": "Sticker::Sticker", + "OnlyFollowPosition": false + } + ], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Moon.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "", + "bold": true, + "italic": false, + "name": "Health_Text", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Health", + "font": "", + "characterSize": 30, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + }, + { + "assetStoreId": "", + "bold": true, + "italic": false, + "name": "Shield_Text", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Shield", + "font": "", + "characterSize": 30, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + }, + { + "assetStoreId": "", + "bold": true, + "italic": false, + "name": "ResourceMouseX_Text", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Resource \n(Mouse X)", + "font": "", + "characterSize": 30, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + }, + { + "assetStoreId": "", + "bold": true, + "italic": false, + "name": "Title_Text", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Extension: Draw Resource Bar", + "font": "", + "characterSize": 30, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "folded": true, + "name": "Initialize game", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DepartScene" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Opacity" + }, + "parameters": [ + "Moon", + "=", + "128" + ] + }, + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "MaxResource", + "=", + "CameraBorderRight()" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ChangeColor" + }, + "parameters": [ + "Moon", + "\"144;19;254\"" + ] + }, + { + "type": { + "value": "SetCenter" + }, + "parameters": [ + "Moon", + "=", + "Fly.CenterX()", + "=", + "Fly.CenterY()-10" + ] + }, + { + "type": { + "value": "Sticker::Sticker::Stick" + }, + "parameters": [ + "Moon", + "Sticker", + "Fly", + "" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Moon" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "MiniHealth_Bar", + "Fly.X()", + "Fly.Y()", + "\"\"" + ] + }, + { + "type": { + "value": "MettreXY" + }, + "parameters": [ + "MiniHealth_Bar", + "=", + "Fly.CenterX() - MiniHealth_Bar.DraggableSliderControl::TrackLength()/2", + "=", + "Fly.BoundingBoxTop()" + ] + }, + { + "type": { + "value": "Sticker::Sticker::Stick" + }, + "parameters": [ + "MiniHealth_Bar", + "Sticker", + "Fly", + "" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 224, + "colorG": 16, + "colorR": 189, + "creationTime": 0, + "name": "Draw Resource bars", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DrawResourceBar::DrawResourceBar::DrawHealthBar" + }, + "parameters": [ + "Health_Bar", + "DrawResourceBar", + "Fly", + "Health", + "" + ] + }, + { + "type": { + "value": "DrawResourceBar::DrawResourceBar::DrawHealthBar" + }, + "parameters": [ + "MiniHealth_Bar", + "DrawResourceBar", + "Fly", + "Health", + "" + ] + }, + { + "type": { + "value": "DrawResourceBar::DrawResourceBar::DrawShieldBar" + }, + "parameters": [ + "Shield_Bar", + "DrawResourceBar", + "Fly", + "Shield", + "" + ] + }, + { + "type": { + "value": "DrawResourceBar::DrawResourceBar::DrawResourceBar" + }, + "parameters": [ + "ResourceMouseX_Bar", + "DrawResourceBar", + "Variable(MyResource)", + "Variable(MaxResource)", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "This resource bar is used to show the horizontal mouse position in scene, but it can be used for anything!", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "MyResource", + "=", + "MouseX()" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "folded": true, + "name": "Spawn items", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RepeatEveryXSeconds::Repeat" + }, + "parameters": [ + "", + "\"SpawnShield\"", + "5", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "SilverShield", + "Fly.CenterX()", + "CameraBorderTop()", + "" + ] + }, + { + "type": { + "value": "AddForceAL" + }, + "parameters": [ + "SilverShield", + "90", + "75", + "1" + ] + }, + { + "type": { + "value": "ChangeColor" + }, + "parameters": [ + "SilverShield", + "\"144;19;254\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RepeatEveryXSeconds::Repeat" + }, + "parameters": [ + "", + "\"SpawnHealth\"", + "12", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "UpgradedPotionBlue", + "Fly.CenterX()", + "CameraBorderBottom()", + "" + ] + }, + { + "type": { + "value": "AddForceAL" + }, + "parameters": [ + "UpgradedPotionBlue", + "270", + "75", + "1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RepeatEveryXSeconds::Repeat" + }, + "parameters": [ + "", + "\"SpawnRock\"", + "1", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "MeteorDetailed", + "CameraBorderLeft()", + "Fly.CenterY()", + "" + ] + }, + { + "type": { + "value": "AddForceAL" + }, + "parameters": [ + "MeteorDetailed", + "0", + "300", + "1" + ] + }, + { + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "MeteorDetailed", + "=", + "0.5" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Rotate" + }, + "parameters": [ + "MeteorDetailed", + "30", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "folded": true, + "name": "Collisions", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Shield::IsShieldActive" + }, + "parameters": [ + "Fly", + "Shield", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Moon", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Health::Shield::IsShieldActive" + }, + "parameters": [ + "Fly", + "Shield", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Moon" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionNP" + }, + "parameters": [ + "SilverShield", + "Fly", + "", + "", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Health::Shield::ActivateShield" + }, + "parameters": [ + "Fly", + "Shield", + "" + ] + }, + { + "type": { + "value": "Delete" + }, + "parameters": [ + "SilverShield", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionNP" + }, + "parameters": [ + "UpgradedPotionBlue", + "Fly", + "", + "", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::Heal" + }, + "parameters": [ + "Fly", + "Health", + "100", + "" + ] + }, + { + "type": { + "value": "Delete" + }, + "parameters": [ + "UpgradedPotionBlue", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionNP" + }, + "parameters": [ + "MeteorDetailed", + "Fly", + "", + "", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Health::Shield::ShieldHit" + }, + "parameters": [ + "Fly", + "Shield", + "10", + "" + ] + }, + { + "type": { + "value": "Delete" + }, + "parameters": [ + "MeteorDetailed", + "" + ] + }, + { + "type": { + "value": "ShakeObject::ShakeObject_PositionAngleScale::ShakeObject_PositionAngleScale" + }, + "parameters": [ + "Fly", + "ShakeObject_PositionAngleScale", + "", + "10", + "10", + "5", + "", + "", + "", + "" + ] + } + ] + } + ], + "parameters": [] + } + ], + "layers": [ + { + "ambientLightColorB": 32, + "ambientLightColorG": 0, + "ambientLightColorR": 0, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "behaviorsSharedData": [ + { + "name": "DraggableSliderControl", + "type": "DraggableSliderControl::DraggableSliderControl" + }, + { + "name": "DrawResourceBar", + "type": "DrawResourceBar::DrawResourceBar" + }, + { + "name": "Health", + "type": "Health::Health" + }, + { + "name": "ShakeObject_PositionAngleScale", + "type": "ShakeObject::ShakeObject_PositionAngleScale" + }, + { + "name": "Shield", + "type": "Health::Shield" + }, + { + "name": "Sticker", + "type": "Sticker::Sticker" + } + ] + } + ], + "externalEvents": [], + "eventsFunctionsExtensions": [ + { + "author": "@Bouh, D8H", + "category": "General", + "description": "This extension provides: \n- Conditions to check if a global/scene/object variable exists.\n- Actions to copy object variables, global and scene variables.\n- Actions to delete an existing global/scene variable from memory.\n- Actions to create a global/scene variable using a text expression, rather than a variable name input.\n- Expressions to get the value or text from a global/scene variable using a text expression, rather than a variable name.\n\nText expressions allows to enter the name of the variable with an expression like `\"MyVar\"+ ToString(Variable(Health))`", + "extensionNamespace": "", + "fullName": "Extended variables support", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXZhcmlhYmxlLWJveCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xOSAzSDVDMy45IDMgMyAzLjkgMyA1VjE5QzMgMjAuMSAzLjkgMjEgNSAyMUgxOUMyMC4xIDIxIDIxIDIwLjEgMjEgMTlWNUMyMSAzLjkgMjAuMSAzIDE5IDNNNy40IDE4QzUuOSAxNi41IDUgMTQuMyA1IDEyUzUuOSA3LjUgNy40IDZMOSA2LjdDNy43IDcuOSA3IDkuOSA3IDEyUzcuNyAxNi4xIDkgMTcuM0w3LjQgMThNMTIuNyAxNUwxMS45IDEzTDEwLjUgMTVIOUwxMS4zIDExLjlMMTAgOUgxMS4zTDEyLjEgMTFMMTMuNSA5SDE1TDEyLjggMTJMMTQuMSAxNUgxMi43TTE2LjYgMThMMTUgMTcuM0MxNi4zIDE2IDE3IDE0LjEgMTcgMTJTMTYuMyA3LjkgMTUgNi43TDE2LjYgNkMxOC4xIDcuNSAxOSA5LjcgMTkgMTJTMTguMSAxNi41IDE2LjYgMThaIiAvPjwvc3ZnPg==", + "name": "ExtendedVariables", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/variable-box.svg", + "shortDescription": "Add conditions, actions and expressions to check for the existence of a variable, copy variables, delete existing ones from memory, and create dynamic variables.", + "version": "1.0.0", + "origin": { + "identifier": "ExtendedVariables", + "name": "gdevelop-extension-store" + }, + "tags": [ + "variable", + "scene", + "global", + "object", + "remove", + "expression", + "copy", + "structure", + "array", + "boolean", + "duplication" + ], + "authorIds": [ + "2OwwM8ToR9dx9RJ2sAKTcrLmCB92", + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" + ], + "dependencies": [], + "eventsFunctions": [ + { + "description": "Check if a global variable exists.", + "fullName": "Global variable exists", + "functionType": "Condition", + "group": "Deprecated", + "name": "C_global_variable_exist", + "private": true, + "sentence": "If the global variable _PARAM1_ exist", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ExtendedVariables::GlobalVariableExist" + }, + "parameters": [ + "", + "GetArgumentAsString(\"GlobalVariableName\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Name of the global variable", + "longDescription": "", + "name": "GlobalVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the global variable exists.", + "fullName": "Global variable exists", + "functionType": "Condition", + "group": "Global variables", + "name": "GlobalVariableExist", + "private": false, + "sentence": "If the global variable _PARAM1_ exist", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const globalVariables = runtimeScene.getGame().getVariables();\r\neventsFunctionContext.returnValue = globalVariables.has(eventsFunctionContext.getArgument(\"GlobalVariableName\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Name of the global variable", + "longDescription": "", + "name": "GlobalVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Check if a scene variable exists.", + "fullName": "Scene variable exists", + "functionType": "Condition", + "group": "Deprecated", + "name": "C_scene_variable_exist", + "private": true, + "sentence": "If the scene variable _PARAM1_ exist", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ExtendedVariables::SceneVariableExist" + }, + "parameters": [ + "", + "GetArgumentAsString(\"SceneVariableName\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Name of the scene variable", + "longDescription": "", + "name": "SceneVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the scene variable exists.", + "fullName": "Scene variable exists", + "functionType": "Condition", + "group": "Scene variables", + "name": "SceneVariableExist", + "private": false, + "sentence": "If the scene variable _PARAM1_ exist", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const sceneVariables = runtimeScene.getVariables();\r\neventsFunctionContext.returnValue = sceneVariables.has(eventsFunctionContext.getArgument(\"SceneVariableName\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Name of the scene variable", + "longDescription": "", + "name": "SceneVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Check if an object variable exists.", + "fullName": "Object variable exists", + "functionType": "Condition", + "group": "Deprecated", + "name": "C_object_variable_exist", + "private": true, + "sentence": "Object _PARAM1_ has object variable _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ExtendedVariables::ObjectVariableExist" + }, + "parameters": [ + "", + "ObjectToCheck", + "GetArgumentAsString(\"ObjectVariableName\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "ObjectToCheck", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Name of object variable", + "longDescription": "", + "name": "ObjectVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Check if an object variable exists.", + "fullName": "Object variable exists", + "functionType": "Condition", + "group": "Object variables", + "name": "ObjectVariableExist", + "private": false, + "sentence": "Object _PARAM1_ has object variable _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "let returnValue = true;\r\nif (!objects.length) {\r\n returnValue = false;\r\n} else {\r\n const objectVariableName = eventsFunctionContext.getArgument(\"ObjectVariableName\");\r\n for (let i = 0; i < objects.length; i++) {\r\n if (!objects[i].hasVariable(objectVariableName)) {\r\n // If any object does NOT have the variable, return false.\r\n returnValue = false;\r\n break;\r\n }\r\n }\r\n}\r\n\r\neventsFunctionContext.returnValue = returnValue;", + "parameterObjects": "ObjectToCheck", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "ObjectToCheck", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Name of object variable", + "longDescription": "", + "name": "ObjectVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Delete a global variable, removing it from memory.", + "fullName": "Delete global variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_Delete_global_variable", + "private": true, + "sentence": "Delete global variable _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ExtendedVariables::DeleteGlobalVariable" + }, + "parameters": [ + "", + "GetArgumentAsString(\"GlobalVariableName\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Name of the global variable to delete", + "longDescription": "", + "name": "GlobalVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Delete the global variable, removing it from memory.", + "fullName": "Delete global variable", + "functionType": "Action", + "group": "Global variables", + "name": "DeleteGlobalVariable", + "private": false, + "sentence": "Delete the global variable _PARAM1_ from memory", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "runtimeScene.getGame().getVariables().remove(eventsFunctionContext.getArgument(\"GlobalVariableName\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Name of the global variable to delete", + "longDescription": "", + "name": "GlobalVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the text of a scene variable.", + "fullName": "String of a scene variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_Modify_scene_variable_string", + "private": true, + "sentence": "Change the text of scene variable _PARAM1_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ExtendedVariables::ModifySceneVariableString" + }, + "parameters": [ + "", + "GetArgumentAsString(\"SceneVariableName\")", + "GetArgumentAsNumber(\"SceneVariableValue\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Name of the scene variable", + "longDescription": "", + "name": "SceneVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Value", + "longDescription": "", + "name": "SceneVariableValue", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the text of a scene variable.", + "fullName": "String of a scene variable", + "functionType": "Action", + "group": "Scene variables", + "name": "ModifySceneVariableString", + "private": false, + "sentence": "Change the text of scene variable _PARAM1_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const variable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r\nvariable.setString(eventsFunctionContext.getArgument(\"SceneVariableValue\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Name of the scene variable", + "longDescription": "", + "name": "SceneVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Value", + "longDescription": "", + "name": "SceneVariableValue", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the text of a global variable.", + "fullName": "String of a global variable", + "functionType": "Action", + "group": "Global variables", + "name": "ModifyGlobalVariableString", + "private": false, + "sentence": "Change the text of global variable _PARAM1_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const variable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r\nvariable.setString(eventsFunctionContext.getArgument(\"GlobalVariableValue\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Name of the global variable", + "longDescription": "", + "name": "GlobalVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Value", + "longDescription": "", + "name": "GlobalVariableValue", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the value of a global variable.", + "fullName": "Value of a global variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_Modify_global_variable", + "private": true, + "sentence": "Change the global variable _PARAM1_ with value: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ExtendedVariables::ModifyGlobalVariable" + }, + "parameters": [ + "", + "GetArgumentAsString(\"SceneVariableName\")", + "GetArgumentAsNumber(\"SceneVariableValue\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Name of the global variable", + "longDescription": "", + "name": "SceneVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Value", + "longDescription": "", + "name": "SceneVariableValue", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the text of a global variable.", + "fullName": "String of a global variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_Modify_global_variable_string", + "private": true, + "sentence": "Change the text of global variable _PARAM1_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ExtendedVariables::ModifyGlobalVariableString" + }, + "parameters": [ + "", + "GetArgumentAsString(\"SceneVariableName\")", + "GetArgumentAsNumber(\"SceneVariableValue\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Name of the global variable", + "longDescription": "", + "name": "SceneVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Value", + "longDescription": "", + "name": "SceneVariableValue", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the value of a global variable.", + "fullName": "Value of a global variable", + "functionType": "Action", + "group": "Global variables", + "name": "ModifyGlobalVariable", + "private": false, + "sentence": "Change the global variable _PARAM1_ with value: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const variable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r\nvariable.setNumber(eventsFunctionContext.getArgument(\"GlobalVariableValue\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Name of the global variable", + "longDescription": "", + "name": "GlobalVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Value", + "longDescription": "", + "name": "GlobalVariableValue", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the value of a scene variable.", + "fullName": "Value of a scene variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_Modify_scene_variable", + "private": true, + "sentence": "Change the scene variable _PARAM1_ with value: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ExtendedVariables::ModifySceneVariable" + }, + "parameters": [ + "", + "GetArgumentAsString(\"SceneVariableName\")", + "GetArgumentAsNumber(\"SceneVariableValue\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Name of the scene variable", + "longDescription": "", + "name": "SceneVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Value", + "longDescription": "", + "name": "SceneVariableValue", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the value of a scene variable.", + "fullName": "Value of a scene variable", + "functionType": "Action", + "group": "Scene variables", + "name": "ModifySceneVariable", + "private": false, + "sentence": "Change the scene variable _PARAM1_ with value: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const variable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r\nvariable.setNumber(eventsFunctionContext.getArgument(\"SceneVariableValue\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Name of the scene variable", + "longDescription": "", + "name": "SceneVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Value", + "longDescription": "", + "name": "SceneVariableValue", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Delete scene variable, the variable will be deleted from the memory.", + "fullName": "Delete scene variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_Delete_scene_variable", + "private": true, + "sentence": "Delete the scene variable _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ExtendedVariables::DeleteSceneVariable" + }, + "parameters": [ + "", + "GetArgumentAsString(\"SceneVariableName\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Name of the scene variable to delete", + "longDescription": "", + "name": "SceneVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Delete the scene variable, the variable will be deleted from the memory.", + "fullName": "Delete scene variable", + "functionType": "Action", + "group": "Scene variables", + "name": "DeleteSceneVariable", + "private": false, + "sentence": "Delete the scene variable _PARAM1_ from memory", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "runtimeScene.getVariables().remove(eventsFunctionContext.getArgument(\"SceneVariableName\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Name of the scene variable to delete", + "longDescription": "", + "name": "SceneVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Copy an object variable from one object to another.", + "fullName": "Copy an object variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_CopyObjectVariable", + "private": true, + "sentence": "Copy the variable _PARAM1_ of _PARAM2_ to the variable _PARAM3_ of _PARAM4_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ExtendedVariables::CopyObjectVariable" + }, + "parameters": [ + "", + "SourceObject", + "GetArgumentAsString(\"SourceVariableName\")", + "TargetObject", + "GetArgumentAsString(\"TargetVariableName\")", + "no", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Source object", + "longDescription": "", + "name": "SourceObject", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Variable to copy", + "longDescription": "", + "name": "SourceVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Destination object", + "longDescription": "To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.", + "name": "TargetObject", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Destination variable", + "longDescription": "", + "name": "TargetVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Copy the object variable from one object to another.", + "fullName": "Copy an object variable", + "functionType": "Action", + "group": "Object variables", + "name": "CopyObjectVariable", + "private": false, + "sentence": "Copy the variable _PARAM2_ of _PARAM1_ to the variable _PARAM4_ of _PARAM3_ (clear destination first: _PARAM5_)", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const sourceObject = eventsFunctionContext.getObjects(\"SourceObject\")[0];\nconst targetObject = eventsFunctionContext.getObjects(\"TargetObject\")[0];\nconst sourceVariableName = eventsFunctionContext.getArgument(\"SourceVariableName\");\nconst targetVariableName = eventsFunctionContext.getArgument(\"TargetVariableName\");\nconst isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");\n\nconst sourceVariables = sourceObject.getVariables();\nconst targetVariables = targetObject.getVariables();\n\nif (sourceVariables.has(sourceVariableName))\n{\n gdjs.Variable.copy\n (\n sourceVariables.get(sourceVariableName),\n targetVariables.get(targetVariableName),\n isExactCopy\n );\n}", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Source object", + "longDescription": "", + "name": "SourceObject", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Variable to copy", + "longDescription": "", + "name": "SourceVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Destination object", + "longDescription": "To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.", + "name": "TargetObject", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Destination variable", + "longDescription": "", + "name": "TargetVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + }, + { + "codeOnly": false, + "defaultValue": "yes", + "description": "Clear destination first", + "longDescription": "", + "name": "isExactCopy", + "optional": true, + "supplementaryInformation": "", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Copy all object variables from one object to another.", + "fullName": "Copy all object variables", + "functionType": "Action", + "group": "Deprecated", + "name": "A_CopyAllObjectVariables", + "private": true, + "sentence": "Copy all variables from _PARAM1_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ExtendedVariables::CopyAllObjectVariables" + }, + "parameters": [ + "", + "SourceObject", + "TargetObject", + "no", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Source object", + "longDescription": "", + "name": "SourceObject", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Destination object", + "longDescription": "", + "name": "TargetObject", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + } + ], + "objectGroups": [] + }, + { + "description": "Copy all object variables from one object to another.", + "fullName": "Copy all object variables", + "functionType": "Action", + "group": "Object variables", + "name": "CopyAllObjectVariables", + "private": false, + "sentence": "Copy all variables from object _PARAM1_ to object _PARAM2_ (clear destination first: _PARAM3_)", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "// This JS event use private scope from the API, this can be borken at anytime.\n\nconst sourceObject = eventsFunctionContext.getObjects(\"SourceObject\")[0];\nconst targetObject = eventsFunctionContext.getObjects(\"TargetObject\")[0];\nconst isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");\n\nconst targetVariables = targetObject.getVariables();\nconst sourceVariables = sourceObject.getVariables()._variables.items;\nfor (const variableName in sourceVariables)\n{\n if (sourceVariables.hasOwnProperty(variableName))\n {\n gdjs.Variable.copy(sourceVariables[variableName], targetVariables.get(variableName), isExactCopy);\n }\n}", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Source object", + "longDescription": "", + "name": "SourceObject", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Destination object", + "longDescription": "", + "name": "TargetObject", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + }, + { + "codeOnly": false, + "defaultValue": "yes", + "description": "Clear destination first", + "longDescription": "", + "name": "isExactCopy", + "optional": true, + "supplementaryInformation": "", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Delete an object variable, removing it from memory.", + "fullName": "Delete object variable", + "functionType": "Action", + "group": "Object variables", + "name": "DeleteObjectVariable", + "private": false, + "sentence": "Delete for the object _PARAM1_ the object variable _PARAM2_ from the memory", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const object = eventsFunctionContext.getObjects(\"Object\")[0];\r\nconst objectVariables = object.getVariables();\r\n\r\nobjectVariables.remove(eventsFunctionContext.getArgument(\"VariableName\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Name of object variable", + "longDescription": "", + "name": "VariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Return the text of a global variable.", + "fullName": "Text of a global variable", + "functionType": "StringExpression", + "group": "Global variables", + "name": "GlobalVariableString", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const globalVariables = runtimeScene.getGame().getVariables();\r\nconst variableExist = globalVariables.has(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r\n\r\nif (variableExist) {\r\n eventsFunctionContext.returnValue = globalVariables.get(eventsFunctionContext.getArgument(\"GlobalVariableName\")).getAsString();\r\n}", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Name of the global variable", + "longDescription": "", + "name": "GlobalVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Return the text of a scene variable.", + "fullName": "Text of a scene variable", + "functionType": "StringExpression", + "group": "Scene variables", + "name": "VariableString", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const sceneVariables = runtimeScene.getVariables();\r\nconst variableExist = sceneVariables.has(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r\n\r\nif (variableExist) {\r\n eventsFunctionContext.returnValue = sceneVariables.get(eventsFunctionContext.getArgument(\"SceneVariableName\")).getAsString();\r\n}", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Name of the scene variable", + "longDescription": "", + "name": "SceneVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Return the value of a global variable.", + "fullName": "Value of a global variable", + "functionType": "Expression", + "group": "Global variables", + "name": "GlobalVariable", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const globalVariables = runtimeScene.getGame().getVariables();\r\nconst variableExist = globalVariables.has(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r\n\r\nif (variableExist) {\r\n eventsFunctionContext.returnValue = globalVariables.get(eventsFunctionContext.getArgument(\"GlobalVariableName\")).getAsNumber();\r\n}", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Name of the global variable", + "longDescription": "", + "name": "GlobalVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Return the value of a scene variable.", + "fullName": "Value of a scene variable", + "functionType": "Expression", + "group": "Scene variables", + "name": "Variable", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const sceneVariables = runtimeScene.getVariables();\r\nconst variableExist = sceneVariables.has(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r\n\r\nif (variableExist) {\r\n eventsFunctionContext.returnValue = sceneVariables.get(eventsFunctionContext.getArgument(\"SceneVariableName\")).getAsNumber();\r\n}", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Name of the scene variable", + "longDescription": "", + "name": "SceneVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Copy the global variable to scene. This copy everything from the types to the values.", + "fullName": "Copy a global variable to scene", + "functionType": "Action", + "group": "Convert", + "name": "CopyGlobalVariableToScene", + "private": false, + "sentence": "Copy the global variable:_PARAM1_ to a scene variable:_PARAM2_ (clear destination first: _PARAM3_)", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const globalVariable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"globalVariableName\"));\nconst sceneVariable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"sceneVariableName\"));\nconst isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");\n\ngdjs.Variable.copy(globalVariable, sceneVariable, isExactCopy);\n", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Global variable to copy", + "longDescription": "", + "name": "globalVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Scene variable destination", + "longDescription": "", + "name": "sceneVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + }, + { + "codeOnly": false, + "defaultValue": "yes", + "description": "Clear destination first", + "longDescription": "", + "name": "isExactCopy", + "optional": true, + "supplementaryInformation": "", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Copy the scene variable to global. This copy everything from the types to the values.", + "fullName": "Copy a scene variable to global ", + "functionType": "Action", + "group": "Copy variables", + "name": "CopySceneVariableToGlobal", + "private": false, + "sentence": "Copy the scene variable:_PARAM1_ to a global variable:_PARAM2_ (clear destination first: _PARAM3_)", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const sceneVariable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"sceneVariableName\"));\nconst globalVariable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"globalVariableName\"));\nconst isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");\n\ngdjs.Variable.copy(sceneVariable, globalVariable, isExactCopy);", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Scene variable to copy", + "longDescription": "", + "name": "sceneVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Global variable destination", + "longDescription": "", + "name": "globalVariableName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + }, + { + "codeOnly": false, + "defaultValue": "yes", + "description": "Clear destination first", + "longDescription": "", + "name": "isExactCopy", + "optional": true, + "supplementaryInformation": "", + "type": "yesorno" + } + ], + "objectGroups": [] + } + ], + "eventsBasedBehaviors": [] + }, + { + "author": "D8H", + "category": "", + "description": "This extension can be useful for:\n* Stick an accessory to a moving object,\n* Animate a skeleton.", + "extensionNamespace": "", + "fullName": "Stick objects to others", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXN0aWNrZXItb3V0bGluZSIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik01LjUgMkMzLjYgMiAyIDMuNiAyIDUuNVYxOC41QzIgMjAuNCAzLjYgMjIgNS41IDIySDE2TDIyIDE2VjUuNUMyMiAzLjYgMjAuNCAyIDE4LjUgMkg1LjVNNS44IDRIMTguM0MxOS4zIDQgMjAuMSA0LjggMjAuMSA1LjhWMTVIMTguNkMxNi43IDE1IDE1LjEgMTYuNiAxNS4xIDE4LjVWMjBINS44QzQuOCAyMCA0IDE5LjIgNCAxOC4yVjUuOEM0IDQuOCA0LjggNCA1LjggNCIgLz48L3N2Zz4=", + "name": "Sticker", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/sticker-outline.svg", + "shortDescription": "Behavior to stick objects to other objects - so that they follow the position and rotation of the object they are stuck to.", + "version": "0.3.4", + "origin": { + "identifier": "Sticker", + "name": "gdevelop-extension-store" + }, + "tags": [ + "sticker", + "stick", + "follow", + "skeleton", + "joint" + ], + "authorIds": [ + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" + ], + "dependencies": [], + "eventsFunctions": [ + { + "description": "Check if the object is stuck to another object.", + "fullName": "Is stuck to another object", + "functionType": "Condition", + "group": "", + "name": "IsStuck", + "private": false, + "sentence": "_PARAM1_ is stuck to _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const stickerBehaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\n/** @type {Hashtable} */\nconst stickerObjectsLists = eventsFunctionContext.getObjectsLists(\"Object\");\n/** @type {Hashtable} */\nconst basisObjectsLists = eventsFunctionContext.getObjectsLists(\"BasisObject\");\n\neventsFunctionContext.returnValue = gdjs.evtTools.object.twoListsTest(\n (stickerObject, basisObject, stickerBehaviorName) => {\n const behavior = stickerObject.getBehavior(stickerBehaviorName);\n return behavior.basisObject === basisObject;\n },\n stickerObjectsLists,\n basisObjectsLists,\n false,\n stickerBehaviorName\n);", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Sticker", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Sticker behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Sticker::Sticker", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Basis", + "longDescription": "", + "name": "BasisObject", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + } + ], + "objectGroups": [] + } + ], + "eventsBasedBehaviors": [ + { + "description": "Stick the object to another. Use the action to stick the object, or unstick it later.", + "fullName": "Sticker", + "name": "Sticker", + "objectType": "", + "eventsFunctions": [ + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "onCreated", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\nconst object = objects[0];\nconst behavior = object.getBehavior(behaviorName);\n\n// Set up the scene sticker objects list - if not done already.\nif (!runtimeScene.__allStickers)\n runtimeScene.__allStickers = new Set();\n\n// Set up the behavior extra methods - if not done already.\nconst prototype = Object.getPrototypeOf(behavior);\nif (!prototype.updateRelativeCoordinates) {\n // Unstick from deleted objects.\n gdjs.registerObjectDeletedFromSceneCallback(function (runtimeScene, deletedObject) {\n if (!runtimeScene.__allStickers) return;\n\n for (const sticker of runtimeScene.__allStickers) {\n if (sticker.basisObject === deletedObject) {\n sticker.basisObject = null;\n }\n }\n });\n\n /**\n * Update the coordinates in the basisObject basis.\n * \n * It uses the basisObject coordinates from the previous frame.\n * This way, the sticker can move relatively to it and still\n * follow basisObject.\n * \n * @param {gdjs.RuntimeObject} basisObject\n */\n prototype.updateRelativeCoordinates = function (basisObject) {\n const object = this.owner;\n\n // Update relative coordinates\n this.relativeX = object.getX() - this.basisOldX;\n this.relativeY = object.getY() - this.basisOldY;\n if (!this._getOnlyFollowPosition()) {\n this.relativeAngle = object.getAngle() - this.basisOldAngle;\n this.relativeWidth = object.getWidth() / this.basisOldWidth;\n this.relativeHeight = object.getHeight() / this.basisOldHeight;\n const deltaX = object.getCenterXInScene() - this.basisOldCenterXInScene;\n const deltaY = object.getCenterYInScene() - this.basisOldCenterYInScene;\n const angle = this.basisOldAngle * Math.PI / 180;\n this.relativeRotatedX = (deltaX * Math.cos(angle) + deltaY * Math.sin(angle)) / this.basisOldWidth;\n this.relativeRotatedY = (-deltaX * Math.sin(angle) + deltaY * Math.cos(angle)) / this.basisOldHeight;\n\n // Save initial values to avoid calculus and rounding errors\n this.basisOriginalWidth = basisObject.getWidth();\n this.basisOriginalHeight = basisObject.getHeight();\n this.basisOriginalAngle = basisObject.getAngle();\n }\n }\n\n /**\n * Copy the coordinates to use it the next frame.\n * @param basisObject {gdjs.RuntimeObject}\n */\n prototype.updateOldCoordinates = function (basisObject) {\n const object = this.owner;\n\n this.ownerOldX = object.getX();\n this.ownerOldY = object.getY();\n\n this.basisOldX = basisObject.getX();\n this.basisOldY = basisObject.getY();\n\n if (!this._getOnlyFollowPosition()) {\n this.ownerOldAngle = object.getAngle();\n this.ownerOldWidth = object.getWidth();\n this.ownerOldHeight = object.getHeight();\n\n this.basisOldAngle = basisObject.getAngle();\n this.basisOldWidth = basisObject.getWidth();\n this.basisOldHeight = basisObject.getHeight();\n this.basisOldCenterXInScene = basisObject.getCenterXInScene();\n this.basisOldCenterYInScene = basisObject.getCenterYInScene();\n }\n }\n /**\n * Follow the basisObject (called in doStepPostEvents).\n * \n * This method is also called by children to ensure\n * parents are updated first.\n */\n prototype.followBasisObject = function () {\n if (this.followingDoneThisFrame) {\n return;\n }\n this.followingDoneThisFrame = true;\n /** @type {gdjs.RuntimeObject} */\n const basisObject = this.basisObject;\n if (basisObject) {\n // If the behavior on the basis object has a different name,\n // the objects will still follow their basis objects\n // but frame delays could happen.\n if (basisObject.hasBehavior(behaviorName)) {\n const basisBehavior = basisObject.getBehavior(behaviorName);\n if (basisBehavior.type === this.type) {\n // Follow parents 1st to avoid frame delays\n basisBehavior.followBasisObject();\n }\n }\n\n const object = this.owner;\n\n if (this._getOnlyFollowPosition()) {\n if (object.getX() !== this.ownerOldX\n || object.getY() !== this.ownerOldY) {\n this.updateRelativeCoordinates(basisObject);\n }\n\n if (this.basisOldX !== basisObject.getX() ||\n this.basisOldY !== basisObject.getY()) {\n object.setPosition(\n basisObject.getX() + this.relativeX,\n basisObject.getY() + this.relativeY);\n }\n } else {\n if (object.getX() !== this.ownerOldX\n || object.getY() !== this.ownerOldY\n || object.getAngle() !== this.ownerOldAngle\n || object.getWidth() !== this.ownerOldWidth\n || object.getHeight() !== this.ownerOldHeight) {\n this.updateRelativeCoordinates(basisObject);\n }\n\n // Follow basisObject\n if (basisObject.getAngle() === this.basisOriginalAngle && this.basisOriginalAngle === 0) {\n if (basisObject.getWidth() === this.basisOriginalWidth ||\n basisObject.getHeight() === this.basisOriginalHeight) {\n if (this.basisOldX !== basisObject.getX() ||\n this.basisOldY !== basisObject.getY()) {\n object.setPosition(\n basisObject.getX() + this.relativeX,\n basisObject.getY() + this.relativeY);\n }\n } else {\n object.setPosition(\n basisObject.getX() + this.relativeRotatedX * basisObject.getWidth(),\n basisObject.getY() + this.relativeRotatedY * basisObject.getHeight());\n }\n } else {\n object.setAngle(basisObject.getAngle() + this.relativeAngle);\n\n const deltaX = this.relativeRotatedX * basisObject.getWidth();\n const deltaY = this.relativeRotatedY * basisObject.getHeight();\n const angle = -basisObject.getAngle() * Math.PI / 180;\n object.setX(basisObject.getCenterXInScene() + object.getX() - object.getCenterXInScene() + deltaX * Math.cos(angle) + deltaY * Math.sin(angle));\n object.setY(basisObject.getCenterYInScene() + object.getY() - object.getCenterYInScene() - deltaX * Math.sin(angle) + deltaY * Math.cos(angle));\n }\n // Unproportional dimensions changes won't work as expected\n // if the object angle is not null but nothing more can be done\n // because there is no full affine transformation on objects.\n if (basisObject.getWidth() !== this.basisOriginalWidth) {\n object.setWidth(this.relativeWidth * basisObject.getWidth());\n }\n if (basisObject.getHeight() !== this.basisOriginalHeight) {\n object.setHeight(this.relativeHeight * basisObject.getHeight());\n }\n }\n\n this.updateOldCoordinates(basisObject);\n }\n }\n}\n\n// Register this object as a sticker.\nruntimeScene.__allStickers.add(behavior);\n", + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Sticker::Sticker", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "doStepPreEvents", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\nconst object = objects[0];\nconst behavior = object.getBehavior(behaviorName);\n\nbehavior.followingDoneThisFrame = false;", + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Sticker::Sticker", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "doStepPostEvents", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\nconst object = objects[0];\nconst behavior = object.getBehavior(behaviorName);\n\nbehavior.followBasisObject();", + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Sticker::Sticker", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Stick on another object.", + "fullName": "Stick", + "functionType": "Action", + "group": "", + "name": "Stick", + "private": false, + "sentence": "Stick _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const object = objects[0];\nconst behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\nconst basisObjects = eventsFunctionContext.getObjects(\"BasisObject\");\n\nif (basisObjects.length === 0) return;\nconst basisObject = basisObjects[0];\n\nconst behavior = object.getBehavior(behaviorName);\n\nbehavior.basisObject = basisObject;\nbehavior.updateOldCoordinates(basisObject);\nbehavior.updateRelativeCoordinates(basisObject);\n", + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Sticker::Sticker", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Object to stick to", + "longDescription": "", + "name": "BasisObject", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + } + ], + "objectGroups": [] + }, + { + "description": "Unstick from the object it was stuck to.", + "fullName": "Unstick", + "functionType": "Action", + "group": "", + "name": "Unstick", + "private": false, + "sentence": "Unstick _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const object = objects[0];\nconst behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\nconst behavior = object.getBehavior(behaviorName);\n\nbehavior.basisObject = null;", + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Sticker::Sticker", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "onDestroy", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\nconst object = objects[0];\nconst behavior = object.getBehavior(behaviorName);\n\nif (runtimeScene.__allStickers)\n runtimeScene.__allStickers.delete(behavior);\n", + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Sticker::Sticker", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Boolean", + "label": "Only follow the position", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "OnlyFollowPosition" + } + ] + } + ] + }, + { + "author": "Tristan Rhodes (https://victrisgames.itch.io/)", + "category": "", + "description": "Select one or more methods of shaking:\n- Position: Shake the X and/or Y position of the object \n- Angle: Shake the angle (rotation) of the object \n- Scale: Shake the scale of the object (must be a sprite)\n\nControl how the object shakes:\n- Amplitude: How far the object moves during each shake\n- Duration: Amount of time to shake the object\n- Time between shakes: Amount of time between each movement of the object\n- Keep shaking until stopped (boolean)\n\nTips:\n- For a single-shake effect, set the \"Time between shakes\" to be equal to \"Duration\" (great for a hit or impact)\n- To make the single-shake move in the opposite direction, use negative numbers \n- To repeat a single-shake effect in a loop, add a condition \"Object is not shaking\" \n- Use a long \"Time between shakes\" to simulate a slow moving object (like a ship rocking back and forth)\n- Make sure to \"Stop shaking\" before starting a new shake if it uses different parameters. \n- Use \"Shake until stopped\" to simulate engine vibration, earthquake, or pulsing", + "extensionNamespace": "", + "fullName": "Shake Object (position, angle, scale)", + "helpPath": "https://victrisgames.itch.io/gdevelop-camera-shake-example", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWFycm93LWFsbCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xMywxMUgxOEwxNi41LDkuNUwxNy45Miw4LjA4TDIxLjg0LDEyTDE3LjkyLDE1LjkyTDE2LjUsMTQuNUwxOCwxM0gxM1YxOEwxNC41LDE2LjVMMTUuOTIsMTcuOTJMMTIsMjEuODRMOC4wOCwxNy45Mkw5LjUsMTYuNUwxMSwxOFYxM0g2TDcuNSwxNC41TDYuMDgsMTUuOTJMMi4xNiwxMkw2LjA4LDguMDhMNy41LDkuNUw2LDExSDExVjZMOS41LDcuNUw4LjA4LDYuMDhMMTIsMi4xNkwxNS45Miw2LjA4TDE0LjUsNy41TDEzLDZWMTFaIiAvPjwvc3ZnPg==", + "name": "ShakeObject", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/arrow-all.svg", + "shortDescription": "Shake an object, using one or more ways to shake (position, angle, scale).", + "version": "1.5.5", + "origin": { + "identifier": "ShakeObject", + "name": "gdevelop-extension-store" + }, + "tags": [ + "shaking", + "object", + "effect", + "shake", + "scale", + "position", + "rotate", + "angle" + ], + "authorIds": [ + "gqDaZjCfevOOxBYkK6zlhtZnXCg1" + ], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "Shake an object, using one or more ways to shake (position, angle).\nThis behavior can be used on any type of object.", + "fullName": "Shake object (position, angle)", + "name": "ShakeObject_PositionAngle", + "objectType": "", + "eventsFunctions": [ + { + "description": "Shake an object, using one or more ways to shake (position, angle).", + "fullName": "Shake object (position, angle)", + "functionType": "Action", + "group": "", + "name": "ShakeObject_PositionAngle", + "private": false, + "sentence": "Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_. Wait _PARAM6_ seconds between shakes. Keep shaking until stopped: _PARAM7_", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Shake Object", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Start/Reset duration timer", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_DurationTimer\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Pass input parameters to global variables so that onScenePostEvents can use them", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "GetArgumentAsNumber(\"Duration\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "=", + "GetArgumentAsNumber(\"PowerX\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "=", + "GetArgumentAsNumber(\"PowerY\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerAngle", + "=", + "GetArgumentAsNumber(\"PowerAngle\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_TimeBetweenShakes", + "=", + "GetArgumentAsNumber(\"TimeBetweenShakes\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Determine if the shake should keep going until stopped", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetObjectVariableAsBoolean" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeForever", + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"ShakeForever\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetObjectVariableAsBoolean" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeForever", + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Add default values if none were provided", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "0.5" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_TimeBetweenShakes", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_TimeBetweenShakes", + "=", + "0.08" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "If duration is less than a single shake, increase duration to make 1 full shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "<", + "Object.Variable(__ShakeObject_TimeBetweenShakes)" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "Object.Variable(__ShakeObject_TimeBetweenShakes)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Detect initial shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Initiate the onScenePostEvents function", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "1" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngle", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Duration of shake (in seconds) (Default: 0.5) ", + "longDescription": "", + "name": "Duration", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Amplitude of postion shake in X direction (in pixels) (For example: 5)", + "longDescription": "", + "name": "PowerX", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Amplitude of position shake in Y direction (in pixels) (For example: 5)", + "longDescription": "", + "name": "PowerY", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Amplitude of angle rotation shake (in degrees) (For example: 5)", + "longDescription": "", + "name": "PowerAngle", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Amount of time between shakes (in seconds) (Default: 0.08)", + "longDescription": "", + "name": "TimeBetweenShakes", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Keep shaking until stopped", + "longDescription": "Duration value will be ignored", + "name": "ShakeForever", + "optional": false, + "supplementaryInformation": "", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "doStepPostEvents", + "private": false, + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Shake Object", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Start shaking", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "1" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Keep object shaking forever (if desired)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ObjectVariableAsBoolean" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeForever", + "True" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "100" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_DurationTimer\"" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Calculate movement of the shake", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Run once before every shake movement", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "1" + ] + }, + { + "type": { + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_ShakeTimer\"", + "Object.Variable(__ShakeObject_TimeBetweenShakes)" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_ShakeTimer\"" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeCounter", + "+", + "1" + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Correct for drift and reset drift tracking variables", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move to correct any drift from previous shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_DisplacementTravelledX)" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_DisplacementTravelledY)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerAngle", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_AngleTravelled)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Reset drift detection variables", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledX", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledY", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_AngleTravelled", + "=", + "0" + ] + } + ] + } + ], + "parameters": [] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Calculate Position Shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "PositionDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude * [-1 or 1]", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make initial shake NOT random so users can set a direction for a one-shake effect", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "1" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementX", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerX)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementY", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerY)" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "After initial shake pick a random direction", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementX", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerX) * RandomWithStep(-1, 1, 2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementY", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerY) * RandomWithStep(-1, 1, 2)" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Calculate Rotation (angle) shake ", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerAngle", + "!=", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Every \"even\" shake, rotate clockwise", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "AngleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementAngle", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerAngle)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Every \"odd\" shake, rotate counter-clockwise", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "AngleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementAngle", + "=", + "-1 *(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerAngle)" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save that initial shake has been processed", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "0" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Move object", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Calculate the fraction of shake that occured during this frame", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PercentTimeElapsedThisFrame", + "=", + "min(1,TimeDelta()/Object.Variable(__ShakeObject_TimeBetweenShakes))" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Increase change for the first half of the shake (move away from original values)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_ShakeTimer\"", + "Object.Variable(__ShakeObject_TimeBetweenShakes)/2" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change position", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledX", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledY", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change angle", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Variable(__ShakeObject_PowerAngle)", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Object", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_AngleTravelled", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Decrease change the second half of the shake (return to original position)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_ShakeTimer\"", + "Object.Variable(__ShakeObject_TimeBetweenShakes)/2" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change position", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledX", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledY", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change angle", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Variable(__ShakeObject_PowerAngle)", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Object", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_AngleTravelled", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Stop shaking", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Stop shaking when the duration has been reached (or if the stop shaking function was called)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_DurationTimer\"", + "Object.Variable(__ShakeObject_Duration)" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "-1" + ] + } + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeCounter", + "=", + "0" + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Correct for drift and reset drift tracking variables", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move to correct any drift from previous shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_DisplacementTravelledX)" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_DisplacementTravelledY)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerAngle", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_AngleTravelled)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Reset drift detection variables", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledX", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledY", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_AngleTravelled", + "=", + "0" + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngle", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Stop any shaking of object that was initiated by the Shake Object extension.", + "fullName": "Stop shaking the object", + "functionType": "Action", + "group": "", + "name": "StopShaking", + "private": false, + "sentence": "Stop shaking _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ShakeObject::ShakeObject_PositionAngle::IsShaking" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "-1" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngle", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if an object is shaking.", + "fullName": "Check if an object is shaking", + "functionType": "Condition", + "group": "", + "name": "IsShaking", + "private": false, + "sentence": "_PARAM0_ is shaking", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngle", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [] + }, + { + "description": "Shake an object, using one or more ways to shake (position, angle, scale)\nThis behavior can only be used on sprite objects.", + "fullName": "Shake object (position, angle, scale)", + "name": "ShakeObject_PositionAngleScale", + "objectType": "Sprite", + "eventsFunctions": [ + { + "description": "Shake an object, using one or more ways to shake (position, angle, scale).", + "fullName": "Shake object (position, angle, scale)", + "functionType": "Action", + "group": "", + "name": "ShakeObject_PositionAngleScale", + "private": false, + "sentence": "Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_, and scale amplitude _PARAM6_. Wait _PARAM7_ seconds between shakes. Keep shaking until stopped: _PARAM8_", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Shake Object", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Start/Reset duration timer", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_DurationTimer\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Pass input parameters to global variables so that onScenePostEvents can use them", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "GetArgumentAsNumber(\"Duration\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "=", + "GetArgumentAsNumber(\"PowerX\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "=", + "GetArgumentAsNumber(\"PowerY\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerAngle", + "=", + "GetArgumentAsNumber(\"PowerAngle\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerScale", + "=", + "GetArgumentAsNumber(\"PowerScale\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_TimeBetweenShakes", + "=", + "GetArgumentAsNumber(\"TimeBetweenShakes\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Determine if the shake should keep going until stopped", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetObjectVariableAsBoolean" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeForever", + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"ShakeForever\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetObjectVariableAsBoolean" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeForever", + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Add default values if none were provided", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "0.5" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_TimeBetweenShakes", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_TimeBetweenShakes", + "=", + "0.08" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "If duration is less than a single shake, increase duration to make 1 full shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "<", + "Object.Variable(__ShakeObject_TimeBetweenShakes)" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "Object.Variable(__ShakeObject_TimeBetweenShakes)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Detect initial shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Initiate the onScenePostEvents function", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "1" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngleScale", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Duration of shake (in seconds) (Default: 0.5)", + "longDescription": "", + "name": "Duration", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Amplitude of postion shake in X direction (in pixels) (For example: 5)", + "longDescription": "", + "name": "PowerX", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Amplitude of position shake in Y direction (in pixels) (For example: 5)", + "longDescription": "", + "name": "PowerY", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Amplitude of angle rotation shake (in degrees) (For example: 5)", + "longDescription": "", + "name": "PowerAngle", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Amplitude of scale shake (in percent change) (For example: 5)", + "longDescription": "", + "name": "PowerScale", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Amount of time between shakes (in seconds) (Default: 0.08)", + "longDescription": "", + "name": "TimeBetweenShakes", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Keep shaking until stopped", + "longDescription": "Duration value will be ignored", + "name": "ShakeForever", + "optional": false, + "supplementaryInformation": "", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "doStepPostEvents", + "private": false, + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Shake Object", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Start shaking", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "1" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Keep object shaking forever (if desired)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ObjectVariableAsBoolean" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeForever", + "True" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "100" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_DurationTimer\"" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Calculate movement of the shake", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Run once before every shake movement", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "1" + ] + }, + { + "type": { + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_ShakeTimer\"", + "Object.Variable(__ShakeObject_TimeBetweenShakes)" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_ShakeTimer\"" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeCounter", + "+", + "1" + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "folded": true, + "name": "Correct for drift and reset drift tracking variables", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move to correct any drift from previous shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_DisplacementTravelledX)" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_DisplacementTravelledY)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerAngle", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_AngleTravelled)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerScale", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_ScaleTravelled)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Reset drift detection variables", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledX", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledY", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_AngleTravelled", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ScaleTravelled", + "=", + "0" + ] + } + ] + } + ], + "parameters": [] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Calculate Position Shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "PositionDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude * [-1 or 1]", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make initial shake NOT random so users can set a direction for a one-shake effect", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "1" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementX", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerX)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementY", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerY)" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "After initial shake pick a random direction", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementX", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerX) * RandomWithStep(-1, 1, 2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementY", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerY) * RandomWithStep(-1, 1, 2)" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Calculate Rotation (angle) shake ", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerAngle", + "!=", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Every \"even\" shake, rotate clockwise", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "AngleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementAngle", + "=", + "-1 * (Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerAngle)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Every \"odd\" shake, rotate counter-clockwise", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "AngleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementAngle", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerAngle)" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Calculate Scale shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerScale", + "!=", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Calculate object scale displacement, with linear decay over time", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "ScaleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude * 1/100", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Every even shake, increase scale", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementScale", + "=", + "-1 * (Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerScale) * (1/100)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Every \"odd\" shake, decrease scale", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "ScaleDisplacement = -1 * (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude * 1/100", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementScale", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerScale) * (1/100)" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save that initial shake has been processed", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "0" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Move object", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Calculate the fraction of shake that occured during this frame", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PercentTimeElapsedThisFrame", + "=", + "min(1,TimeDelta()/Object.Variable(__ShakeObject_TimeBetweenShakes))" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Increase change for the first half of the shake (move away from original values)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_ShakeTimer\"", + "Object.Variable(__ShakeObject_TimeBetweenShakes)/2" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change position", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledX", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledY", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change angle", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Variable(__ShakeObject_PowerAngle)", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Object", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_AngleTravelled", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change scale", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Variable(__ShakeObject_PowerScale)", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "Object", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementScale) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ScaleTravelled", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementScale) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Decrease change the second half of the shake (return to original position)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_ShakeTimer\"", + "Object.Variable(__ShakeObject_TimeBetweenShakes)/2" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change position", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledX", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledY", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change angle", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Variable(__ShakeObject_PowerAngle)", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Object", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_AngleTravelled", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change scale", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Variable(__ShakeObject_PowerScale)", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "Object", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementScale) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ScaleTravelled", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementScale) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Stop shaking", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Stop shaking when the duration has been reached (or if the stop shaking function was called)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_DurationTimer\"", + "Object.Variable(__ShakeObject_Duration)" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "-1" + ] + } + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeCounter", + "=", + "0" + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Correct for drift and reset drift tracking variables", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move to correct any drift from previous shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_DisplacementTravelledX)" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_DisplacementTravelledY)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerAngle", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_AngleTravelled)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerScale", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_ScaleTravelled)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Reset drift detection variables", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledX", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledY", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_AngleTravelled", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ScaleTravelled", + "=", + "0" + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngleScale", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Stop shaking an object.", + "fullName": "Stop shaking an object", + "functionType": "Action", + "group": "", + "name": "StopShaking", + "private": false, + "sentence": "Stop shaking _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ShakeObject::ShakeObject_PositionAngleScale::IsShaking" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "-1" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngleScale", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if an object is shaking.", + "fullName": "Check if an object is shaking", + "functionType": "Condition", + "group": "", + "name": "IsShaking", + "private": false, + "sentence": "_PARAM0_ is shaking", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngleScale", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [] + } + ] + }, + { + "author": "VegeTato, arthuro555", + "category": "", + "description": "Convenience conditions, actions and behaviors for timers to trigger a condition every X seconds.", + "extensionNamespace": "", + "fullName": "Repeat every X seconds", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXJlcGVhdCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNywxN0g3VjE0TDMsMThMNywyMlYxOUgxOVYxM0gxN003LDdIMTdWMTBMMjEsNkwxNywyVjVINVYxMUg3VjdaIiAvPjwvc3ZnPg==", + "name": "RepeatEveryXSeconds", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/repeat.svg", + "shortDescription": "This allows to trigger an event every X seconds.", + "version": "0.1.0", + "origin": { + "identifier": "RepeatEveryXSeconds", + "name": "gdevelop-extension-store" + }, + "tags": [ + "repeat", + "timer", + "time", + "convenience" + ], + "authorIds": [ + "ZgrsWuRTAkXgeuPV9bo0zuEcA2w1", + "IRIhkkTTl2UHhfjrLTTH5GYwkYu1" + ], + "dependencies": [], + "eventsFunctions": [ + { + "description": "Triggers every X seconds.", + "fullName": "Repeat every X seconds", + "functionType": "Condition", + "group": "", + "name": "Repeat", + "private": false, + "sentence": "Repeat timer _PARAM1_ every _PARAM2_ seconds", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "ResetTimer" + }, + "parameters": [ + "player", + "GetArgumentAsString(\"timerName\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Timer" + }, + "parameters": [ + "player", + "GetArgumentAsNumber(\"time\")", + "GetArgumentAsString(\"timerName\")" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResetTimer" + }, + "parameters": [ + "player", + "GetArgumentAsString(\"timerName\")" + ] + }, + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "The name of the timer to loop", + "longDescription": "", + "name": "timerName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "The time in seconds between each trigger", + "longDescription": "", + "name": "time", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Triggers every X seconds X amount of times.", + "fullName": "Repeat every X seconds in X number", + "functionType": "Condition", + "group": "", + "name": "RepeatXTimes", + "private": false, + "sentence": "Repeat timer _PARAM1_ every _PARAM2_ seconds _PARAM3_ times", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "ResetTimer" + }, + "parameters": [ + "player", + "GetArgumentAsString(\"timerName\")" + ] + }, + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "__RepeatEveryXSeconds_.Counter[GetArgumentAsString(\"timerName\")]", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Timer" + }, + "parameters": [ + "player", + "GetArgumentAsNumber(\"time\")", + "GetArgumentAsString(\"timerName\")" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "GetArgumentAsNumber(\"limit\")", + "=", + "-1" + ] + }, + { + "type": { + "value": "VarScene" + }, + "parameters": [ + "__RepeatEveryXSeconds_.Counter[GetArgumentAsString(\"timerName\")]", + "<", + "GetArgumentAsNumber(\"limit\")" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ResetTimer" + }, + "parameters": [ + "player", + "GetArgumentAsString(\"timerName\")" + ] + }, + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "__RepeatEveryXSeconds_.Counter[GetArgumentAsString(\"timerName\")]", + "+", + "1" + ] + }, + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "The name of the timer to loop", + "longDescription": "", + "name": "timerName", + "optional": false, + "supplementaryInformation": "", + "type": "string" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "The time in seconds between each trigger", + "longDescription": "", + "name": "time", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "The limit of loops", + "longDescription": "The condition will trigger at most this amount of times. Make it -1 for looping forever.", + "name": "limit", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + } + ], + "eventsBasedBehaviors": [ + { + "description": "Allows to repeat an object timer every X seconds.", + "fullName": "Repeat every X seconds", + "name": "RepeatTimer", + "objectType": "", + "eventsFunctions": [ + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "onCreated", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyTimerName()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Triggers every X seconds, where X is defined in the behavior properties.", + "fullName": "Repeat every X seconds", + "functionType": "Condition", + "group": "", + "name": "Repeat", + "private": false, + "sentence": "Recurring timer _PARAM1_ of _PARAM0_ has triggered", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyTimerName()", + "Object.Behavior::PropertyTimerLength()" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "RepeatEveryXSeconds::RepeatTimer::PropertyLimit" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "-1" + ] + }, + { + "type": { + "value": "RepeatEveryXSeconds::RepeatTimer::PropertyCounter" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyLimit()" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyTimerName()" + ] + }, + { + "type": { + "value": "RepeatEveryXSeconds::RepeatTimer::SetPropertyCounter" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + }, + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Pauses a recurring timer.", + "fullName": "Pause a recurring timer", + "functionType": "Action", + "group": "", + "name": "Pause", + "private": false, + "sentence": "Pause recurring timer _PARAM1_ of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PauseObjectTimer" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyTimerName()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Resumes a paused recurring timer.", + "fullName": "Resume a recurring timer", + "functionType": "Action", + "group": "", + "name": "Resume", + "private": false, + "sentence": "Resume recurring timer _PARAM1_ of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "UnPauseObjectTimer" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyTimerName()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Allows to trigger the recurring timer X times again.", + "fullName": "Reset the limit", + "functionType": "Action", + "group": "", + "name": "ResetLimit", + "private": false, + "sentence": "Allow to trigger the recurring timer _PARAM1_ of _PARAM0_ X times again", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RepeatEveryXSeconds::RepeatTimer::SetPropertyCounter" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "MyTimer", + "type": "String", + "label": "The name of the timer to repeat", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "TimerName" + }, + { + "value": "1", + "type": "Number", + "label": "The time between each trigger (in seconds)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "TimerLength" + }, + { + "value": "-1", + "type": "Number", + "label": "How many times should the timer trigger? -1 for forever.", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "Limit" + }, + { + "value": "0", + "type": "Number", + "label": "An internal counter", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "Counter" + } + ] + } + ] + }, + { + "author": "@4ian", + "category": "General", + "description": "Manage health (life) and shield points of an object. Health can be assigned to players, enemies, NPCs, or even inanimate objects such as breaking doors and mining rocks.\n\nHow to use:\n\n- Set desired values in \"Health\" and \"Shield\" behavior properties\n- To apply damage use “Damage an object” or “Damage an object protected by a shield”\n- To heal health, use “Heal object” action \n- To activate the shield, use “Activate Shield” action\n- Health and shield regeneration will happen automatically based on properties\n \nTips:\n\n- While damage cooldown is active, no damage will be applied to health or shield\n- Try using the “Blink” extension while damage cooldown is active\n- Use the “Is just damaged” condition to trigger audio and visual effects\n\nHealth properties:\n\n- Health (life points) Used for starting health\n- Maximum health (0 for no maximum)\n- Damage cooldown (seconds) Use \"0\" for no cooldown\n- Rate of health regeneration (points per second) Will not exceed max health, even with overhealing enabled\n- Delay (seconds) before health regeneration starts after being hit\n- Allow heal to increase health above max health (will not exceed max health)\n\nShield properties:\n\n- Max shield points (Shield will start with this many points when activated)\n- Duration of shield (seconds) Use \"0\" to disable shield timer\n- Rate of shield regeneration (points per second)\n- Shield will block all excess damage when shield is destroyed\n- Delay (seconds) before shield regeneration starts after being hit\n- Regenerate shield when it has zero points\n", + "extensionNamespace": "", + "fullName": "Health (life) points and shield", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWhlYXJ0LWhhbGYtZnVsbCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNi41LDVDMTUsNSAxMy41OCw1LjkxIDEzLDcuMlYxNy43NEMxNy4yNSwxMy44NyAyMCwxMS4yIDIwLDguNUMyMCw2LjUgMTguNSw1IDE2LjUsNU0xNi41LDNDMTkuNTgsMyAyMiw1LjQxIDIyLDguNUMyMiwxMi4yNyAxOC42LDE1LjM2IDEzLjQ1LDIwLjAzTDEyLDIxLjM1TDEwLjU1LDIwLjAzQzUuNCwxNS4zNiAyLDEyLjI3IDIsOC41QzIsNS40MSA0LjQyLDMgNy41LDNDOS4yNCwzIDEwLjkxLDMuODEgMTIsNS4wOEMxMy4wOSwzLjgxIDE0Ljc2LDMgMTYuNSwzWiIgLz48L3N2Zz4=", + "name": "Health", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/heart-half-full.svg", + "shortDescription": "Manage life points and a protective shield.", + "version": "0.1.0", + "origin": { + "identifier": "Health", + "name": "gdevelop-extension-store" + }, + "tags": [ + "health", + "life", + "damage", + "hit", + "heal", + "shield", + "regeneration" + ], + "authorIds": [ + "wWP8BSlAW0UP4NeaHa2LcmmDzmH2", + "xpwUwByyImTDcHEqDUqfyg0oRBt1", + "gqDaZjCfevOOxBYkK6zlhtZnXCg1" + ], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "Manage life points by damaging and healing the object.", + "fullName": "Health", + "name": "Health", + "objectType": "", + "eventsFunctions": [ + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "doStepPreEvents", + "private": false, + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Regeneration", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Health", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyHealthRegenRate" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + }, + { + "type": { + "value": "Health::Health::PropertyHealth" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::MaxHealth()" + ] + }, + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.TimeSinceLastHit\"", + ">", + "Object.Behavior::PropertyHealthRegenDelay()" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHealth" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "Object.Behavior::PropertyHealthRegenRate() * TimeDelta()" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Correct any values above maximum limits", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyHealth" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::MaxHealth()" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHealth" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyMaxHealth()" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Reset damage trigger", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyIsJustDamaged" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Apply damage directly to the object. Damage will not be affected by shield. Triggers damage cooldown.", + "fullName": "Damage an object", + "functionType": "Action", + "group": "Health", + "name": "Hit", + "private": false, + "sentence": "Damage _PARAM0_, removing _PARAM2_ points from its health", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Only consider damage if damage cooldown is NOT active", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Health::Health::IsDamageCooldownActive" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Mark object was hit at least once (used for initial state of damage cooldown)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Health::Health::PropertyHitAtLeastOnce" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHitAtLeastOnce" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Restart time since last hit timer", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.TimeSinceLastHit\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Apply damage", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHealth" + }, + "parameters": [ + "Object", + "Behavior", + "-", + "GetArgumentAsNumber(\"DamageValue\")" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.DamageCooldown\"" + ] + }, + { + "type": { + "value": "Health::Health::SetPropertyIsJustDamaged" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Value of the damage to do (will be removed from object health)", + "longDescription": "", + "name": "DamageValue", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change health points. This is not considered damage.", + "fullName": "Change health points", + "functionType": "Action", + "group": "Health", + "name": "SetHealth", + "private": false, + "sentence": "Set health of _PARAM0_ to _PARAM2_ points", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHealth" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyMaxHealth" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHealth" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::PropertyHealth(), Object.Behavior::PropertyMaxHealth())" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "New health value", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Heal the object by increasing its life points.", + "fullName": "Heal object", + "functionType": "Action", + "group": "Health", + "name": "Heal", + "private": false, + "sentence": "Heal _PARAM0_ with _PARAM2_ health points", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change health points", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHealth" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "GetArgumentAsNumber(\"HealValue\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Prevent exceeding max health (unless overhealing is enabled)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyMaxHealth" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + }, + { + "type": { + "inverted": true, + "value": "Health::Health::PropertyAllowOverHealing" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHealth" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::PropertyHealth(), Object.Behavior::PropertyMaxHealth())" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Points to heal (will be added to object health)", + "longDescription": "", + "name": "HealValue", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the object maximum health points.", + "fullName": "Change maximum health points", + "functionType": "Action", + "group": "Health", + "name": "SetMaxHealth", + "private": false, + "sentence": "Set maximum health of _PARAM0_ to _PARAM2_ points", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyMaxHealth" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Maximum health", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change rate of health regeneration.", + "fullName": "Change rate of health regeneration", + "functionType": "Action", + "group": "Shield", + "name": "SetHealthRegenRate", + "private": false, + "sentence": "Set rate of health regen of _PARAM0_ to _PARAM2_ points per second", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHealthRegenRate" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Rate of regen", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change duration of damage cooldown.", + "fullName": "Change duration of damage cooldown", + "functionType": "Action", + "group": "Health", + "name": "SetCooldownDuration", + "private": false, + "sentence": "Set duration of damage cooldown on _PARAM0_ to _PARAM2_ seconds", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyDamageCooldown" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Duration of damage cooldown (seconds)", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change delay before health regeneration starts after being hit.", + "fullName": "Change delay before health regeneration starts", + "functionType": "Action", + "group": "Health", + "name": "SetHealthRegenDelay", + "private": false, + "sentence": "Set delay before health regeneration starts on _PARAM0_ to _PARAM2_ seconds", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHealthRegenDelay" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Delay (seconds)", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Allow over-healing.", + "fullName": "Allow over-healing", + "functionType": "Action", + "group": "Health", + "name": "AllowOverHealing", + "private": false, + "sentence": "Allow over-healing on _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyAllowOverHealing" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyAllowOverHealing" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Allow over-healing", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Mark object as hit at least once.", + "fullName": "Mark object as hit at least once", + "functionType": "Action", + "group": "Health", + "name": "SetHitAtLeastOnce", + "private": false, + "sentence": "Mark _PARAM0_ as hit at least once: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHitAtLeastOnce" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHitAtLeastOnce" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Hit at least once", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Mark object as just damaged.", + "fullName": "Mark object as just damaged", + "functionType": "Action", + "group": "Health", + "name": "SetJustDamaged", + "private": false, + "sentence": "Mark _PARAM0_ as just damaged: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyIsJustDamaged" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyIsJustDamaged" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Just damaged", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the object has been hit at least once.", + "fullName": "Object hit at least once", + "functionType": "Condition", + "group": "Health", + "name": "HitAtLeastOnce", + "private": false, + "sentence": "_PARAM0_ has just been hit at least once", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyHitAtLeastOnce" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the object was just damaged previously in the events.", + "fullName": "Is just damaged", + "functionType": "Condition", + "group": "Health", + "name": "IsJustDamaged", + "private": false, + "sentence": "_PARAM0_ has just been damaged", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyIsJustDamaged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if damage cooldown is active. Object (and shield) cannot be damaged while this is active.", + "fullName": "Is damage cooldown active", + "functionType": "Condition", + "group": "Health", + "name": "IsDamageCooldownActive", + "private": false, + "sentence": "Damage cooldown on _PARAM0_ is active", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyHitAtLeastOnce" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "Health::Health::PropertyDamageCooldown" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + }, + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.DamageCooldown\"", + "<", + "Object.Behavior::PropertyDamageCooldown()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the object is considered dead (no health points).", + "fullName": "Is dead", + "functionType": "Condition", + "group": "Health", + "name": "IsDead", + "private": false, + "sentence": "_PARAM0_ is dead", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyHealth" + }, + "parameters": [ + "Object", + "Behavior", + "<=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Maximum health points of the object.", + "fullName": "Maximum health points", + "functionType": "Expression", + "group": "Health", + "name": "MaxHealth", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyMaxHealth()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Duration of damage cooldown (seconds).", + "fullName": "Duration of damage cooldown", + "functionType": "Expression", + "group": "Health", + "name": "DamageCooldownDuration", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyDamageCooldown()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Health points of the object.", + "fullName": "Health points", + "functionType": "Expression", + "group": "Health", + "name": "Health", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyHealth()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Delay before health regeneration starts after last hit (seconds).", + "fullName": "Delay before health regeneration starts", + "functionType": "Expression", + "group": "Health", + "name": "HealthRegenDelay", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyHealthRegenDelay()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Rate of health regeneration (points per second).", + "fullName": "Rate of health regeneration", + "functionType": "Expression", + "group": "Health", + "name": "HealthRegenRate", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyHealthRegenRate()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Time before damage cooldown ends (seconds).", + "fullName": "Time before damage cooldown ends", + "functionType": "Expression", + "group": "Health", + "name": "DamageCooldownRemaining", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::IsDamageCooldownActive" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "max(0,Object.Behavior::PropertyDamageCooldown() - Object.ObjectTimerElapsedTime(\"__Health.DamageCooldown\"))" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Time since last hit (seconds).", + "fullName": "Time since last hit", + "functionType": "Expression", + "group": "Health", + "name": "TimeSinceLastHit", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.ObjectTimerElapsedTime(\"__Health.TimeSinceLastHit\")" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "onCreated", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.DamageCooldown\"" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.TimeSinceLastHit\"" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "100", + "type": "Number", + "label": "Health (life points) Used for starting health", + "description": "", + "group": "Health", + "extraInformation": [], + "hidden": false, + "name": "Health" + }, + { + "value": "0", + "type": "Number", + "label": "Damage cooldown (seconds) Use \"0\" for no cooldown", + "description": "", + "group": "Health", + "extraInformation": [], + "hidden": false, + "name": "DamageCooldown" + }, + { + "value": "100", + "type": "Number", + "label": "Maximum health (0 for no maximum)", + "description": "", + "group": "Health", + "extraInformation": [], + "hidden": false, + "name": "MaxHealth" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "Health", + "extraInformation": [], + "hidden": true, + "name": "IsJustDamaged" + }, + { + "value": "0", + "type": "Number", + "label": "Rate of health regeneration (points per second) Will not exceed max health, even with overhealing enabled", + "description": "", + "group": "Health", + "extraInformation": [], + "hidden": false, + "name": "HealthRegenRate" + }, + { + "value": "0", + "type": "Number", + "label": "Delay (seconds) before health regen starts after being hit", + "description": "", + "group": "Health", + "extraInformation": [], + "hidden": false, + "name": "HealthRegenDelay" + }, + { + "value": "", + "type": "Boolean", + "label": "Allow heal to increase health above max health (regen will never exceed max health)", + "description": "", + "group": "Health", + "extraInformation": [], + "hidden": false, + "name": "AllowOverHealing" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "Health", + "extraInformation": [], + "hidden": true, + "name": "HitAtLeastOnce" + } + ] + }, + { + "description": "Protective shield that prevents damage to health points.", + "fullName": "Shield", + "name": "Shield", + "objectType": "", + "eventsFunctions": [ + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "doStepPreEvents", + "private": false, + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Regeneration", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Shield", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Shield::PropertyShieldRegenRate" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + }, + { + "type": { + "value": "Health::Shield::PropertyShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyMaxShieldPoints()" + ] + }, + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.TimeSinceLastHit\"", + ">", + "Object.Behavior::PropertyShieldRegenDelay()" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Only regen when shield is active or when \"RegenShieldWhenZeroPoints\" is enabled", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "Health::Shield::IsShieldActive" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "Health::Shield::PropertyRegenShieldWhenZeroPoints" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "Object.Behavior::PropertyShieldRegenRate() * TimeDelta()" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Correct any values above maximum limits", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Shield::PropertyShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::PropertyMaxShieldPoints()" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyMaxShieldPoints()" + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Remove shield points if shield expired", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Health::Shield::IsShieldActive" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Reset damage trigger", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyIsShieldJustDamaged" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Shield", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Apply damage to the shield and object. If the shield is active, it will be damaged first and any excess damage will reduce health and trigger damage cooldown.", + "fullName": "Damage an object protected by a shield", + "functionType": "Action", + "group": "Health", + "name": "ShieldHit", + "private": false, + "sentence": "Damage shield and health of _PARAM0_ for _PARAM2_ points of damage", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Only consider damage if damage cooldown is NOT active", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Health::Health::IsDamageCooldownActive" + }, + "parameters": [ + "Object", + "RequireHealth", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Mark object was hit at least once (used for initial state of damage cooldown)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Health::Health::HitAtLeastOnce" + }, + "parameters": [ + "Object", + "RequireHealth", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetHitAtLeastOnce" + }, + "parameters": [ + "Object", + "RequireHealth", + "yes", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Restart time since last hit timer", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.TimeSinceLastHit\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "If shield is NOT active, perform normal damage", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Health::Shield::IsShieldActive" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetHealth" + }, + "parameters": [ + "Object", + "RequireHealth", + "Object.RequireHealth::Health() - GetArgumentAsNumber(\"DamageValue\")", + "" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.DamageCooldown\"" + ] + }, + { + "type": { + "value": "Health::Health::SetJustDamaged" + }, + "parameters": [ + "Object", + "RequireHealth", + "yes", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "If shield is active, damage shield first", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Shield::IsShieldActive" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "-", + "GetArgumentAsNumber(\"DamageValue\")" + ] + }, + { + "type": { + "value": "Health::Shield::SetPropertyIsShieldJustDamaged" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Excess damage is based on negative shield points", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Shield::PropertyShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Apply excess damage only if shield does NOT block excess damage", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Health::Shield::PropertyShieldBlocksExcessDamage" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetHealth" + }, + "parameters": [ + "Object", + "RequireHealth", + "Object.RequireHealth::Health() + Object.Behavior::PropertyShieldPoints()", + "" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.DamageCooldown\"" + ] + }, + { + "type": { + "value": "Health::Health::SetJustDamaged" + }, + "parameters": [ + "Object", + "RequireHealth", + "yes", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Shield", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Value of the damage to do (will be removed from object health)", + "longDescription": "", + "name": "DamageValue", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the object maximum shield points.", + "fullName": "Change maximum shield points", + "functionType": "Action", + "group": "Shield", + "name": "SetMaxShield", + "private": false, + "sentence": "Set maximum shield of _PARAM0_ to _PARAM2_ points", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyMaxShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Shield", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Maximum shield", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change shield points. This is not considered damage.", + "fullName": "Change shield points", + "functionType": "Action", + "group": "Shield", + "name": "SeShieldPoints", + "private": false, + "sentence": "Set shield on _PARAM0_ to _PARAM2_ points", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Shield", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Shield points", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change rate of shield regeneration.", + "fullName": "Change rate of shield regeneration", + "functionType": "Action", + "group": "Shield", + "name": "SetShieldRegenRate", + "private": false, + "sentence": "Set rate of shield regeneration of _PARAM0_ to _PARAM2_ points per second", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyShieldRegenRate" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Shield", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Rate of regen", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change delay before shield regeneration starts after being hit.", + "fullName": "Change delay before shield regeneration starts", + "functionType": "Action", + "group": "Shield", + "name": "SetShieldRegenDelay", + "private": false, + "sentence": "Set delay before shield regeneration starts on _PARAM0_ to _PARAM2_ seconds", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyShieldRegenDelay" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Shield", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Delay (seconds)", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change duration of shield.", + "fullName": "Change duration of shield", + "functionType": "Action", + "group": "Shield", + "name": "SetShieldDuration", + "private": false, + "sentence": "Set duration of shield on _PARAM0_ to _PARAM2_ seconds", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyShieldDuration" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Shield", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Duration of shield (seconds)", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Activate shield. If the shield was already active, this will reset it's points and timer.", + "fullName": "Activate shield", + "functionType": "Action", + "group": "Shield", + "name": "ActivateShield", + "private": false, + "sentence": "Activate (or renew) shield on _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.ShieldDuration\"" + ] + }, + { + "type": { + "value": "Health::Shield::SetPropertyShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyMaxShieldPoints()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Shield", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change max shield points. This value is used when the shield is activated or renewed.", + "fullName": "Change max shield points ", + "functionType": "Action", + "group": "Shield", + "name": "SetMaxShieldPoints", + "private": false, + "sentence": "Set max shield of _PARAM0_ to _PARAM2_ points", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyMaxShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Shield", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Shield points", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Shield blocks excess damage when it breaks.", + "fullName": "Shield blocks excess damage when it breaks", + "functionType": "Action", + "group": "Shield", + "name": "ShieldBlockExcessDamage", + "private": false, + "sentence": "Shield on _PARAM0_ blocks excess damage when it breaks: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyShieldBlocksExcessDamage" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyShieldBlocksExcessDamage" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Shield", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Shield blocks excess damage", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Regenerate shield when it has zero points.", + "fullName": "Regenerate shield when it has zero points", + "functionType": "Action", + "group": "Shield", + "name": "RegenShieldWhenZero", + "private": false, + "sentence": "Regenerate shield on _PARAM0_ when it has zero points: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyRegenShieldWhenZeroPoints" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyRegenShieldWhenZeroPoints" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Shield", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Regen shield when it has zero points", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the shield was just damaged previously in the events.", + "fullName": "Is shield just damaged", + "functionType": "Condition", + "group": "Shield", + "name": "IsShieldJustDamaged", + "private": false, + "sentence": "Shield on _PARAM0_ has just been damaged", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Shield::PropertyIsShieldJustDamaged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Shield", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the shield is active (based on shield points and duration).", + "fullName": "Is shield active", + "functionType": "Condition", + "group": "Shield", + "name": "IsShieldActive", + "private": false, + "sentence": "Shield on _PARAM0_ is active", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "To be considered \"active\", a shield must have positive points AND not exceed duration", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Shield::PropertyShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Don't check the timer when duration is zero (or negative)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Shield::PropertyShieldDuration" + }, + "parameters": [ + "Object", + "Behavior", + "<=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Shield::PropertyShieldDuration" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + }, + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.ShieldDuration\"", + "<", + "Object.Behavior::PropertyShieldDuration()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Shield", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Maximum shield points of the object.", + "fullName": "Maximum shield points", + "functionType": "Expression", + "group": "Shield", + "name": "MaxShield", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyMaxShieldPoints()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Shield", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Duration of shield (seconds).", + "fullName": "Duration of shield", + "functionType": "Expression", + "group": "Shield", + "name": "ShieldDuration", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyShieldDuration()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Shield", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Delay before shield regeneration starts after last hit (seconds).", + "fullName": "Delay before shield regeneration starts", + "functionType": "Expression", + "group": "Shield", + "name": "ShieldRegenDelay", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyShieldRegenDelay()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Shield", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Rate of shield regeneration (points per second).", + "fullName": "Rate of shield regeneration", + "functionType": "Expression", + "group": "Shield", + "name": "ShieldRegenRate", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyShieldRegenRate()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Shield", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Time before shield ends (seconds).", + "fullName": "Time before shield ends", + "functionType": "Expression", + "group": "Shield", + "name": "ShieldTimeRemaining", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Shield::PropertyShieldDuration" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "max(0,Object.Behavior::PropertyShieldDuration() - Object.ObjectTimerElapsedTime(\"__Health.ShieldDuration\"))" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Shield", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Shield points of the object.", + "fullName": "Shield points", + "functionType": "Expression", + "group": "Shield", + "name": "ShieldPoints", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyShieldPoints()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "Health::Shield", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Behavior", + "label": "", + "description": "", + "group": "", + "extraInformation": [ + "Health::Health" + ], + "hidden": false, + "name": "RequireHealth" + }, + { + "value": "100", + "type": "Number", + "label": "Max shield points (Shield will start with this many points when activated)", + "description": "", + "group": "Shield", + "extraInformation": [], + "hidden": false, + "name": "MaxShieldPoints" + }, + { + "value": "5", + "type": "Number", + "label": "Duration of shield (seconds) Use \"0\" to disable shield timer", + "description": "", + "group": "Shield", + "extraInformation": [], + "hidden": false, + "name": "ShieldDuration" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "Shield", + "extraInformation": [], + "hidden": true, + "name": "ShieldPoints" + }, + { + "value": "0", + "type": "Number", + "label": "Rate of shield regeneration (points per second)", + "description": "", + "group": "Shield", + "extraInformation": [], + "hidden": false, + "name": "ShieldRegenRate" + }, + { + "value": "", + "type": "Boolean", + "label": "Shield will block all excess damage when shield is destroyed", + "description": "", + "group": "Shield", + "extraInformation": [], + "hidden": false, + "name": "ShieldBlocksExcessDamage" + }, + { + "value": "", + "type": "Number", + "label": "Delay (seconds) before shield regeneration starts after being hit", + "description": "", + "group": "Shield", + "extraInformation": [], + "hidden": false, + "name": "ShieldRegenDelay" + }, + { + "value": "", + "type": "Boolean", + "label": "Regenerate shield when it has zero points", + "description": "", + "group": "Shield", + "extraInformation": [], + "hidden": false, + "name": "RegenShieldWhenZeroPoints" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "Shield", + "extraInformation": [], + "hidden": true, + "name": "IsShieldJustDamaged" + } + ] + } + ] + }, + { + "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", + "category": "Input", + "description": "Draws a draggable slider that users can move to select a numerical value.\nThe value range, tick spacing, and the appearance of the slider can be defined with properties.\n\nHow to use:\n- Add this behavior a **Shape Painter** object\n- Place an instance of that shape painter on the screen where you want the slider to appear\n- Use the \"Value\" expression to find the Value based on the position of the slider\n\nTips:\n- You can disable the slider to prevent a user from interacting with it\n- You can set the Value of the slider and the slider will move to the correct position\n\nFurther details can be found in [this tutorial video](https://youtu.be/iiTUwdAT_hs).\n\nBreaking changes (1.0.0)\n- Track thickness and length properties replaced track width and height. These 2 properties must be set again if they were different from the default size.\n- Hidden sliders can be dragged. The \"enable\" action must be used to disable them.\n", + "extensionNamespace": "", + "fullName": "Draggable slider", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", + "name": "DraggableSliderControl", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/UI Essentials/UI Essentials_sliders_options.svg", + "shortDescription": "A draggable slider that users can move to select a numerical value.", + "version": "1.0.5", + "origin": { + "identifier": "DraggableSliderControl", + "name": "gdevelop-extension-store" + }, + "tags": [ + "draggable", + "slider", + "shape painter", + "ui", + "widget" + ], + "authorIds": [ + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2", + "gqDaZjCfevOOxBYkK6zlhtZnXCg1" + ], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "Let users select a numerical value by dragging a slider.", + "fullName": "Draggable slider", + "name": "DraggableSliderControl", + "objectType": "PrimitiveDrawing::Drawer", + "eventsFunctions": [ + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "onCreated", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure object doesn't get re-drawn every frame", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::ClearBetweenFrames" + }, + "parameters": [ + "Object", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Use correct min value (instead of always starting at 0)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValueMin()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set track height function (which enforces valid thumb sizes)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTrackThickness" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyTrackThickness()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Start halo at same size as thumb", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::PropertyThumbHeight()/2,Object.Behavior::PropertyThumbWidth()/2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "doStepPreEvents", + "private": false, + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Slider logic", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::IsEnabled" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Track where the mouse is (in relation to object)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyMouseX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.ToDrawingX(MouseX(Object.Layer(), 0), MouseY(Object.Layer(), 0))" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyMouseY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.ToDrawingY(MouseX(Object.Layer(), 0), MouseY(Object.Layer(), 0))" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move slider when being dragged", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbOffset" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyMouseX()" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "End sliding and update variables", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "MouseButtonReleased" + }, + "parameters": [ + "", + "Left" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Update \"Value\" based on the location of the thumb", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyValueMin() + (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin()) * Object.Behavior::PropertyThumbOffset() / Object.Behavior::PropertyTrackLength()", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Grow halo even more when pressed", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTargetHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "1.25 * Object.Behavior::PropertyHaloRadius()" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Detect hover/touch/click (but only if the layer and object is visible, and the object is not already being dragged)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Detect mouse clicks near track, start dragging", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SourisBouton" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseX()", + ">=", + "-Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseX()", + "<=", + "Object.Behavior::PropertyTrackLength() + Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseY()", + ">=", + "-Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseY()", + "<=", + "Object.Behavior::PropertyHaloRadius()" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Reset hover detection ", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsHovered" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Grow halo when hovered", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SourisBouton" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseX()", + ">=", + "Object.Behavior::PropertyThumbOffset() - Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseX()", + "<=", + "Object.Behavior::PropertyThumbOffset() + Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseY()", + ">=", + "- Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseY()", + "<=", + "Object.Behavior::PropertyHaloRadius()" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsHovered" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTargetHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyHaloRadius()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Shrink halo to zero when not hovered", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsHovered" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTargetHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "Object.Behavior::PropertyTargetHaloRadius()" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Redraw slider only when halo is not at final size", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "abs(Object.Behavior::PropertyCurrentHaloRadius() - Object.Behavior::PropertyTargetHaloRadius())", + "<", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyTargetHaloRadius()" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "Object.Behavior::PropertyTargetHaloRadius()" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "lerp(Object.Behavior::PropertyCurrentHaloRadius(), Object.Behavior::PropertyTargetHaloRadius(), Object.Behavior::PropertyHaloGrowSpeed())" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "doStepPostEvents", + "private": false, + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Slider drawing", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "Visible" + }, + "parameters": [ + "Object" + ] + }, + { + "type": { + "value": "LayerVisible" + }, + "parameters": [ + "", + "Object.Layer()" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::Drawer::ClearShapes" + }, + "parameters": [ + "Object" + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Inactive track", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set inactive track parameters (by default, use thumb color)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyInactiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyInactiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyInactiveTrackColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyInactiveTrackOpacity()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::OutlineOpacity" + }, + "parameters": [ + "Object", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw inactive track", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset()", + "-Object.Behavior::PropertyTrackThickness() / 2", + "Object.Behavior::PropertyTrackLength()", + "Object.Behavior::PropertyTrackThickness() / 2" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw half circle at end of track (inactive side)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyRoundedTrack" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Arc" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyTrackLength()", + "0", + "Object.Behavior::PropertyTrackThickness() / 2", + "270", + "90", + "", + "yes" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Active track", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set active track parameters (by default, use thumb color)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyActiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyActiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyActiveTrackColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyActiveTrackOpacity()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw active track (2 pixels bigger than property) ", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "Object", + "0", + "-(Object.Behavior::PropertyTrackThickness() / 2 + 1)", + "Object.Behavior::PropertyThumbOffset()", + "Object.Behavior::PropertyTrackThickness() / 2 + 1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw half circle at end of track (active side)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyRoundedTrack" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Arc" + }, + "parameters": [ + "Object", + "0", + "0", + "1 + Object.Behavior::PropertyTrackThickness() / 2", + "90", + "270", + "", + "yes" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Halo", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Prepare halo", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbColor()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::OutlineOpacity" + }, + "parameters": [ + "Object", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw halo (it will grow or shrink as needed)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyHaloOpacityHover()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::Circle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset()", + "0", + "Object.Behavior::PropertyCurrentHaloRadius()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Use a more opaque halo while being dragged (it will grow or shrink as needed)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyHaloOpacityClick()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::Circle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset()", + "0", + "Object.Behavior::PropertyCurrentHaloRadius()" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Thumb", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Prepare thumb settings", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbColor()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyThumbOpacity()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw Circle thumb", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbShape" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"circle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Circle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset()", + "0", + "ceil(max(Object.Behavior::PropertyThumbWidth(),Object.Behavior::PropertyThumbHeight())/2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw Rectangle thumb", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbShape" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"rectangle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset() - (Object.Behavior::PropertyThumbWidth() / 2)", + "-Object.Behavior::PropertyThumbHeight() / 2", + "Object.Behavior::PropertyThumbOffset() + (Object.Behavior::PropertyThumbWidth() / 2)", + "Object.Behavior::PropertyThumbHeight() / 2" + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the slider is being dragged.", + "fullName": "Being dragged", + "functionType": "Condition", + "group": "Slider", + "name": "IsBeingDragged", + "private": false, + "sentence": "_PARAM0_ is being dragged", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the slider interations are enabled.", + "fullName": "Interactions enabled", + "functionType": "Condition", + "group": "Slider", + "name": "IsEnabled", + "private": false, + "sentence": "Interactions of _PARAM0_ are enabled", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyEnabled" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Enable or disable the slider. Users cannot interact while it is disabled.", + "fullName": "Enable interactions", + "functionType": "Action", + "group": "Slider", + "name": "SetEnabled", + "private": false, + "sentence": "Enable interactions of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Enable\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyEnabled" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Stop dragging (so the slider won't be dragging when it gets enabled)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Reset halo size (so halo won't appear when slider gets enabled)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTargetHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Enable\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyEnabled" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Enable", + "longDescription": "", + "name": "Enable", + "optional": false, + "supplementaryInformation": "", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "The value of the slider (based on position of the thumb).", + "fullName": "Slider value", + "functionType": "Expression", + "group": "Slider", + "name": "Value", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValue()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the value of a slider (this will move the thumb to the correct position).", + "fullName": "Slider value", + "functionType": "Action", + "group": "Slider", + "name": "SetValue", + "private": false, + "sentence": "Change the value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + "<=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "round(GetArgumentAsNumber(\"Value\") / Object.Behavior::PropertyTickSpacing()) * Object.Behavior::PropertyTickSpacing()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyValueMin()" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValueMin()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::PropertyValueMax()" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValueMax()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set the proper offset (it moves the slider)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbOffset" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyTrackLength() * (Object.Behavior::PropertyValue() - Object.Behavior::PropertyValueMin()) / (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin())" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Slider value", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "The minimum value of a slider.", + "fullName": "Slider minimum value", + "functionType": "Expression", + "group": "Slider value configuration", + "name": "ValueMin", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValueMin()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the minimum value of a slider.", + "fullName": "Slider minimum value", + "functionType": "Action", + "group": "Slider value configuration", + "name": "SetValueMin", + "private": false, + "sentence": "Change the minimum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValueMin" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"ValueMin\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::Value()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Minimum value", + "longDescription": "", + "name": "ValueMin", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "The maximum value of a slider.", + "fullName": "Slider maximum value", + "functionType": "Expression", + "group": "Slider value configuration", + "name": "ValueMax", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValueMax()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Thickness of track.", + "fullName": "Slider track thickness", + "functionType": "Expression", + "group": "Slider track configuration", + "name": "TrackThickness", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTrackThickness()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Length of track.", + "fullName": "Slider track length", + "functionType": "Expression", + "group": "Slider track configuration", + "name": "TrackLength", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTrackLength()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Height of thumb.", + "fullName": "Slider thumb height", + "functionType": "Expression", + "group": "Slider thumb configuration", + "name": "ThumbHeight", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyThumbHeight()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the maximum value of a slider.", + "fullName": "Slider maximum value", + "functionType": "Action", + "group": "Slider value configuration", + "name": "SetValueMax", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValueMax" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"ValueMax\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::Value()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Maximum value", + "longDescription": "", + "name": "ValueMax", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "The tick spacing of a slider.", + "fullName": "Tick spacing", + "functionType": "Expression", + "group": "Slider value configuration", + "name": "TickSpacing", + "private": false, + "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTickSpacing()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Tick spacing", + "longDescription": "", + "name": "TickSpacing", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the tick spacing of a slider.", + "fullName": "Tick spacing", + "functionType": "Action", + "group": "Slider value configuration", + "name": "SetTickSpacing", + "private": false, + "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"TickSpacing\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::Value()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Tick spacing", + "longDescription": "", + "name": "TickSpacing", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change length of track.", + "fullName": "Track length", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetTrackLength", + "private": false, + "sentence": "Change track length of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTrackLength" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move thumb to correct place (based on new track size)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyValue()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Track width", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change thickness of track.", + "fullName": "Track thickness", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetTrackThickness", + "private": false, + "sentence": "Change track thickness of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTrackThickness" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure thumb width is not smaller than track height + 2 pixels (to prevent track ends from showing)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyTrackThickness() + 2" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyTrackThickness() + 2", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbHeight" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyTrackThickness() + 2" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetThumbHeight" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyTrackThickness() + 2", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Track thickness", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change width of thumb.", + "fullName": "Thumb width", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetThumbWidth", + "private": false, + "sentence": "Change thumb width of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Thumb cannot be less than track thickness (plus 2 pixels)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyTrackThickness() + 2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Thumb width", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change height of thumb.", + "fullName": "Thumb height", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetThumbHeight", + "private": false, + "sentence": "Change thumb height of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Thumb cannot be less than track thickness (plus 2 pixels)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbHeight" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyTrackThickness() + 2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Thumb height", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change radius of the halo around the thumb. This size is also used to detect interaction with the slider.", + "fullName": "Halo radius", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetHaloRadius", + "private": false, + "sentence": "Change halo radius of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Halo radius", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change opacity of halo when hovered.", + "fullName": "Halo opacity (hover)", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetHaloOpacityHover", + "private": false, + "sentence": "Change halo opacity when hovered of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyHaloOpacityHover" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Halo opacity (hover)", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change opacity of halo when pressed.", + "fullName": "Halo opacity (pressed)", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetHaloOpacityPressed", + "private": false, + "sentence": "Change halo opacity when pressed of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyHaloOpacityClick" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Halo opacity (pressed)", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change shape of thumb (circle or rectangle).", + "fullName": "Thumb shape", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetThumbShape", + "private": false, + "sentence": "Change shape of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbShape" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Shape\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure thumb width is not smaller than track height (to prevent track ends from showing)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbShape" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"rectangle\"" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyTrackThickness()" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyTrackThickness()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "New thumb shape", + "longDescription": "", + "name": "Shape", + "optional": false, + "supplementaryInformation": "[\"circle\",\"rectangle\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Make track use rounded ends.", + "fullName": "Rounded track ends", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetRoundedTrack", + "private": false, + "sentence": "Draw _PARAM0_ with a rounded track: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "GetArgumentAsNumber(\"Value\")", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyRoundedTrack" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "GetArgumentAsNumber(\"Value\")", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyRoundedTrack" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Rounded track", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Change opacity of thumb.", + "fullName": "Thumb opacity", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetThumbOpacity", + "private": false, + "sentence": "Change thumb opacity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Thumb opacity", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change opacity of inactive track.", + "fullName": "Inactive track opacity", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetInactiveTrackOpacity", + "private": false, + "sentence": "Change inactive track opacity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyInactiveTrackOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Inactive track opacity", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change opacity of active track.", + "fullName": "Active track opacity", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetActiveTrackOpacity", + "private": false, + "sentence": "Change active track opacity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyActiveTrackOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Active track opacity", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the color of the track that is LEFT of the thumb.", + "fullName": "Active track color ", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetActiveTrackColor", + "private": false, + "sentence": "Change active track color of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyActiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Color\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Active track color", + "longDescription": "", + "name": "Color", + "optional": false, + "supplementaryInformation": "", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "Change the color of the track that is RIGHT of the thumb.", + "fullName": "Inactive track color", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetInactiveTrackColor", + "private": false, + "sentence": "Change inactive track color of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyInactiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Color\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Inactive track color", + "longDescription": "", + "name": "Color", + "optional": false, + "supplementaryInformation": "", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "Change the thumb color to a specific value.", + "fullName": "Thumb color", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetThumbColor", + "private": false, + "sentence": "Change thumb color of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbColor" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsString(\"Color\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Thumb color", + "longDescription": "", + "name": "Color", + "optional": false, + "supplementaryInformation": "", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "Update the hitbox.", + "fullName": "Update hitbox", + "functionType": "Action", + "group": "Private", + "name": "UpdateHitbox", + "private": true, + "sentence": "Update the hitbox of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::SetRotationCenter" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyTrackLength() / 2", + "Object.Behavior::PropertyTrackThickness() / 2" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::SetRectangularCollisionMask" + }, + "parameters": [ + "Object", + "-Object.Behavior::PropertyThumbWidth() / 2", + "-Object.Behavior::PropertyThumbHeight() / 2", + "Object.Behavior::PropertyTrackLength() + Object.Behavior::PropertyThumbWidth() / 2", + "Object.Behavior::PropertyThumbHeight() / 2" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0", + "type": "Number", + "label": "Minimum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ValueMin" + }, + { + "value": "1", + "type": "Number", + "label": "Maximum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ValueMax" + }, + { + "value": "0", + "type": "Number", + "label": "Tick spacing", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "TickSpacing" + }, + { + "value": "circle", + "type": "Choice", + "label": "Thumb shape", + "description": "", + "group": "Thumb", + "extraInformation": [ + "circle", + "rectangle" + ], + "hidden": false, + "name": "ThumbShape" + }, + { + "value": "20", + "type": "Number", + "label": "Thumb width", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "ThumbWidth" + }, + { + "value": "20", + "type": "Number", + "label": "Thumb height", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "ThumbHeight" + }, + { + "value": " 24;119;211", + "type": "Color", + "label": "Thumb Color", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "ThumbColor" + }, + { + "value": "255", + "type": "Number", + "label": "Thumb opacity", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "ThumbOpacity" + }, + { + "value": "200", + "type": "Number", + "label": "Track length", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "TrackLength" + }, + { + "value": "4", + "type": "Number", + "label": "Track thickness", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "TrackThickness" + }, + { + "value": "", + "type": "String", + "label": "Inactive track color (thumb color by default)", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "InactiveTrackColor" + }, + { + "value": "96", + "type": "Number", + "label": "Inactive track opacity", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "InactiveTrackOpacity" + }, + { + "value": " ", + "type": "String", + "label": "Active track color (thumb color by default)", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "ActiveTrackColor" + }, + { + "value": "255", + "type": "Number", + "label": "Active track opacity", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "ActiveTrackOpacity" + }, + { + "value": "24", + "type": "Number", + "label": "Halo size (hover)", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "HaloRadius" + }, + { + "value": "32", + "type": "Number", + "label": "Halo opacity (hover)", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "HaloOpacityHover" + }, + { + "value": "64", + "type": "Number", + "label": "Halo opacity (pressed)", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "HaloOpacityClick" + }, + { + "value": "true", + "type": "Boolean", + "label": "Rounded track ends", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "RoundedTrack" + }, + { + "value": "true", + "type": "Boolean", + "label": "Enable interactions", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "Enabled" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "IsBeingDragged" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "Value" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ThumbOffset" + }, + { + "value": "true", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "NeedRedraw" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "IsHovered" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "MouseX" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "MouseY" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "CurrentHaloRadius" + }, + { + "value": "0.2", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "HaloGrowSpeed" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TargetHaloRadius" + } + ] + } + ] + }, + { + "author": "", + "category": "General", + "description": "\nTo adjust the appearance of the resource bar, edit the Draggable Slider properties. The shape painter appearance settings will be overwritten by the Draggable Slider.", + "extensionNamespace": "", + "fullName": "Draw resource bar (health, shield, etc)", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8cGF0aCBkPSJNMjgsMTJIMTRINGMtMi4yLDAtNCwxLjgtNCw0czEuOCw0LDQsNGgxMGgxNGMyLjIsMCw0LTEuOCw0LTRTMzAuMiwxMiwyOCwxMnogTTQsMThjLTEuMSwwLTItMC45LTItMnMwLjktMiwyLTJoMTANCgljMS4xLDAsMiwwLjksMiwycy0wLjksMi0yLDJINHoiLz4NCjwvc3ZnPg0K", + "name": "DrawResourceBar", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Glyphster Pack/Master/SVG/Interface Elements/Interface Elements_interface_ui_loading_progress_bar.svg", + "shortDescription": "Draw a bar that displays a resource like health, shield, or any variable.", + "version": "0.0.1", + "tags": [], + "authorIds": [ + "gqDaZjCfevOOxBYkK6zlhtZnXCg1" + ], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "", + "fullName": "", + "name": "DrawResourceBar", + "objectType": "PrimitiveDrawing::Drawer", + "eventsFunctions": [ + { + "description": "Draw health bar.", + "fullName": "Draw health bar", + "functionType": "Action", + "group": "", + "name": "DrawHealthBar", + "private": false, + "sentence": "Draw health bar with _PARAM0_ based on health of _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set values", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "Tween::Ease(\"easeOutCirc\", Object.DraggableSliderBehavior::Value(), ObjectWithHealth.HealthBehavior::Health(), 0.05)", + "" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValueMax" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "ObjectWithHealth.HealthBehavior::MaxHealth()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Object with health", + "longDescription": "", + "name": "ObjectWithHealth", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Health behavior", + "longDescription": "", + "name": "HealthBehavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Draw shield bar.", + "fullName": "Draw shield bar", + "functionType": "Action", + "group": "", + "name": "DrawShieldBar", + "private": false, + "sentence": "Draw shield bar with _PARAM0_ based on shield of _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set values", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "Tween::Ease(\"easeOutCirc\", Object.DraggableSliderBehavior::Value(), ObjectWithShield.ShieldBehavior::ShieldPoints(), 0.05)", + "" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValueMax" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "ObjectWithShield.ShieldBehavior::MaxShield()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Object with shield", + "longDescription": "", + "name": "ObjectWithShield", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Shield behavior", + "longDescription": "", + "name": "ShieldBehavior", + "optional": false, + "supplementaryInformation": "Health::Shield", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Draw resource bar.", + "fullName": "Draw resource bar", + "functionType": "Action", + "group": "", + "name": "DrawResourceBar", + "private": false, + "sentence": "Draw resource bar with _PARAM0_ with current value _PARAM2_ and max value _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set values", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "Tween::Ease(\"easeOutCirc\", Object.DraggableSliderBehavior::Value(), GetArgumentAsNumber(\"CurrentValue\"), 0.05)", + "" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValueMax" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "GetArgumentAsNumber(\"MaxValue\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Current value", + "longDescription": "", + "name": "CurrentValue", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Max value", + "longDescription": "", + "name": "MaxValue", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "onCreated", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set slider properties", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetEnabled" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "no", + "" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValueMin" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "0", + "" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetHaloOpacityHover" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "0", + "" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetThumbOpacity" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "0", + "" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetRoundedTrack" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "no", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Behavior", + "label": "", + "description": "", + "group": "", + "extraInformation": [ + "DraggableSliderControl::DraggableSliderControl" + ], + "hidden": false, + "name": "DraggableSliderBehavior" + }, + { + "value": "0", + "type": "Number", + "label": "Time to complete moving the bar when the value is changed (seconds)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ChangeDuration" + } + ] + } + ] + } + ], + "externalLayouts": [], + "externalSourceFiles": [] +} \ No newline at end of file From ab96bf9c44119a1ce03d5bc9415fffe07c68a205 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 29 Aug 2022 12:15:02 +0000 Subject: [PATCH 02/98] Optimised images with calibre/image-actions --- .../resource-bar/assets/Blue laser (01).png | Bin 744 -> 708 bytes examples/resource-bar/assets/Fly_1.png | Bin 4229 -> 3375 bytes examples/resource-bar/assets/Fly_10.png | Bin 4349 -> 3384 bytes examples/resource-bar/assets/Fly_2.png | Bin 4232 -> 3322 bytes examples/resource-bar/assets/Fly_3.png | Bin 4450 -> 3396 bytes examples/resource-bar/assets/Fly_4.png | Bin 4458 -> 3412 bytes examples/resource-bar/assets/Fly_5.png | Bin 4387 -> 3417 bytes examples/resource-bar/assets/Fly_6.png | Bin 4515 -> 3444 bytes examples/resource-bar/assets/Fly_7.png | Bin 4558 -> 3444 bytes examples/resource-bar/assets/Fly_8.png | Bin 4499 -> 3396 bytes examples/resource-bar/assets/Fly_9.png | Bin 4445 -> 3364 bytes examples/resource-bar/assets/Moon.png | Bin 3328 -> 2048 bytes .../resource-bar/assets/Ranger_Carry_1.png | Bin 325 -> 242 bytes .../resource-bar/assets/Ranger_Carry_2.png | Bin 295 -> 224 bytes .../resource-bar/assets/Ranger_Carry_3.png | Bin 312 -> 243 bytes .../resource-bar/assets/Ranger_Carry_4.png | Bin 295 -> 224 bytes .../resource-bar/assets/Ranger_Climb_1.png | Bin 288 -> 213 bytes .../resource-bar/assets/Ranger_Climb_2.png | Bin 305 -> 230 bytes .../resource-bar/assets/Ranger_Climb_3.png | Bin 288 -> 213 bytes .../resource-bar/assets/Ranger_Climb_4.png | Bin 299 -> 232 bytes .../resource-bar/assets/Ranger_Daze_1.png | Bin 295 -> 238 bytes .../resource-bar/assets/Ranger_Daze_2.png | Bin 303 -> 244 bytes .../resource-bar/assets/Ranger_Daze_3.png | Bin 295 -> 238 bytes .../resource-bar/assets/Ranger_Daze_4.png | Bin 303 -> 238 bytes examples/resource-bar/assets/Ranger_Dead.png | Bin 254 -> 220 bytes .../resource-bar/assets/Ranger_Get Up.png | Bin 289 -> 217 bytes .../resource-bar/assets/Ranger_Headbutt_1.png | Bin 335 -> 262 bytes .../resource-bar/assets/Ranger_Headbutt_2.png | Bin 333 -> 259 bytes examples/resource-bar/assets/Ranger_Hurt.png | Bin 339 -> 240 bytes .../resource-bar/assets/Ranger_Idle 1_1.png | Bin 321 -> 247 bytes .../resource-bar/assets/Ranger_Idle 1_2.png | Bin 320 -> 248 bytes .../resource-bar/assets/Ranger_Idle 1_3.png | Bin 316 -> 245 bytes .../resource-bar/assets/Ranger_Idle 1_4.png | Bin 322 -> 247 bytes .../resource-bar/assets/Ranger_Idle 2_1.png | Bin 291 -> 230 bytes .../resource-bar/assets/Ranger_Idle 2_2.png | Bin 292 -> 232 bytes .../resource-bar/assets/Ranger_Idle 2_3.png | Bin 285 -> 227 bytes .../resource-bar/assets/Ranger_Idle 2_4.png | Bin 291 -> 231 bytes .../assets/Ranger_Jump Kick_1.png | Bin 304 -> 243 bytes .../assets/Ranger_Jump Kick_2.png | Bin 330 -> 257 bytes .../assets/Ranger_Jump Kick_3.png | Bin 307 -> 259 bytes .../assets/Ranger_Jump Kick_4.png | Bin 304 -> 243 bytes .../resource-bar/assets/Ranger_Kick 1.png | Bin 357 -> 261 bytes .../resource-bar/assets/Ranger_Kick 2.png | Bin 354 -> 265 bytes .../resource-bar/assets/Ranger_Knockdown.png | Bin 333 -> 250 bytes .../assets/Ranger_Over Throw_1.png | Bin 297 -> 244 bytes .../assets/Ranger_Over Throw_2.png | Bin 310 -> 253 bytes .../resource-bar/assets/Ranger_Pick Up 2.png | Bin 321 -> 228 bytes .../resource-bar/assets/Ranger_Pick Up.png | Bin 320 -> 238 bytes .../resource-bar/assets/Ranger_Punch 1.png | Bin 336 -> 240 bytes .../resource-bar/assets/Ranger_Punch 2.png | Bin 363 -> 258 bytes examples/resource-bar/assets/Ranger_Run_1.png | Bin 299 -> 239 bytes examples/resource-bar/assets/Ranger_Run_2.png | Bin 315 -> 244 bytes examples/resource-bar/assets/Ranger_Run_3.png | Bin 302 -> 243 bytes examples/resource-bar/assets/Ranger_Run_4.png | Bin 309 -> 246 bytes examples/resource-bar/assets/Ranger_Stab.png | Bin 337 -> 245 bytes .../resource-bar/assets/Ranger_Strafe 1_1.png | Bin 324 -> 247 bytes .../resource-bar/assets/Ranger_Strafe 1_2.png | Bin 291 -> 230 bytes .../resource-bar/assets/Ranger_Strafe 1_3.png | Bin 324 -> 247 bytes .../resource-bar/assets/Ranger_Strafe 1_4.png | Bin 291 -> 230 bytes .../resource-bar/assets/Ranger_Strafe 2_1.png | Bin 320 -> 253 bytes .../resource-bar/assets/Ranger_Strafe 2_2.png | Bin 294 -> 229 bytes .../resource-bar/assets/Ranger_Strafe 2_3.png | Bin 320 -> 253 bytes .../resource-bar/assets/Ranger_Strafe 2_4.png | Bin 294 -> 229 bytes .../resource-bar/assets/Ranger_Walk 1_1.png | Bin 321 -> 245 bytes .../resource-bar/assets/Ranger_Walk 1_2.png | Bin 291 -> 232 bytes .../resource-bar/assets/Ranger_Walk 1_3.png | Bin 308 -> 246 bytes .../resource-bar/assets/Ranger_Walk 1_4.png | Bin 291 -> 232 bytes .../resource-bar/assets/Ranger_Walk 2_1.png | Bin 294 -> 229 bytes .../resource-bar/assets/Ranger_Walk 2_2.png | Bin 309 -> 243 bytes .../resource-bar/assets/Ranger_Walk 2_3.png | Bin 294 -> 229 bytes .../resource-bar/assets/Ranger_Walk 2_4.png | Bin 286 -> 233 bytes .../resource-bar/assets/Ranger_Walk 3_1.png | Bin 315 -> 244 bytes .../resource-bar/assets/Ranger_Walk 3_2.png | Bin 291 -> 230 bytes .../resource-bar/assets/Ranger_Walk 3_3.png | Bin 316 -> 248 bytes .../resource-bar/assets/Ranger_Walk 3_4.png | Bin 294 -> 242 bytes .../resource-bar/assets/Silver shield.png | Bin 781 -> 745 bytes .../resource-bar/assets/Star_LargeNarrow.png | Bin 707 -> 630 bytes .../resource-bar/assets/Star_LargeWide.png | Bin 641 -> 587 bytes examples/resource-bar/assets/Star_Medium.png | Bin 386 -> 354 bytes examples/resource-bar/assets/Star_Small.png | Bin 294 -> 270 bytes .../assets/Upgraded Potion Blue_No Shadow.png | Bin 3338 -> 438 bytes .../assets/Upgraded Potion Blue_Shadow.png | Bin 3447 -> 503 bytes 82 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/resource-bar/assets/Blue laser (01).png b/examples/resource-bar/assets/Blue laser (01).png index b76aaf7a042d56165a0d3cbadd2ce85216838081..937b258d35d221760c85a377537a7b6d751b29cf 100644 GIT binary patch delta 57 zcmaFCdW3a?vMd8X#WBR<^hWIxCV}3FH4Y3w;OXk; Jvd$@?2>{5w5IO(= delta 93 zcmX@Y`hsh($ diff --git a/examples/resource-bar/assets/Fly_1.png b/examples/resource-bar/assets/Fly_1.png index d171e6a5af8ead63a087c14a7a82cf56b37b018f..85870bc9dbb5a5372d6c50128620e4f4a1d5954a 100644 GIT binary patch delta 3365 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 literal 4229 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 literal 4232 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 delta 4456 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 delta 4385 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 boX-3|to8L6EFnrx00000NkvXXu0mjft09q! diff --git a/examples/resource-bar/assets/Fly_6.png b/examples/resource-bar/assets/Fly_6.png index 8cc09c7e0c8f15563b9763c3affadbb1b5c6266a..4ca72e5bc3b0ca9771a3c0a8c93c57922e3caec6 100644 GIT binary patch delta 3434 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 M07*qoM6N<$g6osAsQ>@~ delta 4514 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 A>;M1& diff --git a/examples/resource-bar/assets/Fly_7.png b/examples/resource-bar/assets/Fly_7.png index 6999696b33edbb9d601b3129d67b9889a8239e08..76d5a4ac35fbdf740b4b3c99729ac447b6671b6b 100644 GIT binary patch delta 3434 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 diff --git a/examples/resource-bar/assets/Fly_9.png b/examples/resource-bar/assets/Fly_9.png index 551ababd4e85aaceccaf0d932d0ab0eb0b4bfef9..366b4ad0b4f63847edaf9c5be361f83e3b27fc6d 100644 GIT binary patch delta 3354 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 delta 4443 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 z aBAG)s(|BeE*;8dk*7u`dv(J0qp8N*0H=5l5 diff --git a/examples/resource-bar/assets/Ranger_Carry_1.png b/examples/resource-bar/assets/Ranger_Carry_1.png index b10bcecc3a8dd5dc9764cca1c0431f56160bdb90..d8e479c0929c7f95a3700a1df76551c6172aa931 100644 GIT binary patch delta 196 zcmV;#06YK10`dWnB#}WCf22u7K~zY`&6V8^fG`MzyMga+zexAp3AQ&D;f$IoB91I`b<4OYDYx3qT@2 yz!2bT9SGn`BZ0nP!UFhVApxN_>B`UamU93)H96n8m7twTH!8tkzhAY;13CKp zd1KL83cDqe8B(YPBrM5Ya)+nbF0j7IDAdrF#mDoI!VXnIe3NmkVfF>|9NMD7coz?5 zAuEKx0Qy5IT$Hk$(c@Hbf-9kDK4UpQm5D!CaCy9($e-h!ZJ9)~8Ohle@yw}&uq<~@ zCAfmUb1EPTN4_HpM!q8oM!up7eZPRt(^7~Z&C5Xfm#zXhix<%IkY&9fdPx-!52Yvr bC(+smKf|*oiH!oQ00000NkvXXu0mjfzpQw= diff --git a/examples/resource-bar/assets/Ranger_Carry_2.png b/examples/resource-bar/assets/Ranger_Carry_2.png index 7a8efd97c7c223c305a34e1724d274a026552bdd..6dcee5873cd9ee5aa4aae0b7052c8051ed6f93c3 100644 GIT binary patch delta 178 zcmV;j08Rg=0^k9VB#}WCf09W=K~zY`V_={m_>YE()&OQlNugpwhW&p(%M*-YnsFHd zQ-jw4WX;HYk_|u?M^i)C3otQ~4S-=%3}8U^A3hi0i&6|%kZJ%{S0EckOoBp*J{*aO zI0LX@qLVZwng@vi{K=a!@W2@W;}0DJuxcLZ29R4f;3}ONNGcDoC=@Kj8Gy|NWECjb gyhL&sFwhzR04f=o=;h?T@&Et;07*qoM6N<$fY0q<w2Izp^c;bJG-C7z@cyi3(OJn+rQBmKp@KSJ2{|cfFR=lW@8xA zy1qjIuWj8&#$F<50Qcwd0u=Q#7yy23nMRBYnkA$v$ZC6h00000NkvXXu0mjfX=PWL delta 264 zcmV+j0r&p%0k{H?BpLy8Qb$4nuFf3k00004XF*Lt006O%3;baPks%m=%}GQ-R7gwB zlidx%Fc5>g0q<}PdZizwsF-kR!TP?cDA|BUt7RW|-$z;w9WoHl=o{R1d`bl{Z{SNQpWDk!gs z3M;QkD>yxZ%NUv(82xPF%d){`6&n68N}v&9Uk?Z|qc<4B!*2};mgNDOC8R3veMh|j O0000 diff --git a/examples/resource-bar/assets/Ranger_Carry_4.png b/examples/resource-bar/assets/Ranger_Carry_4.png index 7a8efd97c7c223c305a34e1724d274a026552bdd..6dcee5873cd9ee5aa4aae0b7052c8051ed6f93c3 100644 GIT binary patch delta 178 zcmV;j08Rg=0^k9VB#}WCf09W=K~zY`V_={m_>YE()&OQlNugpwhW&p(%M*-YnsFHd zQ-jw4WX;HYk_|u?M^i)C3otQ~4S-=%3}8U^A3hi0i&6|%kZJ%{S0EckOoBp*J{*aO zI0LX@qLVZwng@vi{K=a!@W2@W;}0DJuxcLZ29R4f;3}ONNGcDoC=@Kj8Gy|NWECjb gyhL&sFwhzR04f=o=;h?T@&Et;07*qoM6N<$fY0q<w2Izp^c;bJG-C7z@cyi3(OJn+rQB+-G@gLo0d~9s4`Tu^FC(#DL)Y8@fT$r{7ARB_75|K6IHGohw;xYhd0wO0t5z}C(9e+w|s!@Ok001O- VjKG60=-2=N002ovPDHLkV1fY0M*IK( delta 240 zcmV1Hc}WRIEd z8vwF6ia8WAWD$aAks4V`hTvJGMwTIX7Rl+C`&tSai)v&k3K@%P#-M9@AdZN)6ctu) qDOvDW2CBcV@*Embr1JiJM{64-c#Oc&1Lf}k00007vcYahP^&!Y1hMZfQWCxpJMALguUeRu)iy04 z!!so`w1AY@nZ)<=)`C3y0-i|&sz3&;d(yz)3n0Z%;0c~8#c}~qB{-!xqbJFv8Tm#E zGlaJaz!0XE3n1)^%_bXMtRPhPF7fhsW#PV5;0c~$wNXYHl)^5%9eU$XR%b4jQI*tZ z7qft~pBMDMYkvXc{PU>-Let>_ixU*^+Zf+x8U_y+oRSbemw$biiJD&*00000NkvXX Hu0mjf=M8S< diff --git a/examples/resource-bar/assets/Ranger_Climb_3.png b/examples/resource-bar/assets/Ranger_Climb_3.png index 0afc09013a3bc8eab636d10b11789780cffebea8..19dca09587a7a09e89db8d1ee4b5a9e819c3c839 100644 GIT binary patch delta 167 zcmV;Y09gN^0@VSKB#}WCe}_p#K~zY`V_?7y{-a@%!2c*IR7{E?a1F?sNipO<9vA#4 z*>+-G@gLo0d~9s4`Tu^FC(#DL)Y8@fT$r{7ARB_75|K6IHGohw;xYhd0wO0t5z}C(9e+w|s!@Ok001O- VjKG60=-2=N002ovPDHLkV1fY0M*IK( delta 240 zcmV1Hc}WRIEd z8vwF6ia8WAWD$aAks4V`hTvJGMwTIX7Rl+C`&tSai)v&k3K@%P#-M9@AdZN)6ctu) qDOvDW2CBcV@*Embr1JiJM{64-c#Oc&1Lf}k0000fu4Z#(SIMV>k0DR6TIS-JN z9|##ho-07&{K=can2;fGg}5-@fW)VXWCM`X0m;rs3o!EhKe!A)FwfG&h5^=shAab! oPKCt!l_my|T@z8IE*!!D0FA_bmo)}fLjV8(07*qoM6N<$g36Cg5&!@I delta 251 zcmVkl$ezH=zlsX2O7l!FoY3|3Crc zf2rIOvM0sxdVy1ytYDh23hX^cA1XsbABF#xQeKV3eV2U>Ah7@d002ovPDHLkV1n*v BXXyX{ diff --git a/examples/resource-bar/assets/Ranger_Daze_1.png b/examples/resource-bar/assets/Ranger_Daze_1.png index 40335b810debc83addf38258e05b37711b2117c9..2b39c4cc5e52ddac59e397fd313ea884120f5bce 100644 GIT binary patch delta 192 zcmV;x06+hy0`38jB#}WCf1pW3K~zY`V_={$_>YE3(;Ov*ib*j9u7O-bP&6a+i7^1h zb`br3mM0h!YY2+XFwGyc`U_e&DpS&3Z6Kw!4L&!D&#wNC4!LS|80K#PfHm8$q0J>L3HmU)n)(se%NG{Ux u6zBg*s#MTjKvKPctw|m@y{~e_ z@M(xK>$&wIvdH!IxRLZ()eu_p=IH=b==6Z5A+&%14(S985fcaS%u;g~`ic(WsujIN zo;ot~4k`>D2|(}7zYzdZWZ`mu?xgRr+{3)$v;gi=n?j7a6OdxehXeGCo;DKxF~BKh xXVSlNRf;#5zAD8VBv74)^bB4h(}n|-vH@yQp87`q{-po_002ovPDHLkV1h5DZVdnc diff --git a/examples/resource-bar/assets/Ranger_Daze_2.png b/examples/resource-bar/assets/Ranger_Daze_2.png index 6e9d1697d46991fa47cd0c6d1302e4526beb0947..b8f3fb6e63f7f0eb9fbcfd758a42250e98e3696a 100644 GIT binary patch delta 198 zcmV;%06G7!0`vipB#}WCf2K)9K~zY`V_={I_>YE3(;Ov*ib*j9u7O-bP&6a+i7^1h zb`br3mM0h!YY2+XFwG0}##JnoXgZvgdeC$&z% z&_r@kj;9#^Pf}%q?gEnP18hYZ$;p`9%9LaP0MQ$rm_qod%m4rY07*qoM6N<$f(Nct ATmS$7 delta 255 zcmVB&@`9!=WIzFz1O;6r#07k2sdEVZiZ0=)HF}9W zwHIa&CITK)5Q#mQlyFE|0rv9>*m!xojQBey%n{}V%L;hMY#JiQPC<$UmlWtTc5)<~ zTW}~0b_Gr;yO911SEcxX*{f1~Knm6UkSO3aWIAw=Qa;feotSI;>ox!Y002ovPDHLk FV1mpZZ7To( diff --git a/examples/resource-bar/assets/Ranger_Daze_3.png b/examples/resource-bar/assets/Ranger_Daze_3.png index 40335b810debc83addf38258e05b37711b2117c9..2b39c4cc5e52ddac59e397fd313ea884120f5bce 100644 GIT binary patch delta 192 zcmV;x06+hy0`38jB#}WCf1pW3K~zY`V_={$_>YE3(;Ov*ib*j9u7O-bP&6a+i7^1h zb`br3mM0h!YY2+XFwGyc`U_e&DpS&3Z6Kw!4L&!D&#wNC4!LS|80K#PfHm8$q0J>L3HmU)n)(se%NG{Ux u6zBg*s#MTjKvKPctw|m@y{~e_ z@M(xK>$&wIvdH!IxRLZ()eu_p=IH=b==6Z5A+&%14(S985fcaS%u;g~`ic(WsujIN zo;ot~4k`>D2|(}7zYzdZWZ`mu?xgRr+{3)$v;gi=n?j7a6OdxehXeGCo;DKxF~BKh xXVSlNRf;#5zAD8VBv74)^bB4h(}n|-vH@yQp87`q{-po_002ovPDHLkV1h5DZVdnc diff --git a/examples/resource-bar/assets/Ranger_Daze_4.png b/examples/resource-bar/assets/Ranger_Daze_4.png index 99f630c04cfcfba9465bfda6e08c02c52e96f202..6db8160092943fe95de7dbdc5236b7a23d5c7d1c 100644 GIT binary patch delta 192 zcmV;x06+h)0`38jB#}WCf1pW3K~zY`V_={W_>YE3(;Ov*ib*j9u7O-bP&6a+i7^1h zb`br3mM0h!YY2+XFwGyc`z%YbAc{2v4*buS}fU$`!Trg}$Gk|b;fX(S-8-VVWp#SzT}l3>OHyn>ol8<|fra9Eh*z))nJz4_Z7-Ooq00s}D82vy002ovPDHLk FV1f;OYHa`j diff --git a/examples/resource-bar/assets/Ranger_Dead.png b/examples/resource-bar/assets/Ranger_Dead.png index 3fe61659c802fde7a273e520be27ecea61aaae9e..6d33f273dee34e2fdee83cb338b66cf22c115fa9 100644 GIT binary patch delta 203 zcmV;+05t#p0o(zQ8Gi-<004s=hKT?G010qNS#tmY4#NNd4#NS*Z>VGd0053jL_t(I z%e|A)4S*mJLvI8B-N+UEbt~6!Fh@9}iBie|cZo{UKuGAL4T!um6!eRM4$Jl^3ce1^ zW0J!l14h9NQb%IFp}6)!GvK~Xg{+HM=^|-eP^`Vth#Op(c|@ROY}Sl>^hgt|mZFsm zFJ^#hJ|b+)>t6i~<)j#jD>rLI;5pYGnFT~>?;GmZIsmq+PgLL8gS`L%002ovPDHLk FV1l2xRE_`u delta 216 zcmcb^_>XadWFRvG1H+a>WxIhCV{wqX6T`Z5GB1G~mUKs7M+SzC{oH>NS%G~10G|+7 z5S_d^N{ZqAEKiVzOZS%oDb|u8zu^Bs!0>w;U+_dliJEjz7sn8d;M~4$p#}v3ri*|6 z=jT1#v|8=h$Aes}zD~UoSEirbQ#k*INAbB_3A1ZW6Zc-alwe|NvnIxK!(o1}`mHAG z-1EC)@A??5xE!gxPBPNskJjsT9HrBy?3YTiILze~8`=Ng%Zl;ZWG46AU`K19BN#kg L{an^LB{Ts55-U?# diff --git a/examples/resource-bar/assets/Ranger_Get Up.png b/examples/resource-bar/assets/Ranger_Get Up.png index 57503f5e2abad9ada3d8b94c70cac86bab66f090..f2f274bb69d147166b5f00a69601f6fbd0ed7ea9 100644 GIT binary patch delta 189 zcmV;u07Czv0@(qOB!3BTNLh0L01FZT01FZU(%pXi0001sNklt>Q{4cf!vL2TNHPG~ zC0JsGxEMfB2ZRg(I~89dLh}xG17L*V5H-JBRGd3I(V*pk~R5bwEAc9F4 rmludiMCh7f1`td{XcGSkVCn$?2}(uVvc0ca00000NkvXXu0mjff=5AM delta 261 zcmV+g0s8*g0ignrB!B2hL_t(|oMU025U`9IFlqp;4fv17XC%dd|4~w?0?VF(4a6`6 zn*m_WKn)DYhCszI48iIGWX&Kp%m8cv-2k}lFwO60d4k!3Y1^^70;>yPhQKuA130}v zEFdWzKn*4wh{)kUwhKUpfC3Jg4|N63Ktzdu^mKscI=CSyE`FHW01Wkp?N~J<$I3D! zmtlATW(cu>U`iy*0GJ^Z8Ni>s8P5JV*O#CH;JgotHc&u;uwa@miXkMs0Go?IhC%^m zI)KGJEb*Y*j^qu(Ng12d38qBki~_U`y*$JjD=-7l%Q~zDC^i59R!&_)GIz&c00000 LNkvXXu0mjfjSy=w diff --git a/examples/resource-bar/assets/Ranger_Headbutt_1.png b/examples/resource-bar/assets/Ranger_Headbutt_1.png index f2e4b6b21deafdd65ae4d70f25e415d2e2a8006e..143243f8c5cb55e484719c56cd9f60846321a8cc 100644 GIT binary patch delta 216 zcmV;}04M*?0)_&RB#}WCf4E6RK~zY`)t1o>fFKM7*}#7{as_|g$~7F!5iqDErBaLO zYltL`h~^H8HiXcrMHX22JYL{*&3*Xn89YK~Pr>^-opF!h(v!h75R!fZ@(jBN(wGo! z-#!KAeu`S!_$prom6r=aEq(Oi0}-MRuF0jgxUPR+iM49oTi*a~WJ zR{LnZi0000)H5#C zgIdlDRDe9Ybma(oG(E|Bzh5v-a{+2J6~vUUTmaJT^{Ik-ZpSd?2zq%WhAEb3nhM~` z`JSc%R6>1EQt4T0PZ0iP^aQduzW~=Wn(_jT lmuS)xa7|{2uwVnn@dMKm!eXkrqqdX}u9^wvfrGEJ43tEJ!UUBH?)|whEf4~6@&_IjRDN_Cxiz;E>ULlR#dqY(eQY7b$3xOKCeqz%tO_sRH^8 z(&!%i7lIxPCi%C(g5U%lK={gH0m7dQ3&4M+KEX%^-YhIY`0AK?_e@(C>_((G8feZ_ P00000NkvXXu0mjfecE2H delta 285 zcmV+&0pk9H0?h)DBpLy8Qb$4nuFf3k00004XF*Lt006O%3;baPks%m=;z>k7R7gwB zl)(+dAPhybLGRtDEA-l}x<&`<2vi?1G6qA9shTHQA+~uxryOS_Pnikazl@oH&(;I*%q1xwF!+ce jGXeE@nQ#mKz;S#4>_((G=@)5700000NkvXXu0mjfdv1Gj diff --git a/examples/resource-bar/assets/Ranger_Hurt.png b/examples/resource-bar/assets/Ranger_Hurt.png index b87e3f660eb04ce54df213f1da309e5dc002dbe6..a43ac903ccbe9bad922313e9379b4c5235e88584 100644 GIT binary patch delta 213 zcmV;`04o2}0`LKlBYyx1a7bBm000XT000XT0n*)m`~Uy|qDe$SR7l6wmB9&sFbqYr zfp<4@1+Q-98V=?N5d@`;B>$%s#6ZBq>+`p^R)i~+B&eoSrSn)fD^YK7A%U_AHVJfJ zr?WlD4VPe-z)G40Yyv64avdCLoWK)=gQJFm3y37)+>rooAWr+)el8f6?a|DMd`Dm< z_Bkc6X{Z$5+o=Q&OiR8MAcz+@0Q@T>0B&gn*t;POz=MSVMbp&Y3$?ipKg+`+XeyjM P00000NkvXXu0mjfJz-Uk delta 313 zcmV-90mlCD0n-AIBYy!JNklLjib$BxqlaZ=RQ^<6KH)7Y*JZW)GqVTD9T;w+gH@Z{qm58mHx4*XXcvX4cP z!jUCGha?n>WRK6S_t*XTwK~ciU~-aJII2yd00^N7y4WOukblTjz@&wOF9YbbY67li zl?WHBu&zB^FJoT3S|L{l*D+WGG6#r9cUeO<6%oLZSpn?4Rx~^Kt-!N?l)-7J3K-ZR zQnPGw5c+@UcBkNCp29th<-YhYRBM3bRtF~TbCo0sxRf}Dq8YG_ac&y_(+8~m_?S&Y zbwJ28E(=Hr2r}GY^oL`$gcRI6t0f37*mHqR(8R5l5TPEfVuFS*c+t?U#)hX&mB!ZoAwyF*kx3r)k+P0J&9maLvJ`I>6-00000NkvXXu0mjf D5QAM& delta 273 zcmV+s0q*|y0l@;0BpLy8Qb$4nuFf3k00004XF*Lt006O%3;baPks%m=)=5M`R7gv; zlF<#qFbqVq0sm~o3jDGaYjiM12t6l`Y$vu`M4xm@a=vqgM7fe`bc*`CYr$)yoKg67 zi7Lx?zlV$3wo@Y^`2-d@`z_-!1sEJK*JNX)V*@01E~%lxKPz*Mkr zN;!C8&!6yuoOc^XLn(pf;x`~^6>EaL;-N3sBWQi?Qi5v60{8)tB#}WCf2v7DK~zY`#g*L+fFKNn*}!)!m{t_H-k9|ur(P^!NQ zV12?62$V#589A(wkp$>;OBYB1bZEfcU6^K77T<+U%``0ACFn*fK$*J$`8%q9%lrwz z64Q`>0Z7CH3;~=GNC1CnB!JC?1aQD0fk$Qf-eKCj4y?nX0sjGCTmS$707*qoM6N<$ Eg3~Hh`v3p{ delta 272 zcmV+r0q_3!0l)%~BpLy8Qb$4nuFf3k00004XF*Lt006O%3;baPks%m=)k#D_R7gv; zlF<#qFbqVy0sm~o3jDGaYcLoi1TKjq+sWB2qE9+GvG3eg>UJi@=@8|9wL-6raz^0S zB_^!z{TwokQs2*8mF|5-sU{yjyZ{yY`+}~JYGR+z6*9u8UfH5yLd9LA7q~Yv_@TMW zQs*&@p%-R)0V)D3Xjm3&bcJZ65AUK}9stTG=Up4h^`Qg=R7gwB zlF<#qFbqVy0sm~o3jDGaYcLoigxZNC+sWA}0;x|rC9&_WLSj2L#pw{`ezl@mUFGz^ zw;ljT0qDLZ0R7ft z&SDCwpx)d7XvPYY%NHxs0owjGvkK|egsTU_r99LN^L{pA?t`9rKL|kInLeOqeg&Y3 z&5&;aNMr{n0(=$#0W4`GfZd1$u(6N;o{4GnE)0(wXU&hsi{`SA00000NkvXXu0mjf DM+8^) delta 274 zcmV+t0qy?x0m1^1BpLy8Qb$4nuFf3k00004XF*Lt006O%3;baPks%m=*GWV{R7gwB zlF<#qFc3q#0sm~o3jDGaYjiM1DD|ZmIhQ)uRzl)QR+2m06%x~5vjm-DdEQ%LR#rJR zaJ8ff^Lx7wsYX9P?}v$Jt0ZQM;Zp^yO9f==3W7Q;3^SKNUJ%b!4YqK3nVY?oX9zKM z8HF7e;6z{#84f>d2peN<_z*S3!n~|=mfLIYgn3zy*$qS370a02Am7b3K!*Kot^r*j zzRe|2W;O3nMm6tHMm2B9OvejwFQW#Zt9@!n|I(R(ce()QrbzvO`bcK*8LJ^R{D^7# Y0%y&S#)*#u!vFvP07*qoM6N<$f`Wi_3;+NC diff --git a/examples/resource-bar/assets/Ranger_Idle 2_1.png b/examples/resource-bar/assets/Ranger_Idle 2_1.png index 10a48c75457d681298c896d3327159067364f61e..e45760c05aaca90c77b7e929db4427fb69b01732 100644 GIT binary patch delta 184 zcmV;p07w6$0_FjbB#}WCf0#)`K~zY`V_={m_>YE3(;Ov*ib*j9u7O-bP&6a+i7^1h zb`br3mM0h!YY2+XFwGPO8-KO`_8h@piSsEL&qF z@NS6->vy?#kwrdVkBy{fNr%vq4=)$sgibFg>OxBsp8!?RLTed!_H<#A!JFpIg>J_n zrWZV2fD?fhhhZ)#>Y^7;eRv89XC~nW6mw$H%@XV_-#Qm{O<)$L#oi~ tuj~Wno;1VYE3(;Ov*ib*j9u7O-bP&6a+i7^1h zb`br3mM0h!YY2+XFwGb@05UX(WmVr%S^xk507*qoM6N<$f<~oF*8l(j delta 244 zcmVHg!o$Y@QB4g-#F1a!E_QPsnl+GipniWmTjFJdGB`+;}4c z56!)V(vCrfEX;HODhw@8y5sG|m4WKpIk+ uW`AWinDeF~Y>+_JcWD_|F4Kk&31I~?G>2t0um!;Y0000>kKDkjAcxCU|!LD7uNC&mC2 z+d=gES)O1_tRW~i!!(m@0Lp}>2#eUlc;00000NkvXXu0mjfQVvXq delta 237 zcmV0i6PnBpLy8Qb$4nuFf3k00004XF*Lt006O%3;baPks%m=vPnciR7gwZ zlF<#qFbqVq0sm~o3jDGaYcLoigj^a&_9b-^s00#EI@z&(Csk_rX(DNfcs*NTwynlg z!@D8Itly<~sfSXZ_e++ZCGC=r*t{Ho3LPF$^T n!iE~C<}N)0%VpW{AtAf~p}>2#)b6W=00000NkvXXu0mjfT7qV= diff --git a/examples/resource-bar/assets/Ranger_Idle 2_4.png b/examples/resource-bar/assets/Ranger_Idle 2_4.png index d0a962a3ed9081025f194a64f747bab326d3b9e8..7dca05bbc42a6530d65db49033688e8571a74846 100644 GIT binary patch delta 185 zcmV;q07n0#0_OpcB#}WCf0;={K~zY`V_+D};6EBBO>>kKDkjAcxCU|!LD7uNC&mC2 z+d=gES)O1_tRW~i!!(m*05T@a0Azoo8$c*p!J0vekqv zaQPpXW}Jp#OA{pJ0kV@aMR|cgc{2tcI0In(p<@76%_H3aQj7NgFO=p5e5LV!lIjF> n7m!q}W6A&Il?CL~i6jF6QX_VV?eM}|00000NkvXXu0mjf9|}x& delta 243 zcmVdiL#oj1 tugrnso-~95UI_CptpKabbl^=wSOHQac8H-!+`<3=002ovPDHLkV1gXKZvX%Q diff --git a/examples/resource-bar/assets/Ranger_Jump Kick_1.png b/examples/resource-bar/assets/Ranger_Jump Kick_1.png index 76eba54a610ac349b489073edc434581a6ef0e06..1995ed79c17694fe682a200ad050668a53d2145d 100644 GIT binary patch delta 197 zcmV;$06PD$0`mcoB#}WCf2B!8K~zY`V_+BsqhJ&aDEN9GJB!5>RW8)G084md zwSb~rj7(#T3yRV|S~|zDfYQ{2uJJzsJa_;A>LpF~xE2cT00000NkvXXu0mjfeH>He delta 256 zcmV+b0ssE<0k8s)BpLy8Qb$4nuFf3k00004XF*Lt006O%3;baPks%m=#Ysd#R7gwh zklhW#APj`rpzqzNE9A9Xb&U?z5eP@HWllt@f&M)3NhdJIcL`y!Sp1eqno8WRwQzQ{ z#!ZmmSxY9y2&PNK0N>{^!0$EA+pIEPXxKi1}!t}rDp?^T<~yJ zOCa5Gp~EcnYyega^l)lhE&)YDSR*!{f|^?4{AiC6FZZVkwLOzMshcXm8grd*JCGq2 z8*-iGqV?X*fYNiL#at#M_1dJw48Yr09 zS0rf+9R8!Fd`aoYk&Ez+bx!#X5tq4I&o1$EU!D+g6jB1TxSr#H`)g%}l}OfbfCL86 z5MBEcfOS#};09S)=tDO$`gYlR_rL|PL@j{VI=TSDmwMuii$((;NyxMvRiIf|019G? zl8~{0A-gC4&6POWs;yFB8HDuvSOEIaYWYvt?nyg-b~xBw;QjqF$}jeGzA N002ovPDHLkV1fWJUtjMwNzv*+h-1D zeaip@@8_*$Tkb+GkQvUO24Cg^L`icB@Z`CFjzc!4CW07wa*BGLsTHux6b3gkI* zp4BZR`~p;T4iSr-*D`Z;6>LmW4)#5AVJSzjH{#-#JcRTDP%n?y6wLd!pJf4py?(^b zQmWVOq>+P6gnHdh8kuBz-A)-f$VkX>G07u;s*}8rcQMaQtmL8O7pR1i_MaoLJg*@0 g7X0=p1xb|h0VU>*>{44D7ytkO07*qoM6N<$f(p@j%>V!Z diff --git a/examples/resource-bar/assets/Ranger_Jump Kick_3.png b/examples/resource-bar/assets/Ranger_Jump Kick_3.png index 0fc749d1727f97d2cad1429744cfebbf3829f61d..4bd2a279bb6dbb1a753f18e8b4463d665e2dcc9a 100644 GIT binary patch delta 213 zcmV;`04o2p0)qmOB#}WCf3-baW43$APM+0Bl-7@rV!vE!|_2(*#GwW6_`H$XUHF?MBn-nBT}M(w1) zQ6(x|?&G?N6vWT(`$5XH)oLijhIcQ(6JA~rZGu7yej@0G0&-zk^Gp`5y0Dkko(s)q zT%^lZ%wz$cxZouPuvMr~8Gd_xlsG#u%U=k4HnT5-upGMq?B1M% ziwm$8O6*MO`Uco<$1aWwGIpov&uW2!M-`;EA6AfYGMQ8p!Vfv3Xl{U!FSP&w002ov JPDHLkV1mHWYtjG! diff --git a/examples/resource-bar/assets/Ranger_Jump Kick_4.png b/examples/resource-bar/assets/Ranger_Jump Kick_4.png index 76eba54a610ac349b489073edc434581a6ef0e06..1995ed79c17694fe682a200ad050668a53d2145d 100644 GIT binary patch delta 197 zcmV;$06PD$0`mcoB#}WCf2B!8K~zY`V_+BsqhJ&aDEN9GJB!5>RW8)G084md zwSb~rj7(#T3yRV|S~|zDfYQ{2uJJzsJa_;A>LpF~xE2cT00000NkvXXu0mjfeH>He delta 256 zcmV+b0ssE<0k8s)BpLy8Qb$4nuFf3k00004XF*Lt006O%3;baPks%m=#Ysd#R7gwh zklhW#APj`rpzqzNE9A9Xb&U?z5eP@HWllt@f&M)3NhdJIcL`y!Sp1eqno8WRwQzQ{ z#!ZmmSxY9y2&PNK0N>{^!0$EA+pIEPXxKi1}!t}rDp?^T<~yJ zOCa5Gp~EcnYyega^l)lhE&)YDSR*!{f|^?4{AiC6FZZVkwLOzMshcXm8grd*JCGq2 z8*-iGqV?X*fYNiL#IQV9}QF2 z@F*#W!5|vOrm5l7v;@OYYWsqwu1B$erg1PNg9pWMWQ-+G{HG}Opj(72_kNZq7?WcO zPFI8YAVXm^Sr))FVGAOdp_I5Drv=EtLW1Eq)e#fP3^*eFKVy0xA}TJhS;C*Z83SW0 zV(@wqn<4lxjzmJa1q6bNfuJSWETdLMgwK`KDfFCGR`)zX}F@Piv(_9ur zE73x{B%%OG6z8B(i8et^05zf-fVZZPlJZCZFHYUFOtQa=ReuJdJq7Xk-TQX*x@d_!go|`rmYEq1kQL}W1a+?gjN9n5Kmnc&6@`rh zPs$)bxPg?t$wVb0kY?BQ;*d+kH9(X24?t;oRDjSqZ2{7?-4swOo&>1*SEmAM-D`lN duE_y3i7$K-ZmNAvB&h%Z002ovPDHLkV1oa8lcE3s diff --git a/examples/resource-bar/assets/Ranger_Kick 2.png b/examples/resource-bar/assets/Ranger_Kick 2.png index 12844569c68fdc3f77b5ed27f632351029eec5dd..3ba72e43ed43e2bbbd9caeedf4803a52406f3e96 100644 GIT binary patch delta 238 zcmV5ru?gnf!D%YG9BYoVOp?jWI7DE5tRQ$5>2=H`Ibe=HZL88c=IUV52(j7qQ0jfX9z}}7?nYq4zjM@OQ94LAUKxawt6Y%fo`vNq~`v5c_ oTLug_oeZ=9YEQ-7^7!^S0AzTXohDo1R{#J207*qoM6N<$f)y%b!~g&Q delta 328 zcmV-O0k{5%0^$OYBYy!YNklTQP9o3QR#7W#5@t2mQ{Ab5;l&1Qzn#}yje%F?O@wi_O3@-;%K_q}PpA0Jsna5NR zF#~E2?+DN;2Jq3N`TN?r_ucua&O*!pA!xo<$tAK-ZktNrZGT0^0>`o-H7EjcfGco+ z>3l)qiN-kB&mT{7*a)lKFhNGvdsXxjz*PSQY+ar#z(P@g&`5Rw;c&A9@C%nEAh<4C1I(@~5@6Go ajOhzhhHn% diff --git a/examples/resource-bar/assets/Ranger_Knockdown.png b/examples/resource-bar/assets/Ranger_Knockdown.png index 8cf1f73366ea2b536234af7e5684de8810b7fc23..60db51b337d68faf634806971c554520a47ced72 100644 GIT binary patch delta 223 zcmV<503iR(0{Q`vBYyx1a7bBm000XT000XT0n*)m`~Uy|tVu*cR7l6|l+g)*FbqVq zf&Xsg3jVs4YdDxAL=-C5kk-`3AIZUiRk+tAtwfMyAEOi~<9gJ^$X#eM()002ovPDHLkV1gzRV!r?Y delta 307 zcmV-30nGmT0nGxCBYy!DNklRH2<^;rjgnwEAJYN(yx2S1MDJl!B z3IM~YGm;j7gXxf}wZPPf0Cc|O#;}i*C5>qIj;Mgr9K_6LQy1Trq$L2xq|CkF93Qy& z-1akL4WNq5xuk+>00*B1eiKzFnM>7cfSCapLmY6F#R#|fW&oLkr0N53vDq2`W0Fj{ zYRztW0tXdp5G*dT(J%V+=q002ovPDHLk FV1mrKhid=; diff --git a/examples/resource-bar/assets/Ranger_Over Throw_1.png b/examples/resource-bar/assets/Ranger_Over Throw_1.png index ab53981d145ac1485ae7951360d5cc0449016afb..58576e01fe331bf2783c014776748cccef61aeef 100644 GIT binary patch delta 198 zcmV;%06G7u0`vipB#}WCf2K)9K~zY`?Um69fG`Y1yMh01{w{QTqW^#fKoWqv7Bv84F1>2r0{G2`JSCozueNI%KpO+F z>u})%P(cyE)&Kg6YT+7mb~IRkx0~#XsiA+w4o9|LhgiCcQ~&?~07*qoM6N<$g4E_% Ay#N3J delta 249 zcmV>51B*caSuhOny%`hS5R!dalLp zb<{_G-Y=VYX5h$@ssNhMV+!m(Qqm0KZg>G5Spaq=wxHO}w*}M>u7F|cI%MX#Ds&@3 z`dROW6|}^8B%CzEAmv%)fJEU*!DGe;}m=N48#ve02kE00000NkvXXu0mjfl9O;W diff --git a/examples/resource-bar/assets/Ranger_Over Throw_2.png b/examples/resource-bar/assets/Ranger_Over Throw_2.png index 4635dfea5c2dc2b7a7e79d8b21e09e93b3611304..18edfc06219d7a224ee9d46feae3096b44d588e3 100644 GIT binary patch delta 207 zcmV;=05Jcy0{sDyB#}WCf3HbIK~zY`?Ulg|fFKM-yMcE%as{t$N2bVJ?(k@vw?=eFxTz+ z5;<$aFIW%?{Wz!lkN7ZC?Oc32(=}zg+}Cs&B{TLl#dB5S2shy+l*};?ecdPC3Pj>z zPzZ3L59f(g5KEqq<&f=RO*kWK31iT3EU|(p2(E?;G#vM}5-s>j3Pex$MZ%)QZ=tDR z1Qup%^tz!1@EgVpf&>gVuN(GS_k!OAhIj!{H$QzX17CSc!3mVI1Jiv}TvNGJw*UYD M07*qoM6N<$g2`5I+5i9m diff --git a/examples/resource-bar/assets/Ranger_Pick Up 2.png b/examples/resource-bar/assets/Ranger_Pick Up 2.png index 149abd6b18aa8d5aa205b212233b19753a1ea44b..b8267558f80aa64bdc33cb095a0d98df58dbdc62 100644 GIT binary patch delta 201 zcmV;)05<=@0^|XZBYyx1a7bBm000XT000XT0n*)m`~Uy|mPtfGR7l5TU>F6XfX3iI z8YWG1loTo^#Spj#at%SzjLav-02JFn^!r(!U`(tbC^o}1lWYLY*;F@x=rF+L1!B?$ zwrIl|s7Qtq7Zd2V<1>H(myN{Ojx`yBFhvFs8-TVG>%JzfSnDM}tv|omPHOk3)hl2H6ae0=t0e$`+zmInR{)M63=o`q2d5!% zZv>$Vw6n|sU}ga+I-K9PeVA|0PpX0{00hoCn>@l?Ths>;Tz^iY&I2*sAJwD+fk@&k zROhAt?k%8_EbBgi6JQttVhRQj{Aeo@LG%czjb*$vzlhg{mvmMYL`kRe0j0A6)+wjJ zZ%%jjh>K5q2&3%9HA77T!`FMWZTeF5wKbz^uFe`x>!002ovPDHLkV1j+?dRqVh diff --git a/examples/resource-bar/assets/Ranger_Pick Up.png b/examples/resource-bar/assets/Ranger_Pick Up.png index 98c79b41a60e1009d4422d8196e326db39e4d77c..65ab13820f132b5c84885a8d985aaa7a0db60848 100644 GIT binary patch delta 211 zcmV;^04)E&0`38jBYyx1a7bBm000XT000XT0n*)m`~Uy|ph-kQR7l5TU>F6XV6cP# zXqYt3QBtUw6hq(|$Tb8-GcunT15j)S(eGz@f-$j%px6x4OtJwmXH(q(qQig)FJKyk zE$WaH5{Qq*MfhU?TROmN07wFtW@H0!g$3MnY?|@0onfU0l)%~BYy!0NklyDDi6Q`_%~oy{bCPbKA+-&`_lsxhz0OwX8;MI zu>@kSK$@}5081JWW@q#3+W2m`B_(Lc7PASE<>)a|eiu-WW`y^x z_3i31Lgk*+&!0pV8i9-+^6du*1N`1{%J{3hHW=2l`$nQN(h_*@`S9r3IS<$pqP28! sKiDD44~0UCv>)_^GC<#T<^^i$1L6E{Qv!3=+yDRo07*qoM6N<$f-&fe0{{R3 diff --git a/examples/resource-bar/assets/Ranger_Punch 1.png b/examples/resource-bar/assets/Ranger_Punch 1.png index af68f8ec46743344fdaab45d020a78396db114d6..2361f68bc2d46d8e83b7ae1bbfff8cb4e39c38c9 100644 GIT binary patch delta 213 zcmV;`04o2`0`LKlBYyx1a7bBm000XT000XT0n*)m`~Uy|qDe$SR7l5TU>IQV9}QF2 z@F*#W!5|vOrm5l7v;@OYYWsqwu1B$erg1P3!9xg>W;im2iNBxai4zlJ35siJW&v85 z|HmgzPEN-fL}&(6Ck5fKfML*Ez<@6$Q8g#?CvQfEKuAKBUCI?TrLqR+$gRW2-Q+FD_x0o0Q~^~Z1H=%6WV3b P00000NkvXXu0mjffQC_- delta 310 zcmV-60m=UG0nh@FBYy!GNkl zxi7g;5;F4whYQNGxCrXv0%#AEH;7;UlMG0(-WOEvN%ch1JYdk9Jxm}i59`P4-iUCv z{`-WS_V+P2wPZDxK#*QzF9IvM|V*qd!0?exi^Uv*Q$NTHR&LWxtK)_t8WQl4h2uPW`xqo#{_InVS!}|k7z!+c~ z+;_U}-CzTzv0w~yeZ*bgOPWtIu;%XHnBynNkCiBSRHTd`Go);Zlt~jC!|IW_cpoTN z%UNhgS2>GB#{vuRIzDOeeyRePc9(#;P`MY5)u>l)pysE?b&hLnE>%$mYebF;f3@SU zsmhcE;@mR*JxYU30m1UP%SD-_fS5Us%Ka11Kfj&D^-`^00000NkvXXu0mjf1@4*D diff --git a/examples/resource-bar/assets/Ranger_Run_1.png b/examples/resource-bar/assets/Ranger_Run_1.png index ff1001ee89642b3a1c890393e16ea56312cef295..9eac15a12984cc610a678d6b13c707b633f64a32 100644 GIT binary patch delta 193 zcmV;y06zb#0`CEkB#}WCf1yc4K~zY`y_MY!fFKNn*}!)%tt9F`1b9cLE+VwGYB0*P}2H#84eNI#(Z=?kCDs7{J}TNk`2Zmvc)chQd7#z~iLY4Kqi~H500000NkvXXu0mjfthi1O delta 251 zcmVp!aUn6>{xXU893_1X2UGzMYWTPWq%Th`|q{r2La=5~4159jf)E-$+AN zqMGq}%ny-`Jbqq}7OZ_UrERj!UV&<+TrL>dMVe8vBbXvhJn|fcBU3hwSPR{RgRgLj zfY$rAV?;o66Bp_hAahezZ_l?1)%uc;lz=z2*k+Fe-!(6wk%9uRnkcNoBvJs59 zIn_*9K^QzaC&2%rmtv^T+A2Zh2H9KS=_!GeQdWttSl3$J5&8fC002ovPDHLkV1j4# BaE|~0 diff --git a/examples/resource-bar/assets/Ranger_Run_2.png b/examples/resource-bar/assets/Ranger_Run_2.png index a93642fdaa142f241add59baa806324efe63db87..ef62fc54e092e8277acd3743428f8ea656957a6f 100644 GIT binary patch delta 198 zcmV;%06G7=0`vipB#}WCf2K)9K~zY`V_={$_>YE3(;Ov*ib*j9u7O-bP&6a+i7^1h zb`br3mM0h!YY2+XFwMjofZ=Sa8$gt1d|n_a@UXcEErB64qd5`7HOQ{O<|2%M!loG= zW4HpF?Jzze&BWvZqB9mnnFwqEfAVGwOj1t7W&p8if!hj+G010`3H5BTnf&c&j07*qoM6N<$f()He A1poj5 delta 267 zcmV+m0rdX#0lNZ_BpLy8Qb$4nuFf3k00004XF*Lt006O%3;baPks%m=&`Cr=R7gv; zlF<#qFbqVq0sm~o3jDGaYcLoigxaa2vtu_+LZ5VM?A~1?LAsi3G(>*hwP;sf^{Ii` z5*5aIKOa(!^8CIZEZl7hVUrD?El^?7-wSrR)G(Gf1tB#gPdVefiNG^suULa3yoGlo zwT!}6>K2@+lN?+*Eg&BpLy8Qb$4nuFf3k00004XF*Lt006O%3;baPks%m=!%0LzR7gv` zlF<#qFbqVq0sm~&75HT<)?hG3C^)sPv+JaBfIjKeHujxewdJ3zPAS&g)r!ux(lKh7 z4KZeX=KC(%DA(6xslv05n$#w59t|*N($51}A!^2uAfQWa!VR1bG1L4utS%aWW(gR1 z4GoayYyi;=U=3l+5HLhpZNA)}Mtt5x8dT|kVBJ)R8s!Rxp%62fgeDZ%cVHnjim1M| z^^wL%DbkZYUj>M1%1rqGB8~sFX>^0xEpYl&z*&^?2K+%z>+*$dXaE2J07*qoM6N<$ Eg6@KGr~m)} diff --git a/examples/resource-bar/assets/Ranger_Run_4.png b/examples/resource-bar/assets/Ranger_Run_4.png index 08a20a67e2d7cdd5b9c2e1af47a076c540775c06..842983980a6d7200bda178fe752e669f7e9f651d 100644 GIT binary patch delta 200 zcmV;(05|`&0`>urB#}WCf2c`BK~zY`#g*F)fG`L}yMh011kJLPnTM&g1aeYSsB>MT>*Xc48LLwJ23Seo!4lu=1@dSYW z?n*Sx`T(g1tZYm%0x%(nxC=ms$`WIPG%Oo4c!-K~6hfRM5Xl(^J}^gb2Bx?>NP=Uo zi|Q&~~w{_9MgB}00000 LNkvXXu0mjf`cHB# diff --git a/examples/resource-bar/assets/Ranger_Stab.png b/examples/resource-bar/assets/Ranger_Stab.png index b9db5c0977a056bff9423488311a0239d28e5a61..fac7d083761a1e7ce829e73e9d079c24a12ac5f4 100644 GIT binary patch delta 218 zcmV<0044v?0`&oqBYyx1a7bBm000XT000XT0n*)m`~Uy|r%6OXR7l6wl-mh_FbqZA zz<)P#1%KVjH5|+lA|jPGwp?m&q85ThY?Ya*PQN@K%!wEi~VQva%N^Vg0Uzm2E z2u%0jjpY$4JT96bhG~Hk$&-s%>iT-OEn~5uBz%-xA{PNz9#g44qGlTnP7>!H^z)h& zJtj;A0q81VN)q7j1UVp8;wMlbnxvF16ak8a<}5;i)|^Qw*qRd+<-19;)->Qhb{O4& U>JP!Ry#N3J07*qoM6N<$g5rr-dH?_b delta 311 zcmV-70m%OK0nq}GBYy!HNklZ2-k2y?|EB`J!? zwGahzq&NpgDH4TD1lE$42&APsAf#urz(7u;-{K_eU@XrZIe#fr4p9NHdq8VHo%=o; zmi_#AM?EqVz>oc+iEQge7dP4nbkzC)1js4!(c=Os$5|o{tb>K-vgzc$>7w!Pbybls z3Rr*@INiG;Vtno*Ac&e>I3_L**#nnGOkHTxbX*l7Xx(GfYg}Xn0%^pj3$e0Q!YwOmP6Iz@fnXJOW@V@BcE zB~w}6={aQt`TV>eO>(v?q=j_(^a7mF-xrWlT4>=DAVUjyVLY=Z7w($S=5*(UDl;)m zEqHPPP82-CGA|&d$e=E7FEL6|n0Nb_dV6g~n0GtJEkp2nB*!hY;P+UJDd>AkC76P~ zw^TqBj^>6a7|jh)Fq%&sh1M6~xsMF&xtY`?(%*XJpO?PB04K>~yu^D^Y7#t`8l>ih al=1~0Sf5t=92gb=0000YE3(;Ov*ib*j9u7O-bP&6a+i7^1h zb`br3mM0h!YY2+XFwGPO8-KO`_8h@piSsEL&qF z@NS6->vy?#kwrdVkBy{fNr%vq4=)$sgibFg>OxBsp8!?RLTed!_H<#A!JFpIg>J_n zrWZV2fD?fhhhZ)#>Y^7;eRv89XC~nW6mw$H%@XV_-#Qm{O<)$L#oi~ tuj~Wno;1V%^pj3$e0Q!YwOmP6Iz@fnXJOW@V@BcE zB~w}6={aQt`TV>eO>(v?q=j_(^a7mF-xrWlT4>=DAVUjyVLY=Z7w($S=5*(UDl;)m zEqHPPP82-CGA|&d$e=E7FEL6|n0Nb_dV6g~n0GtJEkp2nB*!hY;P+UJDd>AkC76P~ zw^TqBj^>6a7|jh)Fq%&sh1M6~xsMF&xtY`?(%*XJpO?PB04K>~yu^D^Y7#t`8l>ih al=1~0Sf5t=92gb=0000YE3(;Ov*ib*j9u7O-bP&6a+i7^1h zb`br3mM0h!YY2+XFwGPO8-KO`_8h@piSsEL&qF z@NS6->vy?#kwrdVkBy{fNr%vq4=)$sgibFg>OxBsp8!?RLTed!_H<#A!JFpIg>J_n zrWZV2fD?fhhhZ)#>Y^7;eRv89XC~nW6mw$H%@XV_-#Qm{O<)$L#oi~ tuj~Wno;1V5A@^M@i4EbyMO9$peSL*-=jSOg0%=5O6;tj7VCoEhDZdcsQT2ifERt&g@AtW- zkRY0CdXFOBH9*ilfkl>B1mtB~;@~($g8D#!_!?l6VLpMZr9fMt}gMWT*-) z@drSa&4wmTEjp9eDW3{KaC9CzXHbRs7BdH_exd9xO-IsgCw002ov JPDHLkV1oaVSdRbz delta 272 zcmV+r0q_3(0l)%~BpLy8Qb$4nuFf3k00004XF*Lt006O%3;baPks%m=)k#D_R7gv; zlFJPOF$_ev1MYN03tZ`nHYkh|0+YnZj=x!nCykP|XC{|D{z+T3MY~@|5GURHrhpmV zDN!L_1Ve@j?Sz2{@ggiMh|q3<3Y`vf(GI40(p@0TYXP0_=dEk{1S&+rH$rrJ1wfRL zD3pbP3S(9c164pJOes-oNr`rOyp%8>>liZ(VK*!>BESo1)?EQAuzq)!gJl*oHaGE% z-dy1sy}80Ol?pObw(o;goV=j$%hJyD@UU7=!bg5f&+vusbb+Cj$|E7X{8WL#aeM$r W&Uv$xXcA!n0000YE3(;OuQ(FmepY>G6KVhDyNQe8oj z?I;FN6b1w0d=$;d7%eT}G!R8Gx&biy{VY!~#%2gETfuygCK!#&00vxMfN3J68LI)v z&L*Upfrvo-Pf|L-VhCZ){K=cK;vr}Nx?!URkZAxGKFM_f=?36PE&rq!>DY=lk~0z( l14$19a&jbI1F2qx0|2u}V!ttZ-!}jN002ovPDHLkV1n+YM&1Ab delta 246 zcmVh^y;V9UlVDKFB5t(#> w`E+eUoSgm_C{PmeT7iu%d?$q}>)Df1Ub9DHza4mZcK`qY07*qoM6N<$g0Ze>n*aa+ diff --git a/examples/resource-bar/assets/Ranger_Strafe 2_3.png b/examples/resource-bar/assets/Ranger_Strafe 2_3.png index 6be5770dae8c010f7fa9d062337b193fc3b188b5..0410ad345df7e462097eb7e8bec9341206328176 100644 GIT binary patch delta 207 zcmV;=05Jc+0{sDyB#}WCf3HbIK~zY`#g*L&fG`Y%yMga+5A@^M@i4EbyMO9$peSL*-=jSOg0%=5O6;tj7VCoEhDZdcsQT2ifERt&g@AtW- zkRY0CdXFOBH9*ilfkl>B1mtB~;@~($g8D#!_!?l6VLpMZr9fMt}gMWT*-) z@drSa&4wmTEjp9eDW3{KaC9CzXHbRs7BdH_exd9xO-IsgCw002ov JPDHLkV1oaVSdRbz delta 272 zcmV+r0q_3(0l)%~BpLy8Qb$4nuFf3k00004XF*Lt006O%3;baPks%m=)k#D_R7gv; zlFJPOF$_ev1MYN03tZ`nHYkh|0+YnZj=x!nCykP|XC{|D{z+T3MY~@|5GURHrhpmV zDN!L_1Ve@j?Sz2{@ggiMh|q3<3Y`vf(GI40(p@0TYXP0_=dEk{1S&+rH$rrJ1wfRL zD3pbP3S(9c164pJOes-oNr`rOyp%8>>liZ(VK*!>BESo1)?EQAuzq)!gJl*oHaGE% z-dy1sy}80Ol?pObw(o;goV=j$%hJyD@UU7=!bg5f&+vusbb+Cj$|E7X{8WL#aeM$r W&Uv$xXcA!n0000YE3(;OuQ(FmepY>G6KVhDyNQe8oj z?I;FN6b1w0d=$;d7%eT}G!R8Gx&biy{VY!~#%2gETfuygCK!#&00vxMfN3J68LI)v z&L*Upfrvo-Pf|L-VhCZ){K=cK;vr}Nx?!URkZAxGKFM_f=?36PE&rq!>DY=lk~0z( l14$19a&jbI1F2qx0|2u}V!ttZ-!}jN002ovPDHLkV1n+YM&1Ab delta 246 zcmVh^y;V9UlVDKFB5t(#> w`E+eUoSgm_C{PmeT7iu%d?$q}>)Df1Ub9DHza4mZcK`qY07*qoM6N<$g0Ze>n*aa+ diff --git a/examples/resource-bar/assets/Ranger_Walk 1_1.png b/examples/resource-bar/assets/Ranger_Walk 1_1.png index 27081b03f196379049a806692aad1da2f86bc5a9..0b4a4ea497b1cdd322459cd7a94647ff3418e7b9 100644 GIT binary patch delta 199 zcmV;&0671_0`&oqB#}WCf2T=AK~zY`#g*F$fG`Y2yMh01Z1^(a_`9lYg2l8k%&6;*z>4?oQ5cbnae!_VA=QQIuA#n5SBTcs{y&}#{tj`wEmR} z$jq*Z^IVjQI6#)GWrqMVB;alqrrGP?JVfEM5IzUpv|OUe+yp4!Jwd~>%%1=(F%0<^ z;E8a6A#m>pPvCyeo&ft3Ar)9jJOO!aQtL$;UK=d$o-q-7QrG|h002ovPDHLkV1msG BT3P@A delta 273 zcmV+s0q*|w0l@;0BpLy8Qb$4nuFf3k00004XF*Lt006O%3;baPks%m=)=5M`R7gv; zlF<#qFbqVq0sm~o3jDGaYjiM12t6l`Y$vu`M4xm@a=vqgM7f%3bc*`CYr$)yoKg67 zi7Lx?zlV$3wo@Y^`1-d@`z_-!1sEJK*JNX)V*@01E~%lxKPz*Mkr zN;!C8&!6yuoOc^XLn&RIat`~^6>EaL;-N3sBWQi?Qi5v6YE3(;Ov*ib*j9u7O-bP&6a+i7^1h zb`br3mM0h!YY2+XFwG;M1&07*qoM6N<$f)N@_LI3~& delta 243 zcmV#~LbIb_ z(+Zv}z==SQ!*DGqa*>NpHarD~q%hC6PrTfpjWEylm~#v28z;FF{I;MQ{`Uf-Ax&uc tH#PxvPa0waTqx!)y?~X=a^OQk*Z~(sg!4=MMgaf-002ovPDHLkV1nurB#}WCf2c`BK~zY`y_L}kfG`Y1yMh0134RA?f)J!1 zKrD1ath??4peqZ5gwh5xfr5j7XW%VNKXYD#+&BQ;-i|h?E*eAt0000;0ki^;BpLy8Qb$4nuFf3k00004XF*Lt006O%3;baPks%m=$w@>(R7gv` zlhF;rFbqVq0sm~o3jDGaYcLoilsb(g+ni&kls@T{*1o%{Qd|DbVl>5aziQEJTgCLi z-Vzm-_w9N}H}d&@-m2tml}k0*@N@y4q{9oEhE!AH6-ZxH12WS!?_}XBgYE3(;Ov*ib*j9u7O-bP&6a+i7^1h zb`br3mM0h!YY2+XFwG;M1&07*qoM6N<$f)N@_LI3~& delta 243 zcmV#~LbIb_ z(+Zv}z==SQ!*DGqa*>NpHarD~q%hC6PrTfpjWEylm~#v28z;FF{I;MQ{`Uf-Ax&uc tH#PxvPa0waTqx!)y?~X=a^OQk*Z~(sg!4=MMgaf-002ovPDHLkV1nYE3(;OuQ(FmepY>G6KVhDyNQe8oj z?I;FN6b1w0d=$;d7%eT}G!R8Gx&biy{VY!~#%2gETfuygCK!#&00vxMfN3J68LI)v z&L*Upfrvo-Pf|L-VhCZ){K=cK;vr}Nx?!URkZAxGKFM_f=?36PE&rq!>DY=lk~0z( l14$19a&jbI1F2qx0|2u}V!ttZ-!}jN002ovPDHLkV1n+YM&1Ab delta 246 zcmVh^y;V9UlVDKFB5t(#> w`E+eUoSgm_C{PmeT7iu%d?$q}>)Df1Ub9DHza4mZcK`qY07*qoM6N<$g0Ze>n*aa+ diff --git a/examples/resource-bar/assets/Ranger_Walk 2_2.png b/examples/resource-bar/assets/Ranger_Walk 2_2.png index 6a76bec781fc4348efb082f4f3ce77f7958e47d1..9e1df92a04b771840e7133e6da4454739a065241 100644 GIT binary patch delta 197 zcmV;$06PD*0`mcoB#}WCf2B!8K~zY`#g)MgfG`L}*}%ISxq?@>at#M_1Waq1vuXH8JcrC4$j9WZBD8x02=!n}`Hi^_G7BQG5mP|P_qpZZ zAkwb+J()_D03aQqm^3pBsLR&OU}z$`=753d=HONC=)}r6jihh4f8wr!DgRT7#H;m&*df z@J@*d$s!mcOlT(zR7e)#xPl7p7MRe-VJY5VIw#)>W$p_&U(Z|7=~I{xh2IEq&I*7k zp%{w7z=W||4Fgla5}^=auOuX29>-9)Rg2Fs4B=KSJ}Mv!xGOG)-n>;XGLLpsX67Fh z;9XaRwvS3Y6L+Iq!!w2d$jBgX^8(CMJ?#Utk3YE3(;OuQ(FmepY>G6KVhDyNQe8oj z?I;FN6b1w0d=$;d7%eT}G!R8Gx&biy{VY!~#%2gETfuygCK!#&00vxMfN3J68LI)v z&L*Upfrvo-Pf|L-VhCZ){K=cK;vr}Nx?!URkZAxGKFM_f=?36PE&rq!>DY=lk~0z( l14$19a&jbI1F2qx0|2u}V!ttZ-!}jN002ovPDHLkV1n+YM&1Ab delta 246 zcmVh^y;V9UlVDKFB5t(#> w`E+eUoSgm_C{PmeT7iu%d?$q}>)Df1Ub9DHza4mZcK`qY07*qoM6N<$g0Ze>n*aa+ diff --git a/examples/resource-bar/assets/Ranger_Walk 2_4.png b/examples/resource-bar/assets/Ranger_Walk 2_4.png index b6de07b12ce79f31f7cd03ef75e26fb1e2c40af0..09c31bf7f6cf6ce37e7d0a77540684bb76478b0d 100644 GIT binary patch delta 187 zcmV;s07UYE3(;OuQ(FmepY>G6KVhDyNQe8oj z?I;FN6b1w0d=$;d7%eT}G!R8Gx&biy{VY!~#%2gETfuygCK!#&00vxMfN3J68LI)v z&L*Upfrvo-Pf|L-VhC{wi9dNW1|C`lU>HJHi8PE1Ag5HuW;DZjhq~a)Bg;#1^@woHF+gG2S@+_002ovPDHLkV1gq#MM(ev delta 238 zcmV!$)> zN+cqUWDsP$%gP`WNQufxkfV|mby^-Fc)uTy`F#PnB!hn{z`i9-@Ahj2^q=U%{LX&3 omqWZv^Zo)=M4@j#RX|e83ju&NdAmfL`v3p{07*qoM6N<$f}e_KJOBUy diff --git a/examples/resource-bar/assets/Ranger_Walk 3_1.png b/examples/resource-bar/assets/Ranger_Walk 3_1.png index fa4c6a9349d8f4b65c61e144ed764b52720bf8d2..5d9c32e8653ac98e883477ec1c45e300986af619 100644 GIT binary patch delta 198 zcmV;%06G7=0`vipB#}WCf2K)9K~zY`V_={m_>YE3(;Ov*ib*j9u7O-bP&6a+i7^1h zb`br3mM0h!YY2+XFwGxMOg#e#JQ;#Z5%C7#D8`90 zfKZAfSVs`bECiD@p>$8UG$PKY8z5mM~Lk^d7Ae9|ezzB`0Oxs$4Ni28m?!K|(3jKJ9v z5$5;)oHC4b{=P31pX~}klMWv)fD?3iL01Zz7Cr%FK!az7XWH??T>`xncPdmK!B}d+ zju*fQ0go_D1zjoJsKZNUj1U*h+j>rYd^RJPw{?yi2Endba!g3y(Uo8V`i`yy6VP{b z1w`iS3e?;Xnbr%Gh^2zrA4l_OFT$Q-`b!T(VB&MXz!7Kmf+@WCRKZ=8@&{zgja`SN RMvedg002ovPDHLkV1n{0b(jDE diff --git a/examples/resource-bar/assets/Ranger_Walk 3_2.png b/examples/resource-bar/assets/Ranger_Walk 3_2.png index 10a48c75457d681298c896d3327159067364f61e..e45760c05aaca90c77b7e929db4427fb69b01732 100644 GIT binary patch delta 184 zcmV;p07w6$0_FjbB#}WCf0#)`K~zY`V_={m_>YE3(;Ov*ib*j9u7O-bP&6a+i7^1h zb`br3mM0h!YY2+XFwGPO8-KO`_8h@piSsEL&qF z@NS6->vy?#kwrdVkBy{fNr%vq4=)$sgibFg>OxBsp8!?RLTed!_H<#A!JFpIg>J_n zrWZV2fD?fhhhZ)#>Y^7;eRv89XC~nW6mw$H%@XV_-#Qm{O<)$L#oi~ tuj~Wno;1VaB1FTx8;)O_c71re+$J?GZl&aFF{hK&S;xfGngR01r|G z00N*W-|VX_4NwM&Yrt6N-qjCaWD2!%)Lm-Grd+7&0K}e+T@6cG5C8xG07*qoM6N<$ Eg2ZK3b^rhX delta 268 zcmV+n0rUR&0lWf`BpLy8Qb$4nuFf3k00004XF*Lt006O%3;baPks%m=(Md!>R7gwB zlIsn^FbssV0sq;E75K|mtifQ65PEKG*-qm;0I8pJO8vNNDmDF+>@-EbU#-yFM}5Sw z8e+`4F3%yd$mjccBkA6zCbZA+0}KQuK5x*dZI zy)e@OIAJ)VY36{U5WVPU%|nPu3;liECtn_~O6c$7J|_v_b2h*jz6xNIuW2iwGWeRd z0{rq+fH9OB3YE3(;Ov*ib*j9u7O-bP&6a+i7^1h zb`br3mM0h!YY2+XFwG!>?3bVBG zQN!7g!fd~D-$f6%x;!S4ovmsjM{FJrK!r{PK&=;Kbx|`a2Y5khvLUF@JXc>-P&<&` z2GPDimn;s*eU+x!hTyPK2_1^e>=0sLVV>4L@p6Cegn3%~d^TYFMwRUWej89V|9b$* wWoH`wmDy1At6bQifo9&NW?*$0HoQp)FCKx0`}z{_=>Px#07*qoM6N<$f`pE1N&o-= diff --git a/examples/resource-bar/assets/Silver shield.png b/examples/resource-bar/assets/Silver shield.png index 9f691ed5b602056652f24989353b9befdfe7c5f4..8db2cb9275e7b20526a911aa7cba20476bba25f9 100644 GIT binary patch delta 57 zcmeBWd&xRMS(bsbz$3Dlfq`2Hgc&d0t^32kz%<*_#WBR=_(tuSOai^!>x~(Jz|+;w JWt~$(69B)45Ci}K delta 93 zcmaFK+RHXUnS*Jzr;B4q#jTAFGnqUMQ=jf*U|`TKag8Vm&QB{TPb^AhNUGFJ%E`}9 wNvYIJE~+dj$=A!wO-xVK3-EI{GI7mI&QD1#TESNT4ycjA)78&qol`;+01!GLl>h($ diff --git a/examples/resource-bar/assets/Star_LargeNarrow.png b/examples/resource-bar/assets/Star_LargeNarrow.png index 6ce8f2055e763e8782c9776314ff98b870bcd75d..43a12604bbed58be5f09abc1d04f3ad5985678a5 100644 GIT binary patch literal 630 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSoCO|{#S9GGLLkg|>2BR01_mY# zPZ!6Kid%1QUCce?Ai^4G<-s|{NmH{?D9Ficfr!_Q`i?0=8V3(@gm1{UJpaAt$$gDa zyA$0s+L?g{!oY#P8OvTK*X`-N!&q~!-+ZEV!~35f)r#0ZSli!oS@&PO#9;+0vEhHI z!wv*y`2V`01c(bDnBm`b#+N|+5Q_h-XTJ1zJ@X+b{t?f<kELz~Wk60I%VV|&KUCcf z(tw;YmcKw{ui|BFt=|3r!1kJd!Smn)@&EbQ3f@T^xGBBHz9IQIL*KoGJoXRu6-c-M li478`GT$B+y+HbgX#FW!@k#${Hg$tUJzf1=);T3K0RX7o7qkEX literal 707 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?I3?vN&YJLDImUKs7M+SzC{oH>NS%G|m0G|-o z|2V+;^S92QzXO*9DnEbzHjsNePj>~7!&egI7tEh8A3y(n|NZ&#_VxQ28XW5!7#NsT zJY5_^GVZ;-aoU$DP^97E<%We!&a7=*J)#m?1|beB8X_1=7Vt_)8sFlFXq8~>%%7&7khF}ap3$TzM%X8OWSe3gi9q%m$wP8u(52M z9Ik%hR{_)W`F0DIS3O{ATXkG7VbQG;#^9^lxL2&O+u0y|HC+5c(BA^a=d0$+CCp`P zRhWVY&tPm(z=H!=&U{Uem1sQ8yI~9C=c{ZHu`?P@OGHF9{M2IO+NQuN?ZI%mAYpGK z%Y^-`nl~JTBG{Ptx9{5gZXI*OmkK+@-+j*oH~p_LQ&fB$+0xRxoRd@bzN$)1&Fmkn z>)tsxte@S}zrkLx|9ws8Z^4rvube+|E0O!Q>J-m9dw!E&K$5{I(O!P29w`e2YV*Ivj-HI`rg!ANX=km zC_Tf_pq0kpz-!Eq&?CuUaEOQDMKT)$j{$QP2BR01_s8z zo-U3d6}R4Ax#)Y?L4-BX%9C@-B%vTF)qt-5ib6{zbf)kLt>0VhcI*F<_viNPWdxc7 z13pJ~t$Tm_v+6G9A9v>IU)=h?k;~<6{Q{=M-=PY5`?)s6v%dPan&Efo0_t%NF!I&^ ztd@UWvF(0A;lz6nc@N@4ubm5iybzGFvtnuQ=R5fDv2(<<-?@?d>ZU!dmi_2v{Hp$c z{pa6r4OAseTkbLNmHoKr{DSAfgLZk-mY?hen-0IXZK-50_;mO^kk4jt^I<%Y&t~xR zVZ3R}XMTmUAL;xL_b_+J|BH0CxX&Q-Z>6)vc_5|gZ1E3BEp@hd#~@QTT~Q{Vfp7n7 zfj(n~c6p7Uq~sRMv}2*f+dBz!(#|Ae!;paqR>D3RrK*uV?suSTv!257Qg| q@P@x1xi;9xP*;*27I{EA_#=19Q;WbQ^EtPGL_J;oT-G@yGywpqw*xu= literal 641 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?I3?vN&YJLDImUKs7M+SzC{oH>NS%G}T0G|-o z|NsA=KYs^I-U5N=&Q|1S7&mcJ&YShS3HPeB?RZZZ4g76CFlYXiJ4(o+97OY_5k_cg{G`M?L+JD<`cjbV- o-U9_$EKjyFN^fASXZyjn@>5?x(s3IlV6tHFboFyt=akR{09Q&2wg3PC diff --git a/examples/resource-bar/assets/Star_Medium.png b/examples/resource-bar/assets/Star_Medium.png index 315be23ea1c59acf4c3690db38087e05a19a3a65..6bce4c7a6efd824aec3571aef4010b014acf09b6 100644 GIT binary patch literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSoCO|{#S9GGLLkg|>2BR01_nkE zPZ!6Kid%25JMuO=h_D36C@h>bp<#-b!yzvxCsl<+ZqJ=x9WGCqH23=?TcJsR>)S4r z0*%57)K_i2x9zc7k@$j~c~*znb;Ge(!QUA+yJI#|x&O z*Oh+~8Ml@9sZH3DZQ^2R@{mUwy~K!!DLk5WG`Y m;qOBrK8SInvh11sm5&we2Cp0Tt6q{7qH&t;ucLK6TJON1u? literal 386 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?I3?vN&YJLDImUKs7M+SzC{oH>NS%G|&0G|-o z|9AmV6;NLF((NiBi@PMqFS!4HJb(TB^ZxVY84ezOa1JQ^$C4kD}p zQPJfGLPF*|Kx(?>KC4F9i}-IA|ZdsCB`sU<=n4 zp`HWpY?#jP)%|czyNPi}-KXXa8yWLHnNI(DKqp_Ij_IAujdk%&yEXE)F2+tWXZ)FX zYQD|xS_95ydn(nR9XI^{;mvs`Lnga|8K(p}CUUC^WG;}_6v|Xwa6#)rL(po6+K48$ snwg8lSh(a_PEClH0l5z5%!qT`3+ipmdKI;Vst0FYjy*#H0l diff --git a/examples/resource-bar/assets/Star_Small.png b/examples/resource-bar/assets/Star_Small.png index 7eae179500e972fa3be1baf1ecc83781cd0c34db..0286d9fb50821fc878c2b1e90778ab7feae78ad0 100644 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSoCO|{#S9GGLLkg|>2BR0px^;d z7srr_TW>ENVK74FRd}boFyt I=akR{07xBH8~^|S delta 279 zcmeBUTE;X%qMnJFfq`LPKxYJyVo7)Ob!1@J*w6hZkrl}23GfMV{SO8}9*|~bNI3*# zF_#4S1<#LXFqEq50CKl^x;TbJ9DaLcBX6q#k89xh!$LRPRV5Ua1C}Tla48$Gv5KCk z(Y#t8mecubr`^#|k?3s+Ee#-WpsBu;=Rgrl!agPgTf2x*cX6Fn?c8ZsPqR*b^|&#f z$&EuTp(O!A&0y&en9LxUB&6Wv!{qX(@yda_tUDVwb9*sYi(g@D`{%4WnL%MT3&T+r zh81dz_CAMLSR{o7M0^|q3=it~?P@-IDxKk!T!YmI9w7lBsA155ed|EEz-!0pg+M4&8ny$FBYyx1a7bBm000XT000XT0n*)m`~Uy}Xh}ptR9M69m%U2EP!z}W z3SAUB7o6%G=vb;tsiRJUUAknG4$f|ZLx+N+eSj`bB2K=5uiyjt4oChWM{W=I>l_nx z=!HM|Aj$8Sb8nKHf{2R0OtBZRoOIahlP{eMFlc=-ruUn3dVj9Y=<{w!kC&(Qx)6*gn1A~;NIsw zR0)#+zkr(UD1SIs3Db*6z>6HPRzd^+&g_LqrhG_uN47u+?!scxNMs4*fnRU6Dxuj~xUMD;(#V1bh-25k5WzR|}*>^GrSA{Vau7T|(8 zU=3XTHRP!m1{a5+4A#KS({ec%bitiX%m2lX$^PH4ixzwVXtE6yPHw3A00000NkvXX Hu0mjf((ki| delta 3336 zcmV+j4fpc41Bx1uBYz4yX+uL$P-t&-Z*ypGa3D!TLm+T+Z)Rz1WdHz3iJg{rR8-d% zhtIutdZEoQ6e&aRy$v9}H>uJ@VVD_UC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne z9*`iQ#9$OrQF$}6R&?d%y_c8YA7_1QpS|}zXYYO1x&V;8{eQWT^B0GzjoyKE}SbXLT zb{bpEJtE$kC4c0I81WZzQ5KhzE#g}u)=U+qaYg)A9Gk{rW&(gBiR}UoD@nwrA|~;} zLfk~W6aXA4@hgu1iUph;f%sBx=^43vZeo&vuFKM+o7vhj=-!;{RE|Jk6vSkuF!^k{ zTY6dsla~v?;+;QBMqFFEsL0l4w$|20=Ei1U73#lk{(nu0d%H-lfo1g?xHu29w318~u5R|8d}7pTjVOlfdC~ zc%q1K(SMY2d5NNS^VnPgH=Rf4^8Qm3|6$mlv^duyQ5rr0YOFDk8lVE?*FJ!v5CIZ% zK(qt>(Kmm5I1s5m_f-n#TRsj}B0%?E`vVTE7*a(V13D^O4gKAI<8bA|h0VhBQ zI1Mg<%iub=0d9i_U<8bV=U@iB0rL<9VIeX^ffOKBNDDH6%pnHk2zfyMPzV$S#X*S> z4-!K8&?cw^Du=3}I;aWy9y$eGfUZJ=&^>4rnu30Z-opq?f~l}FtPPvM4A=$sgTvsJ zaDO7a8qR|Y;q7o0Tn`_E+u;lFb@(O~2}Gii1cZ;QLyD0~ zq#kKOx{zMvCNhFdBkxcc6a_^`8KLY^-l*j$7HTzW9jX*njXHvANA;j?qDE0Os847z zS_y4{wnO`%BhiWIY;+O265WVyLtjGQMt_f^-(WBp8b$|WgYm{hVUjUxFr}FNm{!br z%phhAGmFJy6|e?a2W%jgi4|aruzRt`u;;Kt*m3Mz91*9AGsk)2qH#Q20j?5v6n7Rk zgqy(4Lq)(kHo*Vn{;LcG6+edD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDrGF=7urk^*9x`m1LYYG{7iGpM2t|Y9MqyDlQ5qN`iSTS4ifPdm8#pxx~ zCH6~LONy7ASaM$pR?=4rQCg#PNU2Y0R#`>aOF2V%ukuCZX%(7^vr4i`h00l#DOHN9 zqbgUmLiL>LGrBC@g`P^UqW92e)Rfe`)r4wwYW-^S>N@Jn)eF>H)gNgPG#DBQ8WkGd z8Z(-zngN>mn$4Q`weVUDt$!q~JzBk5bJ{xE5!zd{JG3Wt@^qSY9_o^Hope|0 z*6ZHV!{{;eQuOxg-Oz{it@M-hYxD;UU;}FduEBnTK|{2mts&2_-f-B6WaMI$Wz=jm zYD_csH!d*lFn(d8X%cO+)1=qrlc|+ys%eAi12Y*jU$X+UF0d z+x51mZQt2h+X?JW*!^a2WS?Sx)P8cQ&Qi|OhNWW;>JChYI)@QQx?`N`84^=_}cic_3iN^`Gxvb`#tg3_via}1;7Em z0lNYoF4J1ZTh0(}B^1wIPW30fWWV=yK-D7Ys0X^2@!et$@BC?zyD^l0dtFxRlM zum{U^mkXD7hf9XXgg1rHMYuc#Ks{ zQOuo{IxBNlUR|ZQDs|PFSjkvs?8!KETtwW_xDU)gW<7H@-Y0%v{0z&DwTJbb?aZ!V zPjMVL<(!EGhku0fgvmsQ#9fI~Nlrer7PULy!eY*y=hP9?UUoC%Q{(tCNm$h~4pmp)YIh_3ETV2tjiAU!0h1dxU-n= zE9e!)6@RaH$L_vbX<1pjhp@`mOuh2W$p9Z`j`G8eBSfcF1Yy!cF&^mv8ypx_*1v?ZG?C@7x`Z86LUI zzB_p@_1??-S@-83Y)VV8tGge1YHcqtMBk$(=k zD1sm?6a-lZ>kxFL);?s0MOSNyt(|rfF*rXtr)A=K zQT(zg$0|W6*FdFeXnHtiJ{OH$wszVn8oQhheKgx&6$&*O(8Dodb^E%3Y5)+|XJ0d& z%R>tk0CM}$JK5+)Cjd`7-q-c{0yxNmxSC24`m|Qlx6{^L6TMrZ+Uq3HF@GEwNCME? z79rjH3xGuYT-~_QjZQOqr)LPh1x&qJH}`q!K1}EG!LC#xgtA9MQStKaJ7F`k|M8<) z5eY?w94mdI+$Sc=eZtx%=lD8?&*tYy_H?_BxqI)L1_oVY#32Wri zmBcMV4Taqx8o3{FY`;BS1%JY|2ISQXSocf==wGI;;fU<;?o55 zOc(_uysqvnKX@gQF~28@Wg_`g+yxI|ePNO46<~NOxJ$$>uzCLE0*A4-bxPVI6&1j1 z2LXf^jUjsy|T%@U=y4UcWg-7`@OEEHU;k7lC@XE)D?2nf5V~RKl5|?4bY=F UCZUPAyZ`_I07*qoM6N<$g8CZIW&i*H delta 3445 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 X7Osk%)XJW300000NkvXXu0mjfEia|4 From 26ae93eea2ff42afc3945da0769c69e6fd5b57fe Mon Sep 17 00:00:00 2001 From: Tristan Rhodes Date: Mon, 29 Aug 2022 19:49:33 -0600 Subject: [PATCH 03/98] Added new behavior based on a trimmed version of draggable slider --- examples/resource-bar/game.json | 2807 +++++++++++++++++++++++++++++-- 1 file changed, 2647 insertions(+), 160 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 41c09dddb..7392c8278 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -1319,6 +1319,21 @@ "numberProperties": [], "stringProperties": [], "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "ResourceBarNew", + "persistentUuid": "aa4df219-68f2-4026-8245-16258f68f586", + "width": 0, + "x": 448, + "y": 144, + "zOrder": 13, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] } ], "objects": [ @@ -1365,7 +1380,7 @@ }, { "name": "DrawResourceBar", - "type": "DrawResourceBar::DrawResourceBar", + "type": "DrawResourceBarOLD::DrawResourceBarOLD", "DraggableSliderBehavior": "DraggableSliderControl" } ], @@ -1428,7 +1443,7 @@ }, { "name": "DrawResourceBar", - "type": "DrawResourceBar::DrawResourceBar", + "type": "DrawResourceBarOLD::DrawResourceBarOLD", "DraggableSliderBehavior": "DraggableSliderControl" }, { @@ -1496,7 +1511,7 @@ }, { "name": "DrawResourceBar", - "type": "DrawResourceBar::DrawResourceBar", + "type": "DrawResourceBarOLD::DrawResourceBarOLD", "DraggableSliderBehavior": "DraggableSliderControl" } ], @@ -1559,7 +1574,7 @@ }, { "name": "DrawResourceBar", - "type": "DrawResourceBar::DrawResourceBar", + "type": "DrawResourceBarOLD::DrawResourceBarOLD", "DraggableSliderBehavior": "DraggableSliderControl" } ], @@ -2524,6 +2539,48 @@ "g": 255, "r": 255 } + }, + { + "assetStoreId": "", + "name": "ResourceBarNew", + "tags": "", + "type": "PrimitiveDrawing::Drawer", + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "DrawResourceBar", + "type": "DrawResourceBar::DrawResourceBar", + "ValueMin": 0, + "ValueMax": 1, + "TickSpacing": 0, + "BarLength": 200, + "BarThickness": 4, + "InactiveBarColor": "11;255;0", + "InactiveBarOpacity": 96, + "ActiveBarColor": "11;255;0", + "ActiveBarOpacity": 255, + "RoundedBar": false, + "Value": 0, + "ThumbOffset": 0, + "NeedRedraw": true + } + ], + "fillOpacity": 255, + "outlineSize": 1, + "outlineOpacity": 255, + "fillColor": { + "b": 255, + "g": 255, + "r": 255 + }, + "outlineColor": { + "b": 0, + "g": 0, + "r": 0 + }, + "absoluteCoordinates": false, + "clearBetweenFrames": true } ], "events": [ @@ -2679,7 +2736,7 @@ "actions": [ { "type": { - "value": "DrawResourceBar::DrawResourceBar::DrawHealthBar" + "value": "DrawResourceBarOLD::DrawResourceBarOLD::DrawHealthBar" }, "parameters": [ "Health_Bar", @@ -2691,7 +2748,7 @@ }, { "type": { - "value": "DrawResourceBar::DrawResourceBar::DrawHealthBar" + "value": "DrawResourceBarOLD::DrawResourceBarOLD::DrawHealthBar" }, "parameters": [ "MiniHealth_Bar", @@ -2703,7 +2760,7 @@ }, { "type": { - "value": "DrawResourceBar::DrawResourceBar::DrawShieldBar" + "value": "DrawResourceBarOLD::DrawResourceBarOLD::DrawShieldBar" }, "parameters": [ "Shield_Bar", @@ -2715,7 +2772,7 @@ }, { "type": { - "value": "DrawResourceBar::DrawResourceBar::DrawResourceBar" + "value": "DrawResourceBarOLD::DrawResourceBarOLD::DrawResourceBar" }, "parameters": [ "ResourceMouseX_Bar", @@ -2727,6 +2784,11 @@ } ] }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [] + }, { "type": "BuiltinCommonInstructions::Comment", "color": { @@ -3190,7 +3252,7 @@ }, { "name": "DrawResourceBar", - "type": "DrawResourceBar::DrawResourceBar" + "type": "DrawResourceBarOLD::DrawResourceBarOLD" }, { "name": "Health", @@ -14016,38 +14078,39 @@ }, { "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", - "category": "Input", - "description": "Draws a draggable slider that users can move to select a numerical value.\nThe value range, tick spacing, and the appearance of the slider can be defined with properties.\n\nHow to use:\n- Add this behavior a **Shape Painter** object\n- Place an instance of that shape painter on the screen where you want the slider to appear\n- Use the \"Value\" expression to find the Value based on the position of the slider\n\nTips:\n- You can disable the slider to prevent a user from interacting with it\n- You can set the Value of the slider and the slider will move to the correct position\n\nFurther details can be found in [this tutorial video](https://youtu.be/iiTUwdAT_hs).\n\nBreaking changes (1.0.0)\n- Track thickness and length properties replaced track width and height. These 2 properties must be set again if they were different from the default size.\n- Hidden sliders can be dragged. The \"enable\" action must be used to disable them.\n", + "category": "General", + "description": "How to use:\n- \n\nTips:\n- ", "extensionNamespace": "", - "fullName": "Draggable slider", + "fullName": "Draw resource bar (NEW)", "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", - "name": "DraggableSliderControl", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/UI Essentials/UI Essentials_sliders_options.svg", - "shortDescription": "A draggable slider that users can move to select a numerical value.", - "version": "1.0.5", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8cGF0aCBkPSJNMjgsMTJIMTRINGMtMi4yLDAtNCwxLjgtNCw0czEuOCw0LDQsNGgxMGgxNGMyLjIsMCw0LTEuOCw0LTRTMzAuMiwxMiwyOCwxMnogTTQsMThjLTEuMSwwLTItMC45LTItMnMwLjktMiwyLTJoMTANCgljMS4xLDAsMiwwLjksMiwycy0wLjksMi0yLDJINHoiLz4NCjwvc3ZnPg0K", + "name": "DrawResourceBar", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Glyphster Pack/Master/SVG/Interface Elements/Interface Elements_interface_ui_loading_progress_bar.svg", + "shortDescription": "Draw a resource bar that represents health, shield, or any value.", + "version": "0.0.1", "origin": { "identifier": "DraggableSliderControl", "name": "gdevelop-extension-store" }, "tags": [ - "draggable", - "slider", + "health", + "shield", + "resource", "shape painter", "ui", "widget" ], "authorIds": [ - "IWykYNRvhCZBN3vEgKEbBPOR3Oc2", - "gqDaZjCfevOOxBYkK6zlhtZnXCg1" + "gqDaZjCfevOOxBYkK6zlhtZnXCg1", + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" ], "dependencies": [], "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "Let users select a numerical value by dragging a slider.", - "fullName": "Draggable slider", - "name": "DraggableSliderControl", + "description": "Draw a resource bar that represents health, shield, or any value.", + "fullName": "Draw resource bar", + "name": "DrawResourceBar", "objectType": "PrimitiveDrawing::Drawer", "eventsFunctions": [ { @@ -14117,66 +14180,6 @@ } ] }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set track height function (which enforces valid thumb sizes)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTrackThickness" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyTrackThickness()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Start halo at same size as thumb", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::PropertyThumbHeight()/2,Object.Behavior::PropertyThumbWidth()/2)" - ] - } - ] - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], @@ -14212,7 +14215,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", "type": "behavior" } ], @@ -14223,7 +14226,7 @@ "fullName": "", "functionType": "Action", "group": "", - "name": "doStepPreEvents", + "name": "doStepPostEvents", "private": false, "sentence": "", "events": [ @@ -14232,7 +14235,7 @@ "colorG": 176, "colorR": 74, "creationTime": 0, - "name": "Slider logic", + "name": "Slider drawing", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ @@ -14241,85 +14244,2569 @@ "conditions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::IsEnabled" + "value": "DraggableSliderControl::DraggableSliderControl::PropertyNeedRedraw" }, "parameters": [ "Object", - "Behavior", - "" + "Behavior" ] - } - ], - "actions": [], - "events": [ + }, { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "Visible" }, - "comment": "Track where the mouse is (in relation to object)", - "comment2": "" + "parameters": [ + "Object" + ] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyMouseX" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.ToDrawingX(MouseX(Object.Layer(), 0), MouseY(Object.Layer(), 0))" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyMouseY" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.ToDrawingY(MouseX(Object.Layer(), 0), MouseY(Object.Layer(), 0))" - ] - } + "type": { + "value": "LayerVisible" + }, + "parameters": [ + "", + "Object.Layer()" ] - }, + } + ], + "actions": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" }, - "comment": "Move slider when being dragged", - "comment2": "" + "parameters": [ + "Object", + "Behavior", + "no" + ] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "type": { + "value": "PrimitiveDrawing::Drawer::ClearShapes" + }, + "parameters": [ + "Object" + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Inactive bar", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ + "comment": "Set inactive track parameters (by default, use the active bar color)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DrawResourceBar::DrawResourceBar::PropertyInactiveBarColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyActiveBarColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DrawResourceBar::DrawResourceBar::PropertyInactiveBarColor" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyInactiveBarColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyInactiveBarOpacity()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::OutlineOpacity" + }, + "parameters": [ + "Object", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw inactive track", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset()", + "-Object.Behavior::PropertyBarThickness() / 2", + "Object.Behavior::PropertyBarLength()", + "Object.Behavior::PropertyBarThickness() / 2" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw half circle at end of track (inactive side)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DrawResourceBar::DrawResourceBar::PropertyRoundedBar" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Arc" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyBarLength()", + "0", + "Object.Behavior::PropertyBarThickness() / 2", + "270", + "90", + "", + "yes" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Active bar", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set active track parameters", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DrawResourceBar::DrawResourceBar::PropertyActiveBarColor" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyActiveBarColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyActiveBarOpacity()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw active bar", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "Object", + "0", + "-(Object.Behavior::PropertyBarThickness() / 2)", + "Object.Behavior::PropertyThumbOffset()", + "Object.Behavior::PropertyBarThickness() / 2" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw half circle at end of bar (active side)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DrawResourceBar::DrawResourceBar::PropertyRoundedBar" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Arc" + }, + "parameters": [ + "Object", + "0", + "0", + "Object.Behavior::PropertyBarThickness() / 2", + "90", + "270", + "", + "yes" + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "The value of the resource bar.", + "fullName": "Value", + "functionType": "Expression", + "group": "Bar", + "name": "Value", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValue()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the value of the resource bar.", + "fullName": "Value", + "functionType": "Action", + "group": "Resource Bar", + "name": "SetValue", + "private": false, + "sentence": "Change the value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + "<=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "round(GetArgumentAsNumber(\"Value\") / Object.Behavior::PropertyTickSpacing()) * Object.Behavior::PropertyTickSpacing()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyValueMin()" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValueMin()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::PropertyValueMax()" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValueMax()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set the proper offset", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbOffset" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyBarLength() * (Object.Behavior::PropertyValue() - Object.Behavior::PropertyValueMin()) / (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin())" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Resource bar value", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "The minimum value of the resource bar.", + "fullName": "Minimum value", + "functionType": "Expression", + "group": "Value configuration", + "name": "ValueMin", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValueMin()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the minimum value of the resource bar.", + "fullName": "Minimum value", + "functionType": "Action", + "group": "Value configuration", + "name": "SetValueMin", + "private": false, + "sentence": "Change the minimum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValueMin" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"ValueMin\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::Value()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Minimum value", + "longDescription": "", + "name": "ValueMin", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "The maximum value of the resource bar.", + "fullName": "Maximum value", + "functionType": "Expression", + "group": "Value configuration", + "name": "ValueMax", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValueMax()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Thickness of the resource bar.", + "fullName": "Bar thickness", + "functionType": "Expression", + "group": "Bar configuration", + "name": "BarThickness", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyBarThickness()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Length of the resource bar.", + "fullName": "Bar length", + "functionType": "Expression", + "group": "Bar configuration", + "name": "BarLength", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyBarLength()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the maximum value of a resource bar.", + "fullName": "Maximum value", + "functionType": "Action", + "group": "Bar value configuration", + "name": "SetValueMax", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValueMax" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"ValueMax\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::Value()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Maximum value", + "longDescription": "", + "name": "ValueMax", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "The tick spacing of a bar.", + "fullName": "Tick spacing", + "functionType": "Expression", + "group": "Value configuration", + "name": "TickSpacing", + "private": false, + "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTickSpacing()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Tick spacing", + "longDescription": "", + "name": "TickSpacing", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the tick spacing of a resource bar.", + "fullName": "Tick spacing", + "functionType": "Action", + "group": "Value configuration", + "name": "SetTickSpacing", + "private": false, + "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"TickSpacing\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::Value()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Tick spacing", + "longDescription": "", + "name": "TickSpacing", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change length of a resource bar.", + "fullName": "Bar length", + "functionType": "Action", + "group": "Bar configuration", + "name": "SetBarLength", + "private": false, + "sentence": "Change bar length of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTrackLength" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move thumb to correct place (based on new track size)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyValue()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Track width", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change thickness of a resource bar", + "fullName": "Bar thickness", + "functionType": "Action", + "group": "Bar configuration", + "name": "SetBarThickness", + "private": false, + "sentence": "Change the bar thickness of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTrackThickness" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure thumb width is not smaller than track height + 2 pixels (to prevent track ends from showing)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyBarThickness() + 2" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyBarThickness() + 2", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbHeight" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyBarThickness() + 2" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetThumbHeight" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyBarThickness() + 2", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Track thickness", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Make bar use rounded ends.", + "fullName": "Rounded bar ends", + "functionType": "Action", + "group": "Bar configuration", + "name": "SetRoundedBar", + "private": false, + "sentence": "Draw _PARAM0_ with a rounded bar: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "GetArgumentAsNumber(\"Value\")", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyRoundedTrack" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "GetArgumentAsNumber(\"Value\")", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyRoundedTrack" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Rounded bar", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Change opacity of inactive bar.", + "fullName": "Inactive bar opacity", + "functionType": "Action", + "group": "Bar configuration", + "name": "SetInactiveBarOpacity", + "private": false, + "sentence": "Change inactive bar opacity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyInactiveTrackOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Inactive bar opacity", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change opacity of active bar.", + "fullName": "Active bar opacity", + "functionType": "Action", + "group": "Bar configuration", + "name": "SetActiveBarOpacity", + "private": false, + "sentence": "Change active bar opacity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyActiveTrackOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Active bar opacity", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the color of the left side of the bar.", + "fullName": "Active bar color ", + "functionType": "Action", + "group": "Bar configuration", + "name": "SetActiveBarColor", + "private": false, + "sentence": "Change active bar color of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyActiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Color\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Active bar color", + "longDescription": "", + "name": "Color", + "optional": false, + "supplementaryInformation": "", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "Change the color of the right side of the resource bar.", + "fullName": "Inactive bar color", + "functionType": "Action", + "group": "Bar configuration", + "name": "SetInactiveBarColor", + "private": false, + "sentence": "Change inactive bar color of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyInactiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Color\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Inactive bar color", + "longDescription": "", + "name": "Color", + "optional": false, + "supplementaryInformation": "", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "Update the hitbox.", + "fullName": "Update hitbox", + "functionType": "Action", + "group": "Private", + "name": "UpdateHitbox", + "private": true, + "sentence": "Update the hitbox of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::SetRotationCenter" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyBarLength() / 2", + "Object.Behavior::PropertyBarThickness() / 2" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::SetRectangularCollisionMask" + }, + "parameters": [ + "Object", + "0", + "-Object.Behavior::PropertyBarThickness() / 2", + "Object.Behavior::PropertyBarLength()", + "Object.Behavior::PropertyBarThickness() / 2" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Draw health bar.", + "fullName": "Draw health bar", + "functionType": "Action", + "group": "", + "name": "DrawHealthBar", + "private": false, + "sentence": "Draw health bar with _PARAM0_ based on health of _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set values", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "Tween::Ease(\"easeOutCirc\", Object.Behavior::Value(), ObjectWithHealth.HealthBehavior::Health(), 0.05)", + "" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValueMax" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "ObjectWithHealth.HealthBehavior::MaxHealth()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Object with health", + "longDescription": "", + "name": "ObjectWithHealth", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Health behavior", + "longDescription": "", + "name": "HealthBehavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Draw shield bar.", + "fullName": "Draw shield bar", + "functionType": "Action", + "group": "", + "name": "DrawShieldBar", + "private": false, + "sentence": "Draw shield bar with _PARAM0_ based on shield of _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set values", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "Tween::Ease(\"easeOutCirc\", Object.Behavior::Value(), ObjectWithShield.ShieldBehavior::ShieldPoints(), 0.05)", + "" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValueMax" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "ObjectWithShield.ShieldBehavior::MaxShield()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Object with shield", + "longDescription": "", + "name": "ObjectWithShield", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Shield behavior", + "longDescription": "", + "name": "ShieldBehavior", + "optional": false, + "supplementaryInformation": "Health::Shield", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Draw resource bar.", + "fullName": "Draw resource bar", + "functionType": "Action", + "group": "", + "name": "DrawResourceBar", + "private": false, + "sentence": "Draw resource bar with _PARAM0_ with current value _PARAM2_ and max value _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set values", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "Tween::Ease(\"easeOutCirc\", Object.Behavior::Value(), GetArgumentAsNumber(\"CurrentValue\"), 0.05)", + "" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValueMax" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "GetArgumentAsNumber(\"MaxValue\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Current value", + "longDescription": "", + "name": "CurrentValue", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Max value", + "longDescription": "", + "name": "MaxValue", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "expression" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0", + "type": "Number", + "label": "Minimum value", + "description": "", + "group": "Value", + "extraInformation": [], + "hidden": false, + "name": "ValueMin" + }, + { + "value": "1", + "type": "Number", + "label": "Maximum value", + "description": "", + "group": "Value", + "extraInformation": [], + "hidden": false, + "name": "ValueMax" + }, + { + "value": "0", + "type": "Number", + "label": "Tick spacing", + "description": "", + "group": "Value", + "extraInformation": [], + "hidden": false, + "name": "TickSpacing" + }, + { + "value": "200", + "type": "Number", + "label": "Bar length", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "BarLength" + }, + { + "value": "4", + "type": "Number", + "label": "Bar thickness", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "BarThickness" + }, + { + "value": "11;255;0", + "type": "Color", + "label": "Inactive bar color", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "InactiveBarColor" + }, + { + "value": "96", + "type": "Number", + "label": "Inactive bar opacity", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "InactiveBarOpacity" + }, + { + "value": "11;255;0", + "type": "Color", + "label": "Active bar color", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "ActiveBarColor" + }, + { + "value": "255", + "type": "Number", + "label": "Active bar opacity", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "ActiveBarOpacity" + }, + { + "value": "false", + "type": "Boolean", + "label": "Rounded bar ends", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "RoundedBar" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "Value" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ThumbOffset" + }, + { + "value": "true", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "NeedRedraw" + }, + { + "value": "0", + "type": "Number", + "label": "Time to complete moving the bar when the value is changed (seconds)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ChangeDuration" + } + ] + } + ] + }, + { + "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", + "category": "Input", + "description": "Draws a draggable slider that users can move to select a numerical value.\nThe value range, tick spacing, and the appearance of the slider can be defined with properties.\n\nHow to use:\n- Add this behavior a **Shape Painter** object\n- Place an instance of that shape painter on the screen where you want the slider to appear\n- Use the \"Value\" expression to find the Value based on the position of the slider\n\nTips:\n- You can disable the slider to prevent a user from interacting with it\n- You can set the Value of the slider and the slider will move to the correct position\n\nFurther details can be found in [this tutorial video](https://youtu.be/iiTUwdAT_hs).\n\nBreaking changes (1.0.0)\n- Track thickness and length properties replaced track width and height. These 2 properties must be set again if they were different from the default size.\n- Hidden sliders can be dragged. The \"enable\" action must be used to disable them.\n", + "extensionNamespace": "", + "fullName": "Draggable slider", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", + "name": "DraggableSliderControl", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/UI Essentials/UI Essentials_sliders_options.svg", + "shortDescription": "A draggable slider that users can move to select a numerical value.", + "version": "1.0.5", + "origin": { + "identifier": "DraggableSliderControl", + "name": "gdevelop-extension-store" + }, + "tags": [ + "draggable", + "slider", + "shape painter", + "ui", + "widget" + ], + "authorIds": [ + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2", + "gqDaZjCfevOOxBYkK6zlhtZnXCg1" + ], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "Let users select a numerical value by dragging a slider.", + "fullName": "Draggable slider", + "name": "DraggableSliderControl", + "objectType": "PrimitiveDrawing::Drawer", + "eventsFunctions": [ + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "onCreated", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure object doesn't get re-drawn every frame", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::ClearBetweenFrames" + }, + "parameters": [ + "Object", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Use correct min value (instead of always starting at 0)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValueMin()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set track height function (which enforces valid thumb sizes)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTrackThickness" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyTrackThickness()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Start halo at same size as thumb", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::PropertyThumbHeight()/2,Object.Behavior::PropertyThumbWidth()/2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "doStepPreEvents", + "private": false, + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Slider logic", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::IsEnabled" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Track where the mouse is (in relation to object)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyMouseX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.ToDrawingX(MouseX(Object.Layer(), 0), MouseY(Object.Layer(), 0))" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyMouseY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.ToDrawingY(MouseX(Object.Layer(), 0), MouseY(Object.Layer(), 0))" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move slider when being dragged", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ { "type": { "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbOffset" @@ -18377,12 +20864,12 @@ "category": "General", "description": "\nTo adjust the appearance of the resource bar, edit the Draggable Slider properties. The shape painter appearance settings will be overwritten by the Draggable Slider.", "extensionNamespace": "", - "fullName": "Draw resource bar (health, shield, etc)", + "fullName": "Draw resource bar (health, shield, etc) OLD", "helpPath": "", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8cGF0aCBkPSJNMjgsMTJIMTRINGMtMi4yLDAtNCwxLjgtNCw0czEuOCw0LDQsNGgxMGgxNGMyLjIsMCw0LTEuOCw0LTRTMzAuMiwxMiwyOCwxMnogTTQsMThjLTEuMSwwLTItMC45LTItMnMwLjktMiwyLTJoMTANCgljMS4xLDAsMiwwLjksMiwycy0wLjksMi0yLDJINHoiLz4NCjwvc3ZnPg0K", - "name": "DrawResourceBar", + "name": "DrawResourceBarOLD", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Glyphster Pack/Master/SVG/Interface Elements/Interface Elements_interface_ui_loading_progress_bar.svg", - "shortDescription": "Draw a bar that displays a resource like health, shield, or any variable.", + "shortDescription": "Draw a bar that displays a resource like health, shield, or any value.", "version": "0.0.1", "tags": [], "authorIds": [ @@ -18393,8 +20880,8 @@ "eventsBasedBehaviors": [ { "description": "", - "fullName": "", - "name": "DrawResourceBar", + "fullName": "Draw resource bar (OLD)", + "name": "DrawResourceBarOLD", "objectType": "PrimitiveDrawing::Drawer", "eventsFunctions": [ { @@ -18466,7 +20953,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "supplementaryInformation": "DrawResourceBarOLD::DrawResourceBarOLD", "type": "behavior" }, { @@ -18561,7 +21048,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "supplementaryInformation": "DrawResourceBarOLD::DrawResourceBarOLD", "type": "behavior" }, { @@ -18656,7 +21143,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "supplementaryInformation": "DrawResourceBarOLD::DrawResourceBarOLD", "type": "behavior" }, { @@ -18784,7 +21271,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "supplementaryInformation": "DrawResourceBarOLD::DrawResourceBarOLD", "type": "behavior" } ], From 98fe48d8c83c9e1f3bb5249cc529fce5187f989c Mon Sep 17 00:00:00 2001 From: Tristan Rhodes Date: Sun, 4 Sep 2022 20:26:35 -0600 Subject: [PATCH 04/98] Started UnitResourceBar --- examples/resource-bar/assets/Emote Heart.png | Bin 0 -> 265 bytes examples/resource-bar/game.json | 4955 +++++++++++++++++- 2 files changed, 4951 insertions(+), 4 deletions(-) create mode 100644 examples/resource-bar/assets/Emote Heart.png diff --git a/examples/resource-bar/assets/Emote Heart.png b/examples/resource-bar/assets/Emote Heart.png new file mode 100644 index 0000000000000000000000000000000000000000..3e52a6e23d8afbe09cb3c1d52e557e6eeeb7e09a GIT binary patch literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^3P7yJ!VDzCd0TD)DVB6cUq=Rpjs4tz5?O(Kl>na* z*Z&M5{~3b+GlYT}Kz1OI@ed>j6bS~Z0&=TW3$1}H?vfzC;QsaY_5S+j_w&DJ5d7Pi z2NbUKba4#PIG-HR$|k`!`M{)4Mfw75+!62Z?UigvWa=&hGK$S6TxjCbxx>pE6wr9p zpfPp_OV}ZnG)Gpk11vihFlld6{F57NP`<^H#pnTFvj(Gf!>^^h>lm~)Fugc8H}=H7 w-aC7%wYt7fKX*^ERZ4DRFnjWzfM^DWUd@S*&p%Ko2Reem)78&qol`;+0J{@iCjbBd literal 0 HcmV?d00001 diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 7392c8278..3097fd371 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -1148,6 +1148,19 @@ "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Background/Moon.png", "name": "gdevelop-asset-store" } + }, + { + "alwaysLoaded": false, + "file": "assets/Emote Heart.png", + "kind": "image", + "metadata": "", + "name": "Emote Heart.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Emotes/Normal/Emote/Emote Heart.png", + "name": "gdevelop-asset-store" + } } ], "resourceFolders": [] @@ -1325,11 +1338,11 @@ "customSize": false, "height": 0, "layer": "", - "name": "ResourceBarNew", - "persistentUuid": "aa4df219-68f2-4026-8245-16258f68f586", + "name": "Heart_ResourceBar", + "persistentUuid": "0c4d4e97-0b53-4f05-8468-7d8b7a7fa8dd", "width": 0, - "x": 448, - "y": 144, + "x": 32, + "y": 464, "zOrder": 13, "numberProperties": [], "stringProperties": [], @@ -2581,6 +2594,98 @@ }, "absoluteCoordinates": false, "clearBetweenFrames": true + }, + { + "assetStoreId": "8d524a624fbc72a1fd6c3975369a7cd55b8a52035887ef664bcd93bf8e273881", + "name": "Heart_ResourceBar", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "UnitResourceBar", + "type": "ResourceBar::UnitResourceBar", + "StartingUnits": 0, + "CurrentUnits": 5, + "MaxUnits": 0, + "UnitSpacing": 0, + "NextUnitToCreate": 0 + } + ], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Emote Heart.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "8d524a624fbc72a1fd6c3975369a7cd55b8a52035887ef664bcd93bf8e273881", + "name": "Heart_Unit", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Emote Heart.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] } ], "events": [ @@ -3219,6 +3324,24 @@ } ], "parameters": [] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::UnitResourceBar::DisplayUnitResourceBar" + }, + "parameters": [ + "Heart_ResourceBar", + "UnitResourceBar", + "Heart_Unit", + "5", + "" + ] + } + ] } ], "layers": [ @@ -3269,12 +3392,4836 @@ { "name": "Sticker", "type": "Sticker::Sticker" + }, + { + "name": "UnitResourceBar", + "type": "ResourceBar::UnitResourceBar" } ] } ], "externalEvents": [], "eventsFunctionsExtensions": [ + { + "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", + "category": "Input", + "description": "Solid resource bar\n\nUnit resource bar", + "extensionNamespace": "", + "fullName": "Resource bar", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", + "name": "ResourceBar", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/UI Essentials/UI Essentials_sliders_options.svg", + "shortDescription": "Displays a bar that represents a resource in the game (health, shield, mana, ammo, etc)", + "version": "0.0.1", + "origin": { + "identifier": "DraggableSliderControl", + "name": "gdevelop-extension-store" + }, + "tags": [ + "resource", + "bar", + "shape painter", + "health", + "mana", + "shield", + "hearts", + "lives" + ], + "authorIds": [ + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2", + "gqDaZjCfevOOxBYkK6zlhtZnXCg1" + ], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "Displays a solid bar that represents a resource in the game (health, shield, mana, ammo, etc)", + "fullName": "Solid resource bar", + "name": "SolidResourceBar", + "objectType": "PrimitiveDrawing::Drawer", + "eventsFunctions": [ + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "onCreated", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure object doesn't get re-drawn every frame", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::ClearBetweenFrames" + }, + "parameters": [ + "Object", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Use correct min value (instead of always starting at 0)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValueMin()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set track height function (which enforces valid thumb sizes)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyTrackThickness" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyTrackThickness()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Start halo at same size as thumb", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::PropertyThumbHeight()/2,Object.Behavior::PropertyThumbWidth()/2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "doStepPreEvents", + "private": false, + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Slider logic", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::IsEnabled" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Track where the mouse is (in relation to object)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyMouseX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.ToDrawingX(MouseX(Object.Layer(), 0), MouseY(Object.Layer(), 0))" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyMouseY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.ToDrawingY(MouseX(Object.Layer(), 0), MouseY(Object.Layer(), 0))" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move slider when being dragged", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyThumbOffset" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyMouseX()" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "End sliding and update variables", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "MouseButtonReleased" + }, + "parameters": [ + "", + "Left" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Update \"Value\" based on the location of the thumb", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyValueMin() + (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin()) * Object.Behavior::PropertyThumbOffset() / Object.Behavior::PropertyTrackLength()", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Grow halo even more when pressed", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyTargetHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "1.25 * Object.Behavior::PropertyHaloRadius()" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Detect hover/touch/click (but only if the layer and object is visible, and the object is not already being dragged)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "ResourceBar::SolidResourceBar::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Detect mouse clicks near track, start dragging", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SourisBouton" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseX()", + ">=", + "-Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseX()", + "<=", + "Object.Behavior::PropertyTrackLength() + Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseY()", + ">=", + "-Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseY()", + "<=", + "Object.Behavior::PropertyHaloRadius()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Reset hover detection ", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyIsHovered" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Grow halo when hovered", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SourisBouton" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseX()", + ">=", + "Object.Behavior::PropertyThumbOffset() - Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseX()", + "<=", + "Object.Behavior::PropertyThumbOffset() + Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseY()", + ">=", + "- Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseY()", + "<=", + "Object.Behavior::PropertyHaloRadius()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyIsHovered" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyTargetHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyHaloRadius()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Shrink halo to zero when not hovered", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "ResourceBar::SolidResourceBar::PropertyIsHovered" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyTargetHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "Object.Behavior::PropertyTargetHaloRadius()" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Redraw slider only when halo is not at final size", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "abs(Object.Behavior::PropertyCurrentHaloRadius() - Object.Behavior::PropertyTargetHaloRadius())", + "<", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyTargetHaloRadius()" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "Object.Behavior::PropertyTargetHaloRadius()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "lerp(Object.Behavior::PropertyCurrentHaloRadius(), Object.Behavior::PropertyTargetHaloRadius(), Object.Behavior::PropertyHaloGrowSpeed())" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "doStepPostEvents", + "private": false, + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Slider drawing", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "Visible" + }, + "parameters": [ + "Object" + ] + }, + { + "type": { + "value": "LayerVisible" + }, + "parameters": [ + "", + "Object.Layer()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::Drawer::ClearShapes" + }, + "parameters": [ + "Object" + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Inactive track", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set inactive track parameters (by default, use thumb color)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyInactiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyInactiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyInactiveTrackColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyInactiveTrackOpacity()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::OutlineOpacity" + }, + "parameters": [ + "Object", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw inactive track", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset()", + "-Object.Behavior::PropertyTrackThickness() / 2", + "Object.Behavior::PropertyTrackLength()", + "Object.Behavior::PropertyTrackThickness() / 2" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw half circle at end of track (inactive side)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyRoundedTrack" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Arc" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyTrackLength()", + "0", + "Object.Behavior::PropertyTrackThickness() / 2", + "270", + "90", + "", + "yes" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Active track", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set active track parameters (by default, use thumb color)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyActiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyActiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyActiveTrackColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyActiveTrackOpacity()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw active track (2 pixels bigger than property) ", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "Object", + "0", + "-(Object.Behavior::PropertyTrackThickness() / 2 + 1)", + "Object.Behavior::PropertyThumbOffset()", + "Object.Behavior::PropertyTrackThickness() / 2 + 1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw half circle at end of track (active side)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyRoundedTrack" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Arc" + }, + "parameters": [ + "Object", + "0", + "0", + "1 + Object.Behavior::PropertyTrackThickness() / 2", + "90", + "270", + "", + "yes" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Halo", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Prepare halo", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbColor()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::OutlineOpacity" + }, + "parameters": [ + "Object", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw halo (it will grow or shrink as needed)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "ResourceBar::SolidResourceBar::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyHaloOpacityHover()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::Circle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset()", + "0", + "Object.Behavior::PropertyCurrentHaloRadius()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Use a more opaque halo while being dragged (it will grow or shrink as needed)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyHaloOpacityClick()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::Circle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset()", + "0", + "Object.Behavior::PropertyCurrentHaloRadius()" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Thumb", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Prepare thumb settings", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbColor()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyThumbOpacity()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw Circle thumb", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyThumbShape" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"circle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Circle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset()", + "0", + "ceil(max(Object.Behavior::PropertyThumbWidth(),Object.Behavior::PropertyThumbHeight())/2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw Rectangle thumb", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyThumbShape" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"rectangle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset() - (Object.Behavior::PropertyThumbWidth() / 2)", + "-Object.Behavior::PropertyThumbHeight() / 2", + "Object.Behavior::PropertyThumbOffset() + (Object.Behavior::PropertyThumbWidth() / 2)", + "Object.Behavior::PropertyThumbHeight() / 2" + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the slider is being dragged.", + "fullName": "Being dragged", + "functionType": "Condition", + "group": "Slider", + "name": "IsBeingDragged", + "private": false, + "sentence": "_PARAM0_ is being dragged", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the slider interations are enabled.", + "fullName": "Interactions enabled", + "functionType": "Condition", + "group": "Slider", + "name": "IsEnabled", + "private": false, + "sentence": "Interactions of _PARAM0_ are enabled", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyEnabled" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Enable or disable the slider. Users cannot interact while it is disabled.", + "fullName": "Enable interactions", + "functionType": "Action", + "group": "Slider", + "name": "SetEnabled", + "private": false, + "sentence": "Enable interactions of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Enable\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyEnabled" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Stop dragging (so the slider won't be dragging when it gets enabled)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Reset halo size (so halo won't appear when slider gets enabled)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyTargetHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Enable\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyEnabled" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Enable", + "longDescription": "", + "name": "Enable", + "optional": false, + "supplementaryInformation": "", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "The value of the slider (based on position of the thumb).", + "fullName": "Slider value", + "functionType": "Expression", + "group": "Slider", + "name": "Value", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValue()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the value of a slider (this will move the thumb to the correct position).", + "fullName": "Slider value", + "functionType": "Action", + "group": "Slider", + "name": "SetValue", + "private": false, + "sentence": "Change the value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + "<=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "round(GetArgumentAsNumber(\"Value\") / Object.Behavior::PropertyTickSpacing()) * Object.Behavior::PropertyTickSpacing()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyValueMin()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValueMin()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::PropertyValueMax()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValueMax()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set the proper offset (it moves the slider)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyThumbOffset" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyTrackLength() * (Object.Behavior::PropertyValue() - Object.Behavior::PropertyValueMin()) / (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin())" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Slider value", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "The minimum value of a slider.", + "fullName": "Slider minimum value", + "functionType": "Expression", + "group": "Slider value configuration", + "name": "ValueMin", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValueMin()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the minimum value of a slider.", + "fullName": "Slider minimum value", + "functionType": "Action", + "group": "Slider value configuration", + "name": "SetValueMin", + "private": false, + "sentence": "Change the minimum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyValueMin" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"ValueMin\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::Value()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Minimum value", + "longDescription": "", + "name": "ValueMin", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "The maximum value of a slider.", + "fullName": "Slider maximum value", + "functionType": "Expression", + "group": "Slider value configuration", + "name": "ValueMax", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValueMax()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Thickness of track.", + "fullName": "Slider track thickness", + "functionType": "Expression", + "group": "Slider track configuration", + "name": "TrackThickness", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTrackThickness()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Length of track.", + "fullName": "Slider track length", + "functionType": "Expression", + "group": "Slider track configuration", + "name": "TrackLength", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTrackLength()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Height of thumb.", + "fullName": "Slider thumb height", + "functionType": "Expression", + "group": "Slider thumb configuration", + "name": "ThumbHeight", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyThumbHeight()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the maximum value of a slider.", + "fullName": "Slider maximum value", + "functionType": "Action", + "group": "Slider value configuration", + "name": "SetValueMax", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyValueMax" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"ValueMax\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::Value()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Maximum value", + "longDescription": "", + "name": "ValueMax", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "The tick spacing of a slider.", + "fullName": "Tick spacing", + "functionType": "Expression", + "group": "Slider value configuration", + "name": "TickSpacing", + "private": false, + "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTickSpacing()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Tick spacing", + "longDescription": "", + "name": "TickSpacing", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the tick spacing of a slider.", + "fullName": "Tick spacing", + "functionType": "Action", + "group": "Slider value configuration", + "name": "SetTickSpacing", + "private": false, + "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"TickSpacing\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::Value()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Tick spacing", + "longDescription": "", + "name": "TickSpacing", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change length of track.", + "fullName": "Track length", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetTrackLength", + "private": false, + "sentence": "Change track length of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyTrackLength" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move thumb to correct place (based on new track size)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyValue()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Track width", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change thickness of track.", + "fullName": "Track thickness", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetTrackThickness", + "private": false, + "sentence": "Change track thickness of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyTrackThickness" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure thumb width is not smaller than track height + 2 pixels (to prevent track ends from showing)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyTrackThickness() + 2" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyTrackThickness() + 2", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyThumbHeight" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyTrackThickness() + 2" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetThumbHeight" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyTrackThickness() + 2", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Track thickness", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change width of thumb.", + "fullName": "Thumb width", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetThumbWidth", + "private": false, + "sentence": "Change thumb width of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Thumb cannot be less than track thickness (plus 2 pixels)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyTrackThickness() + 2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Thumb width", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change height of thumb.", + "fullName": "Thumb height", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetThumbHeight", + "private": false, + "sentence": "Change thumb height of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Thumb cannot be less than track thickness (plus 2 pixels)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyThumbHeight" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyTrackThickness() + 2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Thumb height", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change radius of the halo around the thumb. This size is also used to detect interaction with the slider.", + "fullName": "Halo radius", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetHaloRadius", + "private": false, + "sentence": "Change halo radius of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Halo radius", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the halo opacity when the thumb is hovered.", + "fullName": "Halo opacity (hover)", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetHaloOpacityHover", + "private": false, + "sentence": "Change the halo opacity when hovered of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyHaloOpacityHover" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Halo opacity (hover)", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change opacity of halo when pressed.", + "fullName": "Halo opacity (pressed)", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetHaloOpacityPressed", + "private": false, + "sentence": "Change halo opacity when pressed of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyHaloOpacityClick" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Halo opacity (pressed)", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change shape of thumb (circle or rectangle).", + "fullName": "Thumb shape", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetThumbShape", + "private": false, + "sentence": "Change shape of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyThumbShape" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Shape\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure thumb width is not smaller than track height (to prevent track ends from showing)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyThumbShape" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"rectangle\"" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyTrackThickness()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyTrackThickness()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "New thumb shape", + "longDescription": "", + "name": "Shape", + "optional": false, + "supplementaryInformation": "[\"circle\",\"rectangle\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Make track use rounded ends.", + "fullName": "Rounded track ends", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetRoundedTrack", + "private": false, + "sentence": "Draw _PARAM0_ with a rounded track: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "GetArgumentAsNumber(\"Value\")", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyRoundedTrack" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "GetArgumentAsNumber(\"Value\")", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyRoundedTrack" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Rounded track", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Change opacity of thumb.", + "fullName": "Thumb opacity", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetThumbOpacity", + "private": false, + "sentence": "Change thumb opacity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyThumbOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Thumb opacity", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change opacity of inactive track.", + "fullName": "Inactive track opacity", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetInactiveTrackOpacity", + "private": false, + "sentence": "Change inactive track opacity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyInactiveTrackOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Inactive track opacity", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change opacity of active track.", + "fullName": "Active track opacity", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetActiveTrackOpacity", + "private": false, + "sentence": "Change active track opacity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyActiveTrackOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Active track opacity", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the color of the track that is LEFT of the thumb.", + "fullName": "Active track color ", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetActiveTrackColor", + "private": false, + "sentence": "Change active track color of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyActiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Color\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Active track color", + "longDescription": "", + "name": "Color", + "optional": false, + "supplementaryInformation": "", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "Change the color of the track that is RIGHT of the thumb.", + "fullName": "Inactive track color", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetInactiveTrackColor", + "private": false, + "sentence": "Change inactive track color of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyInactiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Color\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Inactive track color", + "longDescription": "", + "name": "Color", + "optional": false, + "supplementaryInformation": "", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "Change the thumb color to a specific value.", + "fullName": "Thumb color", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetThumbColor", + "private": false, + "sentence": "Change thumb color of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyThumbColor" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsString(\"Color\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Thumb color", + "longDescription": "", + "name": "Color", + "optional": false, + "supplementaryInformation": "", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "Update the hitbox.", + "fullName": "Update hitbox", + "functionType": "Action", + "group": "Private", + "name": "UpdateHitbox", + "private": true, + "sentence": "Update the hitbox of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::SetRotationCenter" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyTrackLength() / 2", + "Object.Behavior::PropertyTrackThickness() / 2" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::SetRectangularCollisionMask" + }, + "parameters": [ + "Object", + "-Object.Behavior::PropertyThumbWidth() / 2", + "-Object.Behavior::PropertyThumbHeight() / 2", + "Object.Behavior::PropertyTrackLength() + Object.Behavior::PropertyThumbWidth() / 2", + "Object.Behavior::PropertyThumbHeight() / 2" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0", + "type": "Number", + "label": "Minimum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ValueMin" + }, + { + "value": "1", + "type": "Number", + "label": "Maximum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ValueMax" + }, + { + "value": "0", + "type": "Number", + "label": "Tick spacing", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "TickSpacing" + }, + { + "value": "circle", + "type": "Choice", + "label": "Thumb shape", + "description": "", + "group": "Thumb", + "extraInformation": [ + "circle", + "rectangle" + ], + "hidden": false, + "name": "ThumbShape" + }, + { + "value": "20", + "type": "Number", + "label": "Thumb width", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "ThumbWidth" + }, + { + "value": "20", + "type": "Number", + "label": "Thumb height", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "ThumbHeight" + }, + { + "value": " 24;119;211", + "type": "Color", + "label": "Thumb Color", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "ThumbColor" + }, + { + "value": "255", + "type": "Number", + "label": "Thumb opacity", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "ThumbOpacity" + }, + { + "value": "200", + "type": "Number", + "label": "Track length", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "TrackLength" + }, + { + "value": "4", + "type": "Number", + "label": "Track thickness", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "TrackThickness" + }, + { + "value": "", + "type": "String", + "label": "Inactive track color (thumb color by default)", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "InactiveTrackColor" + }, + { + "value": "96", + "type": "Number", + "label": "Inactive track opacity", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "InactiveTrackOpacity" + }, + { + "value": " ", + "type": "String", + "label": "Active track color (thumb color by default)", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "ActiveTrackColor" + }, + { + "value": "255", + "type": "Number", + "label": "Active track opacity", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "ActiveTrackOpacity" + }, + { + "value": "24", + "type": "Number", + "label": "Halo size (hover)", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "HaloRadius" + }, + { + "value": "32", + "type": "Number", + "label": "Halo opacity (hover)", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "HaloOpacityHover" + }, + { + "value": "64", + "type": "Number", + "label": "Halo opacity (pressed)", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "HaloOpacityClick" + }, + { + "value": "true", + "type": "Boolean", + "label": "Rounded track ends", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "RoundedTrack" + }, + { + "value": "true", + "type": "Boolean", + "label": "Enable interactions", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "Enabled" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "IsBeingDragged" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "Value" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ThumbOffset" + }, + { + "value": "true", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "NeedRedraw" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "IsHovered" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "MouseX" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "MouseY" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "CurrentHaloRadius" + }, + { + "value": "0.2", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "HaloGrowSpeed" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TargetHaloRadius" + } + ] + }, + { + "description": "Displays a line of objects that represent a resource in the game (hearts, lives, ammo, etc)", + "fullName": "Unit resource bar", + "name": "UnitResourceBar", + "objectType": "", + "eventsFunctions": [ + { + "description": "Display unit resource bar.", + "fullName": "Display unit resource bar", + "functionType": "Action", + "group": "", + "name": "DisplayUnitResourceBar", + "private": false, + "sentence": "Display _PARAM3_ units of _PARAM2_ located at _PARAM0_", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Create unit objects (if needed)", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Create first object (required because \"take into account\" is false when count is 0)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Not" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "LinkedObjects::PickObjectsLinkedTo" + }, + "parameters": [ + "", + "UnitObject", + "Object", + "" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "UnitObject", + "Object.X()", + "Object.Y()", + "Object.Layer()" + ] + }, + { + "type": { + "value": "LinkedObjects::LinkObjects" + }, + "parameters": [ + "", + "Object", + "UnitObject" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "UnitObject", + "__ResourceBar.UnitID", + "=", + "1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Create more objects as needed", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "LinkedObjects::PickObjectsLinkedTo" + }, + "parameters": [ + "", + "UnitObject", + "Object", + "" + ] + }, + { + "type": { + "value": "PickedInstancesCount" + }, + "parameters": [ + "UnitObject", + "<", + "GetArgumentAsNumber(\"Units\")" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::UnitResourceBar::SetPropertyNextUnitToCreate" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "PickedInstancesCount(UnitObject) + 1" + ] + } + ], + "events": [ + { + "infiniteLoopWarning": true, + "type": "BuiltinCommonInstructions::While", + "whileConditions": [ + { + "type": { + "value": "ResourceBar::UnitResourceBar::PropertyNextUnitToCreate" + }, + "parameters": [ + "Object", + "Behavior", + "<=", + "GetArgumentAsNumber(\"Units\")" + ] + } + ], + "conditions": [], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "UnitObject", + "Object.X()", + "Object.Y()", + "Object.Layer()" + ] + }, + { + "type": { + "value": "LinkedObjects::LinkObjects" + }, + "parameters": [ + "", + "Object", + "UnitObject" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "UnitObject", + "__ResourceBar.UnitID", + "=", + "Object.Behavior::PropertyNextUnitToCreate()" + ] + }, + { + "type": { + "value": "ResourceBar::UnitResourceBar::SetPropertyNextUnitToCreate" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "disabled": true, + "name": "Update position of units", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "LinkedObjects::PickObjectsLinkedTo" + }, + "parameters": [ + "", + "UnitObject", + "Object", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::ForEach", + "object": "UnitObject", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetCenter" + }, + "parameters": [ + "UnitObject", + "=", + "Object.CenterX() + (Object.Behavior::PropertyUnitSpacing() + UnitObject.Width()) * (UnitObject.Variable(__ResourceBar.UnitID) - 1)", + "=", + "Object.CenterY()" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "disabled": true, + "name": "Update unit visibility", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "LinkedObjects::PickObjectsLinkedTo" + }, + "parameters": [ + "", + "UnitObject", + "Object", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "UnitObject", + "__ResourceBar.UnitID", + ">", + "GetArgumentAsNumber(\"Units\")" + ] + } + ], + "actions": [ + { + "type": { + "value": "Cache" + }, + "parameters": [ + "UnitObject" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "UnitObject", + "__ResourceBar.UnitID", + "<=", + "GetArgumentAsNumber(\"Units\")" + ] + } + ], + "actions": [ + { + "type": { + "value": "Montre" + }, + "parameters": [ + "UnitObject", + "" + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::UnitResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Object used to display each unit", + "longDescription": "", + "name": "UnitObject", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Units", + "longDescription": "", + "name": "Units", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0", + "type": "Number", + "label": "Starting units", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "StartingUnits" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "CurrentUnits" + }, + { + "value": "0", + "type": "Number", + "label": "Maximum units (Use \"0\" for unlimited)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "MaxUnits" + }, + { + "value": "0", + "type": "Number", + "label": "Space between each unit (pixels)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "UnitSpacing" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "NextUnitToCreate" + } + ] + } + ] + }, { "author": "@Bouh, D8H", "category": "General", From 938495d8cc38cba796a0150a0a6f7cc394200110 Mon Sep 17 00:00:00 2001 From: Tristan Rhodes Date: Sun, 6 Nov 2022 19:07:30 -0700 Subject: [PATCH 05/98] Starting over-ish --- examples/resource-bar/ResourceBar.json | 7578 ++++++++++++++++++++++++ examples/resource-bar/game.json | 7313 +++++++++++++---------- 2 files changed, 11610 insertions(+), 3281 deletions(-) create mode 100644 examples/resource-bar/ResourceBar.json diff --git a/examples/resource-bar/ResourceBar.json b/examples/resource-bar/ResourceBar.json new file mode 100644 index 000000000..d66648ba1 --- /dev/null +++ b/examples/resource-bar/ResourceBar.json @@ -0,0 +1,7578 @@ +{ + "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", + "category": "Input", + "description": "Solid resource bar\n\nUnit resource bar", + "extensionNamespace": "", + "fullName": "Resource bar", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", + "name": "ResourceBar", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/UI Essentials/UI Essentials_sliders_options.svg", + "shortDescription": "Displays a bar that represents a resource in the game (health, shield, mana, ammo, etc)", + "version": "0.0.1", + "origin": { + "identifier": "DraggableSliderControl", + "name": "gdevelop-extension-store" + }, + "tags": [ + "resource", + "bar", + "shape painter", + "health", + "mana", + "shield", + "hearts", + "lives" + ], + "authorIds": [ + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2", + "gqDaZjCfevOOxBYkK6zlhtZnXCg1" + ], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "Displays a solid bar that represents a resource in the game (health, shield, mana, ammo, etc)", + "fullName": "Solid resource bar", + "name": "SolidResourceBar", + "objectType": "PrimitiveDrawing::Drawer", + "eventsFunctions": [ + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "onCreated", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure object doesn't get re-drawn every frame", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::ClearBetweenFrames" + }, + "parameters": [ + "Object", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Use correct min value (instead of always starting at 0)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValueMin()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set Bar height function (which enforces valid thumb sizes)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyBarThickness" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyBarThickness()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Start halo at same size as thumb", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::PropertyThumbHeight()/2,Object.Behavior::PropertyThumbWidth()/2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "doStepPreEvents", + "private": false, + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Slider logic", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::IsEnabled" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Bar where the mouse is (in relation to object)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyMouseX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.ToDrawingX(MouseX(Object.Layer(), 0), MouseY(Object.Layer(), 0))" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyMouseY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.ToDrawingY(MouseX(Object.Layer(), 0), MouseY(Object.Layer(), 0))" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move slider when being dragged", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyThumbOffset" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyMouseX()" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "End sliding and update variables", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "MouseButtonReleased" + }, + "parameters": [ + "", + "Left" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Update \"Value\" based on the location of the thumb", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyValueMin() + (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin()) * Object.Behavior::PropertyThumbOffset() / Object.Behavior::PropertyBarLength()", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Grow halo even more when pressed", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyTargetHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "1.25 * Object.Behavior::PropertyHaloRadius()" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Detect hover/touch/click (but only if the layer and object is visible, and the object is not already being dragged)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "ResourceBar::SolidResourceBar::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Detect mouse clicks near Bar, start dragging", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SourisBouton" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseX()", + ">=", + "-Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseX()", + "<=", + "Object.Behavior::PropertyBarLength() + Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseY()", + ">=", + "-Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseY()", + "<=", + "Object.Behavior::PropertyHaloRadius()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Reset hover detection ", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyIsHovered" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Grow halo when hovered", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SourisBouton" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseX()", + ">=", + "Object.Behavior::PropertyThumbOffset() - Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseX()", + "<=", + "Object.Behavior::PropertyThumbOffset() + Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseY()", + ">=", + "- Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseY()", + "<=", + "Object.Behavior::PropertyHaloRadius()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyIsHovered" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyTargetHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyHaloRadius()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Shrink halo to zero when not hovered", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "ResourceBar::SolidResourceBar::PropertyIsHovered" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyTargetHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "Object.Behavior::PropertyTargetHaloRadius()" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Redraw slider only when halo is not at final size", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "abs(Object.Behavior::PropertyCurrentHaloRadius() - Object.Behavior::PropertyTargetHaloRadius())", + "<", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyTargetHaloRadius()" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "Object.Behavior::PropertyTargetHaloRadius()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "lerp(Object.Behavior::PropertyCurrentHaloRadius(), Object.Behavior::PropertyTargetHaloRadius(), Object.Behavior::PropertyHaloGrowSpeed())" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "doStepPostEvents", + "private": false, + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Slider drawing", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "Visible" + }, + "parameters": [ + "Object" + ] + }, + { + "type": { + "value": "LayerVisible" + }, + "parameters": [ + "", + "Object.Layer()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::Drawer::ClearShapes" + }, + "parameters": [ + "Object" + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Inactive Bar", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set inactive Bar parameters (by default, use thumb color)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyInactiveBarColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyInactiveBarColor" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyInactiveBarColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyInactiveBarOpacity()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::OutlineOpacity" + }, + "parameters": [ + "Object", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw inactive Bar", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset()", + "-Object.Behavior::PropertyBarThickness() / 2", + "Object.Behavior::PropertyBarLength()", + "Object.Behavior::PropertyBarThickness() / 2" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw half circle at end of Bar (inactive side)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyRoundedBar" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Arc" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyBarLength()", + "0", + "Object.Behavior::PropertyBarThickness() / 2", + "270", + "90", + "", + "yes" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Active Bar", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set active Bar parameters (by default, use thumb color)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyActiveBarColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyActiveBarColor" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyActiveBarColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyActiveBarOpacity()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw active Bar (2 pixels bigger than property) ", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "Object", + "0", + "-(Object.Behavior::PropertyBarThickness() / 2 + 1)", + "Object.Behavior::PropertyThumbOffset()", + "Object.Behavior::PropertyBarThickness() / 2 + 1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw half circle at end of Bar (active side)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyRoundedBar" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Arc" + }, + "parameters": [ + "Object", + "0", + "0", + "1 + Object.Behavior::PropertyBarThickness() / 2", + "90", + "270", + "", + "yes" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Halo", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Prepare halo", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbColor()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::OutlineOpacity" + }, + "parameters": [ + "Object", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw halo (it will grow or shrink as needed)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "ResourceBar::SolidResourceBar::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyHaloOpacityHover()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::Circle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset()", + "0", + "Object.Behavior::PropertyCurrentHaloRadius()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Use a more opaque halo while being dragged (it will grow or shrink as needed)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyHaloOpacityClick()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::Circle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset()", + "0", + "Object.Behavior::PropertyCurrentHaloRadius()" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Thumb", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Prepare thumb settings", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbColor()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyThumbOpacity()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw Circle thumb", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyThumbShape" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"circle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Circle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset()", + "0", + "ceil(max(Object.Behavior::PropertyThumbWidth(),Object.Behavior::PropertyThumbHeight())/2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw Rectangle thumb", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyThumbShape" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"rectangle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset() - (Object.Behavior::PropertyThumbWidth() / 2)", + "-Object.Behavior::PropertyThumbHeight() / 2", + "Object.Behavior::PropertyThumbOffset() + (Object.Behavior::PropertyThumbWidth() / 2)", + "Object.Behavior::PropertyThumbHeight() / 2" + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the slider is being dragged.", + "fullName": "Being dragged", + "functionType": "Condition", + "group": "Slider", + "name": "IsBeingDragged", + "private": false, + "sentence": "_PARAM0_ is being dragged", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the slider interations are enabled.", + "fullName": "Interactions enabled", + "functionType": "Condition", + "group": "Slider", + "name": "IsEnabled", + "private": false, + "sentence": "Interactions of _PARAM0_ are enabled", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyEnabled" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Enable or disable the slider. Users cannot interact while it is disabled.", + "fullName": "Enable interactions", + "functionType": "Action", + "group": "Slider", + "name": "SetEnabled", + "private": false, + "sentence": "Enable interactions of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Enable\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyEnabled" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Stop dragging (so the slider won't be dragging when it gets enabled)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Reset halo size (so halo won't appear when slider gets enabled)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyTargetHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Enable\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyEnabled" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Enable", + "longDescription": "", + "name": "Enable", + "optional": false, + "supplementaryInformation": "", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "The value of the slider (based on position of the thumb).", + "fullName": "Slider value", + "functionType": "Expression", + "group": "Slider", + "name": "Value", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValue()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the value of a slider (this will move the thumb to the correct position).", + "fullName": "Slider value", + "functionType": "Action", + "group": "Slider", + "name": "SetValue", + "private": false, + "sentence": "Change the value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + "<=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "round(GetArgumentAsNumber(\"Value\") / Object.Behavior::PropertyTickSpacing()) * Object.Behavior::PropertyTickSpacing()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyValueMin()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValueMin()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::PropertyValueMax()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValueMax()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set the proper offset (it moves the slider)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyThumbOffset" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyBarLength() * (Object.Behavior::PropertyValue() - Object.Behavior::PropertyValueMin()) / (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin())" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Slider value", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "The minimum value of a slider.", + "fullName": "Slider minimum value", + "functionType": "Expression", + "group": "Slider value configuration", + "name": "ValueMin", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValueMin()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the minimum value of a slider.", + "fullName": "Slider minimum value", + "functionType": "Action", + "group": "Slider value configuration", + "name": "SetValueMin", + "private": false, + "sentence": "Change the minimum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyValueMin" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"ValueMin\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::Value()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Minimum value", + "longDescription": "", + "name": "ValueMin", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "The maximum value of a slider.", + "fullName": "Slider maximum value", + "functionType": "Expression", + "group": "Slider value configuration", + "name": "ValueMax", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValueMax()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Thickness of Bar.", + "fullName": "Slider Bar thickness", + "functionType": "Expression", + "group": "Slider Bar configuration", + "name": "BarThickness", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyBarThickness()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Length of Bar.", + "fullName": "Slider Bar length", + "functionType": "Expression", + "group": "Slider Bar configuration", + "name": "BarLength", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyBarLength()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Height of thumb.", + "fullName": "Slider thumb height", + "functionType": "Expression", + "group": "Slider thumb configuration", + "name": "ThumbHeight", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyThumbHeight()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the maximum value of a slider.", + "fullName": "Slider maximum value", + "functionType": "Action", + "group": "Slider value configuration", + "name": "SetValueMax", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyValueMax" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"ValueMax\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::Value()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Maximum value", + "longDescription": "", + "name": "ValueMax", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "The tick spacing of a slider.", + "fullName": "Tick spacing", + "functionType": "Expression", + "group": "Slider value configuration", + "name": "TickSpacing", + "private": false, + "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTickSpacing()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Tick spacing", + "longDescription": "", + "name": "TickSpacing", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the tick spacing of a slider.", + "fullName": "Tick spacing", + "functionType": "Action", + "group": "Slider value configuration", + "name": "SetTickSpacing", + "private": false, + "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"TickSpacing\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::Value()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Tick spacing", + "longDescription": "", + "name": "TickSpacing", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change length of Bar.", + "fullName": "Bar length", + "functionType": "Action", + "group": "Slider Bar configuration", + "name": "SetBarLength", + "private": false, + "sentence": "Change Bar length of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyBarLength" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move thumb to correct place (based on new Bar size)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyValue()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Bar width", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change thickness of Bar.", + "fullName": "Bar thickness", + "functionType": "Action", + "group": "Slider Bar configuration", + "name": "SetBarThickness", + "private": false, + "sentence": "Change Bar thickness of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyBarThickness" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure thumb width is not smaller than Bar height + 2 pixels (to prevent Bar ends from showing)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyBarThickness() + 2" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyBarThickness() + 2", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyThumbHeight" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyBarThickness() + 2" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetThumbHeight" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyBarThickness() + 2", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Bar thickness", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change width of thumb.", + "fullName": "Thumb width", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetThumbWidth", + "private": false, + "sentence": "Change thumb width of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Thumb cannot be less than Bar thickness (plus 2 pixels)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyBarThickness() + 2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Thumb width", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change height of thumb.", + "fullName": "Thumb height", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetThumbHeight", + "private": false, + "sentence": "Change thumb height of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Thumb cannot be less than Bar thickness (plus 2 pixels)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyThumbHeight" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyBarThickness() + 2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Thumb height", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change radius of the halo around the thumb. This size is also used to detect interaction with the slider.", + "fullName": "Halo radius", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetHaloRadius", + "private": false, + "sentence": "Change halo radius of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Halo radius", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the halo opacity when the thumb is hovered.", + "fullName": "Halo opacity (hover)", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetHaloOpacityHover", + "private": false, + "sentence": "Change the halo opacity when hovered of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyHaloOpacityHover" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Halo opacity (hover)", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change opacity of halo when pressed.", + "fullName": "Halo opacity (pressed)", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetHaloOpacityPressed", + "private": false, + "sentence": "Change halo opacity when pressed of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyHaloOpacityClick" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Halo opacity (pressed)", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change shape of thumb (circle or rectangle).", + "fullName": "Thumb shape", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetThumbShape", + "private": false, + "sentence": "Change shape of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyThumbShape" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Shape\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure thumb width is not smaller than Bar height (to prevent Bar ends from showing)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyThumbShape" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"rectangle\"" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::PropertyThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyBarThickness()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyBarThickness()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "New thumb shape", + "longDescription": "", + "name": "Shape", + "optional": false, + "supplementaryInformation": "[\"circle\",\"rectangle\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Make Bar use rounded ends.", + "fullName": "Rounded Bar ends", + "functionType": "Action", + "group": "Slider Bar configuration", + "name": "SetRoundedBar", + "private": false, + "sentence": "Draw _PARAM0_ with a rounded Bar: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "GetArgumentAsNumber(\"Value\")", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyRoundedBar" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "GetArgumentAsNumber(\"Value\")", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyRoundedBar" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Rounded Bar", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Change opacity of thumb.", + "fullName": "Thumb opacity", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetThumbOpacity", + "private": false, + "sentence": "Change thumb opacity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyThumbOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Thumb opacity", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change opacity of inactive Bar.", + "fullName": "Inactive Bar opacity", + "functionType": "Action", + "group": "Slider Bar configuration", + "name": "SetInactiveBarOpacity", + "private": false, + "sentence": "Change inactive Bar opacity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyInactiveBarOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Inactive Bar opacity", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change opacity of active Bar.", + "fullName": "Active Bar opacity", + "functionType": "Action", + "group": "Slider Bar configuration", + "name": "SetActiveBarOpacity", + "private": false, + "sentence": "Change active Bar opacity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyActiveBarOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Active Bar opacity", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the color of the Bar that is LEFT of the thumb.", + "fullName": "Active Bar color ", + "functionType": "Action", + "group": "Slider Bar configuration", + "name": "SetActiveBarColor", + "private": false, + "sentence": "Change active Bar color of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyActiveBarColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Color\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Active Bar color", + "longDescription": "", + "name": "Color", + "optional": false, + "supplementaryInformation": "", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "Change the color of the Bar that is RIGHT of the thumb.", + "fullName": "Inactive Bar color", + "functionType": "Action", + "group": "Slider Bar configuration", + "name": "SetInactiveBarColor", + "private": false, + "sentence": "Change inactive Bar color of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyInactiveBarColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Color\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Inactive Bar color", + "longDescription": "", + "name": "Color", + "optional": false, + "supplementaryInformation": "", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "Change the thumb color to a specific value.", + "fullName": "Thumb color", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetThumbColor", + "private": false, + "sentence": "Change thumb color of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyThumbColor" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsString(\"Color\")" + ] + }, + { + "type": { + "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Thumb color", + "longDescription": "", + "name": "Color", + "optional": false, + "supplementaryInformation": "", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "Update the hitbox.", + "fullName": "Update hitbox", + "functionType": "Action", + "group": "Private", + "name": "UpdateHitbox", + "private": true, + "sentence": "Update the hitbox of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::SetRotationCenter" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyBarLength() / 2", + "Object.Behavior::PropertyBarThickness() / 2" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::SetRectangularCollisionMask" + }, + "parameters": [ + "Object", + "-Object.Behavior::PropertyThumbWidth() / 2", + "-Object.Behavior::PropertyThumbHeight() / 2", + "Object.Behavior::PropertyBarLength() + Object.Behavior::PropertyThumbWidth() / 2", + "Object.Behavior::PropertyThumbHeight() / 2" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SolidResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0", + "type": "Number", + "label": "Minimum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ValueMin" + }, + { + "value": "1", + "type": "Number", + "label": "Maximum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ValueMax" + }, + { + "value": "0", + "type": "Number", + "label": "Tick spacing", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "TickSpacing" + }, + { + "value": "circle", + "type": "Choice", + "label": "Thumb shape", + "description": "", + "group": "Thumb", + "extraInformation": [ + "circle", + "rectangle" + ], + "hidden": false, + "name": "ThumbShape" + }, + { + "value": "20", + "type": "Number", + "label": "Thumb width", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "ThumbWidth" + }, + { + "value": "20", + "type": "Number", + "label": "Thumb height", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "ThumbHeight" + }, + { + "value": " 24;119;211", + "type": "Color", + "label": "Thumb Color", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "ThumbColor" + }, + { + "value": "255", + "type": "Number", + "label": "Thumb opacity", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "ThumbOpacity" + }, + { + "value": "200", + "type": "Number", + "label": "Bar length", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "BarLength" + }, + { + "value": "4", + "type": "Number", + "label": "Bar thickness", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "BarThickness" + }, + { + "value": "", + "type": "String", + "label": "Inactive Bar color (thumb color by default)", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "InactiveBarColor" + }, + { + "value": "96", + "type": "Number", + "label": "Inactive Bar opacity", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "InactiveBarOpacity" + }, + { + "value": " ", + "type": "String", + "label": "Active Bar color (thumb color by default)", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "ActiveBarColor" + }, + { + "value": "255", + "type": "Number", + "label": "Active Bar opacity", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "ActiveBarOpacity" + }, + { + "value": "24", + "type": "Number", + "label": "Halo size (hover)", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "HaloRadius" + }, + { + "value": "32", + "type": "Number", + "label": "Halo opacity (hover)", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "HaloOpacityHover" + }, + { + "value": "64", + "type": "Number", + "label": "Halo opacity (pressed)", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "HaloOpacityClick" + }, + { + "value": "true", + "type": "Boolean", + "label": "Rounded Bar ends", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "RoundedBar" + }, + { + "value": "true", + "type": "Boolean", + "label": "Enable interactions", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "Enabled" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "IsBeingDragged" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "Value" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ThumbOffset" + }, + { + "value": "true", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "NeedRedraw" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "IsHovered" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "MouseX" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "MouseY" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "CurrentHaloRadius" + }, + { + "value": "0.2", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "HaloGrowSpeed" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TargetHaloRadius" + } + ] + }, + { + "description": "Displays a line of objects that represent a resource in the game (hearts, lives, ammo, etc). \nUse the same image used for resource bar and unit objects.", + "fullName": "Unit resource bar", + "name": "UnitResourceBar", + "objectType": "", + "eventsFunctions": [ + { + "description": "Draw a unit resource bar.", + "fullName": "Draw a unit resource bar", + "functionType": "Action", + "group": "", + "name": "DrawUnitBar", + "private": false, + "sentence": "Draw unit bar _PARAM0_ with _PARAM2_ objects", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Create unit objects", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "infiniteLoopWarning": true, + "type": "BuiltinCommonInstructions::While", + "whileConditions": [ + { + "type": { + "value": "ResourceBar::UnitResourceBar::PropertyNextUnitToCreate" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyCurrentQuantity()" + ] + } + ], + "conditions": [], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::UnitResourceBar::SetPropertyNextUnitToCreate" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + }, + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "UnitObject", + "Object.X() + Object.Width() * Object.Behavior::PropertyNextUnitToCreate()", + "Object.Y()", + "Object.Layer()" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "UnitObject", + "__ResourceBar.UnitID", + "=", + "Object.Behavior::PropertyNextUnitToCreate()" + ] + }, + { + "type": { + "value": "LinkedObjects::LinkObjects" + }, + "parameters": [ + "", + "Object", + "UnitObject" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Remove excess units", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Delete all units higher than max unit value", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::PropertyMaxQuantity()", + "!=", + "0" + ] + }, + { + "type": { + "value": "LinkedObjects::PickObjectsLinkedTo" + }, + "parameters": [ + "", + "UnitObject", + "Object", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "UnitObject.Variable(__ResourceBar.UnitID)", + ">", + "Object.Behavior::PropertyCurrentQuantity()" + ] + } + ], + "actions": [ + { + "type": { + "value": "Delete" + }, + "parameters": [ + "UnitObject", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Update non-empty units", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "LinkedObjects::PickObjectsLinkedTo" + }, + "parameters": [ + "", + "UnitObject", + "Object", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "UnitObject.Variable(__ResourceBar.UnitID)", + "<=", + "Object.Behavior::PropertyCurrentQuantity()" + ] + } + ], + "actions": [ + { + "type": { + "value": "Montre" + }, + "parameters": [ + "UnitObject", + "" + ] + }, + { + "type": { + "value": "ChangeColor" + }, + "parameters": [ + "UnitObject", + "\"255;255;255\"" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Update empty units", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "LinkedObjects::PickObjectsLinkedTo" + }, + "parameters": [ + "", + "UnitObject", + "Object", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "UnitObject.Variable(__ResourceBar.UnitID)", + ">", + "Object.Behavior::PropertyCurrentQuantity()" + ] + } + ], + "actions": [], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Color tint", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Only apply color if it has change from default value", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "Object.Behavior::PropertyEmptyColorTint()", + "!=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeColor" + }, + "parameters": [ + "UnitObject", + "Object.Behavior::PropertyEmptyColorTint()" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Hide", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::UnitResourceBar::PropertyHideEmptyUnits" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "Cache" + }, + "parameters": [ + "UnitObject" + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Update counter", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "LinkedObjects::PickObjectsLinkedTo" + }, + "parameters": [ + "", + "UnitObject", + "Object", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::UnitResourceBar::SetPropertyNextUnitToCreate" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "PickedInstancesCount(UnitObject)+1" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::UnitResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Object used to display each unit", + "longDescription": "", + "name": "UnitObject", + "optional": false, + "supplementaryInformation": "Sprite", + "type": "objectList" + } + ], + "objectGroups": [] + }, + { + "description": "Apply color tint to empty units. Empty units exist between the current and maximum value.", + "fullName": "Color tint of empty units", + "functionType": "Action", + "group": "", + "name": "SetEmptyUnitColor", + "private": false, + "sentence": "Apply color tint _PARAM2_ to empty units of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::UnitResourceBar::SetPropertyEmptyColorTint" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsString(\"ColorTint\")" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::UnitResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Color tint", + "longDescription": "Use \"white\" to remove all color tint", + "name": "ColorTint", + "optional": false, + "supplementaryInformation": "", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "Hide empty units. Empty units exist between the current and maximum value.", + "fullName": "Hide (or show) empty units", + "functionType": "Action", + "group": "", + "name": "SetHideEmptyUnits", + "private": false, + "sentence": "Hide empty units of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"HideEmptyUnits\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::UnitResourceBar::SetPropertyHideEmptyUnits" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"HideEmptyUnits\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::UnitResourceBar::SetPropertyHideEmptyUnits" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::UnitResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Hide empty units", + "longDescription": "", + "name": "HideEmptyUnits", + "optional": false, + "supplementaryInformation": "", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Change maximum units that can be displayed.", + "fullName": "Maximum units", + "functionType": "Action", + "group": "", + "name": "SetMaxUnits", + "private": false, + "sentence": "Change maximum units of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::UnitResourceBar::SetPropertyMaxQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::UnitResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Maximum units", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "Sprite", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the current quantity of units.", + "fullName": "Unit quantity", + "functionType": "Action", + "group": "", + "name": "SetCurrentUnits", + "private": false, + "sentence": "Change the unit quantity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::UnitResourceBar::SetPropertyCurrentQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::UnitResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Current units", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "Sprite", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "onCreated", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::UnitResourceBar::SetPropertyCurrentQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyStartingUnits()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::UnitResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0", + "type": "Number", + "label": "Starting quantity", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "StartingUnits" + }, + { + "value": "", + "type": "Number", + "label": "Quantity", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "CurrentQuantity" + }, + { + "value": "0", + "type": "Number", + "label": "Maximum quantity (Use \"0\" for unlimited)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "MaxQuantity" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "NextUnitToCreate" + }, + { + "value": "", + "type": "Color", + "label": "Empty color tint", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "EmptyColorTint" + }, + { + "value": "true", + "type": "Boolean", + "label": "Hide empty units", + "description": "Empty units exist between the current and maximum value.", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "HideEmptyUnits" + } + ] + }, + { + "description": "Draw a resource bar that represents health, shield, or any value.", + "fullName": "Draw resource bar", + "name": "DrawResourceBar117", + "objectType": "PrimitiveDrawing::Drawer", + "eventsFunctions": [ + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "onCreated", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure object doesn't get re-drawn every frame", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::ClearBetweenFrames" + }, + "parameters": [ + "Object", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Use correct min value (instead of always starting at 0)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValueMin()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "", + "fullName": "", + "functionType": "Action", + "group": "", + "name": "doStepPostEvents", + "private": false, + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Slider drawing", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::PropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "Visible" + }, + "parameters": [ + "Object" + ] + }, + { + "type": { + "value": "LayerVisible" + }, + "parameters": [ + "", + "Object.Layer()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::Drawer::ClearShapes" + }, + "parameters": [ + "Object" + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Inactive bar", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set inactive Bar parameters (by default, use the active bar color)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DrawResourceBar::DrawResourceBar::PropertyInactiveBarColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyActiveBarColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DrawResourceBar::DrawResourceBar::PropertyInactiveBarColor" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyInactiveBarColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyInactiveBarOpacity()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::OutlineOpacity" + }, + "parameters": [ + "Object", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw inactive Bar", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset()", + "-Object.Behavior::PropertyBarThickness() / 2", + "Object.Behavior::PropertyBarLength()", + "Object.Behavior::PropertyBarThickness() / 2" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw half circle at end of Bar (inactive side)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DrawResourceBar::DrawResourceBar::PropertyRoundedBar" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Arc" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyBarLength()", + "0", + "Object.Behavior::PropertyBarThickness() / 2", + "270", + "90", + "", + "yes" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Active bar", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set active Bar parameters", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DrawResourceBar::DrawResourceBar::PropertyActiveBarColor" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyActiveBarColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyActiveBarOpacity()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw active bar", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "Object", + "0", + "-(Object.Behavior::PropertyBarThickness() / 2)", + "Object.Behavior::PropertyThumbOffset()", + "Object.Behavior::PropertyBarThickness() / 2" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw half circle at end of bar (active side)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DrawResourceBar::DrawResourceBar::PropertyRoundedBar" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Arc" + }, + "parameters": [ + "Object", + "0", + "0", + "Object.Behavior::PropertyBarThickness() / 2", + "90", + "270", + "", + "yes" + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "The value of the resource bar.", + "fullName": "Value", + "functionType": "Expression", + "group": "Bar", + "name": "Value", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValue()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the value of the resource bar.", + "fullName": "Value", + "functionType": "Action", + "group": "Resource Bar", + "name": "SetValue", + "private": false, + "sentence": "Change the value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::PropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + "<=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::PropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "round(GetArgumentAsNumber(\"Value\") / Object.Behavior::PropertyTickSpacing()) * Object.Behavior::PropertyTickSpacing()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyValueMin()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValueMin()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::PropertyValueMax()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValueMax()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set the proper offset", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyThumbOffset" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyBarLength() * (Object.Behavior::PropertyValue() - Object.Behavior::PropertyValueMin()) / (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin())" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Resource bar value", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "The minimum value of the resource bar.", + "fullName": "Minimum value", + "functionType": "Expression", + "group": "Value configuration", + "name": "ValueMin", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValueMin()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the minimum value of the resource bar.", + "fullName": "Minimum value", + "functionType": "Action", + "group": "Value configuration", + "name": "SetValueMin", + "private": false, + "sentence": "Change the minimum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyValueMin" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"ValueMin\")" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::Value()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Minimum value", + "longDescription": "", + "name": "ValueMin", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "The maximum value of the resource bar.", + "fullName": "Maximum value", + "functionType": "Expression", + "group": "Value configuration", + "name": "ValueMax", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValueMax()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Thickness of the resource bar.", + "fullName": "Bar thickness", + "functionType": "Expression", + "group": "Bar configuration", + "name": "BarThickness", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyBarThickness()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Length of the resource bar.", + "fullName": "Bar length", + "functionType": "Expression", + "group": "Bar configuration", + "name": "BarLength", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyBarLength()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the maximum value of a resource bar.", + "fullName": "Maximum value", + "functionType": "Action", + "group": "Bar value configuration", + "name": "SetValueMax", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyValueMax" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"ValueMax\")" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::Value()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Maximum value", + "longDescription": "", + "name": "ValueMax", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "The tick spacing of a bar.", + "fullName": "Tick spacing", + "functionType": "Expression", + "group": "Value configuration", + "name": "TickSpacing", + "private": false, + "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTickSpacing()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Tick spacing", + "longDescription": "", + "name": "TickSpacing", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the tick spacing of a resource bar.", + "fullName": "Tick spacing", + "functionType": "Action", + "group": "Value configuration", + "name": "SetTickSpacing", + "private": false, + "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"TickSpacing\")" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::Value()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Tick spacing", + "longDescription": "", + "name": "TickSpacing", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change length of a resource bar.", + "fullName": "Bar length", + "functionType": "Action", + "group": "Bar configuration", + "name": "SetBarLength", + "private": false, + "sentence": "Change bar length of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyBarLength" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar117::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move thumb to correct place (based on new Bar size)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyValue()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Bar width", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change thickness of a resource bar", + "fullName": "Bar thickness", + "functionType": "Action", + "group": "Bar configuration", + "name": "SetBarThickness", + "private": false, + "sentence": "Change the bar thickness of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyBarThickness" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure thumb width is not smaller than Bar height + 2 pixels (to prevent Bar ends from showing)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::PropertyThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyBarThickness() + 2" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyBarThickness() + 2", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::PropertyThumbHeight" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyBarThickness() + 2" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetThumbHeight" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyBarThickness() + 2", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Bar thickness", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Make bar use rounded ends.", + "fullName": "Rounded bar ends", + "functionType": "Action", + "group": "Bar configuration", + "name": "SetRoundedBar", + "private": false, + "sentence": "Draw _PARAM0_ with a rounded bar: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "GetArgumentAsNumber(\"Value\")", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyRoundedBar" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "GetArgumentAsNumber(\"Value\")", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyRoundedBar" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Rounded bar", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Change opacity of inactive bar.", + "fullName": "Inactive bar opacity", + "functionType": "Action", + "group": "Bar configuration", + "name": "SetInactiveBarOpacity", + "private": false, + "sentence": "Change inactive bar opacity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyInactiveBarOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Inactive bar opacity", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change opacity of active bar.", + "fullName": "Active bar opacity", + "functionType": "Action", + "group": "Bar configuration", + "name": "SetActiveBarOpacity", + "private": false, + "sentence": "Change active bar opacity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyActiveBarOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Active bar opacity", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the color of the left side of the bar.", + "fullName": "Active bar color ", + "functionType": "Action", + "group": "Bar configuration", + "name": "SetActiveBarColor", + "private": false, + "sentence": "Change active bar color of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyActiveBarColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Color\")" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Active bar color", + "longDescription": "", + "name": "Color", + "optional": false, + "supplementaryInformation": "", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "Change the color of the right side of the resource bar.", + "fullName": "Inactive bar color", + "functionType": "Action", + "group": "Bar configuration", + "name": "SetInactiveBarColor", + "private": false, + "sentence": "Change inactive bar color of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyInactiveBarColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Color\")" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Inactive bar color", + "longDescription": "", + "name": "Color", + "optional": false, + "supplementaryInformation": "", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "Update the hitbox.", + "fullName": "Update hitbox", + "functionType": "Action", + "group": "Private", + "name": "UpdateHitbox", + "private": true, + "sentence": "Update the hitbox of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::SetRotationCenter" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyBarLength() / 2", + "Object.Behavior::PropertyBarThickness() / 2" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::SetRectangularCollisionMask" + }, + "parameters": [ + "Object", + "0", + "-Object.Behavior::PropertyBarThickness() / 2", + "Object.Behavior::PropertyBarLength()", + "Object.Behavior::PropertyBarThickness() / 2" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Draw health bar.", + "fullName": "Draw health bar", + "functionType": "Action", + "group": "", + "name": "DrawHealthBar", + "private": false, + "sentence": "Draw health bar with _PARAM0_ based on health of _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set values", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetValue" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "Tween::Ease(\"easeOutCirc\", Object.Behavior::Value(), ObjectWithHealth.HealthBehavior::Health(), 0.05)", + "" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetValueMax" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "ObjectWithHealth.HealthBehavior::MaxHealth()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Object with health", + "longDescription": "", + "name": "ObjectWithHealth", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Health behavior", + "longDescription": "", + "name": "HealthBehavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Draw shield bar.", + "fullName": "Draw shield bar", + "functionType": "Action", + "group": "", + "name": "DrawShieldBar", + "private": false, + "sentence": "Draw shield bar with _PARAM0_ based on shield of _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set values", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetValue" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "Tween::Ease(\"easeOutCirc\", Object.Behavior::Value(), ObjectWithShield.ShieldBehavior::ShieldPoints(), 0.05)", + "" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetValueMax" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "ObjectWithShield.ShieldBehavior::MaxShield()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Object with shield", + "longDescription": "", + "name": "ObjectWithShield", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Shield behavior", + "longDescription": "", + "name": "ShieldBehavior", + "optional": false, + "supplementaryInformation": "Health::Shield", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Draw resource bar.", + "fullName": "Draw resource bar", + "functionType": "Action", + "group": "", + "name": "DrawResourceBar", + "private": false, + "sentence": "Draw resource bar with _PARAM0_ with current value _PARAM2_ and max value _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set values", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetValue" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "Tween::Ease(\"easeOutCirc\", Object.Behavior::Value(), GetArgumentAsNumber(\"CurrentValue\"), 0.05)", + "" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetValueMax" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "GetArgumentAsNumber(\"MaxValue\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Current value", + "longDescription": "", + "name": "CurrentValue", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Max value", + "longDescription": "", + "name": "MaxValue", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "expression" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0", + "type": "Number", + "label": "Minimum value", + "description": "", + "group": "Value", + "extraInformation": [], + "hidden": false, + "name": "ValueMin" + }, + { + "value": "1", + "type": "Number", + "label": "Maximum value", + "description": "", + "group": "Value", + "extraInformation": [], + "hidden": false, + "name": "ValueMax" + }, + { + "value": "0", + "type": "Number", + "label": "Tick spacing", + "description": "", + "group": "Value", + "extraInformation": [], + "hidden": false, + "name": "TickSpacing" + }, + { + "value": "200", + "type": "Number", + "label": "Bar length", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "BarLength" + }, + { + "value": "4", + "type": "Number", + "label": "Bar thickness", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "BarThickness" + }, + { + "value": "11;255;0", + "type": "Color", + "label": "Inactive bar color", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "InactiveBarColor" + }, + { + "value": "96", + "type": "Number", + "label": "Inactive bar opacity", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "InactiveBarOpacity" + }, + { + "value": "11;255;0", + "type": "Color", + "label": "Active bar color", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "ActiveBarColor" + }, + { + "value": "255", + "type": "Number", + "label": "Active bar opacity", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "ActiveBarOpacity" + }, + { + "value": "false", + "type": "Boolean", + "label": "Rounded bar ends", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "RoundedBar" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "Value" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ThumbOffset" + }, + { + "value": "true", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "NeedRedraw" + }, + { + "value": "0", + "type": "Number", + "label": "Time to complete moving the bar when the value is changed (seconds)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ChangeDuration" + } + ] + } + ], + "eventsBasedObjects": [] +} \ No newline at end of file diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 3097fd371..567b8bc8a 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -1174,9 +1174,6 @@ "disableInputWhenNotFocused": true, "mangledName": "Game", "name": "Game", - "oglFOV": 90, - "oglZFar": 500, - "oglZNear": 1, "r": 0, "standardSortMethod": true, "stopSoundsOnStartup": true, @@ -1359,42 +1356,22 @@ "effects": [], "behaviors": [ { - "name": "DraggableSliderControl", - "type": "DraggableSliderControl::DraggableSliderControl", + "name": "DrawResourceBar116", + "type": "ResourceBar::DrawResourceBar116", "ValueMin": 0, "ValueMax": 1, "TickSpacing": 0, - "ThumbShape": "rectangle", - "ThumbWidth": 20, - "ThumbHeight": 20, - "ThumbColor": "74;144;226", - "ThumbOpacity": 255, - "TrackLength": 200, - "TrackThickness": 16, - "InactiveTrackColor": "", - "InactiveTrackOpacity": 96, - "ActiveTrackColor": " ", - "ActiveTrackOpacity": 255, - "HaloRadius": 24, - "HaloOpacityHover": 32, - "HaloOpacityClick": 64, - "RoundedTrack": false, - "Enabled": true, - "IsBeingDragged": false, + "BarLength": 200, + "BarThickness": 4, + "InactiveBarColor": "11;255;0", + "InactiveBarOpacity": 96, + "ActiveBarColor": "11;255;0", + "ActiveBarOpacity": 255, + "RoundedBar": false, "Value": 0, "ThumbOffset": 0, "NeedRedraw": true, - "IsHovered": false, - "MouseX": 0, - "MouseY": 0, - "CurrentHaloRadius": 0, - "HaloGrowSpeed": 0.2, - "TargetHaloRadius": 0 - }, - { - "name": "DrawResourceBar", - "type": "DrawResourceBarOLD::DrawResourceBarOLD", - "DraggableSliderBehavior": "DraggableSliderControl" + "ChangeDuration": 0 } ], "fillOpacity": 255, @@ -2607,9 +2584,9 @@ { "name": "UnitResourceBar", "type": "ResourceBar::UnitResourceBar", - "StartingUnits": 0, - "CurrentUnits": 5, - "MaxUnits": 0, + "StartingUnits": 3, + "CurrentUnits": 3, + "MaxUnits": 3, "UnitSpacing": 0, "NextUnitToCreate": 0 } @@ -2841,11 +2818,11 @@ "actions": [ { "type": { - "value": "DrawResourceBarOLD::DrawResourceBarOLD::DrawHealthBar" + "value": "ResourceBar::DrawResourceBar116::DrawHealthBar" }, "parameters": [ "Health_Bar", - "DrawResourceBar", + "DrawResourceBar116", "Fly", "Health", "" @@ -2889,11 +2866,6 @@ } ] }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [] - }, { "type": "BuiltinCommonInstructions::Comment", "color": { @@ -2931,7 +2903,6 @@ "colorG": 176, "colorR": 74, "creationTime": 0, - "folded": true, "name": "Spawn items", "source": "", "type": "BuiltinCommonInstructions::Group", @@ -3326,22 +3297,169 @@ "parameters": [] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Unit resource bar", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "ResourceBar::UnitResourceBar::DisplayUnitResourceBar" - }, - "parameters": [ - "Heart_ResourceBar", - "UnitResourceBar", - "Heart_Unit", - "5", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DepartScene" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "Units", + "=", + "3" + ] + }, + { + "type": { + "value": "ResourceBar::UnitResourceBar::SetMaxUnits" + }, + "parameters": [ + "Heart_ResourceBar", + "UnitResourceBar", + "6", + "" + ] + }, + { + "type": { + "value": "ResourceBar::UnitResourceBar::SetEmptyUnitColor" + }, + "parameters": [ + "Heart_ResourceBar", + "UnitResourceBar", + "\"74;144;226\"", + "" + ] + }, + { + "type": { + "value": "ResourceBar::UnitResourceBar::SetHideEmptyUnits" + }, + "parameters": [ + "Heart_ResourceBar", + "UnitResourceBar", + "no", + "" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Heart_ResourceBar" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "KeyReleased" + }, + "parameters": [ + "", + "Left" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "Units", + "=", + "max(0,Variable(Unit)-1)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "KeyReleased" + }, + "parameters": [ + "", + "Right" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "Units", + "+", + "1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::UnitResourceBar::SetCurrentUnits" + }, + "parameters": [ + "Heart_ResourceBar", + "UnitResourceBar", + "Variable(Units)", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::UnitResourceBar::DrawUnitBar" + }, + "parameters": [ + "Heart_ResourceBar", + "UnitResourceBar", + "Heart_Unit", + "5", + "" + ] + } ] } - ] + ], + "parameters": [] } ], "layers": [ @@ -3377,6 +3495,10 @@ "name": "DrawResourceBar", "type": "DrawResourceBarOLD::DrawResourceBarOLD" }, + { + "name": "DrawResourceBar116", + "type": "ResourceBar::DrawResourceBar116" + }, { "name": "Health", "type": "Health::Health" @@ -3437,8 +3559,8 @@ "eventsBasedBehaviors": [ { "description": "Displays a solid bar that represents a resource in the game (health, shield, mana, ammo, etc)", - "fullName": "Solid resource bar", - "name": "SolidResourceBar", + "fullName": "Draw resource bar 222", + "name": "DrawResourceBar222", "objectType": "PrimitiveDrawing::Drawer", "eventsFunctions": [ { @@ -3497,7 +3619,7 @@ "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyValue" + "value": "ResourceBar::DrawResourceBar222::SetPropertyValue" }, "parameters": [ "Object", @@ -3508,73 +3630,13 @@ } ] }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set track height function (which enforces valid thumb sizes)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyTrackThickness" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyTrackThickness()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Start halo at same size as thumb", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::PropertyThumbHeight()/2,Object.Behavior::PropertyThumbWidth()/2)" - ] - } - ] - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::UpdateHitbox" + "value": "ResourceBar::DrawResourceBar222::UpdateHitbox" }, "parameters": [ "Object", @@ -3603,7 +3665,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", + "supplementaryInformation": "ResourceBar::DrawResourceBar222", "type": "behavior" } ], @@ -3614,7 +3676,7 @@ "fullName": "", "functionType": "Action", "group": "", - "name": "doStepPreEvents", + "name": "doStepPostEvents", "private": false, "sentence": "", "events": [ @@ -3623,7 +3685,7 @@ "colorG": 176, "colorR": 74, "creationTime": 0, - "name": "Slider logic", + "name": "Slider drawing", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ @@ -3632,107 +3694,60 @@ "conditions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::IsEnabled" + "value": "ResourceBar::DrawResourceBar222::PropertyNeedRedraw" }, "parameters": [ "Object", - "Behavior", - "" + "Behavior" ] - } - ], - "actions": [], - "events": [ + }, { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "Visible" }, - "comment": "Track where the mouse is (in relation to object)", - "comment2": "" + "parameters": [ + "Object" + ] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyMouseX" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.ToDrawingX(MouseX(Object.Layer(), 0), MouseY(Object.Layer(), 0))" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyMouseY" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.ToDrawingY(MouseX(Object.Layer(), 0), MouseY(Object.Layer(), 0))" - ] - } + "type": { + "value": "LayerVisible" + }, + "parameters": [ + "", + "Object.Layer()" ] - }, + } + ], + "actions": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyNeedRedraw" }, - "comment": "Move slider when being dragged", - "comment2": "" + "parameters": [ + "Object", + "Behavior", + "no" + ] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyThumbOffset" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyMouseX()" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ], + "type": { + "value": "PrimitiveDrawing::Drawer::ClearShapes" + }, + "parameters": [ + "Object" + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Inactive Bar", + "source": "", + "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", @@ -3744,7 +3759,7 @@ "textG": 0, "textR": 0 }, - "comment": "End sliding and update variables", + "comment": "Set inactive Bar parameters", "comment2": "" }, { @@ -3752,23 +3767,50 @@ "conditions": [ { "type": { - "value": "MouseButtonReleased" + "value": "ResourceBar::DrawResourceBar222::PropertyInactiveBarColor" }, "parameters": [ - "", - "Left" + "Object", + "Behavior", + "=", + "\"\"" ] } ], "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyIsBeingDragged" + "value": "PrimitiveDrawing::FillColor" }, "parameters": [ "Object", - "Behavior", - "no" + "Object.Behavior::PropertyThumbColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyInactiveBarOpacity()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::OutlineOpacity" + }, + "parameters": [ + "Object", + "=", + "0" ] } ] @@ -3783,7 +3825,7 @@ "textG": 0, "textR": 0 }, - "comment": "Update \"Value\" based on the location of the thumb", + "comment": "Draw inactive Bar", "comment2": "" }, { @@ -3792,13 +3834,14 @@ "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetValue" + "value": "PrimitiveDrawing::Rectangle" }, "parameters": [ "Object", - "Behavior", - "Object.Behavior::PropertyValueMin() + (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin()) * Object.Behavior::PropertyThumbOffset() / Object.Behavior::PropertyTrackLength()", - "" + "Object.Behavior::PropertyThumbOffset()", + "-Object.Behavior::PropertyBarThickness() / 2", + "Object.Behavior::PropertyBarLength()", + "Object.Behavior::PropertyBarThickness() / 2" ] } ] @@ -3813,56 +3856,51 @@ "textG": 0, "textR": 0 }, - "comment": "Grow halo even more when pressed", + "comment": "Draw half circle at end of Bar (inactive side)", "comment2": "" }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::PropertyRoundedBar" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyTargetHaloRadius" + "value": "PrimitiveDrawing::Arc" }, "parameters": [ "Object", - "Behavior", - "=", - "1.25 * Object.Behavior::PropertyHaloRadius()" + "Object.Behavior::PropertyBarLength()", + "0", + "Object.Behavior::PropertyBarThickness() / 2", + "270", + "90", + "", + "yes" ] } ] } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Detect hover/touch/click (but only if the layer and object is visible, and the object is not already being dragged)", - "comment2": "" + ], + "parameters": [] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "ResourceBar::SolidResourceBar::PropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [], + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Active Bar", + "source": "", + "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", @@ -3874,7 +3912,7 @@ "textG": 0, "textR": 0 }, - "comment": "Detect mouse clicks near track, start dragging", + "comment": "Set active Bar parameters (by default, use thumb color)", "comment2": "" }, { @@ -3882,116 +3920,67 @@ "conditions": [ { "type": { - "value": "SourisBouton" + "value": "ResourceBar::DrawResourceBar222::PropertyActiveBarColor" }, "parameters": [ - "", - "Left" + "Object", + "Behavior", + "=", + "\"\"" ] - }, + } + ], + "actions": [ { "type": { - "value": "BuiltinCommonInstructions::Once" + "value": "PrimitiveDrawing::FillColor" }, - "parameters": [] + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::PropertyActiveBarColor" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"\"" + ] } ], - "actions": [], - "events": [ + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseX()", - ">=", - "-Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseX()", - "<=", - "Object.Behavior::PropertyTrackLength() + Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseY()", - ">=", - "-Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseY()", - "<=", - "Object.Behavior::PropertyHaloRadius()" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyActiveBarColor()" ] } ] }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Reset hover detection ", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyIsHovered" + "value": "PrimitiveDrawing::FillOpacity" }, "parameters": [ "Object", - "Behavior", - "no" + "=", + "Object.Behavior::PropertyActiveBarOpacity()" ] } ] @@ -4006,83 +3995,23 @@ "textG": 0, "textR": 0 }, - "comment": "Grow halo when hovered", + "comment": "Draw active Bar (2 pixels bigger than property) ", "comment2": "" }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "SourisBouton" - }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseX()", - ">=", - "Object.Behavior::PropertyThumbOffset() - Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseX()", - "<=", - "Object.Behavior::PropertyThumbOffset() + Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseY()", - ">=", - "- Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseY()", - "<=", - "Object.Behavior::PropertyHaloRadius()" - ] - } - ], + "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyIsHovered" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyTargetHaloRadius" + "value": "PrimitiveDrawing::Rectangle" }, "parameters": [ "Object", - "Behavior", - "=", - "Object.Behavior::PropertyHaloRadius()" + "0", + "-(Object.Behavior::PropertyBarThickness() / 2 + 1)", + "Object.Behavior::PropertyThumbOffset()", + "Object.Behavior::PropertyBarThickness() / 2 + 1" ] } ] @@ -4097,7 +4026,7 @@ "textG": 0, "textR": 0 }, - "comment": "Shrink halo to zero when not hovered", + "comment": "Draw half circle at end of Bar (active side)", "comment2": "" }, { @@ -4105,8 +4034,7 @@ "conditions": [ { "type": { - "inverted": true, - "value": "ResourceBar::SolidResourceBar::PropertyIsHovered" + "value": "ResourceBar::DrawResourceBar222::PropertyRoundedBar" }, "parameters": [ "Object", @@ -4117,132 +4045,76 @@ "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyTargetHaloRadius" + "value": "PrimitiveDrawing::Arc" }, "parameters": [ "Object", - "Behavior", - "=", - "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" + "0", + "0", + "1 + Object.Behavior::PropertyBarThickness() / 2", + "90", + "270", + "", + "yes" ] } ] } - ] + ], + "parameters": [] } ] - }, + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "The value of the slider (based on position of the thumb).", + "fullName": "Slider value", + "functionType": "Expression", + "group": "Slider", + "name": "Value", + "private": false, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "Object.Behavior::PropertyTargetHaloRadius()" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Redraw slider only when halo is not at final size", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "abs(Object.Behavior::PropertyCurrentHaloRadius() - Object.Behavior::PropertyTargetHaloRadius())", - "<", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyTargetHaloRadius()" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "Object.Behavior::PropertyTargetHaloRadius()" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "lerp(Object.Behavior::PropertyCurrentHaloRadius(), Object.Behavior::PropertyTargetHaloRadius(), Object.Behavior::PropertyHaloGrowSpeed())" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValue()" ] } - ], - "parameters": [] + ] } ], "parameters": [ @@ -4263,740 +4135,1009 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", + "supplementaryInformation": "ResourceBar::DrawResourceBar222", "type": "behavior" } ], "objectGroups": [] }, { - "description": "", - "fullName": "", + "description": "Change the value of a slider (this will move the thumb to the correct position).", + "fullName": "Slider value", "functionType": "Action", - "group": "", - "name": "doStepPostEvents", + "group": "Slider", + "name": "SetValue", "private": false, - "sentence": "", + "sentence": "Change the value of _PARAM0_: _PARAM2_", "events": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Slider drawing", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior" - ] - }, - { - "type": { - "value": "Visible" - }, - "parameters": [ - "Object" - ] - }, - { - "type": { - "value": "LayerVisible" - }, - "parameters": [ - "", - "Object.Layer()" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::Drawer::ClearShapes" - }, - "parameters": [ - "Object" - ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Inactive track", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set inactive track parameters (by default, use thumb color)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyInactiveTrackColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyInactiveTrackColor" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyInactiveTrackColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyInactiveTrackOpacity()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::OutlineOpacity" - }, - "parameters": [ - "Object", - "=", - "0" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw inactive track", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset()", - "-Object.Behavior::PropertyTrackThickness() / 2", - "Object.Behavior::PropertyTrackLength()", - "Object.Behavior::PropertyTrackThickness() / 2" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw half circle at end of track (inactive side)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyRoundedTrack" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Arc" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyTrackLength()", - "0", - "Object.Behavior::PropertyTrackThickness() / 2", - "270", - "90", - "", - "yes" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Active track", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set active track parameters (by default, use thumb color)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyActiveTrackColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyActiveTrackColor" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyActiveTrackColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyActiveTrackOpacity()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw active track (2 pixels bigger than property) ", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "0", - "-(Object.Behavior::PropertyTrackThickness() / 2 + 1)", - "Object.Behavior::PropertyThumbOffset()", - "Object.Behavior::PropertyTrackThickness() / 2 + 1" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw half circle at end of track (active side)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyRoundedTrack" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Arc" - }, - "parameters": [ - "Object", - "0", - "0", - "1 + Object.Behavior::PropertyTrackThickness() / 2", - "90", - "270", - "", - "yes" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Halo", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Prepare halo", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbColor()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::OutlineOpacity" - }, - "parameters": [ - "Object", - "=", - "0" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw halo (it will grow or shrink as needed)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "ResourceBar::SolidResourceBar::PropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyHaloOpacityHover()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::Circle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset()", - "0", - "Object.Behavior::PropertyCurrentHaloRadius()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Use a more opaque halo while being dragged (it will grow or shrink as needed)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyHaloOpacityClick()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::Circle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset()", - "0", - "Object.Behavior::PropertyCurrentHaloRadius()" - ] - } - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Thumb", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Prepare thumb settings", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbColor()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyThumbOpacity()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw Circle thumb", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyThumbShape" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"circle\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Circle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset()", - "0", - "ceil(max(Object.Behavior::PropertyThumbWidth(),Object.Behavior::PropertyThumbHeight())/2)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw Rectangle thumb", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyThumbShape" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"rectangle\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset() - (Object.Behavior::PropertyThumbWidth() / 2)", - "-Object.Behavior::PropertyThumbHeight() / 2", - "Object.Behavior::PropertyThumbOffset() + (Object.Behavior::PropertyThumbWidth() / 2)", - "Object.Behavior::PropertyThumbHeight() / 2" - ] - } - ] - } - ], - "parameters": [] - } + "type": { + "value": "ResourceBar::DrawResourceBar222::PropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + "<=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::PropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "round(GetArgumentAsNumber(\"Value\") / Object.Behavior::PropertyTickSpacing()) * Object.Behavior::PropertyTickSpacing()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyValueMin()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValueMin()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::PropertyValueMax()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValueMax()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set the proper offset (it moves the slider)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyThumbOffset" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyBarLength() * (Object.Behavior::PropertyValue() - Object.Behavior::PropertyValueMin()) / (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin())" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Slider value", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "The minimum value of a slider.", + "fullName": "Slider minimum value", + "functionType": "Expression", + "group": "Slider value configuration", + "name": "ValueMin", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValueMin()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the minimum value of a slider.", + "fullName": "Slider minimum value", + "functionType": "Action", + "group": "Slider value configuration", + "name": "SetValueMin", + "private": false, + "sentence": "Change the minimum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyValueMin" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"ValueMin\")" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::Value()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Minimum value", + "longDescription": "", + "name": "ValueMin", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "The maximum value of a slider.", + "fullName": "Slider maximum value", + "functionType": "Expression", + "group": "Slider value configuration", + "name": "ValueMax", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValueMax()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Thickness of Bar.", + "fullName": "Slider Bar thickness", + "functionType": "Expression", + "group": "Slider Bar configuration", + "name": "BarThickness", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyBarThickness()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Length of Bar.", + "fullName": "Slider Bar length", + "functionType": "Expression", + "group": "Slider Bar configuration", + "name": "BarLength", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyBarLength()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the maximum value of a slider.", + "fullName": "Slider maximum value", + "functionType": "Action", + "group": "Slider value configuration", + "name": "SetValueMax", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyValueMax" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"ValueMax\")" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::Value()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Maximum value", + "longDescription": "", + "name": "ValueMax", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "The tick spacing of a slider.", + "fullName": "Tick spacing", + "functionType": "Expression", + "group": "Slider value configuration", + "name": "TickSpacing", + "private": false, + "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTickSpacing()" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Tick spacing", + "longDescription": "", + "name": "TickSpacing", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the tick spacing of a slider.", + "fullName": "Tick spacing", + "functionType": "Action", + "group": "Slider value configuration", + "name": "SetTickSpacing", + "private": false, + "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"TickSpacing\")" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::Value()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Tick spacing", + "longDescription": "", + "name": "TickSpacing", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change length of Bar.", + "fullName": "Bar length", + "functionType": "Action", + "group": "Slider Bar configuration", + "name": "SetBarLength", + "private": false, + "sentence": "Change Bar length of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyBarLength" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar222::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move thumb to correct place (based on new Bar size)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyValue()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Bar width", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change thickness of Bar.", + "fullName": "Bar thickness", + "functionType": "Action", + "group": "Slider Bar configuration", + "name": "SetBarThickness", + "private": false, + "sentence": "Change Bar thickness of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyBarThickness" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Bar thickness", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Make Bar use rounded ends.", + "fullName": "Rounded Bar ends", + "functionType": "Action", + "group": "Slider Bar configuration", + "name": "SetRoundedBar", + "private": false, + "sentence": "Draw _PARAM0_ with a rounded Bar: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "GetArgumentAsNumber(\"Value\")", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyRoundedBar" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "GetArgumentAsNumber(\"Value\")", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyRoundedBar" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Rounded Bar", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Change opacity of inactive Bar.", + "fullName": "Inactive Bar opacity", + "functionType": "Action", + "group": "Slider Bar configuration", + "name": "SetInactiveBarOpacity", + "private": false, + "sentence": "Change inactive Bar opacity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyInactiveBarOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" ] } - ], - "parameters": [] + ] } ], "parameters": [ @@ -5017,41 +5158,268 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", + "supplementaryInformation": "ResourceBar::DrawResourceBar222", "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Inactive Bar opacity", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" } ], "objectGroups": [] }, { - "description": "Check if the slider is being dragged.", - "fullName": "Being dragged", - "functionType": "Condition", - "group": "Slider", - "name": "IsBeingDragged", + "description": "Change opacity of active Bar.", + "fullName": "Active Bar opacity", + "functionType": "Action", + "group": "Slider Bar configuration", + "name": "SetActiveBarOpacity", "private": false, - "sentence": "_PARAM0_ is being dragged", + "sentence": "Change active Bar opacity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyActiveBarOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Active Bar opacity", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the color of the Bar that is LEFT of the thumb.", + "fullName": "Active Bar color ", + "functionType": "Action", + "group": "Slider Bar configuration", + "name": "SetActiveBarColor", + "private": false, + "sentence": "Change active Bar color of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyActiveBarColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Color\")" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Active Bar color", + "longDescription": "", + "name": "Color", + "optional": false, + "supplementaryInformation": "", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "Change the color of the Bar that is RIGHT of the thumb.", + "fullName": "Inactive Bar color", + "functionType": "Action", + "group": "Slider Bar configuration", + "name": "SetInactiveBarColor", + "private": false, + "sentence": "Change inactive Bar color of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyInactiveBarColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Color\")" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Inactive Bar color", + "longDescription": "", + "name": "Color", + "optional": false, + "supplementaryInformation": "", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "Update the hitbox.", + "fullName": "Update hitbox", + "functionType": "Action", + "group": "Private", + "name": "UpdateHitbox", + "private": true, + "sentence": "Update the hitbox of _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "conditions": [], + "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::PropertyIsBeingDragged" + "value": "PrimitiveDrawing::SetRotationCenter" }, "parameters": [ "Object", - "Behavior" + "Object.Behavior::PropertyBarLength() / 2", + "Object.Behavior::PropertyBarThickness() / 2" ] - } - ], - "actions": [ + }, { "type": { - "value": "SetReturnBoolean" + "value": "PrimitiveDrawing::SetRectangularCollisionMask" }, "parameters": [ - "True" + "Object", + "-Object.Behavior::PropertyThumbWidth() / 2", + "-Object.Behavior::PropertyThumbHeight() / 2", + "Object.Behavior::PropertyBarLength() + Object.Behavior::PropertyThumbWidth() / 2", + "Object.Behavior::PropertyThumbHeight() / 2" ] } ] @@ -5075,728 +5443,705 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", + "supplementaryInformation": "ResourceBar::DrawResourceBar222", "type": "behavior" } ], "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0", + "type": "Number", + "label": "Minimum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ValueMin" + }, + { + "value": "1", + "type": "Number", + "label": "Maximum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ValueMax" + }, + { + "value": "0", + "type": "Number", + "label": "Tick spacing", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "TickSpacing" + }, + { + "value": "circle", + "type": "Choice", + "label": "Thumb shape", + "description": "", + "group": "Thumb", + "extraInformation": [ + "circle", + "rectangle" + ], + "hidden": false, + "name": "ThumbShape" + }, + { + "value": "20", + "type": "Number", + "label": "Thumb width", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "ThumbWidth" + }, + { + "value": "20", + "type": "Number", + "label": "Thumb height", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "ThumbHeight" + }, + { + "value": " 24;119;211", + "type": "Color", + "label": "Thumb Color", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "ThumbColor" + }, + { + "value": "255", + "type": "Number", + "label": "Thumb opacity", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "ThumbOpacity" + }, + { + "value": "200", + "type": "Number", + "label": "Bar length", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "BarLength" + }, + { + "value": "4", + "type": "Number", + "label": "Bar thickness", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "BarThickness" + }, + { + "value": "", + "type": "String", + "label": "Inactive Bar color (thumb color by default)", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "InactiveBarColor" + }, + { + "value": "96", + "type": "Number", + "label": "Inactive Bar opacity", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "InactiveBarOpacity" + }, + { + "value": " ", + "type": "String", + "label": "Active Bar color (thumb color by default)", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "ActiveBarColor" + }, + { + "value": "255", + "type": "Number", + "label": "Active Bar opacity", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "ActiveBarOpacity" + }, + { + "value": "24", + "type": "Number", + "label": "Halo size (hover)", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "HaloRadius" + }, + { + "value": "32", + "type": "Number", + "label": "Halo opacity (hover)", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "HaloOpacityHover" + }, + { + "value": "64", + "type": "Number", + "label": "Halo opacity (pressed)", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "HaloOpacityClick" + }, + { + "value": "true", + "type": "Boolean", + "label": "Rounded Bar ends", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "RoundedBar" + }, + { + "value": "true", + "type": "Boolean", + "label": "Enable interactions", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "Enabled" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "IsBeingDragged" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "Value" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ThumbOffset" + }, + { + "value": "true", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "NeedRedraw" }, { - "description": "Check if the slider interations are enabled.", - "fullName": "Interactions enabled", - "functionType": "Condition", - "group": "Slider", - "name": "IsEnabled", - "private": false, - "sentence": "Interactions of _PARAM0_ are enabled", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyEnabled" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "IsHovered" }, { - "description": "Enable or disable the slider. Users cannot interact while it is disabled.", - "fullName": "Enable interactions", - "functionType": "Action", - "group": "Slider", - "name": "SetEnabled", - "private": false, - "sentence": "Enable interactions of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"Enable\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyEnabled" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Stop dragging (so the slider won't be dragging when it gets enabled)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Reset halo size (so halo won't appear when slider gets enabled)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyTargetHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"Enable\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyEnabled" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Enable", - "longDescription": "", - "name": "Enable", - "optional": false, - "supplementaryInformation": "", - "type": "yesorno" - } - ], - "objectGroups": [] + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "MouseX" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "MouseY" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "CurrentHaloRadius" }, { - "description": "The value of the slider (based on position of the thumb).", - "fullName": "Slider value", - "functionType": "Expression", - "group": "Slider", - "name": "Value", - "private": false, - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyValue()" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] + "value": "0.2", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "HaloGrowSpeed" }, { - "description": "Change the value of a slider (this will move the thumb to the correct position).", - "fullName": "Slider value", - "functionType": "Action", - "group": "Slider", - "name": "SetValue", - "private": false, - "sentence": "Change the value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - "<=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "round(GetArgumentAsNumber(\"Value\") / Object.Behavior::PropertyTickSpacing()) * Object.Behavior::PropertyTickSpacing()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyValueMin()" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMin()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "Object.Behavior::PropertyValueMax()" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMax()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set the proper offset (it moves the slider)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyThumbOffset" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyTrackLength() * (Object.Behavior::PropertyValue() - Object.Behavior::PropertyValueMin()) / (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin())" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Slider value", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TargetHaloRadius" + } + ] + }, + { + "description": "Displays a line of objects that represent a resource in the game (hearts, lives, ammo, etc). \nUse the same image used for resource bar and unit objects.", + "fullName": "Unit resource bar", + "name": "UnitResourceBar", + "objectType": "", + "eventsFunctions": [ { - "description": "The minimum value of a slider.", - "fullName": "Slider minimum value", - "functionType": "Expression", - "group": "Slider value configuration", - "name": "ValueMin", + "description": "Draw a unit resource bar.", + "fullName": "Draw a unit resource bar", + "functionType": "Action", + "group": "", + "name": "DrawUnitBar", "private": false, - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "sentence": "Draw unit bar _PARAM0_ with _PARAM2_ objects", "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Create unit objects", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyValueMin()" + "infiniteLoopWarning": true, + "type": "BuiltinCommonInstructions::While", + "whileConditions": [ + { + "type": { + "value": "ResourceBar::UnitResourceBar::PropertyNextUnitToCreate" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyCurrentQuantity()" + ] + } + ], + "conditions": [], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::UnitResourceBar::SetPropertyNextUnitToCreate" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + }, + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "UnitObject", + "Object.X() + Object.Width() * Object.Behavior::PropertyNextUnitToCreate()", + "Object.Y()", + "Object.Layer()" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "UnitObject", + "__ResourceBar.UnitID", + "=", + "Object.Behavior::PropertyNextUnitToCreate()" + ] + }, + { + "type": { + "value": "LinkedObjects::LinkObjects" + }, + "parameters": [ + "", + "Object", + "UnitObject" + ] + } + ] + } ] } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" + ], + "parameters": [] }, { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change the minimum value of a slider.", - "fullName": "Slider minimum value", - "functionType": "Action", - "group": "Slider value configuration", - "name": "SetValueMin", - "private": false, - "sentence": "Change the minimum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Remove excess units", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyValueMin" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"ValueMin\")" - ] + "comment": "Delete all units higher than max unit value", + "comment2": "" }, { - "type": { - "value": "ResourceBar::SolidResourceBar::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::PropertyMaxQuantity()", + "!=", + "0" + ] + }, + { + "type": { + "value": "LinkedObjects::PickObjectsLinkedTo" + }, + "parameters": [ + "", + "UnitObject", + "Object", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "UnitObject.Variable(__ResourceBar.UnitID)", + ">", + "Object.Behavior::PropertyCurrentQuantity()" + ] + } + ], + "actions": [ + { + "type": { + "value": "Delete" + }, + "parameters": [ + "UnitObject", + "" + ] + } ] } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" + ], + "parameters": [] }, { - "codeOnly": false, - "defaultValue": "", - "description": "Minimum value", - "longDescription": "", - "name": "ValueMin", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "The maximum value of a slider.", - "fullName": "Slider maximum value", - "functionType": "Expression", - "group": "Slider value configuration", - "name": "ValueMax", - "private": false, - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Update non-empty units", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyValueMax()" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "LinkedObjects::PickObjectsLinkedTo" + }, + "parameters": [ + "", + "UnitObject", + "Object", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "UnitObject.Variable(__ResourceBar.UnitID)", + "<=", + "Object.Behavior::PropertyCurrentQuantity()" + ] + } + ], + "actions": [ + { + "type": { + "value": "Montre" + }, + "parameters": [ + "UnitObject", + "" + ] + }, + { + "type": { + "value": "ChangeColor" + }, + "parameters": [ + "UnitObject", + "\"255;255;255\"" + ] + } ] } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" + ], + "parameters": [] }, { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Thickness of track.", - "fullName": "Slider track thickness", - "functionType": "Expression", - "group": "Slider track configuration", - "name": "TrackThickness", - "private": false, - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Update empty units", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyTrackThickness()" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "LinkedObjects::PickObjectsLinkedTo" + }, + "parameters": [ + "", + "UnitObject", + "Object", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "UnitObject.Variable(__ResourceBar.UnitID)", + ">", + "Object.Behavior::PropertyCurrentQuantity()" + ] + } + ], + "actions": [], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Color tint", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Only apply color if it has change from default value", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "Object.Behavior::PropertyEmptyColorTint()", + "!=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeColor" + }, + "parameters": [ + "UnitObject", + "Object.Behavior::PropertyEmptyColorTint()" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Hide", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::UnitResourceBar::PropertyHideEmptyUnits" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "Cache" + }, + "parameters": [ + "UnitObject" + ] + } + ] + } + ], + "parameters": [] + } ] } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" + ], + "parameters": [] }, { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Length of track.", - "fullName": "Slider track length", - "functionType": "Expression", - "group": "Slider track configuration", - "name": "TrackLength", - "private": false, - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Update counter", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyTrackLength()" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "LinkedObjects::PickObjectsLinkedTo" + }, + "parameters": [ + "", + "UnitObject", + "Object", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::UnitResourceBar::SetPropertyNextUnitToCreate" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "PickedInstancesCount(UnitObject)+1" + ] + } ] } - ] + ], + "parameters": [] } ], "parameters": [ @@ -5807,7 +6152,7 @@ "longDescription": "", "name": "Object", "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", + "supplementaryInformation": "", "type": "object" }, { @@ -5817,20 +6162,30 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", + "supplementaryInformation": "ResourceBar::UnitResourceBar", "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Object used to display each unit", + "longDescription": "", + "name": "UnitObject", + "optional": false, + "supplementaryInformation": "Sprite", + "type": "objectList" } ], "objectGroups": [] }, { - "description": "Height of thumb.", - "fullName": "Slider thumb height", - "functionType": "Expression", - "group": "Slider thumb configuration", - "name": "ThumbHeight", + "description": "Apply color tint to empty units. Empty units exist between the current and maximum value.", + "fullName": "Color tint of empty units", + "functionType": "Action", + "group": "", + "name": "SetEmptyUnitColor", "private": false, - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "sentence": "Apply color tint _PARAM2_ to empty units of _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -5838,10 +6193,12 @@ "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "ResourceBar::UnitResourceBar::SetPropertyEmptyColorTint" }, "parameters": [ - "Object.Behavior::PropertyThumbHeight()" + "Object", + "Behavior", + "GetArgumentAsString(\"ColorTint\")" ] } ] @@ -5855,7 +6212,7 @@ "longDescription": "", "name": "Object", "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", + "supplementaryInformation": "", "type": "object" }, { @@ -5865,45 +6222,78 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", + "supplementaryInformation": "ResourceBar::UnitResourceBar", "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Color tint", + "longDescription": "Use \"white\" to remove all color tint", + "name": "ColorTint", + "optional": false, + "supplementaryInformation": "", + "type": "color" } ], "objectGroups": [] }, { - "description": "Change the maximum value of a slider.", - "fullName": "Slider maximum value", + "description": "Hide empty units. Empty units exist between the current and maximum value.", + "fullName": "Hide (or show) empty units", "functionType": "Action", - "group": "Slider value configuration", - "name": "SetValueMax", + "group": "", + "name": "SetHideEmptyUnits", "private": false, - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "sentence": "Hide empty units of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"HideEmptyUnits\"" + ] + } + ], "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyValueMax" + "value": "ResourceBar::UnitResourceBar::SetPropertyHideEmptyUnits" }, "parameters": [ "Object", "Behavior", - "=", - "GetArgumentAsNumber(\"ValueMax\")" + "no" ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"HideEmptyUnits\"" + ] + } + ], + "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetValue" + "value": "ResourceBar::UnitResourceBar::SetPropertyHideEmptyUnits" }, "parameters": [ "Object", "Behavior", - "Object.Behavior::Value()", - "" + "yes" ] } ] @@ -5917,7 +6307,7 @@ "longDescription": "", "name": "Object", "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", + "supplementaryInformation": "", "type": "object" }, { @@ -5927,30 +6317,30 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", + "supplementaryInformation": "ResourceBar::UnitResourceBar", "type": "behavior" }, { "codeOnly": false, "defaultValue": "", - "description": "Maximum value", + "description": "Hide empty units", "longDescription": "", - "name": "ValueMax", + "name": "HideEmptyUnits", "optional": false, "supplementaryInformation": "", - "type": "expression" + "type": "yesorno" } ], "objectGroups": [] }, { - "description": "The tick spacing of a slider.", - "fullName": "Tick spacing", - "functionType": "Expression", - "group": "Slider value configuration", - "name": "TickSpacing", + "description": "Change maximum units that can be displayed.", + "fullName": "Maximum units", + "functionType": "Action", + "group": "", + "name": "SetMaxUnits", "private": false, - "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", + "sentence": "Change maximum units of _PARAM0_ to _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -5958,10 +6348,13 @@ "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "ResourceBar::UnitResourceBar::SetPropertyMaxQuantity" }, "parameters": [ - "Object.Behavior::PropertyTickSpacing()" + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" ] } ] @@ -5975,7 +6368,7 @@ "longDescription": "", "name": "Object", "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", + "supplementaryInformation": "", "type": "object" }, { @@ -5985,30 +6378,30 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", + "supplementaryInformation": "ResourceBar::UnitResourceBar", "type": "behavior" }, { "codeOnly": false, "defaultValue": "", - "description": "Tick spacing", + "description": "Maximum units", "longDescription": "", - "name": "TickSpacing", + "name": "Value", "optional": false, - "supplementaryInformation": "", + "supplementaryInformation": "Sprite", "type": "expression" } ], "objectGroups": [] }, { - "description": "Change the tick spacing of a slider.", - "fullName": "Tick spacing", + "description": "Change the current quantity of units.", + "fullName": "Unit quantity", "functionType": "Action", - "group": "Slider value configuration", - "name": "SetTickSpacing", + "group": "", + "name": "SetCurrentUnits", "private": false, - "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", + "sentence": "Change the unit quantity of _PARAM0_ to _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -6016,24 +6409,13 @@ "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyTickSpacing" + "value": "ResourceBar::UnitResourceBar::SetPropertyCurrentQuantity" }, "parameters": [ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"TickSpacing\")" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" + "GetArgumentAsNumber(\"Value\")" ] } ] @@ -6047,7 +6429,7 @@ "longDescription": "", "name": "Object", "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", + "supplementaryInformation": "", "type": "object" }, { @@ -6057,30 +6439,30 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", + "supplementaryInformation": "ResourceBar::UnitResourceBar", "type": "behavior" }, { "codeOnly": false, "defaultValue": "", - "description": "Tick spacing", + "description": "Current units", "longDescription": "", - "name": "TickSpacing", + "name": "Value", "optional": false, - "supplementaryInformation": "", + "supplementaryInformation": "Sprite", "type": "expression" } ], "objectGroups": [] }, { - "description": "Change length of track.", - "fullName": "Track length", + "description": "", + "fullName": "", "functionType": "Action", - "group": "Slider track configuration", - "name": "SetTrackLength", + "group": "", + "name": "onCreated", "private": false, - "sentence": "Change track length of _PARAM0_ to _PARAM2_ px", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -6088,63 +6470,13 @@ "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyTrackLength" + "value": "ResourceBar::UnitResourceBar::SetPropertyCurrentQuantity" }, "parameters": [ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move thumb to correct place (based on new track size)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyValue()", - "" + "Object.Behavior::PropertyStartingUnits()" ] } ] @@ -6158,7 +6490,7 @@ "longDescription": "", "name": "Object", "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", + "supplementaryInformation": "", "type": "object" }, { @@ -6168,54 +6500,115 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", + "supplementaryInformation": "ResourceBar::UnitResourceBar", "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Track width", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" } ], "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0", + "type": "Number", + "label": "Starting quantity", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "StartingUnits" + }, + { + "value": "", + "type": "Number", + "label": "Quantity", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "CurrentQuantity" }, { - "description": "Change thickness of track.", - "fullName": "Track thickness", + "value": "0", + "type": "Number", + "label": "Maximum quantity (Use \"0\" for unlimited)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "MaxQuantity" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "NextUnitToCreate" + }, + { + "value": "", + "type": "Color", + "label": "Empty color tint", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "EmptyColorTint" + }, + { + "value": "true", + "type": "Boolean", + "label": "Hide empty units", + "description": "Empty units exist between the current and maximum value.", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "HideEmptyUnits" + } + ] + }, + { + "description": "Draw a resource bar that represents health, shield, or any value.", + "fullName": "Draw resource bar", + "name": "DrawResourceBar117", + "objectType": "PrimitiveDrawing::Drawer", + "eventsFunctions": [ + { + "description": "", + "fullName": "", "functionType": "Action", - "group": "Slider track configuration", - "name": "SetTrackThickness", + "group": "", + "name": "onCreated", "private": false, - "sentence": "Change track thickness of _PARAM0_ to _PARAM2_ px", + "sentence": "", "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure object doesn't get re-drawn every frame", + "comment2": "" + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyTrackThickness" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + "value": "PrimitiveDrawing::ClearBetweenFrames" }, "parameters": [ "Object", - "Behavior", - "yes" + "no" ] } ] @@ -6230,62 +6623,37 @@ "textG": 0, "textR": 0 }, - "comment": "Make sure thumb width is not smaller than track height + 2 pixels (to prevent track ends from showing)", + "comment": "Use correct min value (instead of always starting at 0)", "comment2": "" }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyTrackThickness() + 2" - ] - } - ], + "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetThumbWidth" + "value": "ResourceBar::DrawResourceBar117::SetPropertyValue" }, "parameters": [ "Object", "Behavior", - "Object.Behavior::PropertyTrackThickness() + 2", - "" + "=", + "Object.Behavior::PropertyValueMin()" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyThumbHeight" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyTrackThickness() + 2" - ] - } - ], + "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetThumbHeight" + "value": "ResourceBar::DrawResourceBar117::UpdateHitbox" }, "parameters": [ "Object", "Behavior", - "Object.Behavior::PropertyTrackThickness() + 2", "" ] } @@ -6310,86 +6678,408 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", + "supplementaryInformation": "ResourceBar::DrawResourceBar117", "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Track thickness", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Change width of thumb.", - "fullName": "Thumb width", + "description": "", + "fullName": "", "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetThumbWidth", + "group": "", + "name": "doStepPostEvents", "private": false, - "sentence": "Change thumb width of _PARAM0_ to _PARAM2_ px", + "sentence": "", "events": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Thumb cannot be less than track thickness (plus 2 pixels)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "max(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyTrackThickness() + 2)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Slider drawing", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::PropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "Visible" + }, + "parameters": [ + "Object" + ] + }, + { + "type": { + "value": "LayerVisible" + }, + "parameters": [ + "", + "Object.Layer()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::Drawer::ClearShapes" + }, + "parameters": [ + "Object" + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Inactive bar", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set inactive Bar parameters (by default, use the active bar color)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DrawResourceBar::DrawResourceBar::PropertyInactiveBarColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyActiveBarColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DrawResourceBar::DrawResourceBar::PropertyInactiveBarColor" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyInactiveBarColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyInactiveBarOpacity()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::OutlineOpacity" + }, + "parameters": [ + "Object", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw inactive Bar", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset()", + "-Object.Behavior::PropertyBarThickness() / 2", + "Object.Behavior::PropertyBarLength()", + "Object.Behavior::PropertyBarThickness() / 2" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw half circle at end of Bar (inactive side)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DrawResourceBar::DrawResourceBar::PropertyRoundedBar" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Arc" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyBarLength()", + "0", + "Object.Behavior::PropertyBarThickness() / 2", + "270", + "90", + "", + "yes" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Active bar", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set active Bar parameters", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DrawResourceBar::DrawResourceBar::PropertyActiveBarColor" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyActiveBarColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyActiveBarOpacity()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw active bar", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "Object", + "0", + "-(Object.Behavior::PropertyBarThickness() / 2)", + "Object.Behavior::PropertyThumbOffset()", + "Object.Behavior::PropertyBarThickness() / 2" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw half circle at end of bar (active side)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DrawResourceBar::DrawResourceBar::PropertyRoundedBar" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Arc" + }, + "parameters": [ + "Object", + "0", + "0", + "Object.Behavior::PropertyBarThickness() / 2", + "90", + "270", + "", + "yes" + ] + } + ] + } + ], + "parameters": [] + } ] } - ] + ], + "parameters": [] } ], "parameters": [ @@ -6410,83 +7100,31 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", + "supplementaryInformation": "ResourceBar::DrawResourceBar117", "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Thumb width", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Change height of thumb.", - "fullName": "Thumb height", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetThumbHeight", + "description": "The value of the resource bar.", + "fullName": "Value", + "functionType": "Expression", + "group": "Bar", + "name": "Value", "private": false, - "sentence": "Change thumb height of _PARAM0_ to _PARAM2_ px", + "sentence": "", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Thumb cannot be less than track thickness (plus 2 pixels)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyThumbHeight" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "max(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyTrackThickness() + 2)" - ] - } - ] - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "yes" + "Object.Behavior::PropertyValue()" ] } ] @@ -6510,38 +7148,40 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", + "supplementaryInformation": "ResourceBar::DrawResourceBar117", "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Thumb height", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Change radius of the halo around the thumb. This size is also used to detect interaction with the slider.", - "fullName": "Halo radius", + "description": "Change the value of the resource bar.", + "fullName": "Value", "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetHaloRadius", + "group": "Resource Bar", + "name": "SetValue", "private": false, - "sentence": "Change halo radius of _PARAM0_ to _PARAM2_ px", + "sentence": "Change the value of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::PropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + "<=", + "0" + ] + } + ], "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyHaloRadius" + "value": "ResourceBar::DrawResourceBar117::SetPropertyValue" }, "parameters": [ "Object", @@ -6549,152 +7189,127 @@ "=", "GetArgumentAsNumber(\"Value\")" ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + "value": "ResourceBar::DrawResourceBar117::PropertyTickSpacing" }, "parameters": [ "Object", "Behavior", - "yes" + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "round(GetArgumentAsNumber(\"Value\") / Object.Behavior::PropertyTickSpacing()) * Object.Behavior::PropertyTickSpacing()" ] } ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Halo radius", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the halo opacity when the thumb is hovered.", - "fullName": "Halo opacity (hover)", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetHaloOpacityHover", - "private": false, - "sentence": "Change the halo opacity when hovered of _PARAM0_ to _PARAM2_ px", - "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "conditions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyHaloOpacityHover" + "value": "ResourceBar::DrawResourceBar117::PropertyValue" }, "parameters": [ "Object", "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" + "<", + "Object.Behavior::PropertyValueMin()" ] - }, + } + ], + "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + "value": "ResourceBar::DrawResourceBar117::SetPropertyValue" }, "parameters": [ "Object", "Behavior", - "yes" + "=", + "Object.Behavior::PropertyValueMin()" ] } ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" }, { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::PropertyValueMax()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValueMax()" + ] + } + ] }, { - "codeOnly": false, - "defaultValue": "", - "description": "Halo opacity (hover)", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change opacity of halo when pressed.", - "fullName": "Halo opacity (pressed)", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetHaloOpacityPressed", - "private": false, - "sentence": "Change halo opacity when pressed of _PARAM0_ to _PARAM2_ px", - "events": [ + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set the proper offset", + "comment2": "" + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyHaloOpacityClick" + "value": "ResourceBar::DrawResourceBar117::SetPropertyThumbOffset" }, "parameters": [ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")" + "Object.Behavior::PropertyBarLength() * (Object.Behavior::PropertyValue() - Object.Behavior::PropertyValueMin()) / (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin())" ] }, { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" }, "parameters": [ "Object", @@ -6723,13 +7338,13 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", + "supplementaryInformation": "ResourceBar::DrawResourceBar117", "type": "behavior" }, { "codeOnly": false, "defaultValue": "", - "description": "Halo opacity (pressed)", + "description": "Resource bar value", "longDescription": "", "name": "Value", "optional": false, @@ -6740,13 +7355,13 @@ "objectGroups": [] }, { - "description": "Change shape of thumb (circle or rectangle).", - "fullName": "Thumb shape", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetThumbShape", + "description": "The minimum value of the resource bar.", + "fullName": "Minimum value", + "functionType": "Expression", + "group": "Value configuration", + "name": "ValueMin", "private": false, - "sentence": "Change shape of _PARAM0_ to _PARAM2_", + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -6754,75 +7369,71 @@ "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyThumbShape" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Shape\")" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "yes" + "Object.Behavior::PropertyValueMin()" ] } ] - }, + } + ], + "parameters": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make sure thumb width is not smaller than track height (to prevent track ends from showing)", - "comment2": "" + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the minimum value of the resource bar.", + "fullName": "Minimum value", + "functionType": "Action", + "group": "Value configuration", + "name": "SetValueMin", + "private": false, + "sentence": "Change the minimum value of _PARAM0_: _PARAM2_", + "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "conditions": [], + "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::PropertyThumbShape" + "value": "ResourceBar::DrawResourceBar117::SetPropertyValueMin" }, "parameters": [ "Object", "Behavior", "=", - "\"rectangle\"" + "GetArgumentAsNumber(\"ValueMin\")" ] }, { "type": { - "value": "ResourceBar::SolidResourceBar::PropertyThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyTrackThickness()" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetThumbWidth" + "value": "ResourceBar::DrawResourceBar117::SetValue" }, "parameters": [ "Object", "Behavior", - "Object.Behavior::PropertyTrackThickness()", + "Object.Behavior::Value()", "" ] } @@ -6847,97 +7458,89 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", + "supplementaryInformation": "ResourceBar::DrawResourceBar117", "type": "behavior" }, { "codeOnly": false, "defaultValue": "", - "description": "New thumb shape", + "description": "Minimum value", "longDescription": "", - "name": "Shape", + "name": "ValueMin", "optional": false, - "supplementaryInformation": "[\"circle\",\"rectangle\"]", - "type": "stringWithSelector" + "supplementaryInformation": "", + "type": "expression" } ], "objectGroups": [] }, { - "description": "Make track use rounded ends.", - "fullName": "Rounded track ends", - "functionType": "Action", - "group": "Slider track configuration", - "name": "SetRoundedTrack", + "description": "The maximum value of the resource bar.", + "fullName": "Maximum value", + "functionType": "Expression", + "group": "Value configuration", + "name": "ValueMax", "private": false, - "sentence": "Draw _PARAM0_ with a rounded track: _PARAM2_", + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "GetArgumentAsNumber(\"Value\")", - "=", - "0" - ] - } - ], + "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyRoundedTrack" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "no" + "Object.Behavior::PropertyValueMax()" ] } ] - }, + } + ], + "parameters": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "GetArgumentAsNumber(\"Value\")", - "=", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyRoundedTrack" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Thickness of the resource bar.", + "fullName": "Bar thickness", + "functionType": "Expression", + "group": "Bar configuration", + "name": "BarThickness", + "private": false, + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "yes" + "Object.Behavior::PropertyBarThickness()" ] } ] @@ -6961,30 +7564,20 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", + "supplementaryInformation": "ResourceBar::DrawResourceBar117", "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Rounded track", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "yesorno" } ], "objectGroups": [] }, { - "description": "Change opacity of thumb.", - "fullName": "Thumb opacity", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetThumbOpacity", + "description": "Length of the resource bar.", + "fullName": "Bar length", + "functionType": "Expression", + "group": "Bar configuration", + "name": "BarLength", "private": false, - "sentence": "Change thumb opacity of _PARAM0_ to _PARAM2_", + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -6992,23 +7585,10 @@ "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyThumbOpacity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "yes" + "Object.Behavior::PropertyBarLength()" ] } ] @@ -7032,30 +7612,20 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", + "supplementaryInformation": "ResourceBar::DrawResourceBar117", "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Thumb opacity", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Change opacity of inactive track.", - "fullName": "Inactive track opacity", + "description": "Change the maximum value of a resource bar.", + "fullName": "Maximum value", "functionType": "Action", - "group": "Slider track configuration", - "name": "SetInactiveTrackOpacity", + "group": "Bar value configuration", + "name": "SetValueMax", "private": false, - "sentence": "Change inactive track opacity of _PARAM0_ to _PARAM2_", + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -7063,23 +7633,24 @@ "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyInactiveTrackOpacity" + "value": "ResourceBar::DrawResourceBar117::SetPropertyValueMax" }, "parameters": [ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")" + "GetArgumentAsNumber(\"ValueMax\")" ] }, { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + "value": "ResourceBar::DrawResourceBar117::SetValue" }, "parameters": [ "Object", "Behavior", - "yes" + "Object.Behavior::Value()", + "" ] } ] @@ -7103,15 +7674,15 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", + "supplementaryInformation": "ResourceBar::DrawResourceBar117", "type": "behavior" }, { "codeOnly": false, "defaultValue": "", - "description": "Inactive track opacity", + "description": "Maximum value", "longDescription": "", - "name": "Value", + "name": "ValueMax", "optional": false, "supplementaryInformation": "", "type": "expression" @@ -7120,13 +7691,13 @@ "objectGroups": [] }, { - "description": "Change opacity of active track.", - "fullName": "Active track opacity", - "functionType": "Action", - "group": "Slider track configuration", - "name": "SetActiveTrackOpacity", + "description": "The tick spacing of a bar.", + "fullName": "Tick spacing", + "functionType": "Expression", + "group": "Value configuration", + "name": "TickSpacing", "private": false, - "sentence": "Change active track opacity of _PARAM0_ to _PARAM2_", + "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -7134,23 +7705,10 @@ "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyActiveTrackOpacity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "yes" + "Object.Behavior::PropertyTickSpacing()" ] } ] @@ -7174,15 +7732,15 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", + "supplementaryInformation": "ResourceBar::DrawResourceBar117", "type": "behavior" }, { "codeOnly": false, "defaultValue": "", - "description": "Active track opacity", + "description": "Tick spacing", "longDescription": "", - "name": "Value", + "name": "TickSpacing", "optional": false, "supplementaryInformation": "", "type": "expression" @@ -7191,13 +7749,13 @@ "objectGroups": [] }, { - "description": "Change the color of the track that is LEFT of the thumb.", - "fullName": "Active track color ", + "description": "Change the tick spacing of a resource bar.", + "fullName": "Tick spacing", "functionType": "Action", - "group": "Slider track configuration", - "name": "SetActiveTrackColor", + "group": "Value configuration", + "name": "SetTickSpacing", "private": false, - "sentence": "Change active track color of _PARAM0_ to _PARAM2_", + "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -7205,23 +7763,24 @@ "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyActiveTrackColor" + "value": "ResourceBar::DrawResourceBar117::SetPropertyTickSpacing" }, "parameters": [ "Object", "Behavior", "=", - "GetArgumentAsString(\"Color\")" + "GetArgumentAsNumber(\"TickSpacing\")" ] }, { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + "value": "ResourceBar::DrawResourceBar117::SetValue" }, "parameters": [ "Object", "Behavior", - "yes" + "Object.Behavior::Value()", + "" ] } ] @@ -7245,30 +7804,30 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", + "supplementaryInformation": "ResourceBar::DrawResourceBar117", "type": "behavior" }, { "codeOnly": false, "defaultValue": "", - "description": "Active track color", + "description": "Tick spacing", "longDescription": "", - "name": "Color", + "name": "TickSpacing", "optional": false, "supplementaryInformation": "", - "type": "color" + "type": "expression" } ], "objectGroups": [] }, { - "description": "Change the color of the track that is RIGHT of the thumb.", - "fullName": "Inactive track color", + "description": "Change length of a resource bar.", + "fullName": "Bar length", "functionType": "Action", - "group": "Slider track configuration", - "name": "SetInactiveTrackColor", + "group": "Bar configuration", + "name": "SetBarLength", "private": false, - "sentence": "Change inactive track color of _PARAM0_ to _PARAM2_", + "sentence": "Change bar length of _PARAM0_ to _PARAM2_ px", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -7276,18 +7835,28 @@ "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyInactiveTrackColor" + "value": "ResourceBar::DrawResourceBar117::SetPropertyBarLength" }, "parameters": [ "Object", "Behavior", "=", - "GetArgumentAsString(\"Color\")" + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar117::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" ] }, { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" }, "parameters": [ "Object", @@ -7296,6 +7865,36 @@ ] } ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move thumb to correct place (based on new Bar size)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyValue()", + "" + ] + } + ] } ], "parameters": [ @@ -7316,30 +7915,30 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", + "supplementaryInformation": "ResourceBar::DrawResourceBar117", "type": "behavior" }, { "codeOnly": false, "defaultValue": "", - "description": "Inactive track color", + "description": "Bar width", "longDescription": "", - "name": "Color", + "name": "Value", "optional": false, "supplementaryInformation": "", - "type": "color" + "type": "expression" } ], "objectGroups": [] }, { - "description": "Change the thumb color to a specific value.", - "fullName": "Thumb color", + "description": "Change thickness of a resource bar", + "fullName": "Bar thickness", "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetThumbColor", + "group": "Bar configuration", + "name": "SetBarThickness", "private": false, - "sentence": "Change thumb color of _PARAM0_ to _PARAM2_", + "sentence": "Change the bar thickness of _PARAM0_ to _PARAM2_ px", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -7347,17 +7946,18 @@ "actions": [ { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyThumbColor" + "value": "ResourceBar::DrawResourceBar117::SetPropertyBarThickness" }, "parameters": [ "Object", "Behavior", - "GetArgumentAsString(\"Color\")" + "=", + "GetArgumentAsNumber(\"Value\")" ] }, { "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" + "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" }, "parameters": [ "Object", @@ -7366,6 +7966,77 @@ ] } ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure thumb width is not smaller than Bar height + 2 pixels (to prevent Bar ends from showing)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::PropertyThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyBarThickness() + 2" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyBarThickness() + 2", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::PropertyThumbHeight" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyBarThickness() + 2" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetThumbHeight" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyBarThickness() + 2", + "" + ] + } + ] } ], "parameters": [ @@ -7386,55 +8057,97 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", + "supplementaryInformation": "ResourceBar::DrawResourceBar117", "type": "behavior" }, { "codeOnly": false, "defaultValue": "", - "description": "Thumb color", + "description": "Bar thickness", "longDescription": "", - "name": "Color", + "name": "Value", "optional": false, "supplementaryInformation": "", - "type": "color" + "type": "expression" } ], "objectGroups": [] }, { - "description": "Update the hitbox.", - "fullName": "Update hitbox", + "description": "Make bar use rounded ends.", + "fullName": "Rounded bar ends", "functionType": "Action", - "group": "Private", - "name": "UpdateHitbox", - "private": true, - "sentence": "Update the hitbox of _PARAM0_", + "group": "Bar configuration", + "name": "SetRoundedBar", + "private": false, + "sentence": "Draw _PARAM0_ with a rounded bar: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "GetArgumentAsNumber(\"Value\")", + "=", + "0" + ] + } + ], "actions": [ { "type": { - "value": "PrimitiveDrawing::SetRotationCenter" + "value": "ResourceBar::DrawResourceBar117::SetPropertyRoundedBar" }, "parameters": [ "Object", - "Object.Behavior::PropertyTrackLength() / 2", - "Object.Behavior::PropertyTrackThickness() / 2" + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "GetArgumentAsNumber(\"Value\")", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyRoundedBar" + }, + "parameters": [ + "Object", + "Behavior", + "yes" ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { "type": { - "value": "PrimitiveDrawing::SetRectangularCollisionMask" + "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" }, "parameters": [ "Object", - "-Object.Behavior::PropertyThumbWidth() / 2", - "-Object.Behavior::PropertyThumbHeight() / 2", - "Object.Behavior::PropertyTrackLength() + Object.Behavior::PropertyThumbWidth() / 2", - "Object.Behavior::PropertyThumbHeight() / 2" + "Behavior", + "yes" ] } ] @@ -7457,669 +8170,608 @@ "description": "Behavior", "longDescription": "", "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "0", - "type": "Number", - "label": "Minimum value", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "ValueMin" - }, - { - "value": "1", - "type": "Number", - "label": "Maximum value", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "ValueMax" - }, - { - "value": "0", - "type": "Number", - "label": "Tick spacing", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "TickSpacing" - }, - { - "value": "circle", - "type": "Choice", - "label": "Thumb shape", - "description": "", - "group": "Thumb", - "extraInformation": [ - "circle", - "rectangle" - ], - "hidden": false, - "name": "ThumbShape" - }, - { - "value": "20", - "type": "Number", - "label": "Thumb width", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "ThumbWidth" - }, - { - "value": "20", - "type": "Number", - "label": "Thumb height", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "ThumbHeight" - }, - { - "value": " 24;119;211", - "type": "Color", - "label": "Thumb Color", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "ThumbColor" - }, - { - "value": "255", - "type": "Number", - "label": "Thumb opacity", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "ThumbOpacity" - }, - { - "value": "200", - "type": "Number", - "label": "Track length", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "TrackLength" - }, - { - "value": "4", - "type": "Number", - "label": "Track thickness", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "TrackThickness" - }, - { - "value": "", - "type": "String", - "label": "Inactive track color (thumb color by default)", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "InactiveTrackColor" - }, - { - "value": "96", - "type": "Number", - "label": "Inactive track opacity", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "InactiveTrackOpacity" - }, - { - "value": " ", - "type": "String", - "label": "Active track color (thumb color by default)", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "ActiveTrackColor" - }, - { - "value": "255", - "type": "Number", - "label": "Active track opacity", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "ActiveTrackOpacity" - }, - { - "value": "24", - "type": "Number", - "label": "Halo size (hover)", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "HaloRadius" - }, - { - "value": "32", - "type": "Number", - "label": "Halo opacity (hover)", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "HaloOpacityHover" - }, - { - "value": "64", - "type": "Number", - "label": "Halo opacity (pressed)", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "HaloOpacityClick" - }, - { - "value": "true", - "type": "Boolean", - "label": "Rounded track ends", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "RoundedTrack" - }, - { - "value": "true", - "type": "Boolean", - "label": "Enable interactions", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "Enabled" - }, - { - "value": "", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "IsBeingDragged" - }, - { - "value": "0", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "Value" - }, - { - "value": "0", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "ThumbOffset" - }, - { - "value": "true", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "NeedRedraw" + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Rounded bar", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "yesorno" + } + ], + "objectGroups": [] }, { - "value": "", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "IsHovered" + "description": "Change opacity of inactive bar.", + "fullName": "Inactive bar opacity", + "functionType": "Action", + "group": "Bar configuration", + "name": "SetInactiveBarOpacity", + "private": false, + "sentence": "Change inactive bar opacity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyInactiveBarOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Inactive bar opacity", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] }, { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "MouseX" + "description": "Change opacity of active bar.", + "fullName": "Active bar opacity", + "functionType": "Action", + "group": "Bar configuration", + "name": "SetActiveBarOpacity", + "private": false, + "sentence": "Change active bar opacity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyActiveBarOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Active bar opacity", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] }, { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "MouseY" + "description": "Change the color of the left side of the bar.", + "fullName": "Active bar color ", + "functionType": "Action", + "group": "Bar configuration", + "name": "SetActiveBarColor", + "private": false, + "sentence": "Change active bar color of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyActiveBarColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Color\")" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Active bar color", + "longDescription": "", + "name": "Color", + "optional": false, + "supplementaryInformation": "", + "type": "color" + } + ], + "objectGroups": [] }, { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "CurrentHaloRadius" + "description": "Change the color of the right side of the resource bar.", + "fullName": "Inactive bar color", + "functionType": "Action", + "group": "Bar configuration", + "name": "SetInactiveBarColor", + "private": false, + "sentence": "Change inactive bar color of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyInactiveBarColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Color\")" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Inactive bar color", + "longDescription": "", + "name": "Color", + "optional": false, + "supplementaryInformation": "", + "type": "color" + } + ], + "objectGroups": [] }, { - "value": "0.2", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "HaloGrowSpeed" + "description": "Update the hitbox.", + "fullName": "Update hitbox", + "functionType": "Action", + "group": "Private", + "name": "UpdateHitbox", + "private": true, + "sentence": "Update the hitbox of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::SetRotationCenter" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyBarLength() / 2", + "Object.Behavior::PropertyBarThickness() / 2" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::SetRectangularCollisionMask" + }, + "parameters": [ + "Object", + "0", + "-Object.Behavior::PropertyBarThickness() / 2", + "Object.Behavior::PropertyBarLength()", + "Object.Behavior::PropertyBarThickness() / 2" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + } + ], + "objectGroups": [] }, { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "TargetHaloRadius" - } - ] - }, - { - "description": "Displays a line of objects that represent a resource in the game (hearts, lives, ammo, etc)", - "fullName": "Unit resource bar", - "name": "UnitResourceBar", - "objectType": "", - "eventsFunctions": [ - { - "description": "Display unit resource bar.", - "fullName": "Display unit resource bar", + "description": "Draw health bar.", + "fullName": "Draw health bar", "functionType": "Action", "group": "", - "name": "DisplayUnitResourceBar", + "name": "DrawHealthBar", "private": false, - "sentence": "Display _PARAM3_ units of _PARAM2_ located at _PARAM0_", + "sentence": "Draw health bar with _PARAM0_ based on health of _PARAM2_", "events": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Create unit objects (if needed)", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set values", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "ResourceBar::DrawResourceBar117::SetValue" }, - "comment": "Create first object (required because \"take into account\" is false when count is 0)", - "comment2": "" + "parameters": [ + "Object", + "DraggableSliderBehavior", + "Tween::Ease(\"easeOutCirc\", Object.Behavior::Value(), ObjectWithHealth.HealthBehavior::Health(), 0.05)", + "" + ] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Not" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "LinkedObjects::PickObjectsLinkedTo" - }, - "parameters": [ - "", - "UnitObject", - "Object", - "" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "Create" - }, - "parameters": [ - "", - "UnitObject", - "Object.X()", - "Object.Y()", - "Object.Layer()" - ] - }, - { - "type": { - "value": "LinkedObjects::LinkObjects" - }, - "parameters": [ - "", - "Object", - "UnitObject" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "UnitObject", - "__ResourceBar.UnitID", - "=", - "1" - ] - } + "type": { + "value": "ResourceBar::DrawResourceBar117::SetValueMax" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "ObjectWithHealth.HealthBehavior::MaxHealth()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Object with health", + "longDescription": "", + "name": "ObjectWithHealth", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Health behavior", + "longDescription": "", + "name": "HealthBehavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Draw shield bar.", + "fullName": "Draw shield bar", + "functionType": "Action", + "group": "", + "name": "DrawShieldBar", + "private": false, + "sentence": "Draw shield bar with _PARAM0_ based on shield of _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set values", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetValue" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "Tween::Ease(\"easeOutCirc\", Object.Behavior::Value(), ObjectWithShield.ShieldBehavior::ShieldPoints(), 0.05)", + "" ] }, { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "ResourceBar::DrawResourceBar117::SetValueMax" }, - "comment": "Create more objects as needed", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "LinkedObjects::PickObjectsLinkedTo" - }, - "parameters": [ - "", - "UnitObject", - "Object", - "" - ] - }, - { - "type": { - "value": "PickedInstancesCount" - }, - "parameters": [ - "UnitObject", - "<", - "GetArgumentAsNumber(\"Units\")" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::UnitResourceBar::SetPropertyNextUnitToCreate" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "PickedInstancesCount(UnitObject) + 1" - ] - } - ], - "events": [ - { - "infiniteLoopWarning": true, - "type": "BuiltinCommonInstructions::While", - "whileConditions": [ - { - "type": { - "value": "ResourceBar::UnitResourceBar::PropertyNextUnitToCreate" - }, - "parameters": [ - "Object", - "Behavior", - "<=", - "GetArgumentAsNumber(\"Units\")" - ] - } - ], - "conditions": [], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Create" - }, - "parameters": [ - "", - "UnitObject", - "Object.X()", - "Object.Y()", - "Object.Layer()" - ] - }, - { - "type": { - "value": "LinkedObjects::LinkObjects" - }, - "parameters": [ - "", - "Object", - "UnitObject" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "UnitObject", - "__ResourceBar.UnitID", - "=", - "Object.Behavior::PropertyNextUnitToCreate()" - ] - }, - { - "type": { - "value": "ResourceBar::UnitResourceBar::SetPropertyNextUnitToCreate" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "1" - ] - } - ] - } - ] - } + "parameters": [ + "Object", + "DraggableSliderBehavior", + "ObjectWithShield.ShieldBehavior::MaxShield()", + "" ] } - ], - "parameters": [] + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "disabled": true, - "name": "Update position of units", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "LinkedObjects::PickObjectsLinkedTo" - }, - "parameters": [ - "", - "UnitObject", - "Object", - "" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::ForEach", - "object": "UnitObject", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetCenter" - }, - "parameters": [ - "UnitObject", - "=", - "Object.CenterX() + (Object.Behavior::PropertyUnitSpacing() + UnitObject.Width()) * (UnitObject.Variable(__ResourceBar.UnitID) - 1)", - "=", - "Object.CenterY()" - ] - } - ] - } - ] - } - ], - "parameters": [] + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar117", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Object with shield", + "longDescription": "", + "name": "ObjectWithShield", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Shield behavior", + "longDescription": "", + "name": "ShieldBehavior", + "optional": false, + "supplementaryInformation": "Health::Shield", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Draw resource bar.", + "fullName": "Draw resource bar", + "functionType": "Action", + "group": "", + "name": "DrawResourceBar", + "private": false, + "sentence": "Draw resource bar with _PARAM0_ with current value _PARAM2_ and max value _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set values", + "comment2": "" }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "disabled": true, - "name": "Update unit visibility", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "LinkedObjects::PickObjectsLinkedTo" - }, - "parameters": [ - "", - "UnitObject", - "Object", - "" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "UnitObject", - "__ResourceBar.UnitID", - ">", - "GetArgumentAsNumber(\"Units\")" - ] - } - ], - "actions": [ - { - "type": { - "value": "Cache" - }, - "parameters": [ - "UnitObject" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "UnitObject", - "__ResourceBar.UnitID", - "<=", - "GetArgumentAsNumber(\"Units\")" - ] - } - ], - "actions": [ - { - "type": { - "value": "Montre" - }, - "parameters": [ - "UnitObject", - "" - ] - } - ] - } + "type": { + "value": "ResourceBar::DrawResourceBar117::SetValue" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "Tween::Ease(\"easeOutCirc\", Object.Behavior::Value(), GetArgumentAsNumber(\"CurrentValue\"), 0.05)", + "" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar117::SetValueMax" + }, + "parameters": [ + "Object", + "DraggableSliderBehavior", + "GetArgumentAsNumber(\"MaxValue\")", + "" ] } - ], - "parameters": [] + ] } ], "parameters": [ @@ -8130,7 +8782,7 @@ "longDescription": "", "name": "Object", "optional": false, - "supplementaryInformation": "", + "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { @@ -8140,27 +8792,27 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::UnitResourceBar", + "supplementaryInformation": "ResourceBar::DrawResourceBar117", "type": "behavior" }, { "codeOnly": false, "defaultValue": "", - "description": "Object used to display each unit", + "description": "Current value", "longDescription": "", - "name": "UnitObject", + "name": "CurrentValue", "optional": false, "supplementaryInformation": "", - "type": "objectList" + "type": "expression" }, { "codeOnly": false, "defaultValue": "", - "description": "Units", + "description": "Max value", "longDescription": "", - "name": "Units", + "name": "MaxValue", "optional": false, - "supplementaryInformation": "", + "supplementaryInformation": "Health::Health", "type": "expression" } ], @@ -8171,56 +8823,147 @@ { "value": "0", "type": "Number", - "label": "Starting units", + "label": "Minimum value", "description": "", - "group": "", + "group": "Value", "extraInformation": [], "hidden": false, - "name": "StartingUnits" + "name": "ValueMin" }, { - "value": "", + "value": "1", "type": "Number", - "label": "", + "label": "Maximum value", "description": "", - "group": "", + "group": "Value", "extraInformation": [], "hidden": false, - "name": "CurrentUnits" + "name": "ValueMax" }, { "value": "0", "type": "Number", - "label": "Maximum units (Use \"0\" for unlimited)", + "label": "Tick spacing", "description": "", - "group": "", + "group": "Value", + "extraInformation": [], + "hidden": false, + "name": "TickSpacing" + }, + { + "value": "200", + "type": "Number", + "label": "Bar length", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "BarLength" + }, + { + "value": "4", + "type": "Number", + "label": "Bar thickness", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "BarThickness" + }, + { + "value": "11;255;0", + "type": "Color", + "label": "Inactive bar color", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "InactiveBarColor" + }, + { + "value": "96", + "type": "Number", + "label": "Inactive bar opacity", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "InactiveBarOpacity" + }, + { + "value": "11;255;0", + "type": "Color", + "label": "Active bar color", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "ActiveBarColor" + }, + { + "value": "255", + "type": "Number", + "label": "Active bar opacity", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "ActiveBarOpacity" + }, + { + "value": "false", + "type": "Boolean", + "label": "Rounded bar ends", + "description": "", + "group": "Bar", "extraInformation": [], "hidden": false, - "name": "MaxUnits" + "name": "RoundedBar" }, { "value": "0", "type": "Number", - "label": "Space between each unit (pixels)", + "label": "", "description": "", "group": "", "extraInformation": [], - "hidden": false, - "name": "UnitSpacing" + "hidden": true, + "name": "Value" }, { - "value": "", + "value": "0", "type": "Number", "label": "", "description": "", "group": "", "extraInformation": [], "hidden": true, - "name": "NextUnitToCreate" + "name": "ThumbOffset" + }, + { + "value": "true", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "NeedRedraw" + }, + { + "value": "0", + "type": "Number", + "label": "Time to complete moving the bar when the value is changed (seconds)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ChangeDuration" } ] } - ] + ], + "eventsBasedObjects": [] }, { "author": "@Bouh, D8H", @@ -9586,7 +10329,8 @@ "objectGroups": [] } ], - "eventsBasedBehaviors": [] + "eventsBasedBehaviors": [], + "eventsBasedObjects": [] }, { "author": "D8H", @@ -9945,7 +10689,8 @@ } ] } - ] + ], + "eventsBasedObjects": [] }, { "author": "Tristan Rhodes (https://victrisgames.itch.io/)", @@ -14560,7 +15305,8 @@ ], "propertyDescriptors": [] } - ] + ], + "eventsBasedObjects": [] }, { "author": "VegeTato, arthuro555", @@ -15187,7 +15933,8 @@ } ] } - ] + ], + "eventsBasedObjects": [] }, { "author": "@4ian", @@ -19021,7 +19768,8 @@ } ] } - ] + ], + "eventsBasedObjects": [] }, { "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", @@ -21446,7 +22194,8 @@ } ] } - ] + ], + "eventsBasedObjects": [] }, { "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", @@ -25804,7 +26553,8 @@ } ] } - ] + ], + "eventsBasedObjects": [] }, { "author": "", @@ -26250,7 +27000,8 @@ } ] } - ] + ], + "eventsBasedObjects": [] } ], "externalLayouts": [], From c081fa40260ef38139586d0e2e31ec3ee25702b0 Mon Sep 17 00:00:00 2001 From: Tristan Rhodes Date: Sun, 6 Nov 2022 19:20:45 -0700 Subject: [PATCH 06/98] Basic shape painter version working --- examples/resource-bar/game.json | 2928 +++++-------------------------- 1 file changed, 436 insertions(+), 2492 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 567b8bc8a..f23d19179 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -1356,22 +1356,37 @@ "effects": [], "behaviors": [ { - "name": "DrawResourceBar116", - "type": "ResourceBar::DrawResourceBar116", + "name": "DrawResourceBar222", + "type": "ResourceBar::DrawResourceBar222", "ValueMin": 0, "ValueMax": 1, "TickSpacing": 0, + "ThumbShape": "circle", + "ThumbWidth": 20, + "ThumbHeight": 20, + "ThumbColor": " 24;119;211", + "ThumbOpacity": 255, "BarLength": 200, "BarThickness": 4, - "InactiveBarColor": "11;255;0", + "InactiveBarColor": "", "InactiveBarOpacity": 96, - "ActiveBarColor": "11;255;0", + "ActiveBarColor": " ", "ActiveBarOpacity": 255, - "RoundedBar": false, + "HaloRadius": 24, + "HaloOpacityHover": 32, + "HaloOpacityClick": 64, + "RoundedBar": true, + "Enabled": true, + "IsBeingDragged": false, "Value": 0, "ThumbOffset": 0, "NeedRedraw": true, - "ChangeDuration": 0 + "IsHovered": false, + "MouseX": 0, + "MouseY": 0, + "CurrentHaloRadius": 0, + "HaloGrowSpeed": 0.2, + "TargetHaloRadius": 0.19999992847442627 } ], "fillOpacity": 255, @@ -1467,26 +1482,26 @@ "effects": [], "behaviors": [ { - "name": "DraggableSliderControl", - "type": "DraggableSliderControl::DraggableSliderControl", + "name": "DrawResourceBar222", + "type": "ResourceBar::DrawResourceBar222", "ValueMin": 0, "ValueMax": 1, "TickSpacing": 0, - "ThumbShape": "rectangle", + "ThumbShape": "circle", "ThumbWidth": 20, "ThumbHeight": 20, - "ThumbColor": "144;19;254", + "ThumbColor": " 24;119;211", "ThumbOpacity": 255, - "TrackLength": 200, - "TrackThickness": 16, - "InactiveTrackColor": "", - "InactiveTrackOpacity": 96, - "ActiveTrackColor": " ", - "ActiveTrackOpacity": 255, + "BarLength": 200, + "BarThickness": 4, + "InactiveBarColor": "144;19;254", + "InactiveBarOpacity": 96, + "ActiveBarColor": " 144;19;254", + "ActiveBarOpacity": 255, "HaloRadius": 24, "HaloOpacityHover": 32, "HaloOpacityClick": 64, - "RoundedTrack": false, + "RoundedBar": true, "Enabled": true, "IsBeingDragged": false, "Value": 0, @@ -1497,12 +1512,7 @@ "MouseY": 0, "CurrentHaloRadius": 0, "HaloGrowSpeed": 0.2, - "TargetHaloRadius": 0 - }, - { - "name": "DrawResourceBar", - "type": "DrawResourceBarOLD::DrawResourceBarOLD", - "DraggableSliderBehavior": "DraggableSliderControl" + "TargetHaloRadius": 0.19999992847442627 } ], "fillOpacity": 255, @@ -1530,8 +1540,8 @@ "effects": [], "behaviors": [ { - "name": "DraggableSliderControl", - "type": "DraggableSliderControl::DraggableSliderControl", + "name": "DrawResourceBar222", + "type": "ResourceBar::DrawResourceBar222", "ValueMin": 0, "ValueMax": 1, "TickSpacing": 0, @@ -1540,16 +1550,16 @@ "ThumbHeight": 20, "ThumbColor": "248;231;28", "ThumbOpacity": 255, - "TrackLength": 200, - "TrackThickness": 16, - "InactiveTrackColor": "", - "InactiveTrackOpacity": 96, - "ActiveTrackColor": " ", - "ActiveTrackOpacity": 255, + "BarLength": 200, + "BarThickness": 4, + "InactiveBarColor": "", + "InactiveBarOpacity": 96, + "ActiveBarColor": " ", + "ActiveBarOpacity": 255, "HaloRadius": 24, "HaloOpacityHover": 32, "HaloOpacityClick": 64, - "RoundedTrack": true, + "RoundedBar": true, "Enabled": true, "IsBeingDragged": false, "Value": 0, @@ -1560,12 +1570,7 @@ "MouseY": 0, "CurrentHaloRadius": 0, "HaloGrowSpeed": 0.2, - "TargetHaloRadius": 0 - }, - { - "name": "DrawResourceBar", - "type": "DrawResourceBarOLD::DrawResourceBarOLD", - "DraggableSliderBehavior": "DraggableSliderControl" + "TargetHaloRadius": 0.19999992847442627 } ], "fillOpacity": 255, @@ -2818,47 +2823,87 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar116::DrawHealthBar" + "value": "DrawResourceBarOLD::DrawResourceBarOLD::DrawHealthBar" }, "parameters": [ - "Health_Bar", - "DrawResourceBar116", + "MiniHealth_Bar", + "DrawResourceBar", "Fly", "Health", "" ] + } + ] + }, + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetValue" + }, + "parameters": [ + "Health_Bar", + "DrawResourceBar222", + "Fly.Health::Health()", + "" + ] }, { "type": { - "value": "DrawResourceBarOLD::DrawResourceBarOLD::DrawHealthBar" + "value": "ResourceBar::DrawResourceBar222::SetValueMin" }, "parameters": [ - "MiniHealth_Bar", - "DrawResourceBar", - "Fly", - "Health", + "Health_Bar", + "DrawResourceBar222", + "0", "" ] }, { "type": { - "value": "DrawResourceBarOLD::DrawResourceBarOLD::DrawShieldBar" + "value": "ResourceBar::DrawResourceBar222::SetValueMax" + }, + "parameters": [ + "Health_Bar", + "DrawResourceBar222", + "Fly.Health::MaxHealth()", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::DrawShieldBar" }, "parameters": [ "Shield_Bar", - "DrawResourceBar", + "DrawResourceBar222", "Fly", "Shield", "" ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { "type": { - "value": "DrawResourceBarOLD::DrawResourceBarOLD::DrawResourceBar" + "value": "ResourceBar::DrawResourceBar222::DrawResourceBar" }, "parameters": [ "ResourceMouseX_Bar", - "DrawResourceBar", + "DrawResourceBar222", "Variable(MyResource)", "Variable(MaxResource)", "" @@ -2866,6 +2911,24 @@ } ] }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::DrawHealthBar" + }, + "parameters": [ + "Health_Bar", + "DrawResourceBar222", + "Fly", + "Health", + "" + ] + } + ] + }, { "type": "BuiltinCommonInstructions::Comment", "color": { @@ -3496,8 +3559,8 @@ "type": "DrawResourceBarOLD::DrawResourceBarOLD" }, { - "name": "DrawResourceBar116", - "type": "ResourceBar::DrawResourceBar116" + "name": "DrawResourceBar222", + "type": "ResourceBar::DrawResourceBar222" }, { "name": "Health", @@ -3582,7 +3645,7 @@ "textG": 0, "textR": 0 }, - "comment": "Make sure object doesn't get re-drawn every frame", + "comment": "Make sure object doesn't get redrawn every frame", "comment2": "" }, { @@ -3764,19 +3827,7 @@ }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar222::PropertyInactiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"\"" - ] - } - ], + "conditions": [], "actions": [ { "type": { @@ -3784,7 +3835,7 @@ }, "parameters": [ "Object", - "Object.Behavior::PropertyThumbColor()" + "Object.Behavior::PropertyInactiveBarColor()" ] } ] @@ -5448,40 +5499,325 @@ } ], "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "0", - "type": "Number", - "label": "Minimum value", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "ValueMin" }, { - "value": "1", - "type": "Number", - "label": "Maximum value", - "description": "", + "description": "Draw health bar.", + "fullName": "Draw health bar", + "functionType": "Action", "group": "", - "extraInformation": [], - "hidden": false, - "name": "ValueMax" + "name": "DrawHealthBar", + "private": false, + "sentence": "Draw health bar with _PARAM0_ based on health of _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set values", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Tween::Ease(\"easeOutCirc\", Object.Behavior::Value(), ObjectWithHealth.HealthBehavior::Health(), 0.05)", + "" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetValueMax" + }, + "parameters": [ + "Object", + "Behavior", + "ObjectWithHealth.HealthBehavior::MaxHealth()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Object with health", + "longDescription": "", + "name": "ObjectWithHealth", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Health behavior", + "longDescription": "", + "name": "HealthBehavior", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] }, { - "value": "0", - "type": "Number", - "label": "Tick spacing", - "description": "", + "description": "Draw shield bar.", + "fullName": "Draw shield bar", + "functionType": "Action", "group": "", - "extraInformation": [], - "hidden": false, - "name": "TickSpacing" - }, - { + "name": "DrawShieldBar", + "private": false, + "sentence": "Draw shield bar with _PARAM0_ based on shield of _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set values", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Tween::Ease(\"easeOutCirc\", Object.Behavior::Value(), ObjectWithShield.ShieldBehavior::ShieldPoints(), 0.05)", + "" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetValueMax" + }, + "parameters": [ + "Object", + "Behavior", + "ObjectWithShield.ShieldBehavior::MaxShield()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Object with shield", + "longDescription": "", + "name": "ObjectWithShield", + "optional": false, + "supplementaryInformation": "", + "type": "objectList" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Shield behavior", + "longDescription": "", + "name": "ShieldBehavior", + "optional": false, + "supplementaryInformation": "Health::Shield", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Draw resource bar.", + "fullName": "Draw resource bar", + "functionType": "Action", + "group": "", + "name": "DrawResourceBar", + "private": false, + "sentence": "Draw resource bar with _PARAM0_ with current value _PARAM2_ and max value _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set values", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Tween::Ease(\"easeOutCirc\", Object.Behavior::Value(), GetArgumentAsNumber(\"CurrentValue\"), 0.05)", + "" + ] + }, + { + "type": { + "value": "ResourceBar::DrawResourceBar222::SetValueMax" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsNumber(\"MaxValue\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Current value", + "longDescription": "", + "name": "CurrentValue", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Max value", + "longDescription": "", + "name": "MaxValue", + "optional": false, + "supplementaryInformation": "Health::Health", + "type": "expression" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0", + "type": "Number", + "label": "Minimum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ValueMin" + }, + { + "value": "1", + "type": "Number", + "label": "Maximum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ValueMax" + }, + { + "value": "0", + "type": "Number", + "label": "Tick spacing", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "TickSpacing" + }, + { "value": "circle", "type": "Choice", "label": "Thumb shape", @@ -5555,9 +5891,9 @@ "name": "BarThickness" }, { - "value": "", + "value": "11;255;0", "type": "String", - "label": "Inactive Bar color (thumb color by default)", + "label": "Inactive Bar color", "description": "", "group": "Bar", "extraInformation": [], @@ -5575,9 +5911,9 @@ "name": "InactiveBarOpacity" }, { - "value": " ", + "value": " 11;255;0", "type": "String", - "label": "Active Bar color (thumb color by default)", + "label": "Active Bar color", "description": "", "group": "Bar", "extraInformation": [], @@ -6569,2398 +6905,6 @@ "name": "HideEmptyUnits" } ] - }, - { - "description": "Draw a resource bar that represents health, shield, or any value.", - "fullName": "Draw resource bar", - "name": "DrawResourceBar117", - "objectType": "PrimitiveDrawing::Drawer", - "eventsFunctions": [ - { - "description": "", - "fullName": "", - "functionType": "Action", - "group": "", - "name": "onCreated", - "private": false, - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make sure object doesn't get re-drawn every frame", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::ClearBetweenFrames" - }, - "parameters": [ - "Object", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Use correct min value (instead of always starting at 0)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMin()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "", - "fullName": "", - "functionType": "Action", - "group": "", - "name": "doStepPostEvents", - "private": false, - "sentence": "", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Slider drawing", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::PropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior" - ] - }, - { - "type": { - "value": "Visible" - }, - "parameters": [ - "Object" - ] - }, - { - "type": { - "value": "LayerVisible" - }, - "parameters": [ - "", - "Object.Layer()" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::Drawer::ClearShapes" - }, - "parameters": [ - "Object" - ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Inactive bar", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set inactive Bar parameters (by default, use the active bar color)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DrawResourceBar::DrawResourceBar::PropertyInactiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyActiveBarColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DrawResourceBar::DrawResourceBar::PropertyInactiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyInactiveBarColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyInactiveBarOpacity()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::OutlineOpacity" - }, - "parameters": [ - "Object", - "=", - "0" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw inactive Bar", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset()", - "-Object.Behavior::PropertyBarThickness() / 2", - "Object.Behavior::PropertyBarLength()", - "Object.Behavior::PropertyBarThickness() / 2" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw half circle at end of Bar (inactive side)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DrawResourceBar::DrawResourceBar::PropertyRoundedBar" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Arc" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyBarLength()", - "0", - "Object.Behavior::PropertyBarThickness() / 2", - "270", - "90", - "", - "yes" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Active bar", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set active Bar parameters", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DrawResourceBar::DrawResourceBar::PropertyActiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyActiveBarColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyActiveBarOpacity()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw active bar", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "0", - "-(Object.Behavior::PropertyBarThickness() / 2)", - "Object.Behavior::PropertyThumbOffset()", - "Object.Behavior::PropertyBarThickness() / 2" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw half circle at end of bar (active side)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DrawResourceBar::DrawResourceBar::PropertyRoundedBar" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Arc" - }, - "parameters": [ - "Object", - "0", - "0", - "Object.Behavior::PropertyBarThickness() / 2", - "90", - "270", - "", - "yes" - ] - } - ] - } - ], - "parameters": [] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "The value of the resource bar.", - "fullName": "Value", - "functionType": "Expression", - "group": "Bar", - "name": "Value", - "private": false, - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyValue()" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change the value of the resource bar.", - "fullName": "Value", - "functionType": "Action", - "group": "Resource Bar", - "name": "SetValue", - "private": false, - "sentence": "Change the value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::PropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - "<=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::PropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "round(GetArgumentAsNumber(\"Value\") / Object.Behavior::PropertyTickSpacing()) * Object.Behavior::PropertyTickSpacing()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::PropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyValueMin()" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMin()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::PropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "Object.Behavior::PropertyValueMax()" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMax()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set the proper offset", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyThumbOffset" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyBarLength() * (Object.Behavior::PropertyValue() - Object.Behavior::PropertyValueMin()) / (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin())" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Resource bar value", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "The minimum value of the resource bar.", - "fullName": "Minimum value", - "functionType": "Expression", - "group": "Value configuration", - "name": "ValueMin", - "private": false, - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyValueMin()" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change the minimum value of the resource bar.", - "fullName": "Minimum value", - "functionType": "Action", - "group": "Value configuration", - "name": "SetValueMin", - "private": false, - "sentence": "Change the minimum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyValueMin" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"ValueMin\")" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Minimum value", - "longDescription": "", - "name": "ValueMin", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "The maximum value of the resource bar.", - "fullName": "Maximum value", - "functionType": "Expression", - "group": "Value configuration", - "name": "ValueMax", - "private": false, - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyValueMax()" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Thickness of the resource bar.", - "fullName": "Bar thickness", - "functionType": "Expression", - "group": "Bar configuration", - "name": "BarThickness", - "private": false, - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyBarThickness()" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Length of the resource bar.", - "fullName": "Bar length", - "functionType": "Expression", - "group": "Bar configuration", - "name": "BarLength", - "private": false, - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyBarLength()" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change the maximum value of a resource bar.", - "fullName": "Maximum value", - "functionType": "Action", - "group": "Bar value configuration", - "name": "SetValueMax", - "private": false, - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyValueMax" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"ValueMax\")" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Maximum value", - "longDescription": "", - "name": "ValueMax", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "The tick spacing of a bar.", - "fullName": "Tick spacing", - "functionType": "Expression", - "group": "Value configuration", - "name": "TickSpacing", - "private": false, - "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyTickSpacing()" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Tick spacing", - "longDescription": "", - "name": "TickSpacing", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the tick spacing of a resource bar.", - "fullName": "Tick spacing", - "functionType": "Action", - "group": "Value configuration", - "name": "SetTickSpacing", - "private": false, - "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"TickSpacing\")" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Tick spacing", - "longDescription": "", - "name": "TickSpacing", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change length of a resource bar.", - "fullName": "Bar length", - "functionType": "Action", - "group": "Bar configuration", - "name": "SetBarLength", - "private": false, - "sentence": "Change bar length of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyBarLength" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move thumb to correct place (based on new Bar size)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyValue()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Bar width", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change thickness of a resource bar", - "fullName": "Bar thickness", - "functionType": "Action", - "group": "Bar configuration", - "name": "SetBarThickness", - "private": false, - "sentence": "Change the bar thickness of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyBarThickness" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make sure thumb width is not smaller than Bar height + 2 pixels (to prevent Bar ends from showing)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::PropertyThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyBarThickness() + 2" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyBarThickness() + 2", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::PropertyThumbHeight" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyBarThickness() + 2" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetThumbHeight" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyBarThickness() + 2", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Bar thickness", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Make bar use rounded ends.", - "fullName": "Rounded bar ends", - "functionType": "Action", - "group": "Bar configuration", - "name": "SetRoundedBar", - "private": false, - "sentence": "Draw _PARAM0_ with a rounded bar: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "GetArgumentAsNumber(\"Value\")", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyRoundedBar" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "GetArgumentAsNumber(\"Value\")", - "=", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyRoundedBar" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Rounded bar", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Change opacity of inactive bar.", - "fullName": "Inactive bar opacity", - "functionType": "Action", - "group": "Bar configuration", - "name": "SetInactiveBarOpacity", - "private": false, - "sentence": "Change inactive bar opacity of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyInactiveBarOpacity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Inactive bar opacity", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change opacity of active bar.", - "fullName": "Active bar opacity", - "functionType": "Action", - "group": "Bar configuration", - "name": "SetActiveBarOpacity", - "private": false, - "sentence": "Change active bar opacity of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyActiveBarOpacity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Active bar opacity", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the color of the left side of the bar.", - "fullName": "Active bar color ", - "functionType": "Action", - "group": "Bar configuration", - "name": "SetActiveBarColor", - "private": false, - "sentence": "Change active bar color of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyActiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Color\")" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Active bar color", - "longDescription": "", - "name": "Color", - "optional": false, - "supplementaryInformation": "", - "type": "color" - } - ], - "objectGroups": [] - }, - { - "description": "Change the color of the right side of the resource bar.", - "fullName": "Inactive bar color", - "functionType": "Action", - "group": "Bar configuration", - "name": "SetInactiveBarColor", - "private": false, - "sentence": "Change inactive bar color of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyInactiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Color\")" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Inactive bar color", - "longDescription": "", - "name": "Color", - "optional": false, - "supplementaryInformation": "", - "type": "color" - } - ], - "objectGroups": [] - }, - { - "description": "Update the hitbox.", - "fullName": "Update hitbox", - "functionType": "Action", - "group": "Private", - "name": "UpdateHitbox", - "private": true, - "sentence": "Update the hitbox of _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::SetRotationCenter" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyBarLength() / 2", - "Object.Behavior::PropertyBarThickness() / 2" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::SetRectangularCollisionMask" - }, - "parameters": [ - "Object", - "0", - "-Object.Behavior::PropertyBarThickness() / 2", - "Object.Behavior::PropertyBarLength()", - "Object.Behavior::PropertyBarThickness() / 2" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Draw health bar.", - "fullName": "Draw health bar", - "functionType": "Action", - "group": "", - "name": "DrawHealthBar", - "private": false, - "sentence": "Draw health bar with _PARAM0_ based on health of _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set values", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetValue" - }, - "parameters": [ - "Object", - "DraggableSliderBehavior", - "Tween::Ease(\"easeOutCirc\", Object.Behavior::Value(), ObjectWithHealth.HealthBehavior::Health(), 0.05)", - "" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetValueMax" - }, - "parameters": [ - "Object", - "DraggableSliderBehavior", - "ObjectWithHealth.HealthBehavior::MaxHealth()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Object with health", - "longDescription": "", - "name": "ObjectWithHealth", - "optional": false, - "supplementaryInformation": "", - "type": "objectList" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Health behavior", - "longDescription": "", - "name": "HealthBehavior", - "optional": false, - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Draw shield bar.", - "fullName": "Draw shield bar", - "functionType": "Action", - "group": "", - "name": "DrawShieldBar", - "private": false, - "sentence": "Draw shield bar with _PARAM0_ based on shield of _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set values", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetValue" - }, - "parameters": [ - "Object", - "DraggableSliderBehavior", - "Tween::Ease(\"easeOutCirc\", Object.Behavior::Value(), ObjectWithShield.ShieldBehavior::ShieldPoints(), 0.05)", - "" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetValueMax" - }, - "parameters": [ - "Object", - "DraggableSliderBehavior", - "ObjectWithShield.ShieldBehavior::MaxShield()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Object with shield", - "longDescription": "", - "name": "ObjectWithShield", - "optional": false, - "supplementaryInformation": "", - "type": "objectList" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Shield behavior", - "longDescription": "", - "name": "ShieldBehavior", - "optional": false, - "supplementaryInformation": "Health::Shield", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Draw resource bar.", - "fullName": "Draw resource bar", - "functionType": "Action", - "group": "", - "name": "DrawResourceBar", - "private": false, - "sentence": "Draw resource bar with _PARAM0_ with current value _PARAM2_ and max value _PARAM3_", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set values", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetValue" - }, - "parameters": [ - "Object", - "DraggableSliderBehavior", - "Tween::Ease(\"easeOutCirc\", Object.Behavior::Value(), GetArgumentAsNumber(\"CurrentValue\"), 0.05)", - "" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetValueMax" - }, - "parameters": [ - "Object", - "DraggableSliderBehavior", - "GetArgumentAsNumber(\"MaxValue\")", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Current value", - "longDescription": "", - "name": "CurrentValue", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Max value", - "longDescription": "", - "name": "MaxValue", - "optional": false, - "supplementaryInformation": "Health::Health", - "type": "expression" - } - ], - "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "0", - "type": "Number", - "label": "Minimum value", - "description": "", - "group": "Value", - "extraInformation": [], - "hidden": false, - "name": "ValueMin" - }, - { - "value": "1", - "type": "Number", - "label": "Maximum value", - "description": "", - "group": "Value", - "extraInformation": [], - "hidden": false, - "name": "ValueMax" - }, - { - "value": "0", - "type": "Number", - "label": "Tick spacing", - "description": "", - "group": "Value", - "extraInformation": [], - "hidden": false, - "name": "TickSpacing" - }, - { - "value": "200", - "type": "Number", - "label": "Bar length", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "BarLength" - }, - { - "value": "4", - "type": "Number", - "label": "Bar thickness", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "BarThickness" - }, - { - "value": "11;255;0", - "type": "Color", - "label": "Inactive bar color", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "InactiveBarColor" - }, - { - "value": "96", - "type": "Number", - "label": "Inactive bar opacity", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "InactiveBarOpacity" - }, - { - "value": "11;255;0", - "type": "Color", - "label": "Active bar color", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "ActiveBarColor" - }, - { - "value": "255", - "type": "Number", - "label": "Active bar opacity", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "ActiveBarOpacity" - }, - { - "value": "false", - "type": "Boolean", - "label": "Rounded bar ends", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "RoundedBar" - }, - { - "value": "0", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "Value" - }, - { - "value": "0", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "ThumbOffset" - }, - { - "value": "true", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "NeedRedraw" - }, - { - "value": "0", - "type": "Number", - "label": "Time to complete moving the bar when the value is changed (seconds)", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "ChangeDuration" - } - ] } ], "eventsBasedObjects": [] From 38d2716a0e516c75c3e07fcd5b0b891b3a245217 Mon Sep 17 00:00:00 2001 From: Tristan Rhodes Date: Sun, 6 Nov 2022 19:31:17 -0700 Subject: [PATCH 07/98] Good defaults set --- examples/resource-bar/game.json | 288 ++------------------------------ 1 file changed, 15 insertions(+), 273 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index f23d19179..019a32c01 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -1361,32 +1361,16 @@ "ValueMin": 0, "ValueMax": 1, "TickSpacing": 0, - "ThumbShape": "circle", - "ThumbWidth": 20, - "ThumbHeight": 20, - "ThumbColor": " 24;119;211", - "ThumbOpacity": 255, "BarLength": 200, - "BarThickness": 4, - "InactiveBarColor": "", + "BarThickness": 16, + "InactiveBarColor": "11;255;0", "InactiveBarOpacity": 96, - "ActiveBarColor": " ", + "ActiveBarColor": " 11;255;0", "ActiveBarOpacity": 255, - "HaloRadius": 24, - "HaloOpacityHover": 32, - "HaloOpacityClick": 64, - "RoundedBar": true, - "Enabled": true, - "IsBeingDragged": false, + "RoundedBar": false, "Value": 0, "ThumbOffset": 0, - "NeedRedraw": true, - "IsHovered": false, - "MouseX": 0, - "MouseY": 0, - "CurrentHaloRadius": 0, - "HaloGrowSpeed": 0.2, - "TargetHaloRadius": 0.19999992847442627 + "NeedRedraw": true } ], "fillOpacity": 255, @@ -1493,7 +1477,7 @@ "ThumbColor": " 24;119;211", "ThumbOpacity": 255, "BarLength": 200, - "BarThickness": 4, + "BarThickness": 16, "InactiveBarColor": "144;19;254", "InactiveBarOpacity": 96, "ActiveBarColor": " 144;19;254", @@ -1501,7 +1485,7 @@ "HaloRadius": 24, "HaloOpacityHover": 32, "HaloOpacityClick": 64, - "RoundedBar": true, + "RoundedBar": false, "Enabled": true, "IsBeingDragged": false, "Value": 0, @@ -1551,15 +1535,15 @@ "ThumbColor": "248;231;28", "ThumbOpacity": 255, "BarLength": 200, - "BarThickness": 4, - "InactiveBarColor": "", + "BarThickness": 16, + "InactiveBarColor": "248;231;28", "InactiveBarOpacity": 96, - "ActiveBarColor": " ", + "ActiveBarColor": "248;231;28", "ActiveBarOpacity": 255, "HaloRadius": 24, "HaloOpacityHover": 32, "HaloOpacityClick": 64, - "RoundedBar": true, + "RoundedBar": false, "Enabled": true, "IsBeingDragged": false, "Value": 0, @@ -2835,46 +2819,6 @@ } ] }, - { - "disabled": true, - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar222::SetValue" - }, - "parameters": [ - "Health_Bar", - "DrawResourceBar222", - "Fly.Health::Health()", - "" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar222::SetValueMin" - }, - "parameters": [ - "Health_Bar", - "DrawResourceBar222", - "0", - "" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar222::SetValueMax" - }, - "parameters": [ - "Health_Bar", - "DrawResourceBar222", - "Fly.Health::MaxHealth()", - "" - ] - } - ] - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], @@ -3621,7 +3565,7 @@ "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "Displays a solid bar that represents a resource in the game (health, shield, mana, ammo, etc)", + "description": "Draws a solid bar that represents a resource in the game (health, shield, mana, ammo, etc)", "fullName": "Draw resource bar 222", "name": "DrawResourceBar222", "objectType": "PrimitiveDrawing::Drawer", @@ -3968,46 +3912,7 @@ }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar222::PropertyActiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar222::PropertyActiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "\"\"" - ] - } - ], + "conditions": [], "actions": [ { "type": { @@ -5817,59 +5722,6 @@ "hidden": false, "name": "TickSpacing" }, - { - "value": "circle", - "type": "Choice", - "label": "Thumb shape", - "description": "", - "group": "Thumb", - "extraInformation": [ - "circle", - "rectangle" - ], - "hidden": false, - "name": "ThumbShape" - }, - { - "value": "20", - "type": "Number", - "label": "Thumb width", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "ThumbWidth" - }, - { - "value": "20", - "type": "Number", - "label": "Thumb height", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "ThumbHeight" - }, - { - "value": " 24;119;211", - "type": "Color", - "label": "Thumb Color", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "ThumbColor" - }, - { - "value": "255", - "type": "Number", - "label": "Thumb opacity", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "ThumbOpacity" - }, { "value": "200", "type": "Number", @@ -5892,7 +5744,7 @@ }, { "value": "11;255;0", - "type": "String", + "type": "Color", "label": "Inactive Bar color", "description": "", "group": "Bar", @@ -5912,7 +5764,7 @@ }, { "value": " 11;255;0", - "type": "String", + "type": "Color", "label": "Active Bar color", "description": "", "group": "Bar", @@ -5930,36 +5782,6 @@ "hidden": false, "name": "ActiveBarOpacity" }, - { - "value": "24", - "type": "Number", - "label": "Halo size (hover)", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "HaloRadius" - }, - { - "value": "32", - "type": "Number", - "label": "Halo opacity (hover)", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "HaloOpacityHover" - }, - { - "value": "64", - "type": "Number", - "label": "Halo opacity (pressed)", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "HaloOpacityClick" - }, { "value": "true", "type": "Boolean", @@ -5970,26 +5792,6 @@ "hidden": false, "name": "RoundedBar" }, - { - "value": "true", - "type": "Boolean", - "label": "Enable interactions", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "Enabled" - }, - { - "value": "", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "IsBeingDragged" - }, { "value": "0", "type": "Number", @@ -6019,66 +5821,6 @@ "extraInformation": [], "hidden": true, "name": "NeedRedraw" - }, - { - "value": "", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "IsHovered" - }, - { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "MouseX" - }, - { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "MouseY" - }, - { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "CurrentHaloRadius" - }, - { - "value": "0.2", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "HaloGrowSpeed" - }, - { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "TargetHaloRadius" } ] }, From 58cf3f021aa34d3ca772b413af47c4553939bec4 Mon Sep 17 00:00:00 2001 From: Tristan Rhodes Date: Sun, 6 Nov 2022 19:41:17 -0700 Subject: [PATCH 08/98] Renaming behavior, preparing to adjust drawing position --- examples/resource-bar/game.json | 416 ++++++++------------------------ 1 file changed, 96 insertions(+), 320 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 019a32c01..6686bdb3a 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -1195,21 +1195,6 @@ "objectsGroups": [], "variables": [], "instances": [ - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "Health_Bar", - "persistentUuid": "a703603b-6259-4e18-bfa0-7d8794e4f837", - "width": 0, - "x": 192, - "y": 112, - "zOrder": 1, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, { "angle": 0, "customSize": false, @@ -1344,6 +1329,21 @@ "numberProperties": [], "stringProperties": [], "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Health_Bar", + "persistentUuid": "577d11e6-1574-4e9c-9620-bb2a66afb452", + "width": 0, + "x": 192, + "y": 112, + "zOrder": 1, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] } ], "objects": [ @@ -1357,7 +1357,7 @@ "behaviors": [ { "name": "DrawResourceBar222", - "type": "ResourceBar::DrawResourceBar222", + "type": "ResourceBar::DrawResourceBar", "ValueMin": 0, "ValueMax": 1, "TickSpacing": 0, @@ -1367,7 +1367,7 @@ "InactiveBarOpacity": 96, "ActiveBarColor": " 11;255;0", "ActiveBarOpacity": 255, - "RoundedBar": false, + "RoundedBar": true, "Value": 0, "ThumbOffset": 0, "NeedRedraw": true @@ -1467,7 +1467,7 @@ "behaviors": [ { "name": "DrawResourceBar222", - "type": "ResourceBar::DrawResourceBar222", + "type": "ResourceBar::DrawResourceBar", "ValueMin": 0, "ValueMax": 1, "TickSpacing": 0, @@ -1485,7 +1485,7 @@ "HaloRadius": 24, "HaloOpacityHover": 32, "HaloOpacityClick": 64, - "RoundedBar": false, + "RoundedBar": true, "Enabled": true, "IsBeingDragged": false, "Value": 0, @@ -1525,7 +1525,7 @@ "behaviors": [ { "name": "DrawResourceBar222", - "type": "ResourceBar::DrawResourceBar222", + "type": "ResourceBar::DrawResourceBar", "ValueMin": 0, "ValueMax": 1, "TickSpacing": 0, @@ -2825,7 +2825,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::DrawShieldBar" + "value": "ResourceBar::DrawResourceBar::DrawShieldBar" }, "parameters": [ "Shield_Bar", @@ -2843,7 +2843,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::DrawResourceBar" + "value": "ResourceBar::DrawResourceBar::DrawResourceBar" }, "parameters": [ "ResourceMouseX_Bar", @@ -2861,7 +2861,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::DrawHealthBar" + "value": "ResourceBar::DrawResourceBar::DrawHealthBar" }, "parameters": [ "Health_Bar", @@ -3504,7 +3504,7 @@ }, { "name": "DrawResourceBar222", - "type": "ResourceBar::DrawResourceBar222" + "type": "ResourceBar::DrawResourceBar" }, { "name": "Health", @@ -3566,8 +3566,8 @@ "eventsBasedBehaviors": [ { "description": "Draws a solid bar that represents a resource in the game (health, shield, mana, ammo, etc)", - "fullName": "Draw resource bar 222", - "name": "DrawResourceBar222", + "fullName": "Draw resource bar", + "name": "DrawResourceBar", "objectType": "PrimitiveDrawing::Drawer", "eventsFunctions": [ { @@ -3626,7 +3626,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyValue" + "value": "ResourceBar::DrawResourceBar::SetPropertyValue" }, "parameters": [ "Object", @@ -3643,7 +3643,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::UpdateHitbox" + "value": "ResourceBar::DrawResourceBar::UpdateHitbox" }, "parameters": [ "Object", @@ -3672,7 +3672,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" } ], @@ -3701,7 +3701,7 @@ "conditions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::PropertyNeedRedraw" + "value": "ResourceBar::DrawResourceBar::PropertyNeedRedraw" }, "parameters": [ "Object", @@ -3729,7 +3729,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyNeedRedraw" + "value": "ResourceBar::DrawResourceBar::SetPropertyNeedRedraw" }, "parameters": [ "Object", @@ -3781,13 +3781,7 @@ "Object", "Object.Behavior::PropertyInactiveBarColor()" ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + }, { "type": { "value": "PrimitiveDrawing::FillOpacity" @@ -3840,50 +3834,6 @@ ] } ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw half circle at end of Bar (inactive side)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar222::PropertyRoundedBar" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Arc" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyBarLength()", - "0", - "Object.Behavior::PropertyBarThickness() / 2", - "270", - "90", - "", - "yes" - ] - } - ] } ], "parameters": [] @@ -3907,7 +3857,7 @@ "textG": 0, "textR": 0 }, - "comment": "Set active Bar parameters (by default, use thumb color)", + "comment": "Set active Bar parameters", "comment2": "" }, { @@ -3922,13 +3872,7 @@ "Object", "Object.Behavior::PropertyActiveBarColor()" ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + }, { "type": { "value": "PrimitiveDrawing::FillOpacity" @@ -3951,7 +3895,7 @@ "textG": 0, "textR": 0 }, - "comment": "Draw active Bar (2 pixels bigger than property) ", + "comment": "Draw active Bar", "comment2": "" }, { @@ -3965,53 +3909,9 @@ "parameters": [ "Object", "0", - "-(Object.Behavior::PropertyBarThickness() / 2 + 1)", + "-(Object.Behavior::PropertyBarThickness() / 2)", "Object.Behavior::PropertyThumbOffset()", - "Object.Behavior::PropertyBarThickness() / 2 + 1" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw half circle at end of Bar (active side)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar222::PropertyRoundedBar" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Arc" - }, - "parameters": [ - "Object", - "0", - "0", - "1 + Object.Behavior::PropertyBarThickness() / 2", - "90", - "270", - "", - "yes" + "Object.Behavior::PropertyBarThickness() / 2" ] } ] @@ -4043,7 +3943,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" } ], @@ -4091,7 +3991,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" } ], @@ -4111,7 +4011,7 @@ "conditions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::PropertyTickSpacing" + "value": "ResourceBar::DrawResourceBar::PropertyTickSpacing" }, "parameters": [ "Object", @@ -4124,7 +4024,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyValue" + "value": "ResourceBar::DrawResourceBar::SetPropertyValue" }, "parameters": [ "Object", @@ -4140,7 +4040,7 @@ "conditions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::PropertyTickSpacing" + "value": "ResourceBar::DrawResourceBar::PropertyTickSpacing" }, "parameters": [ "Object", @@ -4153,7 +4053,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyValue" + "value": "ResourceBar::DrawResourceBar::SetPropertyValue" }, "parameters": [ "Object", @@ -4169,7 +4069,7 @@ "conditions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::PropertyValue" + "value": "ResourceBar::DrawResourceBar::PropertyValue" }, "parameters": [ "Object", @@ -4182,7 +4082,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyValue" + "value": "ResourceBar::DrawResourceBar::SetPropertyValue" }, "parameters": [ "Object", @@ -4198,7 +4098,7 @@ "conditions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::PropertyValue" + "value": "ResourceBar::DrawResourceBar::PropertyValue" }, "parameters": [ "Object", @@ -4211,7 +4111,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyValue" + "value": "ResourceBar::DrawResourceBar::SetPropertyValue" }, "parameters": [ "Object", @@ -4232,7 +4132,7 @@ "textG": 0, "textR": 0 }, - "comment": "Set the proper offset (it moves the slider)", + "comment": "Set the proper offset", "comment2": "" }, { @@ -4241,7 +4141,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyThumbOffset" + "value": "ResourceBar::DrawResourceBar::SetPropertyThumbOffset" }, "parameters": [ "Object", @@ -4252,7 +4152,7 @@ }, { "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyNeedRedraw" + "value": "ResourceBar::DrawResourceBar::SetPropertyNeedRedraw" }, "parameters": [ "Object", @@ -4281,7 +4181,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { @@ -4339,7 +4239,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" } ], @@ -4360,7 +4260,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyValueMin" + "value": "ResourceBar::DrawResourceBar::SetPropertyValueMin" }, "parameters": [ "Object", @@ -4371,7 +4271,7 @@ }, { "type": { - "value": "ResourceBar::DrawResourceBar222::SetValue" + "value": "ResourceBar::DrawResourceBar::SetValue" }, "parameters": [ "Object", @@ -4401,7 +4301,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { @@ -4459,7 +4359,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" } ], @@ -4507,7 +4407,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" } ], @@ -4555,7 +4455,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" } ], @@ -4576,7 +4476,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyValueMax" + "value": "ResourceBar::DrawResourceBar::SetPropertyValueMax" }, "parameters": [ "Object", @@ -4587,7 +4487,7 @@ }, { "type": { - "value": "ResourceBar::DrawResourceBar222::SetValue" + "value": "ResourceBar::DrawResourceBar::SetValue" }, "parameters": [ "Object", @@ -4617,7 +4517,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { @@ -4675,7 +4575,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { @@ -4706,7 +4606,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyTickSpacing" + "value": "ResourceBar::DrawResourceBar::SetPropertyTickSpacing" }, "parameters": [ "Object", @@ -4717,7 +4617,7 @@ }, { "type": { - "value": "ResourceBar::DrawResourceBar222::SetValue" + "value": "ResourceBar::DrawResourceBar::SetValue" }, "parameters": [ "Object", @@ -4747,7 +4647,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { @@ -4778,7 +4678,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyBarLength" + "value": "ResourceBar::DrawResourceBar::SetPropertyBarLength" }, "parameters": [ "Object", @@ -4789,7 +4689,7 @@ }, { "type": { - "value": "ResourceBar::DrawResourceBar222::UpdateHitbox" + "value": "ResourceBar::DrawResourceBar::UpdateHitbox" }, "parameters": [ "Object", @@ -4799,7 +4699,7 @@ }, { "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyNeedRedraw" + "value": "ResourceBar::DrawResourceBar::SetPropertyNeedRedraw" }, "parameters": [ "Object", @@ -4828,7 +4728,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::SetValue" + "value": "ResourceBar::DrawResourceBar::SetValue" }, "parameters": [ "Object", @@ -4858,7 +4758,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { @@ -4889,7 +4789,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyBarThickness" + "value": "ResourceBar::DrawResourceBar::SetPropertyBarThickness" }, "parameters": [ "Object", @@ -4900,7 +4800,7 @@ }, { "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyNeedRedraw" + "value": "ResourceBar::DrawResourceBar::SetPropertyNeedRedraw" }, "parameters": [ "Object", @@ -4929,7 +4829,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { @@ -4945,120 +4845,6 @@ ], "objectGroups": [] }, - { - "description": "Make Bar use rounded ends.", - "fullName": "Rounded Bar ends", - "functionType": "Action", - "group": "Slider Bar configuration", - "name": "SetRoundedBar", - "private": false, - "sentence": "Draw _PARAM0_ with a rounded Bar: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "GetArgumentAsNumber(\"Value\")", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyRoundedBar" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "GetArgumentAsNumber(\"Value\")", - "=", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyRoundedBar" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar222", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Rounded Bar", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "yesorno" - } - ], - "objectGroups": [] - }, { "description": "Change opacity of inactive Bar.", "fullName": "Inactive Bar opacity", @@ -5074,7 +4860,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyInactiveBarOpacity" + "value": "ResourceBar::DrawResourceBar::SetPropertyInactiveBarOpacity" }, "parameters": [ "Object", @@ -5085,7 +4871,7 @@ }, { "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyNeedRedraw" + "value": "ResourceBar::DrawResourceBar::SetPropertyNeedRedraw" }, "parameters": [ "Object", @@ -5114,7 +4900,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { @@ -5145,7 +4931,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyActiveBarOpacity" + "value": "ResourceBar::DrawResourceBar::SetPropertyActiveBarOpacity" }, "parameters": [ "Object", @@ -5156,7 +4942,7 @@ }, { "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyNeedRedraw" + "value": "ResourceBar::DrawResourceBar::SetPropertyNeedRedraw" }, "parameters": [ "Object", @@ -5185,7 +4971,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { @@ -5216,7 +5002,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyActiveBarColor" + "value": "ResourceBar::DrawResourceBar::SetPropertyActiveBarColor" }, "parameters": [ "Object", @@ -5227,7 +5013,7 @@ }, { "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyNeedRedraw" + "value": "ResourceBar::DrawResourceBar::SetPropertyNeedRedraw" }, "parameters": [ "Object", @@ -5256,7 +5042,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { @@ -5287,7 +5073,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyInactiveBarColor" + "value": "ResourceBar::DrawResourceBar::SetPropertyInactiveBarColor" }, "parameters": [ "Object", @@ -5298,7 +5084,7 @@ }, { "type": { - "value": "ResourceBar::DrawResourceBar222::SetPropertyNeedRedraw" + "value": "ResourceBar::DrawResourceBar::SetPropertyNeedRedraw" }, "parameters": [ "Object", @@ -5327,7 +5113,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { @@ -5399,7 +5185,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" } ], @@ -5433,7 +5219,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::SetValue" + "value": "ResourceBar::DrawResourceBar::SetValue" }, "parameters": [ "Object", @@ -5444,7 +5230,7 @@ }, { "type": { - "value": "ResourceBar::DrawResourceBar222::SetValueMax" + "value": "ResourceBar::DrawResourceBar::SetValueMax" }, "parameters": [ "Object", @@ -5474,7 +5260,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { @@ -5528,7 +5314,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::SetValue" + "value": "ResourceBar::DrawResourceBar::SetValue" }, "parameters": [ "Object", @@ -5539,7 +5325,7 @@ }, { "type": { - "value": "ResourceBar::DrawResourceBar222::SetValueMax" + "value": "ResourceBar::DrawResourceBar::SetValueMax" }, "parameters": [ "Object", @@ -5569,7 +5355,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { @@ -5623,7 +5409,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar222::SetValue" + "value": "ResourceBar::DrawResourceBar::SetValue" }, "parameters": [ "Object", @@ -5634,7 +5420,7 @@ }, { "type": { - "value": "ResourceBar::DrawResourceBar222::SetValueMax" + "value": "ResourceBar::DrawResourceBar::SetValueMax" }, "parameters": [ "Object", @@ -5664,7 +5450,7 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar222", + "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { @@ -5782,16 +5568,6 @@ "hidden": false, "name": "ActiveBarOpacity" }, - { - "value": "true", - "type": "Boolean", - "label": "Rounded Bar ends", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "RoundedBar" - }, { "value": "0", "type": "Number", @@ -5825,7 +5601,7 @@ ] }, { - "description": "Displays a line of objects that represent a resource in the game (hearts, lives, ammo, etc). \nUse the same image used for resource bar and unit objects.", + "description": "Displays a line of objects that represent a resource in the game (hearts, lives, ammo, etc). \nUse the same image for the resource bar and the unit objects.", "fullName": "Unit resource bar", "name": "UnitResourceBar", "objectType": "", From 24b270bc28880210db793c7da4c709ad387d0141 Mon Sep 17 00:00:00 2001 From: Tristan Rhodes Date: Sun, 6 Nov 2022 19:44:01 -0700 Subject: [PATCH 09/98] Change Y start position to draw same as shape painter --- examples/resource-bar/game.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 6686bdb3a..e3181f86d 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -1182,8 +1182,8 @@ "uiSettings": { "grid": true, "gridType": "rectangular", - "gridWidth": 16, - "gridHeight": 16, + "gridWidth": 8, + "gridHeight": 8, "gridOffsetX": 0, "gridOffsetY": 0, "gridColor": 10401023, @@ -1204,7 +1204,7 @@ "persistentUuid": "b581caf8-44ee-423e-b57e-cdd910fb7374", "width": 0, "x": 192, - "y": 224, + "y": 216, "zOrder": 2, "numberProperties": [], "stringProperties": [], @@ -1219,7 +1219,7 @@ "persistentUuid": "17a23f4a-a442-4b52-8380-9f2b6a9c2494", "width": 0, "x": 192, - "y": 544, + "y": 536, "zOrder": 3, "numberProperties": [], "stringProperties": [], @@ -1336,10 +1336,10 @@ "height": 0, "layer": "", "name": "Health_Bar", - "persistentUuid": "577d11e6-1574-4e9c-9620-bb2a66afb452", + "persistentUuid": "c411b32c-f357-4b8f-9e87-f3fdde7657d5", "width": 0, "x": 192, - "y": 112, + "y": 104, "zOrder": 1, "numberProperties": [], "stringProperties": [], @@ -3828,9 +3828,9 @@ "parameters": [ "Object", "Object.Behavior::PropertyThumbOffset()", - "-Object.Behavior::PropertyBarThickness() / 2", + "0", "Object.Behavior::PropertyBarLength()", - "Object.Behavior::PropertyBarThickness() / 2" + "Object.Behavior::PropertyBarThickness()" ] } ] @@ -3909,9 +3909,9 @@ "parameters": [ "Object", "0", - "-(Object.Behavior::PropertyBarThickness() / 2)", + "0", "Object.Behavior::PropertyThumbOffset()", - "Object.Behavior::PropertyBarThickness() / 2" + "Object.Behavior::PropertyBarThickness()" ] } ] From df29936a11c8a7411e1964c66b81a041ac913b2c Mon Sep 17 00:00:00 2001 From: Tristan Rhodes Date: Sun, 6 Nov 2022 19:48:06 -0700 Subject: [PATCH 10/98] Done for tonight! --- examples/resource-bar/game.json | 53 ++++++++------------------------- 1 file changed, 13 insertions(+), 40 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index e3181f86d..f4f3cd5c0 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -1189,7 +1189,7 @@ "gridColor": 10401023, "gridAlpha": 0.2, "snap": true, - "zoomFactor": 0.8599999999999999, + "zoomFactor": 0.8799999999999999, "windowMask": false }, "objectsGroups": [], @@ -1398,42 +1398,20 @@ "effects": [], "behaviors": [ { - "name": "DraggableSliderControl", - "type": "DraggableSliderControl::DraggableSliderControl", + "name": "DrawResourceBar", + "type": "ResourceBar::DrawResourceBar", "ValueMin": 0, "ValueMax": 1, "TickSpacing": 0, - "ThumbShape": "rectangle", - "ThumbWidth": 20, - "ThumbHeight": 20, - "ThumbColor": "11;255;0", - "ThumbOpacity": 255, - "TrackLength": 50, - "TrackThickness": 4, - "InactiveTrackColor": "", - "InactiveTrackOpacity": 96, - "ActiveTrackColor": " ", - "ActiveTrackOpacity": 255, - "HaloRadius": 24, - "HaloOpacityHover": 32, - "HaloOpacityClick": 64, - "RoundedTrack": false, - "Enabled": true, - "IsBeingDragged": false, + "BarLength": 50, + "BarThickness": 4, + "InactiveBarColor": "11;255;0", + "InactiveBarOpacity": 96, + "ActiveBarColor": " 11;255;0", + "ActiveBarOpacity": 255, "Value": 0, "ThumbOffset": 0, - "NeedRedraw": true, - "IsHovered": false, - "MouseX": 0, - "MouseY": 0, - "CurrentHaloRadius": 0, - "HaloGrowSpeed": 0.2, - "TargetHaloRadius": 0 - }, - { - "name": "DrawResourceBar", - "type": "DrawResourceBarOLD::DrawResourceBarOLD", - "DraggableSliderBehavior": "DraggableSliderControl" + "NeedRedraw": true }, { "name": "Sticker", @@ -2660,7 +2638,6 @@ "colorG": 176, "colorR": 74, "creationTime": 0, - "folded": true, "name": "Initialize game", "source": "", "type": "BuiltinCommonInstructions::Group", @@ -2769,7 +2746,7 @@ "parameters": [ "MiniHealth_Bar", "=", - "Fly.CenterX() - MiniHealth_Bar.DraggableSliderControl::TrackLength()/2", + "Fly.CenterX() - MiniHealth_Bar.DrawResourceBar::BarLength()/2", "=", "Fly.BoundingBoxTop()" ] @@ -2807,7 +2784,7 @@ "actions": [ { "type": { - "value": "DrawResourceBarOLD::DrawResourceBarOLD::DrawHealthBar" + "value": "ResourceBar::DrawResourceBar::DrawHealthBar" }, "parameters": [ "MiniHealth_Bar", @@ -3494,10 +3471,6 @@ } ], "behaviorsSharedData": [ - { - "name": "DraggableSliderControl", - "type": "DraggableSliderControl::DraggableSliderControl" - }, { "name": "DrawResourceBar", "type": "DrawResourceBarOLD::DrawResourceBarOLD" @@ -5519,7 +5492,7 @@ "name": "BarLength" }, { - "value": "4", + "value": "16", "type": "Number", "label": "Bar thickness", "description": "", From 869f9b26eb1c35460f6bfbdf5ded92e39aebe845 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 7 Nov 2022 02:50:17 +0000 Subject: [PATCH 11/98] Optimised images with calibre/image-actions --- examples/resource-bar/assets/Emote Heart.png | Bin 265 -> 248 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/resource-bar/assets/Emote Heart.png b/examples/resource-bar/assets/Emote Heart.png index 3e52a6e23d8afbe09cb3c1d52e557e6eeeb7e09a..6b98f3d59fc9e7cee50e3fe646dc735645ca9f7c 100644 GIT binary patch delta 232 zcmV0{8)t7=H)`0001`Bbn&{000SaNLh0L01FZT01FZU(%pXi00020Nklw-_>!^8cWiC|T)j{(r^E9{8!z|yODgy%O*55otx?x4eZzS~R0C(>j^aKMk zfkt2g4YCD^ZO{Yez3YLlVr&T990(z29uY#`d>g{I8Lsw_`4XZ?&qKJgB7Nz1+=qD4 i{21Z`b3zCqM3M>YhV68Cg$err0000G0%E(!7r?q6?T@2`J;KmU6M!M}}pK;cSH7sn8d^T`pd zY!Ymf4@~-0q%Y9M9r6C&UdfiCM5gXCAgkDH!i6R-ojbg&K>>|d4H{#2u!J3ANpoZs zJHWDI0h9J7#Xq^R2IX5ES&Sa=HES?xH~d=4yN*F?1JjFhb7N2J>%FtLTC3~(^mF$l lTczYC2D2yc35aH3=+&I~`1}Kfa-b_1JYD@<);T3K0RV(&T_FGf From b6cb3e0700869d830b43b66459f94af586d0b1de Mon Sep 17 00:00:00 2001 From: Tristan Rhodes Date: Mon, 7 Nov 2022 22:05:37 -0700 Subject: [PATCH 12/98] Lots of progress! All three behaviors working (partially) Sprites have 3 ways to change (opacity, tint, animation) --- .../assets/tiled_Tiled Empty UI Heart.png | Bin 0 -> 237 bytes .../assets/tiled_Tiled Filler UI Heart.png | Bin 0 -> 166 bytes examples/resource-bar/game.json | 2030 ++++++++++++----- 3 files changed, 1415 insertions(+), 615 deletions(-) create mode 100644 examples/resource-bar/assets/tiled_Tiled Empty UI Heart.png create mode 100644 examples/resource-bar/assets/tiled_Tiled Filler UI Heart.png diff --git a/examples/resource-bar/assets/tiled_Tiled Empty UI Heart.png b/examples/resource-bar/assets/tiled_Tiled Empty UI Heart.png new file mode 100644 index 0000000000000000000000000000000000000000..e7d881edf91464e1e0a4daeb2e604173c19b18f2 GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^20$#p!3HD)*8SNCq!^2X+?^QKos)S99?cWeR59BOXqXisw6o02`rL`G}dg0`&C%QkjA0fAouHIRe}b?o|gi$HdW^j z6#RUXwnp`&!^`6uZiSLf=RY-G@elD3Nd5^F$x_&)xFo_Z;>%&)iW|^(Q~g`u jeBzo7$CrMlDh3AWM1GlN$?6tBCo_1u`njxgN@xNA&JtDa literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/tiled_Tiled Filler UI Heart.png b/examples/resource-bar/assets/tiled_Tiled Filler UI Heart.png new file mode 100644 index 0000000000000000000000000000000000000000..8d409e4134a8f61bb8d9116ceb4df83be0a77f7a GIT binary patch literal 166 zcmeAS@N?(olHy`uVBq!ia0vp^20$#p!3HD)*8SNCq!^2X+?^QKos)S91{cc1t;@Yv29fVB4)_!aXfVE*^Avk*<^?u_-NxVegm6Ul>%UT@JR7", - "Object.Behavior::PropertyCurrentQuantity()" - ] - } - ], - "actions": [ - { - "type": { - "value": "Delete" - }, - "parameters": [ - "UnitObject", - "" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update non-empty units", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "LinkedObjects::PickObjectsLinkedTo" - }, - "parameters": [ - "", - "UnitObject", - "Object", - "" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "UnitObject.Variable(__ResourceBar.UnitID)", - "<=", - "Object.Behavior::PropertyCurrentQuantity()" - ] - } - ], - "actions": [ - { - "type": { - "value": "Montre" - }, - "parameters": [ - "UnitObject", - "" - ] - }, - { - "type": { - "value": "ChangeColor" - }, - "parameters": [ - "UnitObject", - "\"255;255;255\"" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update empty units", - "source": "", - "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -5823,106 +6008,260 @@ "Object", "" ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "UnitObject.Variable(__ResourceBar.UnitID)", - ">", - "Object.Behavior::PropertyCurrentQuantity()" - ] } ], "actions": [], "events": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Color tint", - "source": "", - "type": "BuiltinCommonInstructions::Group", + "type": "BuiltinCommonInstructions::ForEach", + "object": "UnitObject", + "conditions": [], + "actions": [], "events": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Only apply color if it has change from default value", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Delete units higher than max unit value", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "BuiltinCommonInstructions::CompareStrings" - }, - "parameters": [ - "Object.Behavior::PropertyEmptyColorTint()", - "!=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "ChangeColor" - }, - "parameters": [ - "UnitObject", - "Object.Behavior::PropertyEmptyColorTint()" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::PropertyMaxQuantity()", + "!=", + "0" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "UnitObject.Variable(__ResourceBar.UnitID)", + ">", + "Object.Behavior::PropertyMaxQuantity()" + ] + } + ], + "actions": [ + { + "type": { + "value": "Delete" + }, + "parameters": [ + "UnitObject", + "" + ] + } ] } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Hide", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + ], + "parameters": [] + }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Update non-empty units", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "ResourceBar::UnitResourceBar::PropertyHideEmptyUnits" - }, - "parameters": [ - "Object", - "Behavior" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "UnitObject.Variable(__ResourceBar.UnitID)", + "<=", + "Object.Behavior::PropertyCurrentQuantity()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeColor" + }, + "parameters": [ + "UnitObject", + "Object.Behavior::PropertyActiveUnitColorTint()" + ] + }, + { + "type": { + "value": "Opacity" + }, + "parameters": [ + "UnitObject", + "=", + "Object.Behavior::PropertyActiveUnitOpacity()" + ] + }, + { + "type": { + "value": "ChangeAnimation" + }, + "parameters": [ + "UnitObject", + "=", + "Object.Behavior::PropertyActiveUnitAnimationNumber()" + ] + } ] } ], - "actions": [ + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Update empty units", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "Cache" - }, - "parameters": [ - "UnitObject" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "UnitObject.Variable(__ResourceBar.UnitID)", + ">", + "Object.Behavior::PropertyCurrentQuantity()" + ] + } + ], + "actions": [], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Color tint", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Only apply color if it has change from default value", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "Object.Behavior::PropertyEmptyUnitColorTint()", + "!=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeColor" + }, + "parameters": [ + "UnitObject", + "Object.Behavior::PropertyEmptyUnitColorTint()" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Opacity", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Opacity" + }, + "parameters": [ + "UnitObject", + "=", + "Object.Behavior::PropertyEmptyUnitOpacity()" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Animation", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ChangeAnimation" + }, + "parameters": [ + "UnitObject", + "=", + "Object.Behavior::PropertyEmptyUnitAnimationNumber()" + ] + } + ] + } + ], + "parameters": [] + } ] } - ] + ], + "parameters": [] } - ], - "parameters": [] + ] } ] } @@ -5956,7 +6295,7 @@ "actions": [ { "type": { - "value": "ResourceBar::UnitResourceBar::SetPropertyNextUnitToCreate" + "value": "ResourceBar::SpriteResourceBar::SetPropertyNextUnitToCreate" }, "parameters": [ "Object", @@ -5967,8 +6306,433 @@ } ] } - ], - "parameters": [] + ], + "parameters": [] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SpriteResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Object used to display each unit", + "longDescription": "", + "name": "UnitObject", + "optional": false, + "supplementaryInformation": "Sprite", + "type": "objectList" + } + ], + "objectGroups": [] + }, + { + "description": "Apply color tint to empty units. Empty units exist between the current and maximum value.", + "fullName": "Color tint of empty units", + "functionType": "Action", + "group": "", + "name": "SetEmptyUnitColor", + "private": false, + "sentence": "Apply color tint _PARAM2_ to empty units of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SpriteResourceBar::SetPropertyEmptyUnitColorTint" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsString(\"ColorTint\")" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SpriteResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Color tint", + "longDescription": "Use \"white\" to remove all color tint", + "name": "ColorTint", + "optional": false, + "supplementaryInformation": "", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "Apply color tint to active units.", + "fullName": "Color tint of active units", + "functionType": "Action", + "group": "", + "name": "SetActiveUnitColor", + "private": false, + "sentence": "Apply color tint _PARAM2_ to active units of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SpriteResourceBar::SetPropertyActiveUnitColorTint" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsString(\"ColorTint\")" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SpriteResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Color tint", + "longDescription": "Use \"white\" to remove all color tint", + "name": "ColorTint", + "optional": false, + "supplementaryInformation": "", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "Change the opacity of empty units. Empty units exist between the current and maximum value.", + "fullName": "Opacity of empty units", + "functionType": "Action", + "group": "", + "name": "SetEmptyUnitOpacity", + "private": false, + "sentence": "Change the opacity of empty units of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SpriteResourceBar::SetPropertyEmptyUnitOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Opacity\")" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SpriteResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Opacity of empty units", + "longDescription": "Range: 0 to 255", + "name": "Opacity", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the opacity of active units. ", + "fullName": "Opacity of active units", + "functionType": "Action", + "group": "", + "name": "SetActiveUnitOpacity", + "private": false, + "sentence": "Change the opacity of active units of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SpriteResourceBar::SetPropertyActiveUnitOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Opacity\")" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SpriteResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Opacity of empty units", + "longDescription": "Range: 0 to 255", + "name": "Opacity", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the animation of empty units. Empty units exist between the current and maximum value.", + "fullName": "Animation of empty units", + "functionType": "Action", + "group": "", + "name": "SetEmptyUnitAnimation", + "private": false, + "sentence": "Change the animation of empty units of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SpriteResourceBar::SetPropertyEmptyUnitAnimationNumber" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"AnimationNumber\")" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SpriteResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Animation number", + "longDescription": "", + "name": "AnimationNumber", + "optional": false, + "supplementaryInformation": "", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change maximum units that can be displayed.", + "fullName": "Maximum units", + "functionType": "Action", + "group": "", + "name": "SetMaxQuantity", + "private": false, + "sentence": "Change maximum units of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SpriteResourceBar::SetPropertyMaxQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "codeOnly": false, + "defaultValue": "", + "description": "Object", + "longDescription": "", + "name": "Object", + "optional": false, + "supplementaryInformation": "", + "type": "object" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Behavior", + "longDescription": "", + "name": "Behavior", + "optional": false, + "supplementaryInformation": "ResourceBar::SpriteResourceBar", + "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Maximum units", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "Sprite", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the current quantity of units.", + "fullName": "Unit quantity", + "functionType": "Action", + "group": "", + "name": "SetCurrentQuantity", + "private": false, + "sentence": "Change the unit quantity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SpriteResourceBar::SetPropertyCurrentQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] } ], "parameters": [ @@ -5989,30 +6753,30 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::UnitResourceBar", + "supplementaryInformation": "ResourceBar::SpriteResourceBar", "type": "behavior" }, { "codeOnly": false, "defaultValue": "", - "description": "Object used to display each unit", + "description": "Current units", "longDescription": "", - "name": "UnitObject", + "name": "Value", "optional": false, "supplementaryInformation": "Sprite", - "type": "objectList" + "type": "expression" } ], "objectGroups": [] }, { - "description": "Apply color tint to empty units. Empty units exist between the current and maximum value.", - "fullName": "Color tint of empty units", + "description": "Increase the current quantity of units.", + "fullName": "Increase quantity", "functionType": "Action", "group": "", - "name": "SetEmptyUnitColor", + "name": "IncreaseQuantity", "private": false, - "sentence": "Apply color tint _PARAM2_ to empty units of _PARAM0_", + "sentence": "Increase the quantity of _PARAM0_ by _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -6020,12 +6784,13 @@ "actions": [ { "type": { - "value": "ResourceBar::UnitResourceBar::SetPropertyEmptyColorTint" + "value": "ResourceBar::SpriteResourceBar::SetPropertyCurrentQuantity" }, "parameters": [ "Object", "Behavior", - "GetArgumentAsString(\"ColorTint\")" + "=", + "min(Object.Behavior::PropertyMaxQuantity(), Object.Behavior::PropertyCurrentQuantity() + GetArgumentAsNumber(\"Value\"))" ] } ] @@ -6049,78 +6814,44 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::UnitResourceBar", + "supplementaryInformation": "ResourceBar::SpriteResourceBar", "type": "behavior" }, { "codeOnly": false, "defaultValue": "", - "description": "Color tint", - "longDescription": "Use \"white\" to remove all color tint", - "name": "ColorTint", + "description": "Value", + "longDescription": "", + "name": "Value", "optional": false, - "supplementaryInformation": "", - "type": "color" + "supplementaryInformation": "Sprite", + "type": "expression" } ], "objectGroups": [] }, { - "description": "Hide empty units. Empty units exist between the current and maximum value.", - "fullName": "Hide (or show) empty units", + "description": "Decrease the current quantity of units.", + "fullName": "Decrease quantity", "functionType": "Action", "group": "", - "name": "SetHideEmptyUnits", + "name": "DecreaseQuantity", "private": false, - "sentence": "Hide empty units of _PARAM0_: _PARAM2_", + "sentence": "Decrease the quantity of _PARAM0_ by _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"HideEmptyUnits\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::UnitResourceBar::SetPropertyHideEmptyUnits" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"HideEmptyUnits\"" - ] - } - ], + "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::UnitResourceBar::SetPropertyHideEmptyUnits" + "value": "ResourceBar::SpriteResourceBar::SetPropertyCurrentQuantity" }, "parameters": [ "Object", "Behavior", - "yes" + "=", + "max(0,Object.Behavior::PropertyCurrentQuantity() - GetArgumentAsNumber(\"Value\"))" ] } ] @@ -6144,30 +6875,140 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::UnitResourceBar", + "supplementaryInformation": "ResourceBar::SpriteResourceBar", "type": "behavior" }, { "codeOnly": false, "defaultValue": "", - "description": "Hide empty units", + "description": "Value", "longDescription": "", - "name": "HideEmptyUnits", + "name": "Value", "optional": false, - "supplementaryInformation": "", - "type": "yesorno" + "supplementaryInformation": "Sprite", + "type": "expression" } ], "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0", + "type": "Number", + "label": "Starting quantity", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "StartingUnits" }, { - "description": "Change maximum units that can be displayed.", - "fullName": "Maximum units", + "value": "", + "type": "Number", + "label": "Quantity", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "CurrentQuantity" + }, + { + "value": "0", + "type": "Number", + "label": "Maximum quantity (Use \"0\" for unlimited)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "MaxQuantity" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "NextUnitToCreate" + }, + { + "value": "", + "type": "Color", + "label": "Empty color tint", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "EmptyUnitColorTint" + }, + { + "value": "0", + "type": "Number", + "label": "Opacity of empty units (Range: 0 to 255)", + "description": "Empty units exist between the current and maximum value.", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "EmptyUnitOpacity" + }, + { + "value": "", + "type": "Number", + "label": "Animation number for empty units", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "EmptyUnitAnimationNumber" + }, + { + "value": "255", + "type": "Number", + "label": "Opacity of active units", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ActiveUnitOpacity" + }, + { + "value": "255;255;255", + "type": "Color", + "label": "Color tint of active units", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ActiveUnitColorTint" + }, + { + "value": "0", + "type": "Number", + "label": "Animation number for active units", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ActiveUnitAnimationNumber" + } + ] + }, + { + "description": "Uses a tiled sprite to display repeated objects to represent a resource in the game (hearts, lives, ammo, etc). ", + "fullName": "Tiled resource bar", + "name": "TiledResourceBar", + "objectType": "TiledSpriteObject::TiledSprite", + "eventsFunctions": [ + { + "description": "", + "fullName": "", "functionType": "Action", "group": "", - "name": "SetMaxUnits", + "name": "onCreated", "private": false, - "sentence": "Change maximum units of _PARAM0_ to _PARAM2_", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -6175,13 +7016,13 @@ "actions": [ { "type": { - "value": "ResourceBar::UnitResourceBar::SetPropertyMaxQuantity" + "value": "ResourceBar::TiledResourceBar::SetPropertyCurrentQuantity" }, "parameters": [ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")" + "Object.Behavior::PropertyStartingQuantity()" ] } ] @@ -6195,7 +7036,7 @@ "longDescription": "", "name": "Object", "optional": false, - "supplementaryInformation": "", + "supplementaryInformation": "TiledSpriteObject::TiledSprite", "type": "object" }, { @@ -6205,30 +7046,20 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::UnitResourceBar", + "supplementaryInformation": "ResourceBar::TiledResourceBar", "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Maximum units", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "Sprite", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Change the current quantity of units.", - "fullName": "Unit quantity", + "description": "Display a tiled resource bar.", + "fullName": "Display a tiled resource bar", "functionType": "Action", "group": "", - "name": "SetCurrentUnits", + "name": "DisplayTiledBar", "private": false, - "sentence": "Change the unit quantity of _PARAM0_ to _PARAM2_", + "sentence": "Display resource bar using _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -6236,13 +7067,12 @@ "actions": [ { "type": { - "value": "ResourceBar::UnitResourceBar::SetPropertyCurrentQuantity" + "value": "TiledSpriteObject::Width" }, "parameters": [ "Object", - "Behavior", "=", - "GetArgumentAsNumber(\"Value\")" + "Object.Behavior::PropertyUnitWidth() * Object.Behavior::PropertyCurrentQuantity()" ] } ] @@ -6256,7 +7086,7 @@ "longDescription": "", "name": "Object", "optional": false, - "supplementaryInformation": "", + "supplementaryInformation": "TiledSpriteObject::TiledSprite", "type": "object" }, { @@ -6266,30 +7096,20 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::UnitResourceBar", + "supplementaryInformation": "ResourceBar::TiledResourceBar", "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Current units", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "Sprite", - "type": "expression" } ], "objectGroups": [] }, { - "description": "", - "fullName": "", + "description": "Change the quantity of a tiled resource bar.", + "fullName": "Quantity", "functionType": "Action", "group": "", - "name": "onCreated", + "name": "SetQuantity", "private": false, - "sentence": "", + "sentence": "Change the quantity of _PARAM0_ to _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -6297,13 +7117,13 @@ "actions": [ { "type": { - "value": "ResourceBar::UnitResourceBar::SetPropertyCurrentQuantity" + "value": "ResourceBar::TiledResourceBar::SetPropertyCurrentQuantity" }, "parameters": [ "Object", "Behavior", "=", - "Object.Behavior::PropertyStartingUnits()" + "max(0,GetArgumentAsNumber(\"Value\"))" ] } ] @@ -6317,7 +7137,7 @@ "longDescription": "", "name": "Object", "optional": false, - "supplementaryInformation": "", + "supplementaryInformation": "TiledSpriteObject::TiledSprite", "type": "object" }, { @@ -6327,8 +7147,18 @@ "longDescription": "", "name": "Behavior", "optional": false, - "supplementaryInformation": "ResourceBar::UnitResourceBar", + "supplementaryInformation": "ResourceBar::TiledResourceBar", "type": "behavior" + }, + { + "codeOnly": false, + "defaultValue": "", + "description": "Value", + "longDescription": "", + "name": "Value", + "optional": false, + "supplementaryInformation": "", + "type": "expression" } ], "objectGroups": [] @@ -6343,7 +7173,7 @@ "group": "", "extraInformation": [], "hidden": false, - "name": "StartingUnits" + "name": "StartingQuantity" }, { "value": "", @@ -6352,48 +7182,18 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, + "hidden": true, "name": "CurrentQuantity" }, { - "value": "0", - "type": "Number", - "label": "Maximum quantity (Use \"0\" for unlimited)", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "MaxQuantity" - }, - { - "value": "0", + "value": "16", "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "NextUnitToCreate" - }, - { - "value": "", - "type": "Color", - "label": "Empty color tint", + "label": "Unit width (pixels)", "description": "", "group": "", "extraInformation": [], "hidden": false, - "name": "EmptyColorTint" - }, - { - "value": "true", - "type": "Boolean", - "label": "Hide empty units", - "description": "Empty units exist between the current and maximum value.", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "HideEmptyUnits" + "name": "UnitWidth" } ] } From 1a2fca788abb9d11ab25ef642e777ca93db7eb1d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 8 Nov 2022 05:19:30 +0000 Subject: [PATCH 13/98] Optimised images with calibre/image-actions --- .../assets/tiled_Tiled Empty UI Heart.png | Bin 237 -> 202 bytes .../assets/tiled_Tiled Filler UI Heart.png | Bin 166 -> 158 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/resource-bar/assets/tiled_Tiled Empty UI Heart.png b/examples/resource-bar/assets/tiled_Tiled Empty UI Heart.png index e7d881edf91464e1e0a4daeb2e604173c19b18f2..ffcb6312e4927e24677cf4eb5cc9057ada3d45fa 100644 GIT binary patch delta 174 zcmV;f08#(#0m=c8B!3BTNLh0L01FZT01FZU(%pXi0001dNkl5FK zGZGR<2Lqv>1zC}TC;+_a5FI>v&%ki`>}ISb$x1-!$0$Z|8G_I9fz(e_ zNDyQBKC5TqU2!vGnLC ghgb4I15_9oZXOM7SeH=p5@mdKI;Vst0M&Ug`~Uy| delta 138 zcmV;50CoSK0j2?vB!2;OQb$4nuFf3k0001BNklY(=w~8i7_w$k0KN3%^Z+H6(^EfQ4-5r>ksk5+8ejSyDE(Ls#AXOFmJft} sl1l_~95E33F$@`s`bWVi7zqFXI89i8%^?E#00000NkvXXt^-0~f@dZ(JOBUy From eaa71a461df2270cfef97c8b766d807a8829bded Mon Sep 17 00:00:00 2001 From: Tristan Rhodes Date: Mon, 14 Nov 2022 23:40:05 -0700 Subject: [PATCH 14/98] Using v150 - Experimenting with new functions for extensions - Fixed sprite creation - Added max quantity to tiled resource --- examples/resource-bar/game.json | 3115 ++++++------------------------- 1 file changed, 570 insertions(+), 2545 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 6b554bba0..e8e87284b 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -1215,7 +1215,7 @@ "gridColor": 10401023, "gridAlpha": 0.2, "snap": true, - "zoomFactor": 1.7000000000000006, + "zoomFactor": 1.1800000000000002, "windowMask": false }, "objectsGroups": [], @@ -1380,7 +1380,7 @@ "persistentUuid": "a1be0010-4eb7-4e54-a651-7d77ae646149", "width": 0, "x": 40, - "y": 448, + "y": 416, "zOrder": 14, "numberProperties": [], "stringProperties": [], @@ -1395,7 +1395,7 @@ "persistentUuid": "be98771a-978f-443c-80e8-197098aef457", "width": 0, "x": 40, - "y": 448, + "y": 416, "zOrder": 15, "numberProperties": [], "stringProperties": [], @@ -3431,11 +3431,12 @@ "actions": [ { "type": { - "value": "ResourceBar::TiledResourceBar::SetQuantity" + "value": "ResourceBar::TiledResourceBar::SetQuantityOp" }, "parameters": [ "Tiled_ResourceBar", "TiledResourceBar", + "=", "Variable(Units)", "" ] @@ -3474,48 +3475,74 @@ "parameters": [ "Units", "=", - "3" - ] - }, - { - "type": { - "value": "ResourceBar::SpriteResourceBar::SetMaxQuantity" - }, - "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "6", - "" - ] - }, - { - "type": { - "value": "ResourceBar::SpriteResourceBar::SetEmptyUnitColor" - }, - "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "\"74;144;226\"", - "" + "5" ] - }, + } + ], + "events": [ { - "type": { - "value": "ResourceBar::SpriteResourceBar::SetEmptyUnitOpacity" - }, - "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "no", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::TiledResourceBar::SetMaxQuantityOp" + }, + "parameters": [ + "Tiled_ResourceBar", + "TiledResourceBar", + "=", + "10", + "" + ] + } ] }, { - "type": { - "value": "Cache" - }, - "parameters": [ - "Unit_ResourceBar" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Unit_ResourceBar" + ] + }, + { + "type": { + "value": "ResourceBar::SpriteResourceBar::SetMaxQuantity" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "10", + "" + ] + }, + { + "type": { + "value": "ResourceBar::SpriteResourceBar::SetEmptyUnitColor" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "\"74;144;226\"", + "" + ] + }, + { + "type": { + "value": "ResourceBar::SpriteResourceBar::SetEmptyUnitOpacity" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "0", + "" + ] + } ] } ] @@ -3719,7 +3746,6 @@ { "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", "category": "Input", - "description": "Solid resource bar\n\nUnit resource bar", "extensionNamespace": "", "fullName": "Resource bar", "helpPath": "", @@ -3728,6 +3754,7 @@ "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/UI Essentials/UI Essentials_sliders_options.svg", "shortDescription": "Displays a bar that represents a resource in the game (health, shield, mana, ammo, etc)", "version": "0.0.1", + "description": "Solid resource bar\n\nUnit resource bar", "origin": { "identifier": "DraggableSliderControl", "name": "gdevelop-extension-store" @@ -3756,12 +3783,9 @@ "objectType": "PrimitiveDrawing::Drawer", "eventsFunctions": [ { - "description": "", "fullName": "", "functionType": "Action", - "group": "", "name": "onCreated", - "private": false, "sentence": "", "events": [ { @@ -3841,22 +3865,14 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" } @@ -3864,12 +3880,9 @@ "objectGroups": [] }, { - "description": "", "fullName": "", "functionType": "Action", - "group": "", "name": "doStepPostEvents", - "private": false, "sentence": "", "events": [ { @@ -4112,22 +4125,14 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" } @@ -4140,7 +4145,6 @@ "functionType": "Expression", "group": "Slider", "name": "Value", - "private": false, "sentence": "", "events": [ { @@ -4158,24 +4162,19 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" } @@ -4188,7 +4187,6 @@ "functionType": "Action", "group": "Slider", "name": "SetValue", - "private": false, "sentence": "Change the value of _PARAM0_: _PARAM2_", "events": [ { @@ -4350,33 +4348,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Slider value", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -4388,7 +4373,6 @@ "functionType": "Expression", "group": "Slider value configuration", "name": "ValueMin", - "private": false, "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ { @@ -4406,24 +4390,19 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" } @@ -4436,7 +4415,6 @@ "functionType": "Action", "group": "Slider value configuration", "name": "SetValueMin", - "private": false, "sentence": "Change the minimum value of _PARAM0_: _PARAM2_", "events": [ { @@ -4470,33 +4448,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Minimum value", - "longDescription": "", "name": "ValueMin", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -4508,7 +4473,6 @@ "functionType": "Expression", "group": "Slider value configuration", "name": "ValueMax", - "private": false, "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ { @@ -4526,24 +4490,19 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" } @@ -4556,7 +4515,6 @@ "functionType": "Expression", "group": "Slider Bar configuration", "name": "BarThickness", - "private": false, "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ { @@ -4574,24 +4532,19 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" } @@ -4604,7 +4557,6 @@ "functionType": "Expression", "group": "Slider Bar configuration", "name": "BarLength", - "private": false, "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ { @@ -4622,24 +4574,19 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" } @@ -4652,7 +4599,6 @@ "functionType": "Action", "group": "Slider value configuration", "name": "SetValueMax", - "private": false, "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ { @@ -4686,33 +4632,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Maximum value", - "longDescription": "", "name": "ValueMax", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -4724,7 +4657,6 @@ "functionType": "Expression", "group": "Slider value configuration", "name": "TickSpacing", - "private": false, "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", "events": [ { @@ -4742,35 +4674,25 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Tick spacing", - "longDescription": "", "name": "TickSpacing", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -4782,7 +4704,6 @@ "functionType": "Action", "group": "Slider value configuration", "name": "SetTickSpacing", - "private": false, "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", "events": [ { @@ -4816,33 +4737,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Tick spacing", - "longDescription": "", "name": "TickSpacing", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -4854,7 +4762,6 @@ "functionType": "Action", "group": "Slider Bar configuration", "name": "SetBarLength", - "private": false, "sentence": "Change Bar length of _PARAM0_ to _PARAM2_ px", "events": [ { @@ -4927,33 +4834,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Bar width", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -4965,7 +4859,6 @@ "functionType": "Action", "group": "Slider Bar configuration", "name": "SetBarThickness", - "private": false, "sentence": "Change Bar thickness of _PARAM0_ to _PARAM2_ px", "events": [ { @@ -4998,33 +4891,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Bar thickness", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -5036,7 +4916,6 @@ "functionType": "Action", "group": "Slider Bar configuration", "name": "SetInactiveBarOpacity", - "private": false, "sentence": "Change inactive Bar opacity of _PARAM0_ to _PARAM2_", "events": [ { @@ -5069,33 +4948,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Inactive Bar opacity", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -5107,7 +4973,6 @@ "functionType": "Action", "group": "Slider Bar configuration", "name": "SetActiveBarOpacity", - "private": false, "sentence": "Change active Bar opacity of _PARAM0_ to _PARAM2_", "events": [ { @@ -5140,33 +5005,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Active Bar opacity", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -5178,7 +5030,6 @@ "functionType": "Action", "group": "Slider Bar configuration", "name": "SetActiveBarColor", - "private": false, "sentence": "Change active Bar color of _PARAM0_ to _PARAM2_", "events": [ { @@ -5211,33 +5062,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Active Bar color", - "longDescription": "", "name": "Color", - "optional": false, - "supplementaryInformation": "", "type": "color" } ], @@ -5249,7 +5087,6 @@ "functionType": "Action", "group": "Slider Bar configuration", "name": "SetInactiveBarColor", - "private": false, "sentence": "Change inactive Bar color of _PARAM0_ to _PARAM2_", "events": [ { @@ -5282,33 +5119,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Inactive Bar color", - "longDescription": "", "name": "Color", - "optional": false, - "supplementaryInformation": "", "type": "color" } ], @@ -5354,22 +5178,14 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" } @@ -5380,9 +5196,7 @@ "description": "Draw health bar.", "fullName": "Draw health bar", "functionType": "Action", - "group": "", "name": "DrawHealthBar", - "private": false, "sentence": "Draw health bar with _PARAM0_ based on health of _PARAM2_", "events": [ { @@ -5429,42 +5243,25 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Object with health", - "longDescription": "", "name": "ObjectWithHealth", - "optional": false, - "supplementaryInformation": "", "type": "objectList" }, { - "codeOnly": false, - "defaultValue": "", "description": "Health behavior", - "longDescription": "", "name": "HealthBehavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" } @@ -5475,9 +5272,7 @@ "description": "Draw shield bar.", "fullName": "Draw shield bar", "functionType": "Action", - "group": "", "name": "DrawShieldBar", - "private": false, "sentence": "Draw shield bar with _PARAM0_ based on shield of _PARAM2_", "events": [ { @@ -5524,42 +5319,25 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Object with shield", - "longDescription": "", "name": "ObjectWithShield", - "optional": false, - "supplementaryInformation": "", "type": "objectList" }, { - "codeOnly": false, - "defaultValue": "", "description": "Shield behavior", - "longDescription": "", "name": "ShieldBehavior", - "optional": false, "supplementaryInformation": "Health::Shield", "type": "behavior" } @@ -5570,9 +5348,7 @@ "description": "Draw resource bar.", "fullName": "Draw resource bar", "functionType": "Action", - "group": "", "name": "DrawResourceBar", - "private": false, "sentence": "Draw resource bar with _PARAM0_ with current value _PARAM2_ and max value _PARAM3_", "events": [ { @@ -5619,42 +5395,25 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Current value", - "longDescription": "", "name": "CurrentValue", - "optional": false, - "supplementaryInformation": "", "type": "expression" }, { - "codeOnly": false, - "defaultValue": "", "description": "Max value", - "longDescription": "", "name": "MaxValue", - "optional": false, "supplementaryInformation": "Health::Health", "type": "expression" } @@ -5805,7 +5564,8 @@ "hidden": false, "name": "EasingSpeed" } - ] + ], + "sharedPropertyDescriptors": [] }, { "description": "Displays a line of objects that represent a resource in the game (hearts, lives, ammo, etc). \nUse the same image for the resource bar and the unit objects.", @@ -5814,12 +5574,9 @@ "objectType": "", "eventsFunctions": [ { - "description": "", "fullName": "", "functionType": "Action", - "group": "", "name": "onCreated", - "private": false, "sentence": "", "events": [ { @@ -5842,22 +5599,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::SpriteResourceBar", "type": "behavior" } @@ -5868,41 +5616,9 @@ "description": "Draw a unit resource bar made from objects.", "fullName": "Draw a unit resource bar", "functionType": "Action", - "group": "", "name": "DrawUnitBar", - "private": false, "sentence": "Draw unit bar _PARAM0_ with _PARAM2_ objects", "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Prepare", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "disabled": true, - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SpriteResourceBar::SetPropertyNextUnitToCreate" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] - } - ] - } - ], - "parameters": [] - }, { "colorB": 228, "colorG": 176, @@ -5924,7 +5640,7 @@ "Object", "Behavior", "<", - "Object.Behavior::PropertyCurrentQuantity()" + "max(Object.Behavior::PropertyCurrentQuantity(),Object.Behavior::PropertyMaxQuantity())" ] } ], @@ -5935,17 +5651,6 @@ "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ - { - "type": { - "value": "ResourceBar::SpriteResourceBar::SetPropertyNextUnitToCreate" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "1" - ] - }, { "type": { "value": "Create" @@ -5953,7 +5658,7 @@ "parameters": [ "", "UnitObject", - "Object.X() + Object.Width() * (Object.Behavior::PropertyNextUnitToCreate() - 1)", + "Object.X() + Object.Width() * (Object.Behavior::PropertyNextUnitToCreate())", "Object.Y()", "Object.Layer()" ] @@ -5978,6 +5683,17 @@ "Object", "UnitObject" ] + }, + { + "type": { + "value": "ResourceBar::SpriteResourceBar::SetPropertyNextUnitToCreate" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] } ] } @@ -5991,7 +5707,7 @@ "colorG": 176, "colorR": 74, "creationTime": 0, - "name": "Remove excess units", + "name": "Update state of units", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ @@ -6084,7 +5800,7 @@ }, "parameters": [ "UnitObject.Variable(__ResourceBar.UnitID)", - "<=", + "<", "Object.Behavior::PropertyCurrentQuantity()" ] } @@ -6142,7 +5858,7 @@ }, "parameters": [ "UnitObject.Variable(__ResourceBar.UnitID)", - ">", + ">=", "Object.Behavior::PropertyCurrentQuantity()" ] } @@ -6262,46 +5978,35 @@ "parameters": [] } ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update counter", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + }, { - "type": { - "value": "LinkedObjects::PickObjectsLinkedTo" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "", - "UnitObject", - "Object", - "" - ] - } - ], - "actions": [ + "comment": "Update counter", + "comment2": "" + }, { - "type": { - "value": "ResourceBar::SpriteResourceBar::SetPropertyNextUnitToCreate" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "PickedInstancesCount(UnitObject)+1" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::SpriteResourceBar::SetPropertyNextUnitToCreate" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "PickedInstancesCount(UnitObject)" + ] + } ] } ] @@ -6312,32 +6017,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::SpriteResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Object used to display each unit", - "longDescription": "", "name": "UnitObject", - "optional": false, "supplementaryInformation": "Sprite", "type": "objectList" } @@ -6348,9 +6040,7 @@ "description": "Apply color tint to empty units. Empty units exist between the current and maximum value.", "fullName": "Color tint of empty units", "functionType": "Action", - "group": "", "name": "SetEmptyUnitColor", - "private": false, "sentence": "Apply color tint _PARAM2_ to empty units of _PARAM0_", "events": [ { @@ -6364,7 +6054,8 @@ "parameters": [ "Object", "Behavior", - "GetArgumentAsString(\"ColorTint\")" + "GetArgumentAsString(\"ColorTint\")", + "" ] } ] @@ -6372,33 +6063,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::SpriteResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Color tint", "longDescription": "Use \"white\" to remove all color tint", "name": "ColorTint", - "optional": false, - "supplementaryInformation": "", "type": "color" } ], @@ -6408,9 +6086,7 @@ "description": "Apply color tint to active units.", "fullName": "Color tint of active units", "functionType": "Action", - "group": "", "name": "SetActiveUnitColor", - "private": false, "sentence": "Apply color tint _PARAM2_ to active units of _PARAM0_", "events": [ { @@ -6424,7 +6100,8 @@ "parameters": [ "Object", "Behavior", - "GetArgumentAsString(\"ColorTint\")" + "GetArgumentAsString(\"ColorTint\")", + "" ] } ] @@ -6432,33 +6109,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::SpriteResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Color tint", "longDescription": "Use \"white\" to remove all color tint", "name": "ColorTint", - "optional": false, - "supplementaryInformation": "", "type": "color" } ], @@ -6468,9 +6132,7 @@ "description": "Change the opacity of empty units. Empty units exist between the current and maximum value.", "fullName": "Opacity of empty units", "functionType": "Action", - "group": "", "name": "SetEmptyUnitOpacity", - "private": false, "sentence": "Change the opacity of empty units of _PARAM0_ to _PARAM2_", "events": [ { @@ -6493,33 +6155,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::SpriteResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Opacity of empty units", "longDescription": "Range: 0 to 255", "name": "Opacity", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -6529,9 +6178,7 @@ "description": "Change the opacity of active units. ", "fullName": "Opacity of active units", "functionType": "Action", - "group": "", "name": "SetActiveUnitOpacity", - "private": false, "sentence": "Change the opacity of active units of _PARAM0_ to _PARAM2_", "events": [ { @@ -6554,33 +6201,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::SpriteResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Opacity of empty units", "longDescription": "Range: 0 to 255", "name": "Opacity", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -6590,9 +6224,7 @@ "description": "Change the animation of empty units. Empty units exist between the current and maximum value.", "fullName": "Animation of empty units", "functionType": "Action", - "group": "", "name": "SetEmptyUnitAnimation", - "private": false, "sentence": "Change the animation of empty units of _PARAM0_ to _PARAM2_", "events": [ { @@ -6615,33 +6247,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::SpriteResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Animation number", - "longDescription": "", "name": "AnimationNumber", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -6651,9 +6269,7 @@ "description": "Change maximum units that can be displayed.", "fullName": "Maximum units", "functionType": "Action", - "group": "", "name": "SetMaxQuantity", - "private": false, "sentence": "Change maximum units of _PARAM0_ to _PARAM2_", "events": [ { @@ -6676,32 +6292,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::SpriteResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Maximum units", - "longDescription": "", "name": "Value", - "optional": false, "supplementaryInformation": "Sprite", "type": "expression" } @@ -6712,9 +6315,7 @@ "description": "Change the current quantity of units.", "fullName": "Unit quantity", "functionType": "Action", - "group": "", "name": "SetCurrentQuantity", - "private": false, "sentence": "Change the unit quantity of _PARAM0_ to _PARAM2_", "events": [ { @@ -6729,7 +6330,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")" + "min(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyMaxQuantity())" ] } ] @@ -6737,32 +6338,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::SpriteResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Current units", - "longDescription": "", "name": "Value", - "optional": false, "supplementaryInformation": "Sprite", "type": "expression" } @@ -6773,9 +6361,7 @@ "description": "Increase the current quantity of units.", "fullName": "Increase quantity", "functionType": "Action", - "group": "", "name": "IncreaseQuantity", - "private": false, "sentence": "Increase the quantity of _PARAM0_ by _PARAM2_", "events": [ { @@ -6798,32 +6384,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::SpriteResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Value", - "longDescription": "", "name": "Value", - "optional": false, "supplementaryInformation": "Sprite", "type": "expression" } @@ -6834,9 +6407,7 @@ "description": "Decrease the current quantity of units.", "fullName": "Decrease quantity", "functionType": "Action", - "group": "", "name": "DecreaseQuantity", - "private": false, "sentence": "Decrease the quantity of _PARAM0_ by _PARAM2_", "events": [ { @@ -6859,32 +6430,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::SpriteResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Value", - "longDescription": "", "name": "Value", - "optional": false, "supplementaryInformation": "Sprite", "type": "expression" } @@ -6993,26 +6551,219 @@ "hidden": false, "name": "ActiveUnitAnimationNumber" } - ] + ], + "sharedPropertyDescriptors": [] }, { - "description": "Uses a tiled sprite to display repeated objects to represent a resource in the game (hearts, lives, ammo, etc). ", + "description": "Use a tiled sprite to display repeated objects to represent a resource in the game (hearts, lives, ammo, etc). ", "fullName": "Tiled resource bar", "name": "TiledResourceBar", "objectType": "TiledSpriteObject::TiledSprite", "eventsFunctions": [ { - "description": "", "fullName": "", "functionType": "Action", - "group": "", "name": "onCreated", - "private": false, "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::TiledResourceBar::SetPropertyCurrentQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyStartingQuantity()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledSpriteObject::TiledSprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::TiledResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Display a tiled resource bar.", + "fullName": "Display a tiled resource bar", + "functionType": "Action", + "name": "DisplayTiledBar", + "sentence": "Display resource bar using _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TiledSpriteObject::Width" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyUnitWidth() * Object.Behavior::PropertyCurrentQuantity()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledSpriteObject::TiledSprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::TiledResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the quantity of a tiled resource bar.", + "fullName": "Quantity", + "functionType": "Action", + "name": "SetQuantity", + "sentence": "Change the quantity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::TiledResourceBar::SetPropertyCurrentQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0,GetArgumentAsNumber(\"Value\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledSpriteObject::TiledSprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::TiledResourceBar", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the quantity of a tiled resource bar.", + "fullName": "Quantity", + "functionType": "ActionWithOperator", + "getterName": "Quantity", + "name": "SetQuantityOp", + "sentence": "Change the quantity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "If max quantity has NOT been set, do not enforce it.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::TiledResourceBar::PropertyMaxQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::TiledResourceBar::SetPropertyCurrentQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0,GetArgumentAsNumber(\"Value\"))" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "If max quantity has been set, make sure quantity does not exceed it.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::TiledResourceBar::PropertyMaxQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + } + ], "actions": [ { "type": { @@ -7022,7 +6773,7 @@ "Object", "Behavior", "=", - "Object.Behavior::PropertyStartingQuantity()" + "clamp(GetArgumentAsNumber(\"Value\"), 0, Object.Behavior::PropertyMaxQuantity())" ] } ] @@ -7030,36 +6781,31 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "TiledSpriteObject::TiledSprite", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::TiledResourceBar", "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" } ], "objectGroups": [] }, { - "description": "Display a tiled resource bar.", - "fullName": "Display a tiled resource bar", + "description": "Change the maximum quantity of a tiled resource bar.", + "fullName": "Maximum quantity", "functionType": "Action", - "group": "", - "name": "DisplayTiledBar", - "private": false, - "sentence": "Display resource bar using _PARAM0_", + "name": "SetMaxQuantity", + "sentence": "Change the maximum quantity of _PARAM0_ to _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -7067,12 +6813,13 @@ "actions": [ { "type": { - "value": "TiledSpriteObject::Width" + "value": "ResourceBar::TiledResourceBar::SetPropertyMaxQuantity" }, "parameters": [ "Object", + "Behavior", "=", - "Object.Behavior::PropertyUnitWidth() * Object.Behavior::PropertyCurrentQuantity()" + "max(0,GetArgumentAsNumber(\"Value\"))" ] } ] @@ -7080,36 +6827,32 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "TiledSpriteObject::TiledSprite", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::TiledResourceBar", "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" } ], "objectGroups": [] }, { - "description": "Change the quantity of a tiled resource bar.", - "fullName": "Quantity", - "functionType": "Action", - "group": "", - "name": "SetQuantity", - "private": false, - "sentence": "Change the quantity of _PARAM0_ to _PARAM2_", + "description": "Change the maximum quantity of a tiled resource bar.", + "fullName": "Maximum quantity", + "functionType": "ActionWithOperator", + "getterName": "MaxQuantity", + "name": "SetMaxQuantityOp", + "sentence": "Change the maximum quantity of _PARAM0_ to _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -7117,7 +6860,7 @@ "actions": [ { "type": { - "value": "ResourceBar::TiledResourceBar::SetPropertyCurrentQuantity" + "value": "ResourceBar::TiledResourceBar::SetPropertyMaxQuantity" }, "parameters": [ "Object", @@ -7131,37 +6874,106 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "TiledSpriteObject::TiledSprite", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ResourceBar::TiledResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Value", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], "objectGroups": [] + }, + { + "description": "the quantity of a tiled resource bar.", + "fullName": "Quantity", + "functionType": "ExpressionAndCondition", + "name": "Quantity", + "sentence": "Quantity", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyCurrentQuantity()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledSpriteObject::TiledSprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::TiledResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the maximum quantity of a tiled resource bar.", + "fullName": "Max quantity", + "functionType": "ExpressionAndCondition", + "name": "MaxQuantity", + "sentence": "Max quantity", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyMaxQuantity()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledSpriteObject::TiledSprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::TiledResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] } ], "propertyDescriptors": [ @@ -7194,8 +7006,19 @@ "extraInformation": [], "hidden": false, "name": "UnitWidth" + }, + { + "value": "0", + "type": "Number", + "label": "Maximum quantity", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "MaxQuantity" } - ] + ], + "sharedPropertyDescriptors": [] } ], "eventsBasedObjects": [] @@ -7203,7 +7026,6 @@ { "author": "@Bouh, D8H", "category": "General", - "description": "This extension provides: \n- Conditions to check if a global/scene/object variable exists.\n- Actions to copy object variables, global and scene variables.\n- Actions to delete an existing global/scene variable from memory.\n- Actions to create a global/scene variable using a text expression, rather than a variable name input.\n- Expressions to get the value or text from a global/scene variable using a text expression, rather than a variable name.\n\nText expressions allows to enter the name of the variable with an expression like `\"MyVar\"+ ToString(Variable(Health))`", "extensionNamespace": "", "fullName": "Extended variables support", "helpPath": "", @@ -7212,6 +7034,7 @@ "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/variable-box.svg", "shortDescription": "Add conditions, actions and expressions to check for the existence of a variable, copy variables, delete existing ones from memory, and create dynamic variables.", "version": "1.0.0", + "description": "This extension provides: \n- Conditions to check if a global/scene/object variable exists.\n- Actions to copy object variables, global and scene variables.\n- Actions to delete an existing global/scene variable from memory.\n- Actions to create a global/scene variable using a text expression, rather than a variable name input.\n- Expressions to get the value or text from a global/scene variable using a text expression, rather than a variable name.\n\nText expressions allows to enter the name of the variable with an expression like `\"MyVar\"+ ToString(Variable(Health))`", "origin": { "identifier": "ExtendedVariables", "name": "gdevelop-extension-store" @@ -7286,13 +7109,8 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Name of the global variable", - "longDescription": "", "name": "GlobalVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" } ], @@ -7304,7 +7122,6 @@ "functionType": "Condition", "group": "Global variables", "name": "GlobalVariableExist", - "private": false, "sentence": "If the global variable _PARAM1_ exist", "events": [ { @@ -7317,13 +7134,8 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Name of the global variable", - "longDescription": "", "name": "GlobalVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" } ], @@ -7380,13 +7192,8 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Name of the scene variable", - "longDescription": "", "name": "SceneVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" } ], @@ -7398,7 +7205,6 @@ "functionType": "Condition", "group": "Scene variables", "name": "SceneVariableExist", - "private": false, "sentence": "If the scene variable _PARAM1_ exist", "events": [ { @@ -7411,13 +7217,8 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Name of the scene variable", - "longDescription": "", "name": "SceneVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" } ], @@ -7475,23 +7276,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "ObjectToCheck", - "optional": false, - "supplementaryInformation": "", "type": "objectList" }, { - "codeOnly": false, - "defaultValue": "", "description": "Name of object variable", - "longDescription": "", "name": "ObjectVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" } ], @@ -7503,7 +7294,6 @@ "functionType": "Condition", "group": "Object variables", "name": "ObjectVariableExist", - "private": false, "sentence": "Object _PARAM1_ has object variable _PARAM2_", "events": [ { @@ -7516,23 +7306,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "ObjectToCheck", - "optional": false, - "supplementaryInformation": "", "type": "objectList" }, { - "codeOnly": false, - "defaultValue": "", "description": "Name of object variable", - "longDescription": "", "name": "ObjectVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" } ], @@ -7566,13 +7346,8 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Name of the global variable to delete", - "longDescription": "", "name": "GlobalVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" } ], @@ -7584,7 +7359,6 @@ "functionType": "Action", "group": "Global variables", "name": "DeleteGlobalVariable", - "private": false, "sentence": "Delete the global variable _PARAM1_ from memory", "events": [ { @@ -7597,13 +7371,8 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Name of the global variable to delete", - "longDescription": "", "name": "GlobalVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" } ], @@ -7638,23 +7407,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Name of the scene variable", - "longDescription": "", "name": "SceneVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" }, { - "codeOnly": false, - "defaultValue": "", "description": "Value", - "longDescription": "", "name": "SceneVariableValue", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -7666,7 +7425,6 @@ "functionType": "Action", "group": "Scene variables", "name": "ModifySceneVariableString", - "private": false, "sentence": "Change the text of scene variable _PARAM1_ to _PARAM2_", "events": [ { @@ -7679,23 +7437,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Name of the scene variable", - "longDescription": "", "name": "SceneVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" }, { - "codeOnly": false, - "defaultValue": "", "description": "Value", - "longDescription": "", "name": "SceneVariableValue", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -7707,7 +7455,6 @@ "functionType": "Action", "group": "Global variables", "name": "ModifyGlobalVariableString", - "private": false, "sentence": "Change the text of global variable _PARAM1_ to _PARAM2_", "events": [ { @@ -7720,23 +7467,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Name of the global variable", - "longDescription": "", "name": "GlobalVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" }, { - "codeOnly": false, - "defaultValue": "", "description": "Value", - "longDescription": "", "name": "GlobalVariableValue", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -7771,23 +7508,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Name of the global variable", - "longDescription": "", "name": "SceneVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" }, { - "codeOnly": false, - "defaultValue": "", "description": "Value", - "longDescription": "", "name": "SceneVariableValue", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -7822,23 +7549,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Name of the global variable", - "longDescription": "", "name": "SceneVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" }, { - "codeOnly": false, - "defaultValue": "", "description": "Value", - "longDescription": "", "name": "SceneVariableValue", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -7850,7 +7567,6 @@ "functionType": "Action", "group": "Global variables", "name": "ModifyGlobalVariable", - "private": false, "sentence": "Change the global variable _PARAM1_ with value: _PARAM2_", "events": [ { @@ -7863,23 +7579,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Name of the global variable", - "longDescription": "", "name": "GlobalVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" }, { - "codeOnly": false, - "defaultValue": "", "description": "Value", - "longDescription": "", "name": "GlobalVariableValue", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -7914,23 +7620,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Name of the scene variable", - "longDescription": "", "name": "SceneVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" }, { - "codeOnly": false, - "defaultValue": "", "description": "Value", - "longDescription": "", "name": "SceneVariableValue", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -7942,7 +7638,6 @@ "functionType": "Action", "group": "Scene variables", "name": "ModifySceneVariable", - "private": false, "sentence": "Change the scene variable _PARAM1_ with value: _PARAM2_", "events": [ { @@ -7955,23 +7650,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Name of the scene variable", - "longDescription": "", "name": "SceneVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" }, { - "codeOnly": false, - "defaultValue": "", "description": "Value", - "longDescription": "", "name": "SceneVariableValue", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -8005,13 +7690,8 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Name of the scene variable to delete", - "longDescription": "", "name": "SceneVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" } ], @@ -8023,7 +7703,6 @@ "functionType": "Action", "group": "Scene variables", "name": "DeleteSceneVariable", - "private": false, "sentence": "Delete the scene variable _PARAM1_ from memory", "events": [ { @@ -8036,13 +7715,8 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Name of the scene variable to delete", - "longDescription": "", "name": "SceneVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" } ], @@ -8080,43 +7754,24 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Source object", - "longDescription": "", "name": "SourceObject", - "optional": false, - "supplementaryInformation": "", "type": "objectList" }, { - "codeOnly": false, - "defaultValue": "", "description": "Variable to copy", - "longDescription": "", "name": "SourceVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" }, { - "codeOnly": false, - "defaultValue": "", "description": "Destination object", "longDescription": "To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.", "name": "TargetObject", - "optional": false, - "supplementaryInformation": "", "type": "objectList" }, { - "codeOnly": false, - "defaultValue": "", "description": "Destination variable", - "longDescription": "", "name": "TargetVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" } ], @@ -8128,7 +7783,6 @@ "functionType": "Action", "group": "Object variables", "name": "CopyObjectVariable", - "private": false, "sentence": "Copy the variable _PARAM2_ of _PARAM1_ to the variable _PARAM4_ of _PARAM3_ (clear destination first: _PARAM5_)", "events": [ { @@ -8141,53 +7795,31 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Source object", - "longDescription": "", "name": "SourceObject", - "optional": false, - "supplementaryInformation": "", "type": "objectList" }, { - "codeOnly": false, - "defaultValue": "", "description": "Variable to copy", - "longDescription": "", "name": "SourceVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" }, { - "codeOnly": false, - "defaultValue": "", "description": "Destination object", "longDescription": "To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.", "name": "TargetObject", - "optional": false, - "supplementaryInformation": "", "type": "objectList" }, { - "codeOnly": false, - "defaultValue": "", "description": "Destination variable", - "longDescription": "", "name": "TargetVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" }, { - "codeOnly": false, "defaultValue": "yes", "description": "Clear destination first", - "longDescription": "", "name": "isExactCopy", "optional": true, - "supplementaryInformation": "", "type": "yesorno" } ], @@ -8223,23 +7855,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Source object", - "longDescription": "", "name": "SourceObject", - "optional": false, - "supplementaryInformation": "", "type": "objectList" }, { - "codeOnly": false, - "defaultValue": "", "description": "Destination object", - "longDescription": "", "name": "TargetObject", - "optional": false, - "supplementaryInformation": "", "type": "objectList" } ], @@ -8251,7 +7873,6 @@ "functionType": "Action", "group": "Object variables", "name": "CopyAllObjectVariables", - "private": false, "sentence": "Copy all variables from object _PARAM1_ to object _PARAM2_ (clear destination first: _PARAM3_)", "events": [ { @@ -8264,33 +7885,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Source object", - "longDescription": "", "name": "SourceObject", - "optional": false, - "supplementaryInformation": "", "type": "objectList" }, { - "codeOnly": false, - "defaultValue": "", "description": "Destination object", - "longDescription": "", "name": "TargetObject", - "optional": false, - "supplementaryInformation": "", "type": "objectList" }, { - "codeOnly": false, "defaultValue": "yes", "description": "Clear destination first", - "longDescription": "", "name": "isExactCopy", "optional": true, - "supplementaryInformation": "", "type": "yesorno" } ], @@ -8302,7 +7910,6 @@ "functionType": "Action", "group": "Object variables", "name": "DeleteObjectVariable", - "private": false, "sentence": "Delete for the object _PARAM1_ the object variable _PARAM2_ from the memory", "events": [ { @@ -8315,23 +7922,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "objectList" }, { - "codeOnly": false, - "defaultValue": "", "description": "Name of object variable", - "longDescription": "", "name": "VariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" } ], @@ -8343,7 +7940,6 @@ "functionType": "StringExpression", "group": "Global variables", "name": "GlobalVariableString", - "private": false, "sentence": "", "events": [ { @@ -8354,15 +7950,13 @@ "eventsSheetExpanded": false } ], + "expressionType": { + "type": "string" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Name of the global variable", - "longDescription": "", "name": "GlobalVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" } ], @@ -8374,7 +7968,6 @@ "functionType": "StringExpression", "group": "Scene variables", "name": "VariableString", - "private": false, "sentence": "", "events": [ { @@ -8385,15 +7978,13 @@ "eventsSheetExpanded": false } ], + "expressionType": { + "type": "string" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Name of the scene variable", - "longDescription": "", "name": "SceneVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" } ], @@ -8405,7 +7996,6 @@ "functionType": "Expression", "group": "Global variables", "name": "GlobalVariable", - "private": false, "sentence": "", "events": [ { @@ -8416,15 +8006,13 @@ "eventsSheetExpanded": false } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Name of the global variable", - "longDescription": "", "name": "GlobalVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" } ], @@ -8436,7 +8024,6 @@ "functionType": "Expression", "group": "Scene variables", "name": "Variable", - "private": false, "sentence": "", "events": [ { @@ -8447,15 +8034,13 @@ "eventsSheetExpanded": false } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Name of the scene variable", - "longDescription": "", "name": "SceneVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" } ], @@ -8467,7 +8052,6 @@ "functionType": "Action", "group": "Convert", "name": "CopyGlobalVariableToScene", - "private": false, "sentence": "Copy the global variable:_PARAM1_ to a scene variable:_PARAM2_ (clear destination first: _PARAM3_)", "events": [ { @@ -8480,33 +8064,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Global variable to copy", - "longDescription": "", "name": "globalVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" }, { - "codeOnly": false, - "defaultValue": "", "description": "Scene variable destination", - "longDescription": "", "name": "sceneVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" }, { - "codeOnly": false, "defaultValue": "yes", "description": "Clear destination first", - "longDescription": "", "name": "isExactCopy", "optional": true, - "supplementaryInformation": "", "type": "yesorno" } ], @@ -8518,7 +8089,6 @@ "functionType": "Action", "group": "Copy variables", "name": "CopySceneVariableToGlobal", - "private": false, "sentence": "Copy the scene variable:_PARAM1_ to a global variable:_PARAM2_ (clear destination first: _PARAM3_)", "events": [ { @@ -8531,33 +8101,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Scene variable to copy", - "longDescription": "", "name": "sceneVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" }, { - "codeOnly": false, - "defaultValue": "", "description": "Global variable destination", - "longDescription": "", "name": "globalVariableName", - "optional": false, - "supplementaryInformation": "", "type": "string" }, { - "codeOnly": false, "defaultValue": "yes", "description": "Clear destination first", - "longDescription": "", "name": "isExactCopy", "optional": true, - "supplementaryInformation": "", "type": "yesorno" } ], @@ -8570,7 +8127,6 @@ { "author": "D8H", "category": "", - "description": "This extension can be useful for:\n* Stick an accessory to a moving object,\n* Animate a skeleton.", "extensionNamespace": "", "fullName": "Stick objects to others", "helpPath": "", @@ -8579,6 +8135,7 @@ "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/sticker-outline.svg", "shortDescription": "Behavior to stick objects to other objects - so that they follow the position and rotation of the object they are stuck to.", "version": "0.3.4", + "description": "This extension can be useful for:\n* Stick an accessory to a moving object,\n* Animate a skeleton.", "origin": { "identifier": "Sticker", "name": "gdevelop-extension-store" @@ -8599,9 +8156,7 @@ "description": "Check if the object is stuck to another object.", "fullName": "Is stuck to another object", "functionType": "Condition", - "group": "", "name": "IsStuck", - "private": false, "sentence": "_PARAM1_ is stuck to _PARAM3_", "events": [ { @@ -8614,33 +8169,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Sticker", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "objectList" }, { - "codeOnly": false, - "defaultValue": "", "description": "Sticker behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Sticker::Sticker", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Basis", - "longDescription": "", "name": "BasisObject", - "optional": false, - "supplementaryInformation": "", "type": "objectList" } ], @@ -8655,12 +8196,9 @@ "objectType": "", "eventsFunctions": [ { - "description": "", "fullName": "", "functionType": "Action", - "group": "", "name": "onCreated", - "private": false, "sentence": "", "events": [ { @@ -8673,22 +8211,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Sticker::Sticker", "type": "behavior" } @@ -8696,12 +8225,9 @@ "objectGroups": [] }, { - "description": "", "fullName": "", "functionType": "Action", - "group": "", "name": "doStepPreEvents", - "private": false, "sentence": "", "events": [ { @@ -8714,22 +8240,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Sticker::Sticker", "type": "behavior" } @@ -8737,12 +8254,9 @@ "objectGroups": [] }, { - "description": "", "fullName": "", "functionType": "Action", - "group": "", "name": "doStepPostEvents", - "private": false, "sentence": "", "events": [ { @@ -8755,22 +8269,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Sticker::Sticker", "type": "behavior" } @@ -8781,9 +8286,7 @@ "description": "Stick on another object.", "fullName": "Stick", "functionType": "Action", - "group": "", "name": "Stick", - "private": false, "sentence": "Stick _PARAM0_ to _PARAM2_", "events": [ { @@ -8796,33 +8299,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Sticker::Sticker", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Object to stick to", - "longDescription": "", "name": "BasisObject", - "optional": false, - "supplementaryInformation": "", "type": "objectList" } ], @@ -8832,9 +8321,7 @@ "description": "Unstick from the object it was stuck to.", "fullName": "Unstick", "functionType": "Action", - "group": "", "name": "Unstick", - "private": false, "sentence": "Unstick _PARAM0_", "events": [ { @@ -8847,22 +8334,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Sticker::Sticker", "type": "behavior" } @@ -8870,12 +8348,9 @@ "objectGroups": [] }, { - "description": "", "fullName": "", "functionType": "Action", - "group": "", "name": "onDestroy", - "private": false, "sentence": "", "events": [ { @@ -8888,22 +8363,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Sticker::Sticker", "type": "behavior" } @@ -8922,7 +8388,8 @@ "hidden": false, "name": "OnlyFollowPosition" } - ] + ], + "sharedPropertyDescriptors": [] } ], "eventsBasedObjects": [] @@ -8930,7 +8397,6 @@ { "author": "Tristan Rhodes (https://victrisgames.itch.io/)", "category": "", - "description": "Select one or more methods of shaking:\n- Position: Shake the X and/or Y position of the object \n- Angle: Shake the angle (rotation) of the object \n- Scale: Shake the scale of the object (must be a sprite)\n\nControl how the object shakes:\n- Amplitude: How far the object moves during each shake\n- Duration: Amount of time to shake the object\n- Time between shakes: Amount of time between each movement of the object\n- Keep shaking until stopped (boolean)\n\nTips:\n- For a single-shake effect, set the \"Time between shakes\" to be equal to \"Duration\" (great for a hit or impact)\n- To make the single-shake move in the opposite direction, use negative numbers \n- To repeat a single-shake effect in a loop, add a condition \"Object is not shaking\" \n- Use a long \"Time between shakes\" to simulate a slow moving object (like a ship rocking back and forth)\n- Make sure to \"Stop shaking\" before starting a new shake if it uses different parameters. \n- Use \"Shake until stopped\" to simulate engine vibration, earthquake, or pulsing", "extensionNamespace": "", "fullName": "Shake Object (position, angle, scale)", "helpPath": "https://victrisgames.itch.io/gdevelop-camera-shake-example", @@ -8939,6 +8405,7 @@ "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/arrow-all.svg", "shortDescription": "Shake an object, using one or more ways to shake (position, angle, scale).", "version": "1.5.5", + "description": "Select one or more methods of shaking:\n- Position: Shake the X and/or Y position of the object \n- Angle: Shake the angle (rotation) of the object \n- Scale: Shake the scale of the object (must be a sprite)\n\nControl how the object shakes:\n- Amplitude: How far the object moves during each shake\n- Duration: Amount of time to shake the object\n- Time between shakes: Amount of time between each movement of the object\n- Keep shaking until stopped (boolean)\n\nTips:\n- For a single-shake effect, set the \"Time between shakes\" to be equal to \"Duration\" (great for a hit or impact)\n- To make the single-shake move in the opposite direction, use negative numbers \n- To repeat a single-shake effect in a loop, add a condition \"Object is not shaking\" \n- Use a long \"Time between shakes\" to simulate a slow moving object (like a ship rocking back and forth)\n- Make sure to \"Stop shaking\" before starting a new shake if it uses different parameters. \n- Use \"Shake until stopped\" to simulate engine vibration, earthquake, or pulsing", "origin": { "identifier": "ShakeObject", "name": "gdevelop-extension-store" @@ -8969,9 +8436,7 @@ "description": "Shake an object, using one or more ways to shake (position, angle).", "fullName": "Shake object (position, angle)", "functionType": "Action", - "group": "", "name": "ShakeObject_PositionAngle", - "private": false, "sentence": "Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_. Wait _PARAM6_ seconds between shakes. Keep shaking until stopped: _PARAM7_", "events": [ { @@ -9330,95 +8795,54 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngle", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Duration of shake (in seconds) (Default: 0.5) ", - "longDescription": "", "name": "Duration", - "optional": false, - "supplementaryInformation": "", "type": "expression" }, { - "codeOnly": false, - "defaultValue": "", "description": "Amplitude of postion shake in X direction (in pixels) (For example: 5)", - "longDescription": "", "name": "PowerX", - "optional": false, - "supplementaryInformation": "", "type": "expression" }, { - "codeOnly": false, - "defaultValue": "", "description": "Amplitude of position shake in Y direction (in pixels) (For example: 5)", - "longDescription": "", "name": "PowerY", - "optional": false, - "supplementaryInformation": "", "type": "expression" }, { - "codeOnly": false, - "defaultValue": "", "description": "Amplitude of angle rotation shake (in degrees) (For example: 5)", - "longDescription": "", "name": "PowerAngle", - "optional": false, - "supplementaryInformation": "", "type": "expression" }, { - "codeOnly": false, - "defaultValue": "", "description": "Amount of time between shakes (in seconds) (Default: 0.08)", - "longDescription": "", "name": "TimeBetweenShakes", - "optional": false, - "supplementaryInformation": "", "type": "expression" }, { - "codeOnly": false, - "defaultValue": "", "description": "Keep shaking until stopped", "longDescription": "Duration value will be ignored", "name": "ShakeForever", - "optional": false, - "supplementaryInformation": "", "type": "yesorno" } ], "objectGroups": [] }, { - "description": "", "fullName": "", "functionType": "Action", - "group": "", "name": "doStepPostEvents", - "private": false, "sentence": "", "events": [ { @@ -10904,22 +10328,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngle", "type": "behavior" } @@ -10930,9 +10345,7 @@ "description": "Stop any shaking of object that was initiated by the Shake Object extension.", "fullName": "Stop shaking the object", "functionType": "Action", - "group": "", "name": "StopShaking", - "private": false, "sentence": "Stop shaking _PARAM0_", "events": [ { @@ -10966,22 +10379,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngle", "type": "behavior" } @@ -10992,9 +10396,7 @@ "description": "Check if an object is shaking.", "fullName": "Check if an object is shaking", "functionType": "Condition", - "group": "", "name": "IsShaking", - "private": false, "sentence": "_PARAM0_ is shaking", "events": [ { @@ -11026,22 +10428,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngle", "type": "behavior" } @@ -11049,7 +10442,8 @@ "objectGroups": [] } ], - "propertyDescriptors": [] + "propertyDescriptors": [], + "sharedPropertyDescriptors": [] }, { "description": "Shake an object, using one or more ways to shake (position, angle, scale)\nThis behavior can only be used on sprite objects.", @@ -11061,9 +10455,7 @@ "description": "Shake an object, using one or more ways to shake (position, angle, scale).", "fullName": "Shake object (position, angle, scale)", "functionType": "Action", - "group": "", "name": "ShakeObject_PositionAngleScale", - "private": false, "sentence": "Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_, and scale amplitude _PARAM6_. Wait _PARAM7_ seconds between shakes. Keep shaking until stopped: _PARAM8_", "events": [ { @@ -11433,105 +10825,60 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "Sprite", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngleScale", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Duration of shake (in seconds) (Default: 0.5)", - "longDescription": "", "name": "Duration", - "optional": false, - "supplementaryInformation": "", "type": "expression" }, { - "codeOnly": false, - "defaultValue": "", "description": "Amplitude of postion shake in X direction (in pixels) (For example: 5)", - "longDescription": "", "name": "PowerX", - "optional": false, - "supplementaryInformation": "", "type": "expression" }, { - "codeOnly": false, - "defaultValue": "", "description": "Amplitude of position shake in Y direction (in pixels) (For example: 5)", - "longDescription": "", "name": "PowerY", - "optional": false, - "supplementaryInformation": "", "type": "expression" }, { - "codeOnly": false, - "defaultValue": "", "description": "Amplitude of angle rotation shake (in degrees) (For example: 5)", - "longDescription": "", "name": "PowerAngle", - "optional": false, - "supplementaryInformation": "", "type": "expression" }, { - "codeOnly": false, - "defaultValue": "", "description": "Amplitude of scale shake (in percent change) (For example: 5)", - "longDescription": "", "name": "PowerScale", - "optional": false, - "supplementaryInformation": "", "type": "expression" }, { - "codeOnly": false, - "defaultValue": "", "description": "Amount of time between shakes (in seconds) (Default: 0.08)", - "longDescription": "", "name": "TimeBetweenShakes", - "optional": false, - "supplementaryInformation": "", "type": "expression" }, { - "codeOnly": false, - "defaultValue": "", "description": "Keep shaking until stopped", "longDescription": "Duration value will be ignored", "name": "ShakeForever", - "optional": false, - "supplementaryInformation": "", "type": "yesorno" } ], "objectGroups": [] }, { - "description": "", "fullName": "", "functionType": "Action", - "group": "", "name": "doStepPostEvents", - "private": false, "sentence": "", "events": [ { @@ -13393,22 +12740,14 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "Sprite", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngleScale", "type": "behavior" } @@ -13419,9 +12758,7 @@ "description": "Stop shaking an object.", "fullName": "Stop shaking an object", "functionType": "Action", - "group": "", "name": "StopShaking", - "private": false, "sentence": "Stop shaking _PARAM0_", "events": [ { @@ -13455,22 +12792,14 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "Sprite", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngleScale", "type": "behavior" } @@ -13481,9 +12810,7 @@ "description": "Check if an object is shaking.", "fullName": "Check if an object is shaking", "functionType": "Condition", - "group": "", "name": "IsShaking", - "private": false, "sentence": "_PARAM0_ is shaking", "events": [ { @@ -13515,22 +12842,14 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "Sprite", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngleScale", "type": "behavior" } @@ -13538,7 +12857,8 @@ "objectGroups": [] } ], - "propertyDescriptors": [] + "propertyDescriptors": [], + "sharedPropertyDescriptors": [] } ], "eventsBasedObjects": [] @@ -13546,7 +12866,6 @@ { "author": "VegeTato, arthuro555", "category": "", - "description": "Convenience conditions, actions and behaviors for timers to trigger a condition every X seconds.", "extensionNamespace": "", "fullName": "Repeat every X seconds", "helpPath": "", @@ -13555,6 +12874,7 @@ "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/repeat.svg", "shortDescription": "This allows to trigger an event every X seconds.", "version": "0.1.0", + "description": "Convenience conditions, actions and behaviors for timers to trigger a condition every X seconds.", "origin": { "identifier": "RepeatEveryXSeconds", "name": "gdevelop-extension-store" @@ -13575,9 +12895,7 @@ "description": "Triggers every X seconds.", "fullName": "Repeat every X seconds", "functionType": "Condition", - "group": "", "name": "Repeat", - "private": false, "sentence": "Repeat timer _PARAM1_ every _PARAM2_ seconds", "events": [ { @@ -13639,23 +12957,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "The name of the timer to loop", - "longDescription": "", "name": "timerName", - "optional": false, - "supplementaryInformation": "", "type": "string" }, { - "codeOnly": false, - "defaultValue": "", "description": "The time in seconds between each trigger", - "longDescription": "", "name": "time", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -13665,9 +12973,7 @@ "description": "Triggers every X seconds X amount of times.", "fullName": "Repeat every X seconds in X number", "functionType": "Condition", - "group": "", "name": "RepeatXTimes", - "private": false, "sentence": "Repeat timer _PARAM1_ every _PARAM2_ seconds _PARAM3_ times", "events": [ { @@ -13777,33 +13083,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "The name of the timer to loop", - "longDescription": "", "name": "timerName", - "optional": false, - "supplementaryInformation": "", "type": "string" }, { - "codeOnly": false, - "defaultValue": "", "description": "The time in seconds between each trigger", - "longDescription": "", "name": "time", - "optional": false, - "supplementaryInformation": "", "type": "expression" }, { - "codeOnly": false, - "defaultValue": "", "description": "The limit of loops", "longDescription": "The condition will trigger at most this amount of times. Make it -1 for looping forever.", "name": "limit", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -13818,12 +13110,9 @@ "objectType": "", "eventsFunctions": [ { - "description": "", "fullName": "", "functionType": "Action", - "group": "", "name": "onCreated", - "private": false, "sentence": "", "events": [ { @@ -13844,22 +13133,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", "type": "behavior" } @@ -13870,9 +13150,7 @@ "description": "Triggers every X seconds, where X is defined in the behavior properties.", "fullName": "Repeat every X seconds", "functionType": "Condition", - "group": "", "name": "Repeat", - "private": false, "sentence": "Recurring timer _PARAM1_ of _PARAM0_ has triggered", "events": [ { @@ -13953,22 +13231,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", "type": "behavior" } @@ -13979,9 +13248,7 @@ "description": "Pauses a recurring timer.", "fullName": "Pause a recurring timer", "functionType": "Action", - "group": "", "name": "Pause", - "private": false, "sentence": "Pause recurring timer _PARAM1_ of _PARAM0_", "events": [ { @@ -14002,22 +13269,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", "type": "behavior" } @@ -14028,9 +13286,7 @@ "description": "Resumes a paused recurring timer.", "fullName": "Resume a recurring timer", "functionType": "Action", - "group": "", "name": "Resume", - "private": false, "sentence": "Resume recurring timer _PARAM1_ of _PARAM0_", "events": [ { @@ -14051,22 +13307,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", "type": "behavior" } @@ -14077,9 +13324,7 @@ "description": "Allows to trigger the recurring timer X times again.", "fullName": "Reset the limit", "functionType": "Action", - "group": "", "name": "ResetLimit", - "private": false, "sentence": "Allow to trigger the recurring timer _PARAM1_ of _PARAM0_ X times again", "events": [ { @@ -14102,22 +13347,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", "type": "behavior" } @@ -14166,7 +13402,8 @@ "hidden": true, "name": "Counter" } - ] + ], + "sharedPropertyDescriptors": [] } ], "eventsBasedObjects": [] @@ -14174,7 +13411,6 @@ { "author": "@4ian", "category": "General", - "description": "Manage health (life) and shield points of an object. Health can be assigned to players, enemies, NPCs, or even inanimate objects such as breaking doors and mining rocks.\n\nHow to use:\n\n- Set desired values in \"Health\" and \"Shield\" behavior properties\n- To apply damage use “Damage an object” or “Damage an object protected by a shield”\n- To heal health, use “Heal object” action \n- To activate the shield, use “Activate Shield” action\n- Health and shield regeneration will happen automatically based on properties\n \nTips:\n\n- While damage cooldown is active, no damage will be applied to health or shield\n- Try using the “Blink” extension while damage cooldown is active\n- Use the “Is just damaged” condition to trigger audio and visual effects\n\nHealth properties:\n\n- Health (life points) Used for starting health\n- Maximum health (0 for no maximum)\n- Damage cooldown (seconds) Use \"0\" for no cooldown\n- Rate of health regeneration (points per second) Will not exceed max health, even with overhealing enabled\n- Delay (seconds) before health regeneration starts after being hit\n- Allow heal to increase health above max health (will not exceed max health)\n\nShield properties:\n\n- Max shield points (Shield will start with this many points when activated)\n- Duration of shield (seconds) Use \"0\" to disable shield timer\n- Rate of shield regeneration (points per second)\n- Shield will block all excess damage when shield is destroyed\n- Delay (seconds) before shield regeneration starts after being hit\n- Regenerate shield when it has zero points\n", "extensionNamespace": "", "fullName": "Health (life) points and shield", "helpPath": "", @@ -14183,6 +13419,7 @@ "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/heart-half-full.svg", "shortDescription": "Manage life points and a protective shield.", "version": "0.1.0", + "description": "Manage health (life) and shield points of an object. Health can be assigned to players, enemies, NPCs, or even inanimate objects such as breaking doors and mining rocks.\n\nHow to use:\n\n- Set desired values in \"Health\" and \"Shield\" behavior properties\n- To apply damage use “Damage an object” or “Damage an object protected by a shield”\n- To heal health, use “Heal object” action \n- To activate the shield, use “Activate Shield” action\n- Health and shield regeneration will happen automatically based on properties\n \nTips:\n\n- While damage cooldown is active, no damage will be applied to health or shield\n- Try using the “Blink” extension while damage cooldown is active\n- Use the “Is just damaged” condition to trigger audio and visual effects\n\nHealth properties:\n\n- Health (life points) Used for starting health\n- Maximum health (0 for no maximum)\n- Damage cooldown (seconds) Use \"0\" for no cooldown\n- Rate of health regeneration (points per second) Will not exceed max health, even with overhealing enabled\n- Delay (seconds) before health regeneration starts after being hit\n- Allow heal to increase health above max health (will not exceed max health)\n\nShield properties:\n\n- Max shield points (Shield will start with this many points when activated)\n- Duration of shield (seconds) Use \"0\" to disable shield timer\n- Rate of shield regeneration (points per second)\n- Shield will block all excess damage when shield is destroyed\n- Delay (seconds) before shield regeneration starts after being hit\n- Regenerate shield when it has zero points\n", "origin": { "identifier": "Health", "name": "gdevelop-extension-store" @@ -14211,12 +13448,9 @@ "objectType": "", "eventsFunctions": [ { - "description": "", "fullName": "", "functionType": "Action", - "group": "", "name": "doStepPreEvents", - "private": false, "sentence": "", "events": [ { @@ -14370,22 +13604,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" } @@ -14398,7 +13623,6 @@ "functionType": "Action", "group": "Health", "name": "Hit", - "private": false, "sentence": "Damage _PARAM0_, removing _PARAM2_ points from its health", "events": [ { @@ -14553,33 +13777,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Value of the damage to do (will be removed from object health)", - "longDescription": "", "name": "DamageValue", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -14591,7 +13801,6 @@ "functionType": "Action", "group": "Health", "name": "SetHealth", - "private": false, "sentence": "Set health of _PARAM0_ to _PARAM2_ points", "events": [ { @@ -14643,33 +13852,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "New health value", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -14681,7 +13876,6 @@ "functionType": "Action", "group": "Health", "name": "Heal", - "private": false, "sentence": "Heal _PARAM0_ with _PARAM2_ health points", "events": [ { @@ -14769,33 +13963,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Points to heal (will be added to object health)", - "longDescription": "", "name": "HealValue", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -14807,7 +13987,6 @@ "functionType": "Action", "group": "Health", "name": "SetMaxHealth", - "private": false, "sentence": "Set maximum health of _PARAM0_ to _PARAM2_ points", "events": [ { @@ -14830,33 +14009,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Maximum health", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -14868,7 +14033,6 @@ "functionType": "Action", "group": "Shield", "name": "SetHealthRegenRate", - "private": false, "sentence": "Set rate of health regen of _PARAM0_ to _PARAM2_ points per second", "events": [ { @@ -14891,33 +14055,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Rate of regen", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -14929,7 +14079,6 @@ "functionType": "Action", "group": "Health", "name": "SetCooldownDuration", - "private": false, "sentence": "Set duration of damage cooldown on _PARAM0_ to _PARAM2_ seconds", "events": [ { @@ -14952,33 +14101,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Duration of damage cooldown (seconds)", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -14990,7 +14125,6 @@ "functionType": "Action", "group": "Health", "name": "SetHealthRegenDelay", - "private": false, "sentence": "Set delay before health regeneration starts on _PARAM0_ to _PARAM2_ seconds", "events": [ { @@ -15013,33 +14147,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Delay (seconds)", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -15051,7 +14171,6 @@ "functionType": "Action", "group": "Health", "name": "AllowOverHealing", - "private": false, "sentence": "Allow over-healing on _PARAM0_: _PARAM2_", "events": [ { @@ -15098,33 +14217,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Allow over-healing", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "yesorno" } ], @@ -15136,7 +14241,6 @@ "functionType": "Action", "group": "Health", "name": "SetHitAtLeastOnce", - "private": false, "sentence": "Mark _PARAM0_ as hit at least once: _PARAM2_", "events": [ { @@ -15183,33 +14287,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Hit at least once", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "yesorno" } ], @@ -15221,7 +14311,6 @@ "functionType": "Action", "group": "Health", "name": "SetJustDamaged", - "private": false, "sentence": "Mark _PARAM0_ as just damaged: _PARAM2_", "events": [ { @@ -15268,33 +14357,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Just damaged", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "yesorno" } ], @@ -15306,7 +14381,6 @@ "functionType": "Condition", "group": "Health", "name": "HitAtLeastOnce", - "private": false, "sentence": "_PARAM0_ has just been hit at least once", "events": [ { @@ -15350,22 +14424,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" } @@ -15378,7 +14443,6 @@ "functionType": "Condition", "group": "Health", "name": "IsJustDamaged", - "private": false, "sentence": "_PARAM0_ has just been damaged", "events": [ { @@ -15422,22 +14486,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" } @@ -15450,7 +14505,6 @@ "functionType": "Condition", "group": "Health", "name": "IsDamageCooldownActive", - "private": false, "sentence": "Damage cooldown on _PARAM0_ is active", "events": [ { @@ -15516,22 +14570,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" } @@ -15544,7 +14589,6 @@ "functionType": "Condition", "group": "Health", "name": "IsDead", - "private": false, "sentence": "_PARAM0_ is dead", "events": [ { @@ -15590,22 +14634,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" } @@ -15618,7 +14653,6 @@ "functionType": "Expression", "group": "Health", "name": "MaxHealth", - "private": false, "sentence": "", "events": [ { @@ -15636,24 +14670,18 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" } @@ -15666,7 +14694,6 @@ "functionType": "Expression", "group": "Health", "name": "DamageCooldownDuration", - "private": false, "sentence": "", "events": [ { @@ -15684,24 +14711,18 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" } @@ -15714,7 +14735,6 @@ "functionType": "Expression", "group": "Health", "name": "Health", - "private": false, "sentence": "", "events": [ { @@ -15732,24 +14752,18 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" } @@ -15762,7 +14776,6 @@ "functionType": "Expression", "group": "Health", "name": "HealthRegenDelay", - "private": false, "sentence": "", "events": [ { @@ -15780,24 +14793,18 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" } @@ -15810,7 +14817,6 @@ "functionType": "Expression", "group": "Health", "name": "HealthRegenRate", - "private": false, "sentence": "", "events": [ { @@ -15828,24 +14834,18 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" } @@ -15858,7 +14858,6 @@ "functionType": "Expression", "group": "Health", "name": "DamageCooldownRemaining", - "private": false, "sentence": "", "events": [ { @@ -15901,24 +14900,18 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" } @@ -15931,7 +14924,6 @@ "functionType": "Expression", "group": "Health", "name": "TimeSinceLastHit", - "private": false, "sentence": "", "events": [ { @@ -15949,24 +14941,18 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" } @@ -15974,12 +14960,9 @@ "objectGroups": [] }, { - "description": "", "fullName": "", "functionType": "Action", - "group": "", "name": "onCreated", - "private": false, "sentence": "", "events": [ { @@ -16009,22 +14992,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" } @@ -16113,7 +15087,8 @@ "hidden": true, "name": "HitAtLeastOnce" } - ] + ], + "sharedPropertyDescriptors": [] }, { "description": "Protective shield that prevents damage to health points.", @@ -16122,12 +15097,9 @@ "objectType": "", "eventsFunctions": [ { - "description": "", "fullName": "", "functionType": "Action", - "group": "", "name": "doStepPreEvents", - "private": false, "sentence": "", "events": [ { @@ -16376,22 +15348,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Shield", "type": "behavior" } @@ -16404,7 +15367,6 @@ "functionType": "Action", "group": "Health", "name": "ShieldHit", - "private": false, "sentence": "Damage shield and health of _PARAM0_ for _PARAM2_ points of damage", "events": [ { @@ -16737,33 +15699,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Shield", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Value of the damage to do (will be removed from object health)", - "longDescription": "", "name": "DamageValue", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -16775,7 +15723,6 @@ "functionType": "Action", "group": "Shield", "name": "SetMaxShield", - "private": false, "sentence": "Set maximum shield of _PARAM0_ to _PARAM2_ points", "events": [ { @@ -16798,33 +15745,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Shield", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Maximum shield", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -16836,7 +15769,6 @@ "functionType": "Action", "group": "Shield", "name": "SeShieldPoints", - "private": false, "sentence": "Set shield on _PARAM0_ to _PARAM2_ points", "events": [ { @@ -16859,33 +15791,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Shield", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Shield points", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -16897,7 +15815,6 @@ "functionType": "Action", "group": "Shield", "name": "SetShieldRegenRate", - "private": false, "sentence": "Set rate of shield regeneration of _PARAM0_ to _PARAM2_ points per second", "events": [ { @@ -16920,33 +15837,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Shield", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Rate of regen", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -16958,7 +15861,6 @@ "functionType": "Action", "group": "Shield", "name": "SetShieldRegenDelay", - "private": false, "sentence": "Set delay before shield regeneration starts on _PARAM0_ to _PARAM2_ seconds", "events": [ { @@ -16981,33 +15883,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Shield", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Delay (seconds)", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -17019,7 +15907,6 @@ "functionType": "Action", "group": "Shield", "name": "SetShieldDuration", - "private": false, "sentence": "Set duration of shield on _PARAM0_ to _PARAM2_ seconds", "events": [ { @@ -17042,33 +15929,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Shield", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Duration of shield (seconds)", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -17080,7 +15953,6 @@ "functionType": "Action", "group": "Shield", "name": "ActivateShield", - "private": false, "sentence": "Activate (or renew) shield on _PARAM0_", "events": [ { @@ -17112,22 +15984,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Shield", "type": "behavior" } @@ -17140,7 +16003,6 @@ "functionType": "Action", "group": "Shield", "name": "SetMaxShieldPoints", - "private": false, "sentence": "Set max shield of _PARAM0_ to _PARAM2_ points", "events": [ { @@ -17163,33 +16025,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Shield", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Shield points", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -17201,7 +16049,6 @@ "functionType": "Action", "group": "Shield", "name": "ShieldBlockExcessDamage", - "private": false, "sentence": "Shield on _PARAM0_ blocks excess damage when it breaks: _PARAM2_", "events": [ { @@ -17248,33 +16095,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Shield", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Shield blocks excess damage", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "yesorno" } ], @@ -17286,7 +16119,6 @@ "functionType": "Action", "group": "Shield", "name": "RegenShieldWhenZero", - "private": false, "sentence": "Regenerate shield on _PARAM0_ when it has zero points: _PARAM2_", "events": [ { @@ -17333,33 +16165,19 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Shield", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Regen shield when it has zero points", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "yesorno" } ], @@ -17371,7 +16189,6 @@ "functionType": "Condition", "group": "Shield", "name": "IsShieldJustDamaged", - "private": false, "sentence": "Shield on _PARAM0_ has just been damaged", "events": [ { @@ -17415,22 +16232,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Shield", "type": "behavior" } @@ -17443,7 +16251,6 @@ "functionType": "Condition", "group": "Shield", "name": "IsShieldActive", - "private": false, "sentence": "Shield on _PARAM0_ is active", "events": [ { @@ -17571,22 +16378,13 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Shield", "type": "behavior" } @@ -17599,7 +16397,6 @@ "functionType": "Expression", "group": "Shield", "name": "MaxShield", - "private": false, "sentence": "", "events": [ { @@ -17617,24 +16414,18 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Shield", "type": "behavior" } @@ -17647,7 +16438,6 @@ "functionType": "Expression", "group": "Shield", "name": "ShieldDuration", - "private": false, "sentence": "", "events": [ { @@ -17665,24 +16455,18 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Shield", "type": "behavior" } @@ -17695,7 +16479,6 @@ "functionType": "Expression", "group": "Shield", "name": "ShieldRegenDelay", - "private": false, "sentence": "", "events": [ { @@ -17713,24 +16496,18 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Shield", "type": "behavior" } @@ -17743,7 +16520,6 @@ "functionType": "Expression", "group": "Shield", "name": "ShieldRegenRate", - "private": false, "sentence": "", "events": [ { @@ -17761,24 +16537,18 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Shield", "type": "behavior" } @@ -17791,7 +16561,6 @@ "functionType": "Expression", "group": "Shield", "name": "ShieldTimeRemaining", - "private": false, "sentence": "", "events": [ { @@ -17835,24 +16604,18 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Shield", "type": "behavior" } @@ -17865,7 +16628,6 @@ "functionType": "Expression", "group": "Shield", "name": "ShieldPoints", - "private": false, "sentence": "", "events": [ { @@ -17883,24 +16645,18 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, - "supplementaryInformation": "", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "Health::Shield", "type": "behavior" } @@ -18001,7 +16757,8 @@ "hidden": true, "name": "IsShieldJustDamaged" } - ] + ], + "sharedPropertyDescriptors": [] } ], "eventsBasedObjects": [] @@ -18009,7 +16766,6 @@ { "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", "category": "General", - "description": "How to use:\n- \n\nTips:\n- ", "extensionNamespace": "", "fullName": "Draw resource bar (NEW)", "helpPath": "", @@ -18018,6 +16774,7 @@ "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Glyphster Pack/Master/SVG/Interface Elements/Interface Elements_interface_ui_loading_progress_bar.svg", "shortDescription": "Draw a resource bar that represents health, shield, or any value.", "version": "0.0.1", + "description": "How to use:\n- \n\nTips:\n- ", "origin": { "identifier": "DraggableSliderControl", "name": "gdevelop-extension-store" @@ -18044,12 +16801,9 @@ "objectType": "PrimitiveDrawing::Drawer", "eventsFunctions": [ { - "description": "", "fullName": "", "functionType": "Action", - "group": "", "name": "onCreated", - "private": false, "sentence": "", "events": [ { @@ -18129,22 +16883,14 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBar::DrawResourceBar", "type": "behavior" } @@ -18152,12 +16898,9 @@ "objectGroups": [] }, { - "description": "", "fullName": "", "functionType": "Action", - "group": "", "name": "doStepPostEvents", - "private": false, "sentence": "", "events": [ { @@ -18551,22 +17294,14 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBar::DrawResourceBar", "type": "behavior" } @@ -18579,7 +17314,6 @@ "functionType": "Expression", "group": "Bar", "name": "Value", - "private": false, "sentence": "", "events": [ { @@ -18597,24 +17331,19 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBar::DrawResourceBar", "type": "behavior" } @@ -18627,7 +17356,6 @@ "functionType": "Action", "group": "Resource Bar", "name": "SetValue", - "private": false, "sentence": "Change the value of _PARAM0_: _PARAM2_", "events": [ { @@ -18789,33 +17517,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Resource bar value", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -18827,7 +17542,6 @@ "functionType": "Expression", "group": "Value configuration", "name": "ValueMin", - "private": false, "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ { @@ -18845,24 +17559,19 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBar::DrawResourceBar", "type": "behavior" } @@ -18875,7 +17584,6 @@ "functionType": "Action", "group": "Value configuration", "name": "SetValueMin", - "private": false, "sentence": "Change the minimum value of _PARAM0_: _PARAM2_", "events": [ { @@ -18909,33 +17617,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Minimum value", - "longDescription": "", "name": "ValueMin", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -18947,7 +17642,6 @@ "functionType": "Expression", "group": "Value configuration", "name": "ValueMax", - "private": false, "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ { @@ -18965,24 +17659,19 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBar::DrawResourceBar", "type": "behavior" } @@ -18995,7 +17684,6 @@ "functionType": "Expression", "group": "Bar configuration", "name": "BarThickness", - "private": false, "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ { @@ -19013,24 +17701,19 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBar::DrawResourceBar", "type": "behavior" } @@ -19043,7 +17726,6 @@ "functionType": "Expression", "group": "Bar configuration", "name": "BarLength", - "private": false, "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ { @@ -19061,24 +17743,19 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBar::DrawResourceBar", "type": "behavior" } @@ -19091,7 +17768,6 @@ "functionType": "Action", "group": "Bar value configuration", "name": "SetValueMax", - "private": false, "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ { @@ -19125,33 +17801,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Maximum value", - "longDescription": "", "name": "ValueMax", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -19163,7 +17826,6 @@ "functionType": "Expression", "group": "Value configuration", "name": "TickSpacing", - "private": false, "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", "events": [ { @@ -19181,35 +17843,25 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Tick spacing", - "longDescription": "", "name": "TickSpacing", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -19221,7 +17873,6 @@ "functionType": "Action", "group": "Value configuration", "name": "SetTickSpacing", - "private": false, "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", "events": [ { @@ -19255,33 +17906,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Tick spacing", - "longDescription": "", "name": "TickSpacing", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -19293,7 +17931,6 @@ "functionType": "Action", "group": "Bar configuration", "name": "SetBarLength", - "private": false, "sentence": "Change bar length of _PARAM0_ to _PARAM2_ px", "events": [ { @@ -19366,33 +18003,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Track width", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -19404,7 +18028,6 @@ "functionType": "Action", "group": "Bar configuration", "name": "SetBarThickness", - "private": false, "sentence": "Change the bar thickness of _PARAM0_ to _PARAM2_ px", "events": [ { @@ -19508,33 +18131,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Track thickness", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -19546,7 +18156,6 @@ "functionType": "Action", "group": "Bar configuration", "name": "SetRoundedBar", - "private": false, "sentence": "Draw _PARAM0_ with a rounded bar: _PARAM2_", "events": [ { @@ -19622,33 +18231,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Rounded bar", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "yesorno" } ], @@ -19660,7 +18256,6 @@ "functionType": "Action", "group": "Bar configuration", "name": "SetInactiveBarOpacity", - "private": false, "sentence": "Change inactive bar opacity of _PARAM0_ to _PARAM2_", "events": [ { @@ -19693,33 +18288,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Inactive bar opacity", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -19731,7 +18313,6 @@ "functionType": "Action", "group": "Bar configuration", "name": "SetActiveBarOpacity", - "private": false, "sentence": "Change active bar opacity of _PARAM0_ to _PARAM2_", "events": [ { @@ -19764,33 +18345,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Active bar opacity", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -19802,7 +18370,6 @@ "functionType": "Action", "group": "Bar configuration", "name": "SetActiveBarColor", - "private": false, "sentence": "Change active bar color of _PARAM0_ to _PARAM2_", "events": [ { @@ -19835,33 +18402,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Active bar color", - "longDescription": "", "name": "Color", - "optional": false, - "supplementaryInformation": "", "type": "color" } ], @@ -19873,7 +18427,6 @@ "functionType": "Action", "group": "Bar configuration", "name": "SetInactiveBarColor", - "private": false, "sentence": "Change inactive bar color of _PARAM0_ to _PARAM2_", "events": [ { @@ -19906,33 +18459,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Inactive bar color", - "longDescription": "", "name": "Color", - "optional": false, - "supplementaryInformation": "", "type": "color" } ], @@ -19978,22 +18518,14 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBar::DrawResourceBar", "type": "behavior" } @@ -20004,9 +18536,7 @@ "description": "Draw health bar.", "fullName": "Draw health bar", "functionType": "Action", - "group": "", "name": "DrawHealthBar", - "private": false, "sentence": "Draw health bar with _PARAM0_ based on health of _PARAM2_", "events": [ { @@ -20053,42 +18583,25 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Object with health", - "longDescription": "", "name": "ObjectWithHealth", - "optional": false, - "supplementaryInformation": "", "type": "objectList" }, { - "codeOnly": false, - "defaultValue": "", "description": "Health behavior", - "longDescription": "", "name": "HealthBehavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" } @@ -20099,9 +18612,7 @@ "description": "Draw shield bar.", "fullName": "Draw shield bar", "functionType": "Action", - "group": "", "name": "DrawShieldBar", - "private": false, "sentence": "Draw shield bar with _PARAM0_ based on shield of _PARAM2_", "events": [ { @@ -20148,42 +18659,25 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Object with shield", - "longDescription": "", "name": "ObjectWithShield", - "optional": false, - "supplementaryInformation": "", "type": "objectList" }, { - "codeOnly": false, - "defaultValue": "", "description": "Shield behavior", - "longDescription": "", "name": "ShieldBehavior", - "optional": false, "supplementaryInformation": "Health::Shield", "type": "behavior" } @@ -20194,9 +18688,7 @@ "description": "Draw resource bar.", "fullName": "Draw resource bar", "functionType": "Action", - "group": "", "name": "DrawResourceBar", - "private": false, "sentence": "Draw resource bar with _PARAM0_ with current value _PARAM2_ and max value _PARAM3_", "events": [ { @@ -20243,42 +18735,25 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBar::DrawResourceBar", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Current value", - "longDescription": "", "name": "CurrentValue", - "optional": false, - "supplementaryInformation": "", "type": "expression" }, { - "codeOnly": false, - "defaultValue": "", "description": "Max value", - "longDescription": "", "name": "MaxValue", - "optional": false, "supplementaryInformation": "Health::Health", "type": "expression" } @@ -20427,7 +18902,8 @@ "hidden": false, "name": "ChangeDuration" } - ] + ], + "sharedPropertyDescriptors": [] } ], "eventsBasedObjects": [] @@ -20435,7 +18911,6 @@ { "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", "category": "Input", - "description": "Draws a draggable slider that users can move to select a numerical value.\nThe value range, tick spacing, and the appearance of the slider can be defined with properties.\n\nHow to use:\n- Add this behavior a **Shape Painter** object\n- Place an instance of that shape painter on the screen where you want the slider to appear\n- Use the \"Value\" expression to find the Value based on the position of the slider\n\nTips:\n- You can disable the slider to prevent a user from interacting with it\n- You can set the Value of the slider and the slider will move to the correct position\n\nFurther details can be found in [this tutorial video](https://youtu.be/iiTUwdAT_hs).\n\nBreaking changes (1.0.0)\n- Track thickness and length properties replaced track width and height. These 2 properties must be set again if they were different from the default size.\n- Hidden sliders can be dragged. The \"enable\" action must be used to disable them.\n", "extensionNamespace": "", "fullName": "Draggable slider", "helpPath": "", @@ -20444,6 +18919,7 @@ "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/UI Essentials/UI Essentials_sliders_options.svg", "shortDescription": "A draggable slider that users can move to select a numerical value.", "version": "1.0.5", + "description": "Draws a draggable slider that users can move to select a numerical value.\nThe value range, tick spacing, and the appearance of the slider can be defined with properties.\n\nHow to use:\n- Add this behavior a **Shape Painter** object\n- Place an instance of that shape painter on the screen where you want the slider to appear\n- Use the \"Value\" expression to find the Value based on the position of the slider\n\nTips:\n- You can disable the slider to prevent a user from interacting with it\n- You can set the Value of the slider and the slider will move to the correct position\n\nFurther details can be found in [this tutorial video](https://youtu.be/iiTUwdAT_hs).\n\nBreaking changes (1.0.0)\n- Track thickness and length properties replaced track width and height. These 2 properties must be set again if they were different from the default size.\n- Hidden sliders can be dragged. The \"enable\" action must be used to disable them.\n", "origin": { "identifier": "DraggableSliderControl", "name": "gdevelop-extension-store" @@ -20469,12 +18945,9 @@ "objectType": "PrimitiveDrawing::Drawer", "eventsFunctions": [ { - "description": "", "fullName": "", "functionType": "Action", - "group": "", "name": "onCreated", - "private": false, "sentence": "", "events": [ { @@ -20614,22 +19087,14 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" } @@ -20637,12 +19102,9 @@ "objectGroups": [] }, { - "description": "", "fullName": "", "functionType": "Action", - "group": "", "name": "doStepPreEvents", - "private": false, "sentence": "", "events": [ { @@ -21274,22 +19736,14 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" } @@ -21297,12 +19751,9 @@ "objectGroups": [] }, { - "description": "", "fullName": "", "functionType": "Action", - "group": "", "name": "doStepPostEvents", - "private": false, "sentence": "", "events": [ { @@ -22028,22 +20479,14 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" } @@ -22056,7 +20499,6 @@ "functionType": "Condition", "group": "Slider", "name": "IsBeingDragged", - "private": false, "sentence": "_PARAM0_ is being dragged", "events": [ { @@ -22086,22 +20528,14 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" } @@ -22114,7 +20548,6 @@ "functionType": "Condition", "group": "Slider", "name": "IsEnabled", - "private": false, "sentence": "Interactions of _PARAM0_ are enabled", "events": [ { @@ -22144,22 +20577,14 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" } @@ -22172,7 +20597,6 @@ "functionType": "Action", "group": "Slider", "name": "SetEnabled", - "private": false, "sentence": "Enable interactions of _PARAM0_: _PARAM2_", "events": [ { @@ -22306,33 +20730,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Enable", - "longDescription": "", "name": "Enable", - "optional": false, - "supplementaryInformation": "", "type": "yesorno" } ], @@ -22344,7 +20755,6 @@ "functionType": "Expression", "group": "Slider", "name": "Value", - "private": false, "sentence": "", "events": [ { @@ -22362,24 +20772,19 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" } @@ -22392,7 +20797,6 @@ "functionType": "Action", "group": "Slider", "name": "SetValue", - "private": false, "sentence": "Change the value of _PARAM0_: _PARAM2_", "events": [ { @@ -22554,33 +20958,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Slider value", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -22592,7 +20983,6 @@ "functionType": "Expression", "group": "Slider value configuration", "name": "ValueMin", - "private": false, "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ { @@ -22610,24 +21000,19 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" } @@ -22640,7 +21025,6 @@ "functionType": "Action", "group": "Slider value configuration", "name": "SetValueMin", - "private": false, "sentence": "Change the minimum value of _PARAM0_: _PARAM2_", "events": [ { @@ -22674,33 +21058,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Minimum value", - "longDescription": "", "name": "ValueMin", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -22712,7 +21083,6 @@ "functionType": "Expression", "group": "Slider value configuration", "name": "ValueMax", - "private": false, "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ { @@ -22730,24 +21100,19 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" } @@ -22760,7 +21125,6 @@ "functionType": "Expression", "group": "Slider track configuration", "name": "TrackThickness", - "private": false, "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ { @@ -22778,24 +21142,19 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" } @@ -22808,7 +21167,6 @@ "functionType": "Expression", "group": "Slider track configuration", "name": "TrackLength", - "private": false, "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ { @@ -22826,24 +21184,19 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" } @@ -22856,7 +21209,6 @@ "functionType": "Expression", "group": "Slider thumb configuration", "name": "ThumbHeight", - "private": false, "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ { @@ -22874,24 +21226,19 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" } @@ -22904,7 +21251,6 @@ "functionType": "Action", "group": "Slider value configuration", "name": "SetValueMax", - "private": false, "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ { @@ -22938,33 +21284,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Maximum value", - "longDescription": "", "name": "ValueMax", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -22976,7 +21309,6 @@ "functionType": "Expression", "group": "Slider value configuration", "name": "TickSpacing", - "private": false, "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", "events": [ { @@ -22994,35 +21326,25 @@ ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Tick spacing", - "longDescription": "", "name": "TickSpacing", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -23034,7 +21356,6 @@ "functionType": "Action", "group": "Slider value configuration", "name": "SetTickSpacing", - "private": false, "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", "events": [ { @@ -23068,33 +21389,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Tick spacing", - "longDescription": "", "name": "TickSpacing", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -23106,7 +21414,6 @@ "functionType": "Action", "group": "Slider track configuration", "name": "SetTrackLength", - "private": false, "sentence": "Change track length of _PARAM0_ to _PARAM2_ px", "events": [ { @@ -23179,33 +21486,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Track width", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -23217,7 +21511,6 @@ "functionType": "Action", "group": "Slider track configuration", "name": "SetTrackThickness", - "private": false, "sentence": "Change track thickness of _PARAM0_ to _PARAM2_ px", "events": [ { @@ -23321,33 +21614,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Track thickness", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -23359,7 +21639,6 @@ "functionType": "Action", "group": "Slider thumb configuration", "name": "SetThumbWidth", - "private": false, "sentence": "Change thumb width of _PARAM0_ to _PARAM2_ px", "events": [ { @@ -23421,33 +21700,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Thumb width", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -23459,7 +21725,6 @@ "functionType": "Action", "group": "Slider thumb configuration", "name": "SetThumbHeight", - "private": false, "sentence": "Change thumb height of _PARAM0_ to _PARAM2_ px", "events": [ { @@ -23521,33 +21786,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Thumb height", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -23559,7 +21811,6 @@ "functionType": "Action", "group": "Slider thumb configuration", "name": "SetHaloRadius", - "private": false, "sentence": "Change halo radius of _PARAM0_ to _PARAM2_ px", "events": [ { @@ -23592,33 +21843,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Halo radius", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -23630,7 +21868,6 @@ "functionType": "Action", "group": "Slider thumb configuration", "name": "SetHaloOpacityHover", - "private": false, "sentence": "Change halo opacity when hovered of _PARAM0_ to _PARAM2_ px", "events": [ { @@ -23663,33 +21900,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Halo opacity (hover)", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -23701,7 +21925,6 @@ "functionType": "Action", "group": "Slider thumb configuration", "name": "SetHaloOpacityPressed", - "private": false, "sentence": "Change halo opacity when pressed of _PARAM0_ to _PARAM2_ px", "events": [ { @@ -23734,33 +21957,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Halo opacity (pressed)", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -23772,7 +21982,6 @@ "functionType": "Action", "group": "Slider thumb configuration", "name": "SetThumbShape", - "private": false, "sentence": "Change shape of _PARAM0_ to _PARAM2_", "events": [ { @@ -23858,32 +22067,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "New thumb shape", - "longDescription": "", "name": "Shape", - "optional": false, "supplementaryInformation": "[\"circle\",\"rectangle\"]", "type": "stringWithSelector" } @@ -23896,7 +22093,6 @@ "functionType": "Action", "group": "Slider track configuration", "name": "SetRoundedTrack", - "private": false, "sentence": "Draw _PARAM0_ with a rounded track: _PARAM2_", "events": [ { @@ -23972,33 +22168,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Rounded track", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "yesorno" } ], @@ -24010,7 +22193,6 @@ "functionType": "Action", "group": "Slider thumb configuration", "name": "SetThumbOpacity", - "private": false, "sentence": "Change thumb opacity of _PARAM0_ to _PARAM2_", "events": [ { @@ -24043,33 +22225,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Thumb opacity", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -24081,7 +22250,6 @@ "functionType": "Action", "group": "Slider track configuration", "name": "SetInactiveTrackOpacity", - "private": false, "sentence": "Change inactive track opacity of _PARAM0_ to _PARAM2_", "events": [ { @@ -24114,33 +22282,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Inactive track opacity", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -24152,7 +22307,6 @@ "functionType": "Action", "group": "Slider track configuration", "name": "SetActiveTrackOpacity", - "private": false, "sentence": "Change active track opacity of _PARAM0_ to _PARAM2_", "events": [ { @@ -24185,33 +22339,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Active track opacity", - "longDescription": "", "name": "Value", - "optional": false, - "supplementaryInformation": "", "type": "expression" } ], @@ -24223,7 +22364,6 @@ "functionType": "Action", "group": "Slider track configuration", "name": "SetActiveTrackColor", - "private": false, "sentence": "Change active track color of _PARAM0_ to _PARAM2_", "events": [ { @@ -24256,33 +22396,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Active track color", - "longDescription": "", "name": "Color", - "optional": false, - "supplementaryInformation": "", "type": "color" } ], @@ -24294,7 +22421,6 @@ "functionType": "Action", "group": "Slider track configuration", "name": "SetInactiveTrackColor", - "private": false, "sentence": "Change inactive track color of _PARAM0_ to _PARAM2_", "events": [ { @@ -24327,33 +22453,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Inactive track color", - "longDescription": "", "name": "Color", - "optional": false, - "supplementaryInformation": "", "type": "color" } ], @@ -24365,7 +22478,6 @@ "functionType": "Action", "group": "Slider thumb configuration", "name": "SetThumbColor", - "private": false, "sentence": "Change thumb color of _PARAM0_ to _PARAM2_", "events": [ { @@ -24397,33 +22509,20 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Thumb color", - "longDescription": "", "name": "Color", - "optional": false, - "supplementaryInformation": "", "type": "color" } ], @@ -24469,22 +22568,14 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" } @@ -24786,7 +22877,8 @@ "hidden": true, "name": "TargetHaloRadius" } - ] + ], + "sharedPropertyDescriptors": [] } ], "eventsBasedObjects": [] @@ -24794,7 +22886,6 @@ { "author": "", "category": "General", - "description": "\nTo adjust the appearance of the resource bar, edit the Draggable Slider properties. The shape painter appearance settings will be overwritten by the Draggable Slider.", "extensionNamespace": "", "fullName": "Draw resource bar (health, shield, etc) OLD", "helpPath": "", @@ -24803,6 +22894,7 @@ "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Glyphster Pack/Master/SVG/Interface Elements/Interface Elements_interface_ui_loading_progress_bar.svg", "shortDescription": "Draw a bar that displays a resource like health, shield, or any value.", "version": "0.0.1", + "description": "\nTo adjust the appearance of the resource bar, edit the Draggable Slider properties. The shape painter appearance settings will be overwritten by the Draggable Slider.", "tags": [], "authorIds": [ "gqDaZjCfevOOxBYkK6zlhtZnXCg1" @@ -24820,9 +22912,7 @@ "description": "Draw health bar.", "fullName": "Draw health bar", "functionType": "Action", - "group": "", "name": "DrawHealthBar", - "private": false, "sentence": "Draw health bar with _PARAM0_ based on health of _PARAM2_", "events": [ { @@ -24869,42 +22959,25 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBarOLD::DrawResourceBarOLD", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Object with health", - "longDescription": "", "name": "ObjectWithHealth", - "optional": false, - "supplementaryInformation": "", "type": "objectList" }, { - "codeOnly": false, - "defaultValue": "", "description": "Health behavior", - "longDescription": "", "name": "HealthBehavior", - "optional": false, "supplementaryInformation": "Health::Health", "type": "behavior" } @@ -24915,9 +22988,7 @@ "description": "Draw shield bar.", "fullName": "Draw shield bar", "functionType": "Action", - "group": "", "name": "DrawShieldBar", - "private": false, "sentence": "Draw shield bar with _PARAM0_ based on shield of _PARAM2_", "events": [ { @@ -24964,42 +23035,25 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBarOLD::DrawResourceBarOLD", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Object with shield", - "longDescription": "", "name": "ObjectWithShield", - "optional": false, - "supplementaryInformation": "", "type": "objectList" }, { - "codeOnly": false, - "defaultValue": "", "description": "Shield behavior", - "longDescription": "", "name": "ShieldBehavior", - "optional": false, "supplementaryInformation": "Health::Shield", "type": "behavior" } @@ -25010,9 +23064,7 @@ "description": "Draw resource bar.", "fullName": "Draw resource bar", "functionType": "Action", - "group": "", "name": "DrawResourceBar", - "private": false, "sentence": "Draw resource bar with _PARAM0_ with current value _PARAM2_ and max value _PARAM3_", "events": [ { @@ -25059,42 +23111,25 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBarOLD::DrawResourceBarOLD", "type": "behavior" }, { - "codeOnly": false, - "defaultValue": "", "description": "Current value", - "longDescription": "", "name": "CurrentValue", - "optional": false, - "supplementaryInformation": "", "type": "expression" }, { - "codeOnly": false, - "defaultValue": "", "description": "Max value", - "longDescription": "", "name": "MaxValue", - "optional": false, "supplementaryInformation": "Health::Health", "type": "expression" } @@ -25102,12 +23137,9 @@ "objectGroups": [] }, { - "description": "", "fullName": "", "functionType": "Action", - "group": "", "name": "onCreated", - "private": false, "sentence": "", "events": [ { @@ -25187,22 +23219,14 @@ ], "parameters": [ { - "codeOnly": false, - "defaultValue": "", "description": "Object", - "longDescription": "", "name": "Object", - "optional": false, "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { - "codeOnly": false, - "defaultValue": "", "description": "Behavior", - "longDescription": "", "name": "Behavior", - "optional": false, "supplementaryInformation": "DrawResourceBarOLD::DrawResourceBarOLD", "type": "behavior" } @@ -25233,7 +23257,8 @@ "hidden": false, "name": "ChangeDuration" } - ] + ], + "sharedPropertyDescriptors": [] } ], "eventsBasedObjects": [] From f6e3616e27df477fde72a3e39b1481c2b13e740b Mon Sep 17 00:00:00 2001 From: Tristan Rhodes Date: Mon, 14 Nov 2022 23:46:37 -0700 Subject: [PATCH 15/98] Updated default empty opacity to 64 --- examples/resource-bar/game.json | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index e8e87284b..4f00238d8 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -2613,9 +2613,10 @@ "UnitSpacing": 0, "NextUnitToCreate": 0, "HideEmptyUnits": false, - "EmptyUnitOpacity": 255, + "EmptyUnitOpacity": 64, "EmptyUnitAnimation": 0, - "EmptyColorTint": "255;255;255" + "EmptyColorTint": "255;255;255", + "ActiveUnitOpacity": 255 } ], "animations": [ @@ -2857,6 +2858,7 @@ ] }, { + "disabled": true, "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ @@ -3539,7 +3541,7 @@ "parameters": [ "Unit_ResourceBar", "UnitResourceBar", - "0", + "64", "" ] } @@ -5591,7 +5593,7 @@ "Object", "Behavior", "=", - "Object.Behavior::PropertyStartingUnits()" + "Object.Behavior::PropertyStartingQuantity()" ] } ] @@ -5884,7 +5886,7 @@ "textG": 0, "textR": 0 }, - "comment": "Only apply color if it has change from default value", + "comment": "Only apply color if it has changed from default value", "comment2": "" }, { @@ -6212,7 +6214,7 @@ "type": "behavior" }, { - "description": "Opacity of empty units", + "description": "Opacity of active units", "longDescription": "Range: 0 to 255", "name": "Opacity", "type": "expression" @@ -6459,7 +6461,7 @@ "group": "", "extraInformation": [], "hidden": false, - "name": "StartingUnits" + "name": "StartingQuantity" }, { "value": "", @@ -6468,11 +6470,11 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, + "hidden": true, "name": "CurrentQuantity" }, { - "value": "0", + "value": "10", "type": "Number", "label": "Maximum quantity (Use \"0\" for unlimited)", "description": "", @@ -6502,7 +6504,7 @@ "name": "EmptyUnitColorTint" }, { - "value": "0", + "value": "64", "type": "Number", "label": "Opacity of empty units (Range: 0 to 255)", "description": "Empty units exist between the current and maximum value.", @@ -6512,7 +6514,7 @@ "name": "EmptyUnitOpacity" }, { - "value": "", + "value": "0", "type": "Number", "label": "Animation number for empty units", "description": "", From 9b412872122018efe3c64a27e1fbfc20ab58a646 Mon Sep 17 00:00:00 2001 From: Tristan Rhodes Date: Thu, 17 Nov 2022 22:25:03 -0700 Subject: [PATCH 16/98] Started unifying wording between behaviors TODO: Change "value" to "quantity" everywhere? --- .../resource-bar/assets/Health Bar Box.png | Bin 0 -> 2983 bytes examples/resource-bar/assets/Health Bar.png | Bin 0 -> 1465 bytes .../Health Indicator_Black Outline Empty.png | Bin 0 -> 109 bytes .../Health Indicator_Black Outline Heart.png | Bin 0 -> 185 bytes .../Health Indicator_White Outline Empty.png | Bin 0 -> 110 bytes .../Health Indicator_White Outline Heart.png | Bin 0 -> 171 bytes examples/resource-bar/assets/Heart.png | Bin 0 -> 372 bytes .../assets/tiled_Energy Bar Fill.png | Bin 0 -> 2836 bytes .../assets/tiled_Health Bar Fill.png | Bin 0 -> 2849 bytes examples/resource-bar/game.json | 9066 +++++++++++++++-- 10 files changed, 8459 insertions(+), 607 deletions(-) create mode 100644 examples/resource-bar/assets/Health Bar Box.png create mode 100644 examples/resource-bar/assets/Health Bar.png create mode 100644 examples/resource-bar/assets/Health Indicator_Black Outline Empty.png create mode 100644 examples/resource-bar/assets/Health Indicator_Black Outline Heart.png create mode 100644 examples/resource-bar/assets/Health Indicator_White Outline Empty.png create mode 100644 examples/resource-bar/assets/Health Indicator_White Outline Heart.png create mode 100644 examples/resource-bar/assets/Heart.png create mode 100644 examples/resource-bar/assets/tiled_Energy Bar Fill.png create mode 100644 examples/resource-bar/assets/tiled_Health Bar Fill.png diff --git a/examples/resource-bar/assets/Health Bar Box.png b/examples/resource-bar/assets/Health Bar Box.png new file mode 100644 index 0000000000000000000000000000000000000000..e02e8033917d6f3c47c281eff86506bb9d0ecda3 GIT binary patch literal 2983 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Health Bar.png b/examples/resource-bar/assets/Health Bar.png new file mode 100644 index 0000000000000000000000000000000000000000..1d75d85c697c830eae1fadc3229b57ac0f72437d GIT binary patch literal 1465 zcmV;q1xEUbP) zy>8n;499te-y=h&B3lvzSu)uVktuW02P!&e%0swQ76Y!k8J#@zNz@^xLeqDr`~Fb) z0|LjgEDF+JLq1&?!nORr?$SHx>W@cguC{^9TYT5)oYcEbyP*k8d^4!;9ng z0018k$S@4U-Eyq}0RH^`Rqw(n3JKR4G8HvjQGl-o%W06xIMu2!_DZ;guWQtHrU?L3GU)c zCvn+4SSisxy}XUv_qz?;E!RrIXM2ooG;C1&2rh(Fo=H4gUl@C9rv~=fHW$&+P&!47 zSkRNbK0l8Ci$`mhh3NyOl;YlP`TZvVm<2~W1sGaUbT(1Z@aGD41cW{?3Jt&{<0LdhDWy*7kRW5| z)u=dP!lrn_ez1m44iBNJpkl+uy-7sk!TQ9hMraaPNa};wbH`Djq(y30Ymk+(iH`bxhvF^f`VEzFwq+hXe2{*}0;-54=nVP`0gR%%kCr zzkaxJ76JW^iBJ*uh|73BzF!JL?pY?U5?j2yRzW`+%(g{4At>l9#Y`CUe_r8>}2DpX{yx1R!X`MnvReQ81jVoZbv+t2lRrvl)1!CdvqZ*fXlXtPuAOa-#OW7g(ecV zp<~c|GvuMn%}x!f3oWLcVjD2YpZL#erxmJ)&e#xOYU8B75p%Osn(7|S7yguUFJRmM zGux?6b&nQ`E~B2~Cd|!FExPk)2yNr!Y`@IS4iZvxj-d&mr5=fpVkXrb?3miWr5DHE z?>6;?rt4w(ejgzJu$dn1n95WoCk5d`K-GoD6PJju086!JTDIdd3(fWTQ_IHs&Vi^d zG>-51Ea3y+!hUQtv4NfpC&CmR^oZlp=qli@lU77@m-u)vfb%u!T(76E=b{1wfN{1} zF^}dm=rQM$HYapx5MS{DOfS`d+iil=35e)=~Ho*&BOmaP?w* z#ZNj5p3_VlP1dt*1HRz34xPXNF1;9~n$S!OG50dJv?qKXUYGEQaDmaN#TSyP?$Pih zF;m^^FYUFAZK+mQsK|IjUkBe_RcN$>zy&9qKXg-T`TB=2* zsV9rcQ~LHgizaM^I8us?zJ`Ea5d}vVWInyW5S)0l2GNC1N{U=#%BqV?+Cw~AhuC_b zHOh9}!|4#Ab%LuG%RMT?W{>{HJ-|mORZ6LD=L~!{O!+X{=F-i8&y9<{+xwNY(OM&B zC{=6F#hJyUH46Q?$~n}3rH$4YnC#?LlHSE8p|e4#$mTHEV87dl&{{?(xL)}W T$@q^D00000NkvXXu0mjfO{dZo literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Health Indicator_Black Outline Empty.png b/examples/resource-bar/assets/Health Indicator_Black Outline Empty.png new file mode 100644 index 0000000000000000000000000000000000000000..0c83dbc508227982f0aebae1cc1827989c3a1aaa GIT binary patch literal 109 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqEa{HEjtmSN`)Ym%P6qN-JY5_^ zB&H_+`TyUZ+3r9~__P#OqeY+or@B1-|2U+9*Wl8NOZ;s)By;OXk;vd$@?2>{4|N;?1m literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Health Indicator_White Outline Empty.png b/examples/resource-bar/assets/Health Indicator_White Outline Empty.png new file mode 100644 index 0000000000000000000000000000000000000000..87a2eb04fd09be56c5e112f03d3ee3161823cc8f GIT binary patch literal 110 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqEa{HEjtmSN`)Ym%P6qN-JzX3_ zB&H_+`TyUZ+3r9~__P$(|NClx{eORZ`F{)11m>PCUftDnm{ Hr-UW|SBxat literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Health Indicator_White Outline Heart.png b/examples/resource-bar/assets/Health Indicator_White Outline Heart.png new file mode 100644 index 0000000000000000000000000000000000000000..88f175a130c4bdd48a53b1165b2edaebb84bc8ee GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^93afW1|*O0@9PFqEa{HEjtmSN`)Ym%P6qOmJY5_^ zB&H_+`TyUZ+3o;K@}J+|UjE;oKmXt2&65BA|3ClX`|IQX`?D%45QhI$ktP+Dlow7Ks9Kd8mGudN{1)TmV||1mKS5bhXw|A9QZzJP5>#o(1KoM& z^Tmq#OHpF`{NI<8eFgrs-fY3-*>?e5NzD0lj3=0>2Y}C)SqOOl>16^B0Eguw#O$u$ z2?RHeOy6Gr&G}|-sI8MH87HJ<-gbSGWV)J1>IT60lR;{`$2q6-?yPwj=Pt)s^0w=f zi&WBxGI4UEk%{=cB(3TO&KfVTv`Vhg%Mw8Ji;@RBYeHj@HJ9{~6o9YlCiIHPm@gpi zURjBKsWF#U^8r#gYrHhqYAiKGuJ&oFv3fzM*3KI5tdVrlct~T2qhwk=HR4~z&XiI! Sb9t2j0000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0000#NklKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0000?Nkls#ET2YWczDM!>u3y*dU({sqaGgh@TiAJJv{2+ zQ4iCmrS3w8pFdH00000|NjF3m!t<+*EhhG00000NkvXXu0mjfN!&=4 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 4f00238d8..878e3f075 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -1187,6 +1187,123 @@ "identifier": "https://resources.gdevelop-app.com/assets/16x16 Dungeon Tileset/UI/tiled_Tiled Filler UI Heart.png", "name": "gdevelop-asset-store" } + }, + { + "alwaysLoaded": false, + "file": "assets/Health Bar.png", + "kind": "image", + "metadata": "", + "name": "Health Bar.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Pirate Bomb Pack/Objects/Health Bar/Health Bar.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/tiled_Health Bar Fill.png", + "kind": "image", + "metadata": "", + "name": "tiled_Health Bar Fill.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Space Shooter by Pixel boy/Hud/tiled_Health Bar Fill.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/tiled_Energy Bar Fill.png", + "kind": "image", + "metadata": "", + "name": "tiled_Energy Bar Fill.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Space Shooter by Pixel boy/Hud/tiled_Energy Bar Fill.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Health Bar Box.png", + "kind": "image", + "metadata": "", + "name": "Health Bar Box.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Western FPS 2D/Hud/Bar/Health Bar Box.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Health Indicator_Black Outline Empty.png", + "kind": "image", + "metadata": "", + "name": "Health Indicator_Black Outline Empty.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/GrafxKid Pack/Mini FX, Items & UI/Mini UI/Health Indicator_Black Outline Empty.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Health Indicator_Black Outline Heart.png", + "kind": "image", + "metadata": "", + "name": "Health Indicator_Black Outline Heart.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/GrafxKid Pack/Mini FX, Items & UI/Mini UI/Health Indicator_Black Outline Heart.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Health Indicator_White Outline Empty.png", + "kind": "image", + "metadata": "", + "name": "Health Indicator_White Outline Empty.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/GrafxKid Pack/Mini FX, Items & UI/Mini UI/Health Indicator_White Outline Empty.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Health Indicator_White Outline Heart.png", + "kind": "image", + "metadata": "", + "name": "Health Indicator_White Outline Heart.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/GrafxKid Pack/Mini FX, Items & UI/Mini UI/Health Indicator_White Outline Heart.png", + "name": "gdevelop-asset-store" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Heart.png", + "kind": "image", + "metadata": "", + "name": "Heart.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://resources.gdevelop-app.com/assets/Pirate Bomb Pack/Objects/Health Bar/Heart.png", + "name": "gdevelop-asset-store" + } } ], "resourceFolders": [] @@ -1198,8 +1315,8 @@ { "b": 0, "disableInputWhenNotFocused": true, - "mangledName": "Game", - "name": "Game", + "mangledName": "Game2", + "name": "Game2", "r": 0, "standardSortMethod": true, "stopSoundsOnStartup": true, @@ -1215,7 +1332,7 @@ "gridColor": 10401023, "gridAlpha": 0.2, "snap": true, - "zoomFactor": 1.1800000000000002, + "zoomFactor": 1.8600000000000008, "windowMask": false }, "objectsGroups": [], @@ -1388,18 +1505,123 @@ }, { "angle": 0, - "customSize": false, - "height": 0, + "customSize": true, + "height": 16, "layer": "", "name": "Tiled_ResourceBar", "persistentUuid": "be98771a-978f-443c-80e8-197098aef457", - "width": 0, + "width": 16, "x": 40, "y": 416, "zOrder": 15, "numberProperties": [], "stringProperties": [], "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 24, + "layer": "", + "name": "HealthBarBox", + "persistentUuid": "fddebf95-4d5f-40b5-a087-80bd8c33b68c", + "width": 98, + "x": 32, + "y": 360, + "zOrder": 16, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 16, + "layer": "", + "name": "HealthBarFill", + "persistentUuid": "1e7ce7cc-5104-4c95-95a0-343f3d97e140", + "width": 80, + "x": 41, + "y": 364, + "zOrder": 17, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 62, + "layer": "", + "name": "HealthBar", + "persistentUuid": "e57b54cd-d15f-45ae-91e7-56a12aaf0d2f", + "width": 368, + "x": 64, + "y": 288, + "zOrder": 18, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Heart", + "persistentUuid": "a45e39e0-8703-466e-9ece-c114c69b92bd", + "width": 0, + "x": 154, + "y": 309, + "zOrder": 19, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Heart", + "persistentUuid": "d575e256-78f3-4b72-8f11-1c0003d651ce", + "width": 0, + "x": 104, + "y": 309, + "zOrder": 19, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Heart", + "persistentUuid": "a6abf64b-8fa3-4d12-9bad-22314ac4a313", + "width": 0, + "x": 130, + "y": 309, + "zOrder": 19, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 62, + "layer": "", + "name": "NewPanelSprite", + "persistentUuid": "d0461165-f597-4574-b3e8-8e78014d1c61", + "width": 272, + "x": 168, + "y": 376, + "zOrder": 20, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] } ], "objects": [ @@ -1413,7 +1635,7 @@ "behaviors": [ { "name": "DrawResourceBar222", - "type": "ResourceBar::DrawResourceBar", + "type": "ResourceBar::ResourceBar_ShapePainter", "ValueMin": 0, "ValueMax": 1, "TickSpacing": 0, @@ -1455,7 +1677,7 @@ "behaviors": [ { "name": "DrawResourceBar", - "type": "ResourceBar::DrawResourceBar", + "type": "ResourceBar::ResourceBar_ShapePainter", "ValueMin": 0, "ValueMax": 1, "TickSpacing": 0, @@ -1501,7 +1723,7 @@ "behaviors": [ { "name": "DrawResourceBar222", - "type": "ResourceBar::DrawResourceBar", + "type": "ResourceBar::ResourceBar_ShapePainter", "ValueMin": 0, "ValueMax": 1, "TickSpacing": 0, @@ -1559,7 +1781,7 @@ "behaviors": [ { "name": "DrawResourceBar222", - "type": "ResourceBar::DrawResourceBar", + "type": "ResourceBar::ResourceBar_ShapePainter", "ValueMin": 0, "ValueMax": 1, "TickSpacing": 0, @@ -2606,7 +2828,7 @@ "behaviors": [ { "name": "UnitResourceBar", - "type": "ResourceBar::SpriteResourceBar", + "type": "ResourceBar::ResourceBar_Sprite", "StartingUnits": 3, "CurrentUnits": 3, "MaxUnits": 3, @@ -2702,7 +2924,16 @@ "width": 16, "variables": [], "effects": [], - "behaviors": [] + "behaviors": [ + { + "name": "TiledResourceBar", + "type": "ResourceBar::ResourceBar_TiledSprite", + "StartingQuantity": 0, + "CurrentQuantity": 0, + "UnitWidth": 16, + "MaxQuantity": 0 + } + ] }, { "assetStoreId": "abf51d082db5a117d9ee2e65299660f6787d47664e4571bad6db3075b3393c5f", @@ -2717,79 +2948,228 @@ "behaviors": [ { "name": "TiledResourceBar", - "type": "ResourceBar::TiledResourceBar", + "type": "ResourceBar::ResourceBar_TiledSprite", "StartingQuantity": 6, "CurrentQuantity": 0, "UnitWidth": 16 } ] - } - ], - "events": [ + }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Initialize game", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "assetStoreId": "45107bbfbc2b5cbc83e3785f802b99664a23d59e74414e332c9afafac63e1ca3", + "name": "HealthBar", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DepartScene" - }, - "parameters": [ - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "Opacity" - }, - "parameters": [ - "Moon", - "=", - "128" - ] - }, - { - "type": { - "value": "ModVarScene" - }, - "parameters": [ - "MaxResource", - "=", - "CameraBorderRight()" - ] - } - ], - "events": [ + "name": "", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "ChangeColor" + "hasCustomCollisionMask": false, + "image": "Health Bar.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Moon", - "\"144;19;254\"" - ] - }, - { - "type": { - "value": "SetCenter" + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 }, - "parameters": [ - "Moon", - "=", + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "1f3dba67c868b7320572a6591d1d0418f23b7c132df0963cf77286a9149971d9", + "height": 128, + "name": "HealthBarFill", + "tags": "", + "texture": "tiled_Health Bar Fill.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 128, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "TiledResourceBar", + "type": "ResourceBar::ResourceBar_TiledSprite", + "StartingQuantity": 5, + "CurrentQuantity": 0, + "UnitWidth": 16, + "MaxQuantity": 10 + } + ] + }, + { + "assetStoreId": "3bd9517a10ad3d98341eea33f0c139f08a1b04f26500e85ac49bb7f9e157a303", + "height": 128, + "name": "EnergyBarFill", + "tags": "", + "texture": "tiled_Energy Bar Fill.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 128, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "138ee716846635e3e0e5ab7b63752d1a36754f1ac874c70e1b5fa372d5a05474", + "bottomMargin": 6, + "height": 15, + "leftMargin": 11, + "name": "HealthBarBox", + "rightMargin": 9, + "tags": "", + "texture": "Health Bar Box.png", + "tiled": true, + "topMargin": 6, + "type": "PanelSpriteObject::PanelSprite", + "width": 96, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "0714257da345b4ec7de558ac0e42290362b85a79c97160c0e09636cd2fc31e3c", + "name": "Heart", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Heart.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "", + "bottomMargin": 0, + "height": 62, + "leftMargin": 64, + "name": "NewPanelSprite", + "rightMargin": 64, + "tags": "", + "texture": "Health Bar.png", + "tiled": true, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", + "width": 154, + "variables": [], + "effects": [], + "behaviors": [] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Initialize game", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DepartScene" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Opacity" + }, + "parameters": [ + "Moon", + "=", + "128" + ] + }, + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "MaxResource", + "=", + "CameraBorderRight()" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ChangeColor" + }, + "parameters": [ + "Moon", + "\"144;19;254\"" + ] + }, + { + "type": { + "value": "SetCenter" + }, + "parameters": [ + "Moon", + "=", "Fly.CenterX()", "=", "Fly.CenterY()-10" @@ -3333,7 +3713,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::DrawHealthBar" + "value": "ResourceBar::ResourceBar_ShapePainter::DrawHealthBar" }, "parameters": [ "MiniHealth_Bar", @@ -3351,7 +3731,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::DrawShieldBar" + "value": "ResourceBar::ResourceBar_ShapePainter::DrawShieldBar" }, "parameters": [ "Shield_Bar", @@ -3369,7 +3749,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::DrawResourceBar" + "value": "ResourceBar::ResourceBar_ShapePainter::DrawResourceBar" }, "parameters": [ "ResourceMouseX_Bar", @@ -3387,7 +3767,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::DrawHealthBar" + "value": "ResourceBar::ResourceBar_ShapePainter::DrawHealthBar" }, "parameters": [ "Health_Bar", @@ -3417,11 +3797,81 @@ "actions": [ { "type": { - "value": "ResourceBar::TiledResourceBar::DisplayTiledBar" + "value": "ResourceBar::ResourceBar_TiledSprite::SetMaxQuantityOp" + }, + "parameters": [ + "Tiled_ResourceBar", + "TiledResourceBar", + "=", + "10", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantityOp" + }, + "parameters": [ + "TiledEmptyUiHeart", + "TiledResourceBar", + "=", + "10", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "KeyReleased" + }, + "parameters": [ + "", + "Left" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantityOp" + }, + "parameters": [ + "Tiled_ResourceBar", + "TiledResourceBar", + "-", + "1", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "KeyReleased" + }, + "parameters": [ + "", + "Right" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantityOp" }, "parameters": [ "Tiled_ResourceBar", "TiledResourceBar", + "+", + "1", "" ] } @@ -3433,13 +3883,37 @@ "actions": [ { "type": { - "value": "ResourceBar::TiledResourceBar::SetQuantityOp" + "value": "ResourceBar::ResourceBar_TiledSprite::DrawResourceBar" }, "parameters": [ "Tiled_ResourceBar", "TiledResourceBar", - "=", - "Variable(Units)", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::DrawResourceBar" + }, + "parameters": [ + "TiledEmptyUiHeart", + "TiledResourceBar", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::DrawResourceBar" + }, + "parameters": [ + "HealthBarFill", + "TiledResourceBar", "" ] } @@ -3488,7 +3962,7 @@ "actions": [ { "type": { - "value": "ResourceBar::TiledResourceBar::SetMaxQuantityOp" + "value": "ResourceBar::ResourceBar_TiledSprite::SetMaxQuantityOp" }, "parameters": [ "Tiled_ResourceBar", @@ -3514,7 +3988,7 @@ }, { "type": { - "value": "ResourceBar::SpriteResourceBar::SetMaxQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetMaxQuantity" }, "parameters": [ "Unit_ResourceBar", @@ -3525,7 +3999,7 @@ }, { "type": { - "value": "ResourceBar::SpriteResourceBar::SetEmptyUnitColor" + "value": "ResourceBar::ResourceBar_Sprite::SetEmptyUnitColor" }, "parameters": [ "Unit_ResourceBar", @@ -3536,7 +4010,7 @@ }, { "type": { - "value": "ResourceBar::SpriteResourceBar::SetEmptyUnitOpacity" + "value": "ResourceBar::ResourceBar_Sprite::SetEmptyUnitOpacity" }, "parameters": [ "Unit_ResourceBar", @@ -3575,6 +4049,24 @@ } ], "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "-", + "1", + "" + ] + } + ] + }, { "disabled": true, "type": "BuiltinCommonInstructions::Standard", @@ -3582,7 +4074,7 @@ "actions": [ { "type": { - "value": "ResourceBar::SpriteResourceBar::DecreaseQuantity" + "value": "ResourceBar::ResourceBar_Sprite::DecreaseQuantity" }, "parameters": [ "Unit_ResourceBar", @@ -3628,7 +4120,7 @@ "actions": [ { "type": { - "value": "ResourceBar::SpriteResourceBar::IncreaseQuantity" + "value": "ResourceBar::ResourceBar_Sprite::IncreaseQuantity" }, "parameters": [ "Unit_ResourceBar", @@ -3638,22 +4130,23 @@ ] } ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + }, { - "type": { - "value": "ResourceBar::SpriteResourceBar::SetCurrentQuantity" - }, - "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "Variable(Units)", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "+", + "1", + "" + ] + } ] } ] @@ -3664,7 +4157,7 @@ "actions": [ { "type": { - "value": "ResourceBar::SpriteResourceBar::DrawUnitBar" + "value": "ResourceBar::ResourceBar_Sprite::DrawResourceBar" }, "parameters": [ "Unit_ResourceBar", @@ -3704,47 +4197,7261 @@ "width": 0 } ], - "effects": [] + "effects": [] + } + ], + "behaviorsSharedData": [ + { + "name": "DrawResourceBar", + "type": "DrawResourceBarOLD::DrawResourceBarOLD" + }, + { + "name": "DrawResourceBar222", + "type": "ResourceBar::ResourceBar_ShapePainter" + }, + { + "name": "Health", + "type": "Health::Health" + }, + { + "name": "ShakeObject_PositionAngleScale", + "type": "ShakeObject::ShakeObject_PositionAngleScale" + }, + { + "name": "Shield", + "type": "Health::Shield" + }, + { + "name": "Sticker", + "type": "Sticker::Sticker" + }, + { + "name": "TiledResourceBar", + "type": "ResourceBar::ResourceBar_TiledSprite" + }, + { + "name": "UnitResourceBar", + "type": "ResourceBar::ResourceBar_Sprite" + } + ] + }, + { + "b": 0, + "disableInputWhenNotFocused": true, + "mangledName": "Game", + "name": "Game", + "r": 0, + "standardSortMethod": true, + "stopSoundsOnStartup": true, + "title": "", + "v": 0, + "uiSettings": { + "grid": true, + "gridType": "rectangular", + "gridWidth": 8, + "gridHeight": 8, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.2, + "snap": true, + "zoomFactor": 1.1800000000000002, + "windowMask": false + }, + "objectsGroups": [], + "variables": [], + "instances": [ + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Shield_Bar", + "persistentUuid": "b581caf8-44ee-423e-b57e-cdd910fb7374", + "width": 0, + "x": 192, + "y": 216, + "zOrder": 2, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "ResourceMouseX_Bar", + "persistentUuid": "17a23f4a-a442-4b52-8380-9f2b6a9c2494", + "width": 0, + "x": 192, + "y": 536, + "zOrder": 3, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 80, + "layer": "", + "name": "Fly", + "persistentUuid": "e0b70af7-7a81-41c3-88ac-88305df91ed2", + "width": 128, + "x": 481.13275146484375, + "y": 293, + "zOrder": 4, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 128, + "layer": "", + "name": "Moon", + "persistentUuid": "8428ea9d-6d1e-41b0-9f54-1840f3378846", + "width": 129.1327362060547, + "x": 480, + "y": 272, + "zOrder": 0, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Health_Text", + "persistentUuid": "921b2f28-8bee-4ab2-a6cc-1ee823c5215e", + "width": 0, + "x": 48, + "y": 96, + "zOrder": 9, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Shield_Text", + "persistentUuid": "a231209b-a5d8-4280-868d-1e9beb31527b", + "width": 0, + "x": 48, + "y": 208, + "zOrder": 10, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "ResourceMouseX_Text", + "persistentUuid": "07fda015-55f8-4959-80fc-f1ee3074d028", + "width": 0, + "x": 32, + "y": 512, + "zOrder": 11, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Title_Text", + "persistentUuid": "29ae792c-1331-430c-aadf-70fa8d9e36d6", + "width": 0, + "x": 208, + "y": 16, + "zOrder": 12, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Unit_ResourceBar", + "persistentUuid": "0c4d4e97-0b53-4f05-8468-7d8b7a7fa8dd", + "width": 0, + "x": 32, + "y": 464, + "zOrder": 13, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Health_Bar", + "persistentUuid": "c411b32c-f357-4b8f-9e87-f3fdde7657d5", + "width": 0, + "x": 192, + "y": 104, + "zOrder": 1, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "TiledEmptyUiHeart", + "persistentUuid": "a1be0010-4eb7-4e54-a651-7d77ae646149", + "width": 0, + "x": 40, + "y": 416, + "zOrder": 14, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 16, + "layer": "", + "name": "Tiled_ResourceBar", + "persistentUuid": "be98771a-978f-443c-80e8-197098aef457", + "width": 16, + "x": 40, + "y": 416, + "zOrder": 15, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ], + "objects": [ + { + "assetStoreId": "", + "name": "Health_Bar", + "tags": "", + "type": "PrimitiveDrawing::Drawer", + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "DrawResourceBar222", + "type": "ResourceBar::ResourceBar_ShapePainter", + "ValueMin": 0, + "ValueMax": 1, + "TickSpacing": 0, + "BarLength": 200, + "BarThickness": 16, + "InactiveBarColor": "11;255;0", + "InactiveBarOpacity": 96, + "ActiveBarColor": " 11;255;0", + "ActiveBarOpacity": 255, + "RoundedBar": true, + "Value": 0, + "ThumbOffset": 0, + "NeedRedraw": true + } + ], + "fillOpacity": 255, + "outlineSize": 1, + "outlineOpacity": 255, + "fillColor": { + "b": 255, + "g": 255, + "r": 255 + }, + "outlineColor": { + "b": 0, + "g": 0, + "r": 0 + }, + "absoluteCoordinates": false, + "clearBetweenFrames": true + }, + { + "assetStoreId": "", + "name": "MiniHealth_Bar", + "tags": "", + "type": "PrimitiveDrawing::Drawer", + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "DrawResourceBar", + "type": "ResourceBar::ResourceBar_ShapePainter", + "ValueMin": 0, + "ValueMax": 1, + "TickSpacing": 0, + "BarLength": 50, + "BarThickness": 4, + "InactiveBarColor": "11;255;0", + "InactiveBarOpacity": 96, + "ActiveBarColor": " 11;255;0", + "ActiveBarOpacity": 255, + "Value": 0, + "ThumbOffset": 0, + "NeedRedraw": true + }, + { + "name": "Sticker", + "type": "Sticker::Sticker", + "OnlyFollowPosition": true + } + ], + "fillOpacity": 255, + "outlineSize": 1, + "outlineOpacity": 255, + "fillColor": { + "b": 255, + "g": 255, + "r": 255 + }, + "outlineColor": { + "b": 0, + "g": 0, + "r": 0 + }, + "absoluteCoordinates": false, + "clearBetweenFrames": true + }, + { + "assetStoreId": "", + "name": "Shield_Bar", + "tags": "", + "type": "PrimitiveDrawing::Drawer", + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "DrawResourceBar222", + "type": "ResourceBar::ResourceBar_ShapePainter", + "ValueMin": 0, + "ValueMax": 1, + "TickSpacing": 0, + "ThumbShape": "circle", + "ThumbWidth": 20, + "ThumbHeight": 20, + "ThumbColor": " 24;119;211", + "ThumbOpacity": 255, + "BarLength": 200, + "BarThickness": 16, + "InactiveBarColor": "144;19;254", + "InactiveBarOpacity": 96, + "ActiveBarColor": " 144;19;254", + "ActiveBarOpacity": 255, + "HaloRadius": 24, + "HaloOpacityHover": 32, + "HaloOpacityClick": 64, + "RoundedBar": true, + "Enabled": true, + "IsBeingDragged": false, + "Value": 0, + "ThumbOffset": 0, + "NeedRedraw": true, + "IsHovered": false, + "MouseX": 0, + "MouseY": 0, + "CurrentHaloRadius": 0, + "HaloGrowSpeed": 0.2, + "TargetHaloRadius": 0.19999992847442627 + } + ], + "fillOpacity": 255, + "outlineSize": 1, + "outlineOpacity": 255, + "fillColor": { + "b": 255, + "g": 255, + "r": 255 + }, + "outlineColor": { + "b": 0, + "g": 0, + "r": 0 + }, + "absoluteCoordinates": false, + "clearBetweenFrames": true + }, + { + "assetStoreId": "", + "name": "ResourceMouseX_Bar", + "tags": "", + "type": "PrimitiveDrawing::Drawer", + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "DrawResourceBar222", + "type": "ResourceBar::ResourceBar_ShapePainter", + "ValueMin": 0, + "ValueMax": 1, + "TickSpacing": 0, + "ThumbShape": "circle", + "ThumbWidth": 20, + "ThumbHeight": 20, + "ThumbColor": "248;231;28", + "ThumbOpacity": 255, + "BarLength": 200, + "BarThickness": 16, + "InactiveBarColor": "248;231;28", + "InactiveBarOpacity": 96, + "ActiveBarColor": "248;231;28", + "ActiveBarOpacity": 255, + "HaloRadius": 24, + "HaloOpacityHover": 32, + "HaloOpacityClick": 64, + "RoundedBar": false, + "Enabled": true, + "IsBeingDragged": false, + "Value": 0, + "ThumbOffset": 0, + "NeedRedraw": true, + "IsHovered": false, + "MouseX": 0, + "MouseY": 0, + "CurrentHaloRadius": 0, + "HaloGrowSpeed": 0.2, + "TargetHaloRadius": 0.19999992847442627 + } + ], + "fillOpacity": 255, + "outlineSize": 1, + "outlineOpacity": 255, + "fillColor": { + "b": 255, + "g": 255, + "r": 255 + }, + "outlineColor": { + "b": 0, + "g": 0, + "r": 0 + }, + "absoluteCoordinates": false, + "clearBetweenFrames": true + }, + { + "assetStoreId": "48a2d179a1921276abe3f99ce3cf195fa7c310bc511fa215d9647c3fb9027921", + "name": "Fly", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Health", + "type": "Health::Health", + "Health": 100, + "DamageCooldown": 0, + "MaxHealth": 100, + "IsJustDamaged": false, + "HealthRegenRate": 0, + "HealthRegenDelay": 0, + "AllowOverHealing": false, + "HitAtLeastOnce": false + }, + { + "name": "ShakeObject_PositionAngleScale", + "type": "ShakeObject::ShakeObject_PositionAngleScale" + }, + { + "name": "Shield", + "type": "Health::Shield", + "RequireHealth": "Health", + "MaxShieldPoints": 30, + "ShieldDuration": 5, + "ShieldPoints": 0, + "ShieldRegenRate": 0, + "ShieldBlocksExcessDamage": false, + "ShieldRegenDelay": 0, + "RegenShieldWhenZeroPoints": false, + "IsShieldJustDamaged": false + } + ], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.05000000074505806, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "Fly_1.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_2.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_3.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_4.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_5.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_6.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_7.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_8.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_9.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_10.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "574655a4565bd983af8f5dd98e0fd8cda3bd67cf929c00d3db317e898322e06b", + "name": "Star", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "LargeNarrow", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Star_LargeNarrow.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "LargeWide", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Star_LargeWide.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Medium", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Star_Medium.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Small", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Star_Small.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "8d92592738465177b86ec18299ef6e6394ae24eeb7a7d6dfdcbbdb55fab902aa", + "name": "BlueLaser01", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Blue laser (01).png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "794ab341df538c9b3bdad418dfdcccc7be5d90f3d0b5929d6d528a542c6ed3ae", + "name": "SilverShield", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [ + { + "effectType": "Outline", + "name": "Effect", + "doubleParameters": { + "padding": 2, + "thickness": 2 + }, + "stringParameters": { + "color": "255;255;255" + }, + "booleanParameters": {} + } + ], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Silver shield.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 14.592423439025879, + "y": 15.103429794311523 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "d2bc2d266f5bb666ef68023abc14f51bc8fe8b5222af931efa378ac10c50f98a", + "name": "MeteorDetailed", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "Large", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "Meteor Detailed_Large.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 65.07723999023438, + "y": 63.82252502441406 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 20, + "y": 20 + }, + { + "x": 110, + "y": 20 + }, + { + "x": 110, + "y": 110 + }, + { + "x": 20, + "y": 110 + } + ] + ] + } + ] + } + ] + }, + { + "name": "Small", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "Meteor Detailed_Small.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 65.07723999023438, + "y": 63.82252502441406 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 20, + "y": 20 + }, + { + "x": 110, + "y": 20 + }, + { + "x": 110, + "y": 110 + }, + { + "x": 20, + "y": 110 + } + ] + ] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "a1e62f5a19d1fe476e2ad0b8977768d020cc1dc55423427f79a486664cebb631", + "name": "UpgradedPotionBlue", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "No Shadow", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Upgraded Potion Blue_No Shadow.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 15.793042182922363, + "y": 15.89681625366211 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Shadow", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Upgraded Potion Blue_Shadow.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 15.793042182922363, + "y": 15.89681625366211 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "c2ce913ddbcd055c4e49a1c01b63aff1a3d59e4e1c1845db4c38aedda3712d3a", + "name": "Moon", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Sticker", + "type": "Sticker::Sticker", + "OnlyFollowPosition": false + } + ], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Moon.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "", + "bold": true, + "italic": false, + "name": "Health_Text", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Health", + "font": "", + "characterSize": 30, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + }, + { + "assetStoreId": "", + "bold": true, + "italic": false, + "name": "Shield_Text", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Shield", + "font": "", + "characterSize": 30, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + }, + { + "assetStoreId": "", + "bold": true, + "italic": false, + "name": "ResourceMouseX_Text", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Resource \n(Mouse X)", + "font": "", + "characterSize": 30, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + }, + { + "assetStoreId": "", + "bold": true, + "italic": false, + "name": "Title_Text", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Extension: Draw Resource Bar", + "font": "", + "characterSize": 30, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + }, + { + "assetStoreId": "", + "name": "ResourceBarNew", + "tags": "", + "type": "PrimitiveDrawing::Drawer", + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "DrawResourceBar", + "type": "DrawResourceBar::DrawResourceBar", + "ValueMin": 0, + "ValueMax": 1, + "TickSpacing": 0, + "BarLength": 200, + "BarThickness": 4, + "InactiveBarColor": "11;255;0", + "InactiveBarOpacity": 96, + "ActiveBarColor": "11;255;0", + "ActiveBarOpacity": 255, + "RoundedBar": false, + "Value": 0, + "ThumbOffset": 0, + "NeedRedraw": true + } + ], + "fillOpacity": 255, + "outlineSize": 1, + "outlineOpacity": 255, + "fillColor": { + "b": 255, + "g": 255, + "r": 255 + }, + "outlineColor": { + "b": 0, + "g": 0, + "r": 0 + }, + "absoluteCoordinates": false, + "clearBetweenFrames": true + }, + { + "assetStoreId": "8d524a624fbc72a1fd6c3975369a7cd55b8a52035887ef664bcd93bf8e273881", + "name": "Unit_ResourceBar", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "UnitResourceBar", + "type": "ResourceBar::ResourceBar_Sprite", + "StartingUnits": 3, + "CurrentUnits": 3, + "MaxUnits": 3, + "UnitSpacing": 0, + "NextUnitToCreate": 0, + "HideEmptyUnits": false, + "EmptyUnitOpacity": 64, + "EmptyUnitAnimation": 0, + "EmptyColorTint": "255;255;255", + "ActiveUnitOpacity": 255 + } + ], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Emote Heart.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "8d524a624fbc72a1fd6c3975369a7cd55b8a52035887ef664bcd93bf8e273881", + "name": "Heart_Unit", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Emote Heart.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "752e405ef67d9f9d1bd36f9763f1b6fc05633d64700982c0f3118a25a32e39b2", + "height": 16, + "name": "TiledEmptyUiHeart", + "tags": "", + "texture": "tiled_Tiled Empty UI Heart.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 16, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "TiledResourceBar", + "type": "ResourceBar::ResourceBar_TiledSprite", + "StartingQuantity": 0, + "CurrentQuantity": 0, + "UnitWidth": 16, + "MaxQuantity": 0 + } + ] + }, + { + "assetStoreId": "abf51d082db5a117d9ee2e65299660f6787d47664e4571bad6db3075b3393c5f", + "height": 16, + "name": "Tiled_ResourceBar", + "tags": "", + "texture": "tiled_Tiled Filler UI Heart.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 16, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "TiledResourceBar", + "type": "ResourceBar::ResourceBar_TiledSprite", + "StartingQuantity": 6, + "CurrentQuantity": 0, + "UnitWidth": 16 + } + ] + }, + { + "assetStoreId": "45107bbfbc2b5cbc83e3785f802b99664a23d59e74414e332c9afafac63e1ca3", + "name": "HealthBar", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Health Bar.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "1f3dba67c868b7320572a6591d1d0418f23b7c132df0963cf77286a9149971d9", + "height": 128, + "name": "HealthBarFill", + "tags": "", + "texture": "tiled_Health Bar Fill.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 128, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "3bd9517a10ad3d98341eea33f0c139f08a1b04f26500e85ac49bb7f9e157a303", + "height": 128, + "name": "EnergyBarFill", + "tags": "", + "texture": "tiled_Energy Bar Fill.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 128, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "138ee716846635e3e0e5ab7b63752d1a36754f1ac874c70e1b5fa372d5a05474", + "bottomMargin": 6, + "height": 15, + "leftMargin": 11, + "name": "HealthBarBox", + "rightMargin": 9, + "tags": "", + "texture": "Health Bar Box.png", + "tiled": true, + "topMargin": 6, + "type": "PanelSpriteObject::PanelSprite", + "width": 96, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "7c1048053bc2d851157c4e0868c4ac0338f4ca93170d28990a7f64eaed2a1723", + "name": "HealthIndicator", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "Black Outline Empty", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Health Indicator_Black Outline Empty.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Black Outline Heart", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Health Indicator_Black Outline Heart.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "White Outline Empty", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Health Indicator_White Outline Empty.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "White Outline Heart", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Health Indicator_White Outline Heart.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "0714257da345b4ec7de558ac0e42290362b85a79c97160c0e09636cd2fc31e3c", + "name": "Heart", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Heart.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Initialize game", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DepartScene" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Opacity" + }, + "parameters": [ + "Moon", + "=", + "128" + ] + }, + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "MaxResource", + "=", + "CameraBorderRight()" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ChangeColor" + }, + "parameters": [ + "Moon", + "\"144;19;254\"" + ] + }, + { + "type": { + "value": "SetCenter" + }, + "parameters": [ + "Moon", + "=", + "Fly.CenterX()", + "=", + "Fly.CenterY()-10" + ] + }, + { + "type": { + "value": "Sticker::Sticker::Stick" + }, + "parameters": [ + "Moon", + "Sticker", + "Fly", + "" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Moon" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "MiniHealth_Bar", + "Fly.X()", + "Fly.Y()", + "\"\"" + ] + }, + { + "type": { + "value": "MettreXY" + }, + "parameters": [ + "MiniHealth_Bar", + "=", + "Fly.CenterX() - MiniHealth_Bar.DrawResourceBar::BarLength()/2", + "=", + "Fly.BoundingBoxTop()" + ] + }, + { + "type": { + "value": "Sticker::Sticker::Stick" + }, + "parameters": [ + "MiniHealth_Bar", + "Sticker", + "Fly", + "" + ] + } + ] + }, + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::EnableDebugDraw" + }, + "parameters": [ + "", + "", + "", + "", + "" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "folded": true, + "name": "Spawn items", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RepeatEveryXSeconds::Repeat" + }, + "parameters": [ + "", + "\"SpawnShield\"", + "5", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "SilverShield", + "Fly.CenterX()", + "CameraBorderTop()", + "" + ] + }, + { + "type": { + "value": "AddForceAL" + }, + "parameters": [ + "SilverShield", + "90", + "75", + "1" + ] + }, + { + "type": { + "value": "ChangeColor" + }, + "parameters": [ + "SilverShield", + "\"144;19;254\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RepeatEveryXSeconds::Repeat" + }, + "parameters": [ + "", + "\"SpawnHealth\"", + "12", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "UpgradedPotionBlue", + "Fly.CenterX()", + "CameraBorderBottom()", + "" + ] + }, + { + "type": { + "value": "AddForceAL" + }, + "parameters": [ + "UpgradedPotionBlue", + "270", + "75", + "1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RepeatEveryXSeconds::Repeat" + }, + "parameters": [ + "", + "\"SpawnRock\"", + "1", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "MeteorDetailed", + "CameraBorderLeft()", + "Fly.CenterY()", + "" + ] + }, + { + "type": { + "value": "AddForceAL" + }, + "parameters": [ + "MeteorDetailed", + "0", + "300", + "1" + ] + }, + { + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "MeteorDetailed", + "=", + "0.5" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Rotate" + }, + "parameters": [ + "MeteorDetailed", + "30", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "folded": true, + "name": "Collisions", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Shield::IsShieldActive" + }, + "parameters": [ + "Fly", + "Shield", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Moon", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Health::Shield::IsShieldActive" + }, + "parameters": [ + "Fly", + "Shield", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Moon" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionNP" + }, + "parameters": [ + "SilverShield", + "Fly", + "", + "", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Health::Shield::ActivateShield" + }, + "parameters": [ + "Fly", + "Shield", + "" + ] + }, + { + "type": { + "value": "Delete" + }, + "parameters": [ + "SilverShield", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionNP" + }, + "parameters": [ + "UpgradedPotionBlue", + "Fly", + "", + "", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::Heal" + }, + "parameters": [ + "Fly", + "Health", + "100", + "" + ] + }, + { + "type": { + "value": "Delete" + }, + "parameters": [ + "UpgradedPotionBlue", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionNP" + }, + "parameters": [ + "MeteorDetailed", + "Fly", + "", + "", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Health::Shield::ShieldHit" + }, + "parameters": [ + "Fly", + "Shield", + "10", + "" + ] + }, + { + "type": { + "value": "Delete" + }, + "parameters": [ + "MeteorDetailed", + "" + ] + }, + { + "type": { + "value": "ShakeObject::ShakeObject_PositionAngleScale::ShakeObject_PositionAngleScale" + }, + "parameters": [ + "Fly", + "ShakeObject_PositionAngleScale", + "", + "10", + "10", + "5", + "", + "", + "", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 224, + "colorG": 16, + "colorR": 189, + "creationTime": 0, + "name": "Draw Resource bars", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "This resource shows the horizontal mouse position in scene, but it can be used for anything!", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "MyResource", + "=", + "MouseX()" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Shape painter resource bar", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::DrawHealthBar" + }, + "parameters": [ + "MiniHealth_Bar", + "DrawResourceBar", + "Fly", + "Health", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::DrawShieldBar" + }, + "parameters": [ + "Shield_Bar", + "DrawResourceBar222", + "Fly", + "Shield", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::DrawResourceBar" + }, + "parameters": [ + "ResourceMouseX_Bar", + "DrawResourceBar222", + "Variable(MyResource)", + "Variable(MaxResource)", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::DrawHealthBar" + }, + "parameters": [ + "Health_Bar", + "DrawResourceBar222", + "Fly", + "Health", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Tiled resource bar", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetMaxQuantityOp" + }, + "parameters": [ + "Tiled_ResourceBar", + "TiledResourceBar", + "=", + "10", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantityOp" + }, + "parameters": [ + "TiledEmptyUiHeart", + "TiledResourceBar", + "=", + "10", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "KeyReleased" + }, + "parameters": [ + "", + "Left" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantityOp" + }, + "parameters": [ + "Tiled_ResourceBar", + "TiledResourceBar", + "-", + "1", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "KeyReleased" + }, + "parameters": [ + "", + "Right" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantityOp" + }, + "parameters": [ + "Tiled_ResourceBar", + "TiledResourceBar", + "+", + "1", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::DrawResourceBar" + }, + "parameters": [ + "Tiled_ResourceBar", + "TiledResourceBar", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::DrawResourceBar" + }, + "parameters": [ + "TiledEmptyUiHeart", + "TiledResourceBar", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Unit resource bar", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DepartScene" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "Units", + "=", + "5" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetMaxQuantityOp" + }, + "parameters": [ + "Tiled_ResourceBar", + "TiledResourceBar", + "=", + "10", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Unit_ResourceBar" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetMaxQuantity" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "10", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetEmptyUnitColor" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "\"74;144;226\"", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetEmptyUnitOpacity" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "64", + "" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "KeyReleased" + }, + "parameters": [ + "", + "Left" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "Units", + "=", + "max(0,Variable(Units)-1)" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "-", + "1", + "" + ] + } + ] + }, + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::DecreaseQuantity" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "1", + "" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "KeyReleased" + }, + "parameters": [ + "", + "Right" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "Units", + "+", + "1" + ] + } + ], + "events": [ + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::IncreaseQuantity" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "1", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "+", + "1", + "" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::DrawResourceBar" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "Heart_Unit", + "5", + "" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [] + } + ], + "layers": [ + { + "ambientLightColorB": 32, + "ambientLightColorG": 0, + "ambientLightColorR": 0, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "behaviorsSharedData": [ + { + "name": "DrawResourceBar", + "type": "DrawResourceBarOLD::DrawResourceBarOLD" + }, + { + "name": "DrawResourceBar222", + "type": "ResourceBar::ResourceBar_ShapePainter" + }, + { + "name": "Health", + "type": "Health::Health" + }, + { + "name": "ShakeObject_PositionAngleScale", + "type": "ShakeObject::ShakeObject_PositionAngleScale" + }, + { + "name": "Shield", + "type": "Health::Shield" + }, + { + "name": "Sticker", + "type": "Sticker::Sticker" + }, + { + "name": "TiledResourceBar", + "type": "ResourceBar::ResourceBar_TiledSprite" + }, + { + "name": "UnitResourceBar", + "type": "ResourceBar::ResourceBar_Sprite" + } + ] + } + ], + "externalEvents": [], + "eventsFunctionsExtensions": [ + { + "author": "@4ian", + "category": "Game mechanic", + "extensionNamespace": "", + "fullName": "Fire bullets", + "helpPath": "https://gdevelop.io/game-example/fire-bullet", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", + "name": "FireBullet", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", + "shortDescription": "Fire bullets, manage ammo, reloading, and overheating.", + "version": "0.3.0", + "description": "Fire bullets, manage ammo, reloading, and overheating.\n\nFiring bullets:\n- Cooldown: Time between shots (seconds)\n- Bullet Quantity: Number of bullets created each time Fire Bullet action is used. \n- Angle Variance: Each bullet trajectory will be adjusted by a random value within this range (degrees)\n- Firing Arc: Range of angles (in degrees) that bullets will shoot. Bullets are evenly spread within this range.\n- Rotate bullet: Change the angle of each bullet to match the direction it is travelling (enabled by default)\n\n Ammo:\n- Starting ammo\n- Max ammo\n- Shots per reload. Use 0 to disable reloading\n- Reload duration\n- Automatic reloading is enabled by default, but it can also be done manually.\n\nOverheat:\n- Heat increase per shot. Object is Overheated when Heat reaches 1.\n- Cooling rate per second\n- When overheated, the object cannot fire any bullets\n\nStatistics:\n- Total bullets created\n- Total shots taken\n- Total reloads completed\n\nBullets:\n- Each bullet is assigned several variables that can be used for advanced object picking\n- __FireBullet.BulletID = Unique number for every bullet created\n- __FireBullet.BatchID = Unique number for all bullets created in the same frame\n- __FireBullet.BatchOrderID = Unique number for each bullet in the same batch. Can be used to identify the position in the firing arc.", + "origin": { + "identifier": "FireBullet", + "name": "gdevelop-extension-store" + }, + "tags": [ + "fire", + "bullet", + "spawn", + "firerate", + "reload", + "weapon", + "ranged", + "ammo", + "overheat" + ], + "authorIds": [ + "wWP8BSlAW0UP4NeaHa2LcmmDzmH2", + "xpwUwByyImTDcHEqDUqfyg0oRBt1", + "2OwwM8ToR9dx9RJ2sAKTcrLmCB92", + "gqDaZjCfevOOxBYkK6zlhtZnXCg1" + ], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "Fire bullets, manage ammo, reloading, and overheating.", + "fullName": "Fire bullets", + "name": "FireBullet", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__FireBullet.FiringCooldown\"" + ] + }, + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyStartingAmmo()" + ] + }, + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyShotsPerReload()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "colorB": 224, + "colorG": 16, + "colorR": 189, + "creationTime": 0, + "name": "Take a shot (if triggered)", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Creators can use the \"FireBullet\" action multiple times in a frame and it will be counted as a single \"shot\".", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyHasJustFired" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Reset firing cooldown", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__FireBullet.FiringCooldown\"" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Update ammo", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Subtract 1 from ammo (if not unlimited ammo)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::PropertyUnlimitedAmmo" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "-", + "1" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Update reloading counter", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyShotsPerReload" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + }, + "parameters": [ + "Object", + "Behavior", + "-", + "1" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Automatically reload gun when needed", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyAutomaticReloading" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "FireBullet::FireBullet::IsReloadNeeded" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsReloadInProgress" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::ReloadAmmo" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Update Overheat", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Increase heat (if needed)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyHeatIncreasePerShot" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyHeatLevel" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "Object.Behavior::PropertyHeatIncreasePerShot()" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Check if this caused overheat", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyOverheatDuration" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + }, + { + "type": { + "value": "FireBullet::FireBullet::IsOverheated" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__FireBullet.OverheatDuration\"" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Update statistics", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyTotalShotsFired" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Reset firing detection", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyHasJustFired" + }, + "parameters": [ + "Object", + "Behavior", + "=" + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Reload gun when needed", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Detect when reload is completed", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::IsReloadInProgress" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__FireBullet.ReloadingTimer\"", + ">=", + "Object.Behavior::PropertyReloadDuration()" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyTotalReloadsCompleted" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + }, + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyReloadInProgress" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::IsUnlimitedAmmo" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyShotsPerReload()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Only reload the amount of ammo available", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsUnlimitedAmmo" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::PropertyShotsPerReload(), Object.Behavior::PropertyAmmoQuantity())" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Reduce heat level (based on cooling rate)", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::HeatLevel()", + ">", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyExponentialCoolingRate" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyHeatLevel" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0, Object.Behavior::PropertyHeatLevel() - TimeDelta() * Object.Behavior::PropertyExponentialCoolingRate() * Object.Behavior::PropertyHeatLevel())" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyLinearCoolingRate" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyHeatLevel" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0, Object.Behavior::PropertyHeatLevel() - TimeDelta() * Object.Behavior::PropertyLinearCoolingRate())" + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Fire bullets toward a position.", + "fullName": "Fire bullets toward a position", + "functionType": "Action", + "name": "FireTowardPosition", + "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Calculate the trajectory angle and use the \"Fire bullets\" action", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::Fire" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsNumber(\"XPosition\")", + "GetArgumentAsNumber(\"YPosition\")", + "Bullet", + "Object.AngleToPosition(GetArgumentAsNumber(\"TargetXPosition\"),GetArgumentAsNumber(\"TargetYPosition\"))", + "GetArgumentAsNumber(\"Speed\")", + "" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "X position, where to create the bullet", + "name": "XPosition", + "type": "expression" + }, + { + "description": "Y position, where to create the bullet", + "name": "YPosition", + "type": "expression" + }, + { + "description": "The bullet object", + "name": "Bullet", + "type": "objectList" + }, + { + "description": "Target X position", + "name": "TargetXPosition", + "type": "expression" + }, + { + "description": "Target Y position", + "name": "TargetYPosition", + "type": "expression" + }, + { + "description": "Speed of the bullet, in pixels per second", + "name": "Speed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Fire bullets in the direction of a given angle.", + "fullName": "Fire bullets toward an angle", + "functionType": "Action", + "name": "Fire", + "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Check if ready to shoot", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::IsReadyToShoot" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyHasJustFired" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Single bullet", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::PropertyBulletQuantity()", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::FireSingleBullet" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsNumber(\"XPosition\")", + "GetArgumentAsNumber(\"YPosition\")", + "Bullet", + "GetArgumentAsNumber(\"Angle\")", + "GetArgumentAsNumber(\"Speed\")", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Multiple bullets", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::PropertyBulletQuantity()", + ">", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__FireBullet.CurrentBulletAngle", + "=", + "GetArgumentAsNumber(\"Angle\") - Object.Behavior::PropertyFiringArc()/2" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__FireBullet.BatchOrderID", + "=", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "Object.Behavior::PropertyBulletQuantity()", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::FireSingleBullet" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsNumber(\"XPosition\")", + "GetArgumentAsNumber(\"YPosition\")", + "Bullet", + "Object.Variable(__FireBullet.CurrentBulletAngle) + RandomInRange(-Object.Behavior::PropertyAngleVariance(),Object.Behavior::PropertyAngleVariance())", + "GetArgumentAsNumber(\"Speed\")", + "" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move temp variable to the next angle a bullet will be sent", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__FireBullet.CurrentBulletAngle", + "+", + "Object.Behavior::PropertyFiringArc() / (Object.Behavior::PropertyBulletQuantity() - 1)" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__FireBullet.BatchOrderID", + "+", + "1" + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "X position, where to create the bullet", + "name": "XPosition", + "type": "expression" + }, + { + "description": "Y position, where to create the bullet", + "name": "YPosition", + "type": "expression" + }, + { + "description": "The bullet object", + "name": "Bullet", + "type": "objectList" + }, + { + "description": "Angle of the bullet, in degrees", + "name": "Angle", + "type": "expression" + }, + { + "description": "Speed of the bullet, in pixels per second", + "name": "Speed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Fire a single bullet. This is only meant to be used inside the \"Fire bullet\" action.", + "fullName": "Fire a single bullet", + "functionType": "Action", + "group": "Firing", + "name": "FireSingleBullet", + "private": true, + "sentence": "Fire a single bullet _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, with angle _PARAM5_ and speed _PARAM6_ px/s", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Fire a single bullet", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Create bullet", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Bullet", + "GetArgumentAsNumber(\"XPosition\")", + "GetArgumentAsNumber(\"YPosition\")", + "\"\"" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move bullet", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "AddForceAL" + }, + "parameters": [ + "Bullet", + "GetArgumentAsNumber(\"Angle\") + RandomInRange(-Object.Behavior::PropertyAngleVariance(), Object.Behavior::PropertyAngleVariance())", + "GetArgumentAsNumber(\"Speed\")", + "1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Add identifier variables (to enable advanced picking by users)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Bullet", + "__FireBullet.BulletID", + "=", + "Object.Behavior::PropertyTotalBulletsCreated()" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Bullet", + "__FireBullet.BatchID", + "=", + "Object.Behavior::PropertyTotalShotsFired()" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Bullet", + "__FireBullet.BatchOrderID", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Rotate newly created bullet, if needed", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyRotateBullet" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Bullet", + "=", + "GetArgumentAsNumber(\"Angle\")" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Update statistics", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyTotalBulletsCreated" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "X position, where to create the bullet", + "name": "XPosition", + "type": "expression" + }, + { + "description": "Y position, where to create the bullet", + "name": "YPosition", + "type": "expression" + }, + { + "description": "The bullet object", + "name": "Bullet", + "type": "objectList" + }, + { + "description": "Angle of the bullet, in degrees", + "name": "Angle", + "type": "expression" + }, + { + "description": "Speed of the bullet, in pixels per second", + "name": "Speed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Reload ammo.", + "fullName": "Reload ammo", + "functionType": "Action", + "name": "ReloadAmmo", + "sentence": "Reload ammo on _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsOutOfAmmo" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyReloadInProgress" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__FireBullet.ReloadingTimer\"" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the object has just fired something.", + "fullName": "Has just fired", + "functionType": "Condition", + "group": "Firing", + "name": "HasJustFired", + "sentence": "_PARAM0_ has just fired", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyHasJustFired" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if bullet rotates to match trajectory.", + "fullName": "Is bullet rotation enabled", + "functionType": "Condition", + "group": "Firing", + "name": "BulletRotationEnabled", + "sentence": "Bullet rotation enabled on _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyRotateBullet" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the firing arc (in degrees) where bullets will be shot. Bullets will be evenly spaced out inside the firing arc.", + "fullName": "Set firing arc", + "functionType": "Action", + "group": "Multi-Fire", + "name": "SetFiringArc", + "sentence": "Set firing arc of _PARAM0_ to _PARAM2_ degrees", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyFiringArc" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Firing arc (degrees) Range: 0 to 360", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the angle variance (in degrees) applied to each bullet.", + "fullName": "Set angle variance", + "functionType": "Action", + "group": "Firing", + "name": "SetAngleVariance", + "sentence": "Set angle variance of _PARAM0_ to _PARAM2_ degrees", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyAngleVariance" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Angle variance (degrees) Range: 0 to 180", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the number of bullets shot every time the \"fire bullet\" action is used.", + "fullName": "Set number of bullets per shot", + "functionType": "Action", + "group": "Multi-Fire", + "name": "SetBulletQuantity", + "sentence": "Set number of bullets per shot of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyBulletQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Bullets", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Enable bullet rotation.", + "fullName": "Enable (or disable) bullet rotation", + "functionType": "Action", + "group": "Firing", + "name": "SetRotateBullet", + "sentence": "Enable bullet rotation on _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"RotateBullet\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyRotateBullet" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"RotateBullet\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyRotateBullet" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "defaultValue": "yes", + "description": "Rotate bullet to match trajetory", + "name": "RotateBullet", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Enable unlimited ammo.", + "fullName": "Enable (or disable) unlimited ammo", + "functionType": "Action", + "group": "Ammo", + "name": "SetUnlimitedAmmo", + "sentence": "Enable unlimited ammo on _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"UnlimitedAmmo\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyUnlimitedAmmo" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"UnlimitedAmmo\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyUnlimitedAmmo" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "defaultValue": "yes", + "description": "Unlimited ammo", + "name": "UnlimitedAmmo", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Change the firing cooldown, which changes the rate of fire.", + "fullName": "Set firing cooldown", + "functionType": "Action", + "group": "Firing", + "name": "SetCooldown", + "sentence": "Set the fire rate of _PARAM0_ to _PARAM2_ seconds", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyFireCooldown" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"NewCooldown\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Cooldown in seconds", + "name": "NewCooldown", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the duration to reload ammo.", + "fullName": "Set reload duration", + "functionType": "Action", + "group": "Reload", + "name": "SetReloadDuration", + "sentence": "Set the reload duration of _PARAM0_ to _PARAM2_ seconds", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyReloadDuration" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Reload duration (seconds)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the duration after becoming overheated.", + "fullName": "Set overheat duration", + "functionType": "Action", + "group": "Overheat", + "name": "SetOverheatDuration", + "sentence": "Set the overheat duration of _PARAM0_ to _PARAM2_ seconds", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyOverheatDuration" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Overheat duration (seconds)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the quantity of ammo.", + "fullName": "Set ammo quantity", + "functionType": "Action", + "group": "Ammo", + "name": "SetAmmoQuantity", + "sentence": "Set the ammo quantity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Ammo", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the heat increase per shot.", + "fullName": "Set heat increase per shot", + "functionType": "Action", + "group": "Overheat", + "name": "SetHeatPerShot", + "sentence": "Set the heat increase of _PARAM0_ to _PARAM2_ per shot", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyHeatIncreasePerShot" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Heat increase per shot (Range: 0 to 1)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the max ammo.", + "fullName": "Set max ammo", + "functionType": "Action", + "group": "Ammo", + "name": "SetMaxAmmo", + "sentence": "Set the max ammo of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyMaxAmmo" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyMaxAmmo" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::MaxAmmo(),Object.Behavior::AmmoQuantity())" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Max ammo", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Reset total shots fired.", + "fullName": "Reset total shots fired", + "functionType": "Action", + "group": "Stats", + "name": "ResetTotalShotsFired", + "sentence": "Reset total shots fired by _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyTotalShotsFired" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Reset total bullets created.", + "fullName": "Reset total bullets created", + "functionType": "Action", + "group": "Stats", + "name": "ResetTotalBulletsCreated", + "sentence": "Reset total bullets created by _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyTotalBulletsCreated" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Reset total reloads completed.", + "fullName": "Reset total reloads completed", + "functionType": "Action", + "group": "Stats", + "name": "ResetTotalReloadsCompleted", + "sentence": "Reset total reloads completed by _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyTotalReloadsCompleted" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the number of shots per reload.", + "fullName": "Set shots per reload", + "functionType": "Action", + "group": "Reload", + "name": "SetShotsPerReload", + "sentence": "Set the shots per reload of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyShotsPerReload" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyShotsBeforeNextReload" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::PropertyShotsPerReload()" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyShotsPerReload()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Shots per reload", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Enable (or disable) automatic reloading.", + "fullName": "Enable (or disable) automatic reloading", + "functionType": "Action", + "group": "Reload", + "name": "SetAutomaticReload", + "sentence": "Enable automatic reloading on _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyAutomaticReloading" + }, + "parameters": [ + "Object", + "Behavior", + "=" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyAutomaticReloading" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "defaultValue": "yes", + "description": "Enable automatic reloading", + "name": "Value", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Change the linear rate of cooling.", + "fullName": "Set linear cooling rate", + "functionType": "Action", + "group": "Overheat", + "name": "SetLinearCoolingRate", + "sentence": "Set the linear cooling rate of _PARAM0_ to _PARAM2_ per second", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyLinearCoolingRate" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Heat cooling rate (per second)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the exponential rate of cooling.", + "fullName": "Set exponential cooling rate", + "functionType": "Action", + "group": "Overheat", + "name": "SetExponentialCoolingRate", + "sentence": "Set the exponential cooling rate of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyExponentialCoolingRate" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Exponential cooling rate", + "name": "Value", + "supplementaryInformation": "[\"Exponential\",\"Linear\"]", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Increase ammo quantity.", + "fullName": "Increase ammo", + "functionType": "Action", + "name": "IncreaseAmmo", + "sentence": "Increase ammo of _PARAM0_ by _PARAM2_ shots", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "GetArgumentAsNumber(\"AmmoGained\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "If Max Ammo is set, do not exceed the value", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyMaxAmmo" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::MaxAmmo(),Object.Behavior::AmmoQuantity())" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::IsReloadNeeded" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "FireBullet::FireBullet::PropertyAutomaticReloading" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::ReloadAmmo" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Ammo gained", + "name": "AmmoGained", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Number of bullets to shoot at once (evenly spaced inside the Firing Arc).", + "fullName": "Bullet quantity", + "functionType": "Expression", + "group": "Multi-Fire", + "name": "BulletQuantity", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyBulletQuantity()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Angle variance, in degrees.", + "fullName": "Angle variance", + "functionType": "Expression", + "group": "Firing", + "name": "AngleVariance", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyAngleVariance()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Firing arc, in degrees.", + "fullName": "Firing arc", + "functionType": "Expression", + "group": "Multi-Fire", + "name": "FiringArc", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyFiringArc()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Heat level (Range: 0 to 1).", + "fullName": "Heat level", + "functionType": "Expression", + "group": "Overheat", + "name": "HeatLevel", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "min(1,Object.Behavior::PropertyHeatLevel())" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Firing cooldown, in seconds.", + "fullName": "Firing cooldown", + "functionType": "Expression", + "group": "Firing", + "name": "Cooldown", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyFireCooldown()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Reload duration, in seconds.", + "fullName": "Reload duration", + "functionType": "Expression", + "group": "Ammo", + "name": "ReloadDuration", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyReloadDuration()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Overheat duration, in seconds.", + "fullName": "Overheat duration", + "functionType": "Expression", + "group": "Overheat", + "name": "OverheatDuration", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyOverheatDuration()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Heat increase per shot.", + "fullName": "Heat increase per shot", + "functionType": "Expression", + "group": "Overheat", + "name": "HeatIncreasePerShot", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyHeatIncreasePerShot()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Linear cooling rate, per second.", + "fullName": "Linear cooling rate", + "functionType": "Expression", + "group": "Overheat", + "name": "LinearCoolingRate", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyLinearCoolingRate()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Exponential cooling rate, per second.", + "fullName": "Exponential cooling rate", + "functionType": "Expression", + "group": "Overheat", + "name": "ExponentialCoolingRate", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyExponentialCoolingRate()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Max ammo.", + "fullName": "Max ammo", + "functionType": "Expression", + "group": "Ammo", + "name": "MaxAmmo", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyMaxAmmo()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Total shots fired (multi-bullet shots are considered one shot).", + "fullName": "Shots fired", + "functionType": "Expression", + "group": "Stats", + "name": "TotalShotsFired", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTotalShotsFired()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Total bullets created.", + "fullName": "Bullets created", + "functionType": "Expression", + "group": "Stats", + "name": "TotalBulletsCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTotalBulletsCreated()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Reloads completed.", + "fullName": "Reloads completed", + "functionType": "Expression", + "group": "Stats", + "name": "TotalReloadsCompleted", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTotalReloadsCompleted()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Ammo quantity.", + "fullName": "Ammo quantity", + "functionType": "Expression", + "group": "Ammo", + "name": "AmmoQuantity", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyAmmoQuantity()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Shots remaining before the next reload is required.", + "fullName": "Shots before next reload", + "functionType": "Expression", + "group": "Reload", + "name": "ShotsBeforeNextReload", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyShotsBeforeNextReload()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Shots per reload.", + "fullName": "Shots per reload", + "functionType": "Expression", + "group": "Reload", + "name": "ShotsPerReload", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyShotsPerReload()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Seconds remaining before the cooldown will permit a bullet to be fired.", + "fullName": "Time remaining before a bullet may be fired", + "functionType": "Expression", + "group": "Firing", + "name": "CooldownTimeLeft", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "max(0,Object.Behavior::Cooldown() - Object.ObjectTimerElapsedTime(\"__FireBullet.FiringCooldown\"))" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Seconds remaining before the overheat penalty ends.", + "fullName": "Time remaining before overheat penalty ends", + "functionType": "Expression", + "group": "Overheat", + "name": "OverheatTimeLeft", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__FireBullet.OverheatDuration\"", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "max(0, Object.Behavior::PropertyOverheatDuration() - Object.ObjectTimerElapsedTime(\"__FireBullet.OverheatDuration\"))" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if object is currently performing an ammo reload.", + "fullName": "Is ammo reloading in progress", + "functionType": "Condition", + "group": "Reload", + "name": "IsReloadInProgress", + "sentence": "_PARAM0_ is reloading ammo", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyReloadInProgress" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if object is ready to shoot.", + "fullName": "Is ready to shoot", + "functionType": "Condition", + "group": "Firing", + "name": "IsReadyToShoot", + "sentence": "_PARAM0_ is ready to shoot", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Check if ready to shoot", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Verify that the gun has ammo", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsOutOfAmmo" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Verify that the gun does not need to be reloaded and is not currently reloading", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsReloadNeeded" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsReloadInProgress" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Verify gun is not shooting sooner than the proper rate of fire", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsFiringCooldownActive" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Verify the gun is not overheated", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsOverheated" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if automatic reloading is enabled.", + "fullName": "Is automatic reloading enabled", + "functionType": "Condition", + "group": "Reload", + "name": "IsAutomaticReloadingEnabled", + "sentence": "Automatic reloading is enabled on_PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyAutomaticReloading" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if ammo is unlimited.", + "fullName": "Is ammo unlimited", + "functionType": "Condition", + "group": "Ammo", + "name": "IsUnlimitedAmmo", + "sentence": "_PARAM0_ has unlimited ammo", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyUnlimitedAmmo" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if object has no ammo available.", + "fullName": "Is out of ammo", + "functionType": "Condition", + "group": "Ammo", + "name": "IsOutOfAmmo", + "sentence": "_PARAM0_ is out of ammo", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsUnlimitedAmmo" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "FireBullet::FireBullet::PropertyAmmoQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if object needs to reload ammo.", + "fullName": "Is a reload needed", + "functionType": "Condition", + "group": "Reload", + "name": "IsReloadNeeded", + "sentence": "_PARAM0_ needs to reload ammo", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Shots per reload must not be \"0\"", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyShotsPerReload" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + }, + { + "type": { + "value": "FireBullet::FireBullet::PropertyShotsBeforeNextReload" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if object is overheated.", + "fullName": "Is overheated", + "functionType": "Condition", + "group": "Overheat", + "name": "IsOverheated", + "sentence": "_PARAM0_ is overheated", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyHeatLevel" + }, + "parameters": [ + "Object", + "Behavior", + ">=", + "1" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::OverheatTimeLeft()", + ">", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if firing cooldown is active.", + "fullName": "Is firing cooldown active", + "functionType": "Condition", + "group": "Firing", + "name": "IsFiringCooldownActive", + "sentence": "Firing cooldown is active on _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::CooldownTimeLeft()", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0.1", + "type": "Number", + "label": "Firing cooldown (seconds)", + "description": "Object cannot shoot while firing cooldown is active", + "group": "Shooting configuration", + "extraInformation": [], + "hidden": false, + "name": "FireCooldown" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "HasJustFired" + }, + { + "value": "45", + "type": "Number", + "label": "Firing arc (degrees)", + "description": "Multi-Fire bullets will be evenly spaced inside the Firing Arc", + "group": "Multi-Fire", + "extraInformation": [], + "hidden": false, + "name": "FiringArc" + }, + { + "value": "1", + "type": "Number", + "label": "Number of bullets created at once (Multi-Fire)", + "description": "Multi-Fire bullets will be evenly spaced inside the Firing Arc", + "group": "Multi-Fire", + "extraInformation": [], + "hidden": false, + "name": "BulletQuantity" + }, + { + "value": "0", + "type": "Number", + "label": "Angle variance (degrees)", + "description": "Used to simulate imperfect aim (Range: 0 to 180 degrees)", + "group": "Shooting configuration", + "extraInformation": [], + "hidden": false, + "name": "AngleVariance" + }, + { + "value": "true", + "type": "Boolean", + "label": "Rotate bullet to match trajectory", + "description": "", + "group": "Shooting configuration", + "extraInformation": [], + "hidden": false, + "name": "RotateBullet" + }, + { + "value": "0", + "type": "Number", + "label": "Ammo quantity (current)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "AmmoQuantity" + }, + { + "value": "0", + "type": "Number", + "label": "Shots per reload ", + "description": "Use 0 to disable reloading", + "group": "Reload", + "extraInformation": [], + "hidden": false, + "name": "ShotsPerReload" + }, + { + "value": "1", + "type": "Number", + "label": "Reloading duration (seconds)", + "description": "Object cannot shoot while reloading is in progress", + "group": "Reload", + "extraInformation": [], + "hidden": false, + "name": "ReloadDuration" + }, + { + "value": "0", + "type": "Number", + "label": "Max ammo ", + "description": "Use \"0\" to disable restrictions on ammo capacity", + "group": "Ammo", + "extraInformation": [], + "hidden": false, + "name": "MaxAmmo" + }, + { + "value": "0", + "type": "Number", + "label": "Shots before next reload", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ShotsBeforeNextReload" + }, + { + "value": "0", + "type": "Number", + "label": "Total shots fired", + "description": "Regardless of how many bullets are created, only 1 shot will be counted per frame", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TotalShotsFired" + }, + { + "value": "0", + "type": "Number", + "label": "Total bullets created", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TotalBulletsCreated" + }, + { + "value": "0", + "type": "Number", + "label": "Starting ammo", + "description": "", + "group": "Ammo", + "extraInformation": [], + "hidden": false, + "name": "StartingAmmo" + }, + { + "value": "0", + "type": "Number", + "label": "Total reloads completed", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TotalReloadsCompleted" + }, + { + "value": "true", + "type": "Boolean", + "label": "Unlimited ammo", + "description": "", + "group": "Ammo", + "extraInformation": [], + "hidden": false, + "name": "UnlimitedAmmo" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ReloadInProgress" + }, + { + "value": "0", + "type": "Number", + "label": "Heat increase per shot (Range: 0 to 1)", + "description": " Object is overheated when Heat reaches 1", + "group": "Overheat", + "extraInformation": [], + "hidden": false, + "name": "HeatIncreasePerShot" + }, + { + "value": "0", + "type": "Number", + "label": "Heat level (Range: 0 to 1)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "HeatLevel" + }, + { + "value": "true", + "type": "Boolean", + "label": "Reload automatically", + "description": "", + "group": "Reload", + "extraInformation": [], + "hidden": false, + "name": "AutomaticReloading" + }, + { + "value": "0", + "type": "Number", + "label": "Overheat duration (seconds) ", + "description": "Object cannot shoot while overheat duration is active", + "group": "Overheat", + "extraInformation": [], + "hidden": false, + "name": "OverheatDuration" + }, + { + "value": "0.1", + "type": "Number", + "label": "Linear cooling rate (per second)", + "description": "", + "group": "Overheat", + "extraInformation": [], + "hidden": false, + "name": "LinearCoolingRate" + }, + { + "value": "0.3", + "type": "Number", + "label": "Exponential cooling rate (per second)", + "description": "Exponential cooling happens faster when heat is high and slower when heat is low", + "group": "Overheat", + "extraInformation": [ + "Linear", + "Exponential" + ], + "hidden": false, + "name": "ExponentialCoolingRate" + } + ], + "sharedPropertyDescriptors": [] } ], - "behaviorsSharedData": [ - { - "name": "DrawResourceBar", - "type": "DrawResourceBarOLD::DrawResourceBarOLD" - }, - { - "name": "DrawResourceBar222", - "type": "ResourceBar::DrawResourceBar" - }, - { - "name": "Health", - "type": "Health::Health" - }, - { - "name": "ShakeObject_PositionAngleScale", - "type": "ShakeObject::ShakeObject_PositionAngleScale" - }, - { - "name": "Shield", - "type": "Health::Shield" - }, - { - "name": "Sticker", - "type": "Sticker::Sticker" - }, - { - "name": "TiledResourceBar", - "type": "ResourceBar::TiledResourceBar" - }, - { - "name": "UnitResourceBar", - "type": "ResourceBar::SpriteResourceBar" - } - ] - } - ], - "externalEvents": [], - "eventsFunctionsExtensions": [ + "eventsBasedObjects": [] + }, { "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", "category": "Input", @@ -3754,9 +11461,9 @@ "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", "name": "ResourceBar", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/UI Essentials/UI Essentials_sliders_options.svg", - "shortDescription": "Displays a bar that represents a resource in the game (health, shield, mana, ammo, etc)", + "shortDescription": "Display a bar that represents a resource in the game (health, shield, mana, ammo, etc)", "version": "0.0.1", - "description": "Solid resource bar\n\nUnit resource bar", + "description": "The resource bar can be displayed using these objects:\n\n- Shape painter\n- Tiled sprite\n- Sprite\n", "origin": { "identifier": "DraggableSliderControl", "name": "gdevelop-extension-store" @@ -3769,7 +11476,8 @@ "mana", "shield", "hearts", - "lives" + "lives", + "ammo" ], "authorIds": [ "IWykYNRvhCZBN3vEgKEbBPOR3Oc2", @@ -3780,8 +11488,8 @@ "eventsBasedBehaviors": [ { "description": "Draws a solid bar that represents a resource in the game (health, shield, mana, ammo, etc)", - "fullName": "Draw resource bar", - "name": "DrawResourceBar", + "fullName": "Resource bar (shape painter)", + "name": "ResourceBar_ShapePainter", "objectType": "PrimitiveDrawing::Drawer", "eventsFunctions": [ { @@ -3837,7 +11545,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::SetPropertyValue" + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValue" }, "parameters": [ "Object", @@ -3854,7 +11562,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::UpdateHitbox" + "value": "ResourceBar::ResourceBar_ShapePainter::UpdateHitbox" }, "parameters": [ "Object", @@ -3875,7 +11583,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::DrawResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", "type": "behavior" } ], @@ -3892,7 +11600,7 @@ "colorG": 176, "colorR": 74, "creationTime": 0, - "name": "Slider drawing", + "name": "Draw resource bar (if needed)", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ @@ -3901,7 +11609,7 @@ "conditions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::PropertyNeedRedraw" + "value": "ResourceBar::ResourceBar_ShapePainter::PropertyNeedRedraw" }, "parameters": [ "Object", @@ -3929,7 +11637,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::SetPropertyNeedRedraw" + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" }, "parameters": [ "Object", @@ -4121,8 +11829,301 @@ } ] } - ], - "parameters": [] + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Draw a resource bar that shows current and max values.", + "fullName": "Draw a resource bar (shape painter)", + "functionType": "Action", + "name": "DrawResourceBar", + "sentence": "Draw a resource bar using _PARAM0_ with current value _PARAM2_ and max value _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set values", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Tween::Ease(Object.Behavior::PropertyEasing(), Object.Behavior::Value(), GetArgumentAsNumber(\"CurrentValue\"), Object.Behavior::PropertyEasingSpeed())", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetValueMax" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsNumber(\"MaxValue\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "type": "behavior" + }, + { + "description": "Current value", + "name": "CurrentValue", + "type": "expression" + }, + { + "description": "Max value", + "name": "MaxValue", + "supplementaryInformation": "Health::Health", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Draw a resource bar based on the health points of an object.", + "fullName": "Draw a health bar", + "functionType": "Action", + "name": "DrawHealthBar", + "sentence": "Draw a resource bar using _PARAM0_ based on the health points of _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set values", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Tween::Ease(Object.Behavior::PropertyEasing(), Object.Behavior::Value(), ObjectWithHealth.HealthBehavior::Health(), Object.Behavior::PropertyEasingSpeed())", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetValueMax" + }, + "parameters": [ + "Object", + "Behavior", + "ObjectWithHealth.HealthBehavior::MaxHealth()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "type": "behavior" + }, + { + "description": "Object with health", + "name": "ObjectWithHealth", + "type": "objectList" + }, + { + "description": "Health behavior", + "name": "HealthBehavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Draw a resource bar based on the shield points of an object.", + "fullName": "Draw a shield bar", + "functionType": "Action", + "name": "DrawShieldBar", + "sentence": "Draw a resource bar using _PARAM0_ based on the shield points of _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set values", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Tween::Ease(Object.Behavior::PropertyEasing(), Object.Behavior::Value(), ObjectWithShield.ShieldBehavior::ShieldPoints(), Object.Behavior::PropertyEasingSpeed())", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetValueMax" + }, + "parameters": [ + "Object", + "Behavior", + "ObjectWithShield.ShieldBehavior::MaxShield()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "type": "behavior" + }, + { + "description": "Object with shield", + "name": "ObjectWithShield", + "type": "objectList" + }, + { + "description": "Shield behavior", + "name": "ShieldBehavior", + "supplementaryInformation": "Health::Shield", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Draw a resource bar based on the ammo of an object.", + "fullName": "Draw an ammo bar", + "functionType": "Action", + "name": "DrawAmmoBar", + "sentence": "Draw a resource bar using _PARAM0_ based on the ammo of _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set values", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Tween::Ease(Object.Behavior::PropertyEasing(), Object.Behavior::Value(), ObjectWithFireBullet.FireBulletBehavior::AmmoQuantity(), Object.Behavior::PropertyEasingSpeed())", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetValueMax" + }, + "parameters": [ + "Object", + "Behavior", + "ObjectWithFireBullet.FireBulletBehavior::MaxAmmo()", + "" + ] + } + ] } ], "parameters": [ @@ -4135,17 +12136,28 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::DrawResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "type": "behavior" + }, + { + "description": "Object with fire bullet", + "name": "ObjectWithFireBullet", + "type": "objectList" + }, + { + "description": "Fire bullet behavior", + "name": "FireBulletBehavior", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { - "description": "The value of the slider (based on position of the thumb).", - "fullName": "Slider value", + "description": "Value of the resource.", + "fullName": "Resource value", "functionType": "Expression", - "group": "Slider", + "group": "Resource value", "name": "Value", "sentence": "", "events": [ @@ -4177,17 +12189,17 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::DrawResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", "type": "behavior" } ], "objectGroups": [] }, { - "description": "Change the value of a slider (this will move the thumb to the correct position).", - "fullName": "Slider value", + "description": "Change the value of the resource.", + "fullName": "Resource value", "functionType": "Action", - "group": "Slider", + "group": "Resource value", "name": "SetValue", "sentence": "Change the value of _PARAM0_: _PARAM2_", "events": [ @@ -4196,7 +12208,7 @@ "conditions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::PropertyTickSpacing" + "value": "ResourceBar::ResourceBar_ShapePainter::PropertyTickSpacing" }, "parameters": [ "Object", @@ -4209,7 +12221,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::SetPropertyValue" + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValue" }, "parameters": [ "Object", @@ -4225,7 +12237,7 @@ "conditions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::PropertyTickSpacing" + "value": "ResourceBar::ResourceBar_ShapePainter::PropertyTickSpacing" }, "parameters": [ "Object", @@ -4238,7 +12250,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::SetPropertyValue" + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValue" }, "parameters": [ "Object", @@ -4254,7 +12266,7 @@ "conditions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::PropertyValue" + "value": "ResourceBar::ResourceBar_ShapePainter::PropertyValue" }, "parameters": [ "Object", @@ -4267,7 +12279,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::SetPropertyValue" + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValue" }, "parameters": [ "Object", @@ -4283,7 +12295,7 @@ "conditions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::PropertyValue" + "value": "ResourceBar::ResourceBar_ShapePainter::PropertyValue" }, "parameters": [ "Object", @@ -4296,7 +12308,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::SetPropertyValue" + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValue" }, "parameters": [ "Object", @@ -4326,7 +12338,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::SetPropertyValueOffset" + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValueOffset" }, "parameters": [ "Object", @@ -4337,7 +12349,7 @@ }, { "type": { - "value": "ResourceBar::DrawResourceBar::SetPropertyNeedRedraw" + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" }, "parameters": [ "Object", @@ -4358,7 +12370,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::DrawResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", "type": "behavior" }, { @@ -4370,10 +12382,10 @@ "objectGroups": [] }, { - "description": "The minimum value of a slider.", - "fullName": "Slider minimum value", + "description": "Minimum value of the resource.", + "fullName": "Resource minimum value", "functionType": "Expression", - "group": "Slider value configuration", + "group": "Resource value", "name": "ValueMin", "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ @@ -4405,17 +12417,17 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::DrawResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", "type": "behavior" } ], "objectGroups": [] }, { - "description": "Change the minimum value of a slider.", - "fullName": "Slider minimum value", + "description": "Change the minimum value of the resource.", + "fullName": "Resource minimum value", "functionType": "Action", - "group": "Slider value configuration", + "group": "Resource value", "name": "SetValueMin", "sentence": "Change the minimum value of _PARAM0_: _PARAM2_", "events": [ @@ -4425,7 +12437,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::SetPropertyValueMin" + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValueMin" }, "parameters": [ "Object", @@ -4436,7 +12448,7 @@ }, { "type": { - "value": "ResourceBar::DrawResourceBar::SetValue" + "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" }, "parameters": [ "Object", @@ -4458,7 +12470,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::DrawResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", "type": "behavior" }, { @@ -4470,10 +12482,10 @@ "objectGroups": [] }, { - "description": "The maximum value of a slider.", - "fullName": "Slider maximum value", + "description": "Maximum value of the resource.", + "fullName": "Resource maximum value", "functionType": "Expression", - "group": "Slider value configuration", + "group": "Resource value", "name": "ValueMax", "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ @@ -4505,17 +12517,17 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::DrawResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", "type": "behavior" } ], "objectGroups": [] }, { - "description": "Thickness of Bar.", - "fullName": "Slider Bar thickness", + "description": "Thickness of the resource bar.", + "fullName": "Resource bar thickness", "functionType": "Expression", - "group": "Slider Bar configuration", + "group": "Resource bar configuration", "name": "BarThickness", "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ @@ -4547,17 +12559,17 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::DrawResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", "type": "behavior" } ], "objectGroups": [] }, { - "description": "Length of Bar.", - "fullName": "Slider Bar length", + "description": "Length of the resource bar.", + "fullName": "Resource bar length", "functionType": "Expression", - "group": "Slider Bar configuration", + "group": "Resource bar configuration", "name": "BarLength", "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ @@ -4589,17 +12601,17 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::DrawResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", "type": "behavior" } ], "objectGroups": [] }, { - "description": "Change the maximum value of a slider.", - "fullName": "Slider maximum value", + "description": "Change the maximum value of the resource.", + "fullName": "Resource maximum value", "functionType": "Action", - "group": "Slider value configuration", + "group": "Resource value", "name": "SetValueMax", "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ @@ -4609,7 +12621,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::SetPropertyValueMax" + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValueMax" }, "parameters": [ "Object", @@ -4620,7 +12632,7 @@ }, { "type": { - "value": "ResourceBar::DrawResourceBar::SetValue" + "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" }, "parameters": [ "Object", @@ -4642,7 +12654,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::DrawResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", "type": "behavior" }, { @@ -4654,10 +12666,10 @@ "objectGroups": [] }, { - "description": "The tick spacing of a slider.", + "description": "Tick spacing of the resource bar.", "fullName": "Tick spacing", "functionType": "Expression", - "group": "Slider value configuration", + "group": "Resource bar configuration", "name": "TickSpacing", "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", "events": [ @@ -4689,7 +12701,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::DrawResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", "type": "behavior" }, { @@ -4701,10 +12713,10 @@ "objectGroups": [] }, { - "description": "Change the tick spacing of a slider.", + "description": "Change the tick spacing of the resource bar.", "fullName": "Tick spacing", "functionType": "Action", - "group": "Slider value configuration", + "group": "Resource bar configuration", "name": "SetTickSpacing", "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", "events": [ @@ -4714,7 +12726,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::SetPropertyTickSpacing" + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyTickSpacing" }, "parameters": [ "Object", @@ -4725,7 +12737,7 @@ }, { "type": { - "value": "ResourceBar::DrawResourceBar::SetValue" + "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" }, "parameters": [ "Object", @@ -4747,7 +12759,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::DrawResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", "type": "behavior" }, { @@ -4759,12 +12771,12 @@ "objectGroups": [] }, { - "description": "Change length of Bar.", + "description": "Change length of the resource bar.", "fullName": "Bar length", "functionType": "Action", - "group": "Slider Bar configuration", + "group": "Resource bar configuration", "name": "SetBarLength", - "sentence": "Change Bar length of _PARAM0_ to _PARAM2_ px", + "sentence": "Change length of _PARAM0_ to _PARAM2_ px", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -4772,7 +12784,7 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::SetPropertyBarLength" + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyBarLength" }, "parameters": [ "Object", @@ -4783,161 +12795,17 @@ }, { "type": { - "value": "ResourceBar::DrawResourceBar::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move thumb to correct place (based on new Bar size)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar::SetValue" + "value": "ResourceBar::ResourceBar_ShapePainter::UpdateHitbox" }, "parameters": [ "Object", "Behavior", - "Object.Behavior::PropertyValue()", "" ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::DrawResourceBar", - "type": "behavior" - }, - { - "description": "Bar width", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change thickness of Bar.", - "fullName": "Bar thickness", - "functionType": "Action", - "group": "Slider Bar configuration", - "name": "SetBarThickness", - "sentence": "Change Bar thickness of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar::SetPropertyBarThickness" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::DrawResourceBar", - "type": "behavior" - }, - { - "description": "Bar thickness", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change opacity of inactive Bar.", - "fullName": "Inactive Bar opacity", - "functionType": "Action", - "group": "Slider Bar configuration", - "name": "SetInactiveBarOpacity", - "sentence": "Change inactive Bar opacity of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar::SetPropertyInactiveBarOpacity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] }, { "type": { - "value": "ResourceBar::DrawResourceBar::SetPropertyNeedRedraw" + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" }, "parameters": [ "Object", @@ -4946,60 +12814,20 @@ ] } ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::DrawResourceBar", - "type": "behavior" }, - { - "description": "Inactive Bar opacity", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change opacity of active Bar.", - "fullName": "Active Bar opacity", - "functionType": "Action", - "group": "Slider Bar configuration", - "name": "SetActiveBarOpacity", - "sentence": "Change active Bar opacity of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar::SetPropertyActiveBarOpacity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::SetPropertyNeedRedraw" + "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" }, "parameters": [ "Object", "Behavior", - "yes" + "Object.Behavior::PropertyValue()", + "" ] } ] @@ -5015,11 +12843,11 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::DrawResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", "type": "behavior" }, { - "description": "Active Bar opacity", + "description": "Bar width", "name": "Value", "type": "expression" } @@ -5027,12 +12855,12 @@ "objectGroups": [] }, { - "description": "Change the color of the Bar that is LEFT of the thumb.", - "fullName": "Active Bar color ", + "description": "Change thickness of the resource bar.", + "fullName": "Bar thickness", "functionType": "Action", - "group": "Slider Bar configuration", - "name": "SetActiveBarColor", - "sentence": "Change active Bar color of _PARAM0_ to _PARAM2_", + "group": "Resource bar configuration", + "name": "SetBarThickness", + "sentence": "Change thickness of _PARAM0_ to _PARAM2_ px", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -5040,18 +12868,18 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::SetPropertyActiveBarColor" + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyBarThickness" }, "parameters": [ "Object", "Behavior", "=", - "GetArgumentAsString(\"Color\")" + "GetArgumentAsNumber(\"Value\")" ] }, { "type": { - "value": "ResourceBar::DrawResourceBar::SetPropertyNeedRedraw" + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" }, "parameters": [ "Object", @@ -5072,24 +12900,24 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::DrawResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", "type": "behavior" }, { - "description": "Active Bar color", - "name": "Color", - "type": "color" + "description": "Bar thickness", + "name": "Value", + "type": "expression" } ], "objectGroups": [] }, { - "description": "Change the color of the Bar that is RIGHT of the thumb.", - "fullName": "Inactive Bar color", + "description": "Change opacity of the inactive portion of a resource bar.", + "fullName": "Inactive opacity", "functionType": "Action", - "group": "Slider Bar configuration", - "name": "SetInactiveBarColor", - "sentence": "Change inactive Bar color of _PARAM0_ to _PARAM2_", + "group": "Resource bar configuration", + "name": "SetInactiveBarOpacity", + "sentence": "Change opacity of inactive part of _PARAM0_ to _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -5097,18 +12925,18 @@ "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::SetPropertyInactiveBarColor" + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyInactiveBarOpacity" }, "parameters": [ "Object", "Behavior", "=", - "GetArgumentAsString(\"Color\")" + "GetArgumentAsNumber(\"Value\")" ] }, { "type": { - "value": "ResourceBar::DrawResourceBar::SetPropertyNeedRedraw" + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" }, "parameters": [ "Object", @@ -5129,25 +12957,24 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::DrawResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", "type": "behavior" }, { - "description": "Inactive Bar color", - "name": "Color", - "type": "color" + "description": "Inactive bar opacity", + "name": "Value", + "type": "expression" } ], "objectGroups": [] }, { - "description": "Update the hitbox.", - "fullName": "Update hitbox", + "description": "Change opacity of the active portion of a resource bar.", + "fullName": "Active bar opacity", "functionType": "Action", - "group": "Private", - "name": "UpdateHitbox", - "private": true, - "sentence": "Update the hitbox of _PARAM0_", + "group": "Resource bar configuration", + "name": "SetActiveBarOpacity", + "sentence": "Change opacity of active part of _PARAM0_ to _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -5155,24 +12982,23 @@ "actions": [ { "type": { - "value": "PrimitiveDrawing::SetRotationCenter" + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyActiveBarOpacity" }, "parameters": [ "Object", - "Object.Behavior::PropertyBarLength() / 2", - "Object.Behavior::PropertyBarThickness() / 2" + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" ] }, { "type": { - "value": "PrimitiveDrawing::SetRectangularCollisionMask" + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" }, "parameters": [ "Object", - "0", - "0", - "Object.Behavior::PropertyBarLength()", - "Object.Behavior::PropertyBarThickness()" + "Behavior", + "yes" ] } ] @@ -5188,56 +13014,48 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::DrawResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", "type": "behavior" + }, + { + "description": "Active bar opacity", + "name": "Value", + "type": "expression" } ], "objectGroups": [] }, { - "description": "Draw health bar.", - "fullName": "Draw health bar", + "description": "Change the color of the active area of bar.", + "fullName": "Active bar color ", "functionType": "Action", - "name": "DrawHealthBar", - "sentence": "Draw health bar with _PARAM0_ based on health of _PARAM2_", + "group": "Resource bar configuration", + "name": "SetActiveBarColor", + "sentence": "Change active bar color of _PARAM0_ to _PARAM2_", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set values", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::SetValue" + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyActiveBarColor" }, "parameters": [ "Object", "Behavior", - "Tween::Ease(Object.Behavior::PropertyEasing(), Object.Behavior::Value(), ObjectWithHealth.HealthBehavior::Health(), Object.Behavior::PropertyEasingSpeed())", - "" + "=", + "GetArgumentAsString(\"Color\")" ] }, { "type": { - "value": "ResourceBar::DrawResourceBar::SetValueMax" + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" }, "parameters": [ "Object", "Behavior", - "ObjectWithHealth.HealthBehavior::MaxHealth()", - "" + "yes" ] } ] @@ -5253,67 +13071,48 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::DrawResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", "type": "behavior" }, { - "description": "Object with health", - "name": "ObjectWithHealth", - "type": "objectList" - }, - { - "description": "Health behavior", - "name": "HealthBehavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" + "description": "Active bar color", + "name": "Color", + "type": "color" } ], "objectGroups": [] }, { - "description": "Draw shield bar.", - "fullName": "Draw shield bar", + "description": "Change the color of the inactive area of bar.", + "fullName": "Inactive bar color", "functionType": "Action", - "name": "DrawShieldBar", - "sentence": "Draw shield bar with _PARAM0_ based on shield of _PARAM2_", + "group": "Resource bar configuration", + "name": "SetInactiveBarColor", + "sentence": "Change inactive bar color of _PARAM0_ to _PARAM2_", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set values", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::SetValue" + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyInactiveBarColor" }, "parameters": [ "Object", "Behavior", - "Tween::Ease(Object.Behavior::PropertyEasing(), Object.Behavior::Value(), ObjectWithShield.ShieldBehavior::ShieldPoints(), Object.Behavior::PropertyEasingSpeed())", - "" + "=", + "GetArgumentAsString(\"Color\")" ] }, { "type": { - "value": "ResourceBar::DrawResourceBar::SetValueMax" + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" }, "parameters": [ "Object", "Behavior", - "ObjectWithShield.ShieldBehavior::MaxShield()", - "" + "yes" ] } ] @@ -5329,67 +13128,50 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::DrawResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", "type": "behavior" }, { - "description": "Object with shield", - "name": "ObjectWithShield", - "type": "objectList" - }, - { - "description": "Shield behavior", - "name": "ShieldBehavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" + "description": "Inactive bar color", + "name": "Color", + "type": "color" } ], "objectGroups": [] }, { - "description": "Draw resource bar.", - "fullName": "Draw resource bar", + "description": "Update the hitbox.", + "fullName": "Update hitbox", "functionType": "Action", - "name": "DrawResourceBar", - "sentence": "Draw resource bar with _PARAM0_ with current value _PARAM2_ and max value _PARAM3_", + "group": "Private", + "name": "UpdateHitbox", + "private": true, + "sentence": "Update the hitbox of _PARAM0_", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set values", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::DrawResourceBar::SetValue" + "value": "PrimitiveDrawing::SetRotationCenter" }, "parameters": [ "Object", - "Behavior", - "Tween::Ease(Object.Behavior::PropertyEasing(), Object.Behavior::Value(), GetArgumentAsNumber(\"CurrentValue\"), Object.Behavior::PropertyEasingSpeed())", - "" + "Object.Behavior::PropertyBarLength() / 2", + "Object.Behavior::PropertyBarThickness() / 2" ] }, { "type": { - "value": "ResourceBar::DrawResourceBar::SetValueMax" + "value": "PrimitiveDrawing::SetRectangularCollisionMask" }, "parameters": [ "Object", - "Behavior", - "GetArgumentAsNumber(\"MaxValue\")", - "" + "0", + "0", + "Object.Behavior::PropertyBarLength()", + "Object.Behavior::PropertyBarThickness()" ] } ] @@ -5405,19 +13187,8 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::DrawResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", "type": "behavior" - }, - { - "description": "Current value", - "name": "CurrentValue", - "type": "expression" - }, - { - "description": "Max value", - "name": "MaxValue", - "supplementaryInformation": "Health::Health", - "type": "expression" } ], "objectGroups": [] @@ -5571,8 +13342,8 @@ }, { "description": "Displays a line of objects that represent a resource in the game (hearts, lives, ammo, etc). \nUse the same image for the resource bar and the unit objects.", - "fullName": "Unit resource bar", - "name": "SpriteResourceBar", + "fullName": "Resource bar (sprite)", + "name": "ResourceBar_Sprite", "objectType": "", "eventsFunctions": [ { @@ -5587,7 +13358,7 @@ "actions": [ { "type": { - "value": "ResourceBar::SpriteResourceBar::SetPropertyCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyCurrentQuantity" }, "parameters": [ "Object", @@ -5608,18 +13379,18 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::SpriteResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", "type": "behavior" } ], "objectGroups": [] }, { - "description": "Draw a unit resource bar made from objects.", - "fullName": "Draw a unit resource bar", + "description": "Draw a resource bar made from sprite objects.", + "fullName": "Draw a resource bar (sprite)", "functionType": "Action", - "name": "DrawUnitBar", - "sentence": "Draw unit bar _PARAM0_ with _PARAM2_ objects", + "name": "DrawResourceBar", + "sentence": "Draw a resource bar located at _PARAM0_ that is made from _PARAM2_", "events": [ { "colorB": 228, @@ -5636,7 +13407,7 @@ "whileConditions": [ { "type": { - "value": "ResourceBar::SpriteResourceBar::PropertyNextUnitToCreate" + "value": "ResourceBar::ResourceBar_Sprite::PropertyNextUnitToCreate" }, "parameters": [ "Object", @@ -5688,7 +13459,7 @@ }, { "type": { - "value": "ResourceBar::SpriteResourceBar::SetPropertyNextUnitToCreate" + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyNextUnitToCreate" }, "parameters": [ "Object", @@ -6000,7 +13771,7 @@ "actions": [ { "type": { - "value": "ResourceBar::SpriteResourceBar::SetPropertyNextUnitToCreate" + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyNextUnitToCreate" }, "parameters": [ "Object", @@ -6026,7 +13797,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::SpriteResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", "type": "behavior" }, { @@ -6051,7 +13822,7 @@ "actions": [ { "type": { - "value": "ResourceBar::SpriteResourceBar::SetPropertyEmptyUnitColorTint" + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyEmptyUnitColorTint" }, "parameters": [ "Object", @@ -6072,7 +13843,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::SpriteResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", "type": "behavior" }, { @@ -6097,7 +13868,7 @@ "actions": [ { "type": { - "value": "ResourceBar::SpriteResourceBar::SetPropertyActiveUnitColorTint" + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyActiveUnitColorTint" }, "parameters": [ "Object", @@ -6118,7 +13889,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::SpriteResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", "type": "behavior" }, { @@ -6143,7 +13914,7 @@ "actions": [ { "type": { - "value": "ResourceBar::SpriteResourceBar::SetPropertyEmptyUnitOpacity" + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyEmptyUnitOpacity" }, "parameters": [ "Object", @@ -6164,7 +13935,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::SpriteResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", "type": "behavior" }, { @@ -6189,7 +13960,7 @@ "actions": [ { "type": { - "value": "ResourceBar::SpriteResourceBar::SetPropertyActiveUnitOpacity" + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyActiveUnitOpacity" }, "parameters": [ "Object", @@ -6210,7 +13981,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::SpriteResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", "type": "behavior" }, { @@ -6235,7 +14006,7 @@ "actions": [ { "type": { - "value": "ResourceBar::SpriteResourceBar::SetPropertyEmptyUnitAnimationNumber" + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyEmptyUnitAnimationNumber" }, "parameters": [ "Object", @@ -6256,7 +14027,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::SpriteResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", "type": "behavior" }, { @@ -6280,7 +14051,7 @@ "actions": [ { "type": { - "value": "ResourceBar::SpriteResourceBar::SetPropertyMaxQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyMaxQuantity" }, "parameters": [ "Object", @@ -6301,7 +14072,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::SpriteResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", "type": "behavior" }, { @@ -6316,7 +14087,8 @@ { "description": "Change the current quantity of units.", "fullName": "Unit quantity", - "functionType": "Action", + "functionType": "ActionWithOperator", + "getterName": "CurrentQuantity", "name": "SetCurrentQuantity", "sentence": "Change the unit quantity of _PARAM0_ to _PARAM2_", "events": [ @@ -6326,7 +14098,7 @@ "actions": [ { "type": { - "value": "ResourceBar::SpriteResourceBar::SetPropertyCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyCurrentQuantity" }, "parameters": [ "Object", @@ -6347,7 +14119,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::SpriteResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", "type": "behavior" }, { @@ -6372,7 +14144,7 @@ "actions": [ { "type": { - "value": "ResourceBar::SpriteResourceBar::SetPropertyCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyCurrentQuantity" }, "parameters": [ "Object", @@ -6393,7 +14165,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::SpriteResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", "type": "behavior" }, { @@ -6418,7 +14190,7 @@ "actions": [ { "type": { - "value": "ResourceBar::SpriteResourceBar::SetPropertyCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyCurrentQuantity" }, "parameters": [ "Object", @@ -6439,7 +14211,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::SpriteResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", "type": "behavior" }, { @@ -6450,6 +14222,86 @@ } ], "objectGroups": [] + }, + { + "description": "quantity", + "fullName": "Current quantity", + "functionType": "ExpressionAndCondition", + "name": "CurrentQuantity", + "sentence": "quantity", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyCurrentQuantity()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "max quantity", + "fullName": "Max quantity", + "functionType": "ExpressionAndCondition", + "name": "MaxQuantity", + "sentence": "max quantity", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyMaxQuantity()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "type": "behavior" + } + ], + "objectGroups": [] } ], "propertyDescriptors": [ @@ -6558,8 +14410,8 @@ }, { "description": "Use a tiled sprite to display repeated objects to represent a resource in the game (hearts, lives, ammo, etc). ", - "fullName": "Tiled resource bar", - "name": "TiledResourceBar", + "fullName": "Resource bar (tiled sprite)", + "name": "ResourceBar_TiledSprite", "objectType": "TiledSpriteObject::TiledSprite", "eventsFunctions": [ { @@ -6574,7 +14426,7 @@ "actions": [ { "type": { - "value": "ResourceBar::TiledResourceBar::SetPropertyCurrentQuantity" + "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyCurrentQuantity" }, "parameters": [ "Object", @@ -6596,7 +14448,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::TiledResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", "type": "behavior" } ], @@ -6604,9 +14456,9 @@ }, { "description": "Display a tiled resource bar.", - "fullName": "Display a tiled resource bar", + "fullName": "Draw a resource bar (tiled sprite)", "functionType": "Action", - "name": "DisplayTiledBar", + "name": "DrawResourceBar", "sentence": "Display resource bar using _PARAM0_", "events": [ { @@ -6636,7 +14488,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::TiledResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", "type": "behavior" } ], @@ -6655,7 +14507,7 @@ "actions": [ { "type": { - "value": "ResourceBar::TiledResourceBar::SetPropertyCurrentQuantity" + "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyCurrentQuantity" }, "parameters": [ "Object", @@ -6677,7 +14529,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::TiledResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", "type": "behavior" }, { @@ -6714,7 +14566,7 @@ "conditions": [ { "type": { - "value": "ResourceBar::TiledResourceBar::PropertyMaxQuantity" + "value": "ResourceBar::ResourceBar_TiledSprite::PropertyMaxQuantity" }, "parameters": [ "Object", @@ -6727,7 +14579,7 @@ "actions": [ { "type": { - "value": "ResourceBar::TiledResourceBar::SetPropertyCurrentQuantity" + "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyCurrentQuantity" }, "parameters": [ "Object", @@ -6756,7 +14608,7 @@ "conditions": [ { "type": { - "value": "ResourceBar::TiledResourceBar::PropertyMaxQuantity" + "value": "ResourceBar::ResourceBar_TiledSprite::PropertyMaxQuantity" }, "parameters": [ "Object", @@ -6769,7 +14621,7 @@ "actions": [ { "type": { - "value": "ResourceBar::TiledResourceBar::SetPropertyCurrentQuantity" + "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyCurrentQuantity" }, "parameters": [ "Object", @@ -6791,7 +14643,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::TiledResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", "type": "behavior" }, { @@ -6815,7 +14667,7 @@ "actions": [ { "type": { - "value": "ResourceBar::TiledResourceBar::SetPropertyMaxQuantity" + "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyMaxQuantity" }, "parameters": [ "Object", @@ -6837,7 +14689,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::TiledResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", "type": "behavior" }, { @@ -6862,7 +14714,7 @@ "actions": [ { "type": { - "value": "ResourceBar::TiledResourceBar::SetPropertyMaxQuantity" + "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyMaxQuantity" }, "parameters": [ "Object", @@ -6884,7 +14736,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::TiledResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", "type": "behavior" }, { @@ -6896,11 +14748,11 @@ "objectGroups": [] }, { - "description": "the quantity of a tiled resource bar.", + "description": "the quantity", "fullName": "Quantity", "functionType": "ExpressionAndCondition", "name": "Quantity", - "sentence": "Quantity", + "sentence": "the quantity", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -6930,18 +14782,18 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::TiledResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", "type": "behavior" } ], "objectGroups": [] }, { - "description": "the maximum quantity of a tiled resource bar.", + "description": "the max quantity", "fullName": "Max quantity", "functionType": "ExpressionAndCondition", "name": "MaxQuantity", - "sentence": "Max quantity", + "sentence": "the max quantity", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -6971,7 +14823,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::TiledResourceBar", + "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", "type": "behavior" } ], From a4d212f3f7410b0cdfa73fbf266e54e977c9e913 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 18 Nov 2022 05:26:52 +0000 Subject: [PATCH 17/98] Optimised images with calibre/image-actions --- .../resource-bar/assets/Health Bar Box.png | Bin 2983 -> 246 bytes examples/resource-bar/assets/Health Bar.png | Bin 1465 -> 945 bytes .../Health Indicator_Black Outline Empty.png | Bin 109 -> 107 bytes .../Health Indicator_Black Outline Heart.png | Bin 185 -> 143 bytes .../Health Indicator_White Outline Empty.png | Bin 110 -> 107 bytes .../Health Indicator_White Outline Heart.png | Bin 171 -> 132 bytes examples/resource-bar/assets/Heart.png | Bin 372 -> 283 bytes .../assets/tiled_Energy Bar Fill.png | Bin 2836 -> 127 bytes .../assets/tiled_Health Bar Fill.png | Bin 2849 -> 143 bytes 9 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/resource-bar/assets/Health Bar Box.png b/examples/resource-bar/assets/Health Bar Box.png index e02e8033917d6f3c47c281eff86506bb9d0ecda3..34250327ca41e3df957ed796cb844296e10ae6fc 100644 GIT binary patch delta 198 zcmV;%06G7s7xn>=IDY`BNklo)fu$NrES3(mbBIfW3{D;juWIqs25fN(m%hby}H0}@Y@mXpTA^}>FRtWddvJCU| z?LR75=h0z{{FyMHp=GID=-AekfUa#JgOq@Sgme2zwID*xBR|!G5P$##AfPq@cb=hy z`i+3-6_hgv5bC!An1pMYgxLj^-vzM^EwmBc0MTz~8yAWMm;e9(07*qoM6N<$g53>T A&Hw-a delta 2957 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 delta 78 zcmV-U0I~mTZIC2M1ZP1_K>z@;j(q!3lK=n!BuPX;R2Y?G{Qv(y13tinSC(W2GNSVT kWkluw<5YkRFw)+U0K4x9rwlpvtN;K207*qoM6N<$g27B5%>V!Z diff --git a/examples/resource-bar/assets/Health Indicator_Black Outline Heart.png b/examples/resource-bar/assets/Health Indicator_Black Outline Heart.png index 5aa581445ec690be21757417ba1f3b0b5397b3ca..63fb0516c6f97a261882860b6d9147c7f9882480 100644 GIT binary patch delta 114 zcmdnV*v~jYC7ZLrBeIx*fm;ZK886+f`@_J%;OOb%7$R{w`N#kN_RMxX=^ouD{<0^Q zn8kbw+#n>ecypl0pV>03(~qoTkX#=S=&0ck&NA7hP{l`ZlS&)Y45bu1hU~2Am+U#` Rz5*J?;OXk;vd$@?2>`!=Cw~9{ delta 157 zcmV;O0Al}-0l5K?B!2{FK}|sb0I`mI`%#ks003}FL_t&-m1F$>|33p>@c;jRhX4Qn zGf0cb{g)Pz`;X3MVPIfjkP(&tf83sh0UMhI*)$mk3x?wiCs1r)LgqXO>_%)r1c1j3A$?$-TbU|^8-ba4!kxSags|9^XCyE6{4to8fr{_r1q eqP?J3nepniLs#SeS9JjuGI+ZBxvXgSZjdBO1ZP1_K>z@;j(q!3lK=n!B}qg3{zI`e@Iw zc=N+a{Y_I3NX+eB$RH`ao?*6|33phzyxFb`}XPo zzi*%Zqq7D%PDHLkV1nRcMIZnG diff --git a/examples/resource-bar/assets/Heart.png b/examples/resource-bar/assets/Heart.png index a0177a83aedfdc89fbc31bcab299953b66bf85bf..7201cc3d32aa5c7f780a9962de3e23c262762077 100644 GIT binary patch delta 256 zcmV+b0ssE=0-FMmBYyx1a7bBm000XT000XT0n*)m`~Uy|%}GQ-R5;7El*;?gdq^FenPVaLGGYC~l6^u!)fUix;jJ@sW@@&o z38m%?JT#vOtjw7y!YjtC@1}h^1mo#?b8ol_oNP@v&&C@W72$C3#d!??0000D%45QhI$ktP+Dlow7Ks9Kd8mGudN{1)Tm zV||1mKS5bhXw|A9QZzJP5>#o(1KoM&^Tmq#OHpF`{NI<8eFgrs-fY3-*>?e5NzD0l zj3=0>2Y}C)SqOOl>16^B0Eguw#O$u$2?RHeOy6Gr&G}|-sDG`KCmAQCWZrgtl4QD? zN8|hDmY7e}^o&@Vj@6)XPWQ_#P}2KpWBUE+Y91awFI9?TmZi)QN~y%p)|IRH+JATe zsOkp5_>)0uyT>`F^X{y980Rj>Sn{^(lZ#Z+h%#|h($07*qoM6N<$g3S=Fk^lez diff --git a/examples/resource-bar/assets/tiled_Energy Bar Fill.png b/examples/resource-bar/assets/tiled_Energy Bar Fill.png index 933d8ffd410a45800f07b8c7812830583562c04f..9ad5090ffe0121d45a1a3a5390d6177e46695ddc 100644 GIT binary patch delta 77 zcmbOtRzJbQox#x4#WBR=cydLEp1~7=!xKurtpC~M%xCz=eudGK3o918%i6w?u~qTz hSA6;6qSQn`4hGdbTT{18Y;0oy0#8>zmvv4FO#tRYAD93D delta 2807 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 JPDHLkV1ke0Npb)H diff --git a/examples/resource-bar/assets/tiled_Health Bar Fill.png b/examples/resource-bar/assets/tiled_Health Bar Fill.png index 89211888888a016889ab1d6cbea22d59082c6fd9..646d2ea5e32d16397bd4eb1153a6e9b05ef92ed4 100644 GIT binary patch delta 94 zcmZ1|*3US>BAmg|)5S3);&5_Ao`BUNfx{i2KL`qc7i@K#*DfCw)u&R}*%e^tem y!;9tQzJ6HI?r!U2&)>goY5VSW_uq#P%P=y?J7{*ft+86o00f?{elF{r5}E)V=Ox$x delta 2821 zcmV+g3;Ohr0ihOf59&ghTmgWD z0l;*TI7e|ZE3OddDgXd@nX){&BsoQaTL>+22Uk}v9w^R9 z7b_GtVFF>AKrX_0nHe&HG!NkO%m4tOkrff(gY*4(&VLTB&dxTDwhmt{>c0m6B4T3W z{^ifBa6kY6;dFk{{wy!E8h|?nfNlPwCGG@hUJIag_lst-4?wj5py}FI^KkfnJUm6A zkh$5}<>chpO2k52Vaiv1{%68pz*qfj`F=e7_x0eu;v|7GU4cgg_~63K^h~83&yop* zV%+ABM}Pdc3;+Bb(;~!4V!2o<6ys46agIcqjPo+3B8fthDa9qy|77CdEc*jK-!%ZR zYCZvbku9iQV*~a}ClFY4z~c7+0P?$U!PF=S1Au6Q;m>#f??3%Vpd|o+W=WE9003S@ zBra6Svp>fO002awfhw>;8}z{#EWidF!3EsG3xE7zHiSYX#KJ-lLJDMn9CBbOtb#%) zhRv`YDqt_vKpix|QD}yfa1JiQRk#j4a1Z)n2%fLC6RbVIkUx0b+_+BaR3c znT7Zv!AJxWizFb)h!jyGOOZ85F;a?DAXP{m@;!0_Ifqlp|(=5QHQ7#Gr)$3XMd?XsE4X&sBct1q<&fbi3VB2Ov6t@q*0);U*o*S zAPZv|vv@2aYYnT0b%8a+Cb7-ge0D0knEf5Qi#@8Tp*ce{N;6lpQuCB%KL_KOarm5c zP6_8IrP_yNQcbz0DW*G2J50yT%*~?B)|oY%Ju%lZ z=bPu7*PGwBU|M)uEVih&xMfMQuC{HqePL%}7iYJ{uEXw=y_0>qeSeMpJqHbk*$%56 zS{;6Kv~mM9! zg3B(KJ}#RZ#@)!hR=4N)wtYw9={>5&Kw=W)*2gz%*kgNq+ zEef_mrsz~!DAy_nvS(#iX1~pe$~l&+o-57m%(KedkbgIv@1Ote62cPUlD4IWOIIx& zSmwQ~YB{nzae3Pc;}r!fhE@iwJh+OsDs9zItL;~pu715HdQEGAUct(O!LkCy1 z<%NCg+}G`0PgpNm-?d@-hMgNe6^V+j6x$b<6@S<$+<4_1hi}TincS4LsjI}fWY1>O zX6feMEq|U{4wkBy=9dm`4cXeX4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC- zq*U}&`cyXV(%rRT*Z6MH?i+i&_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-N zmiuj8txj!m?Z*Ss1N{dh4z}01)YTo*JycSU)_*JOM-ImyzW$x>cP$Mz4ONYt#^NJz zM0w=t_X*$k9t}F$c8q(h;Rn+nb{%IOFKR-X@|s4QQ=0o*Vq3aT%s$c9>fU<%N829{ zoHRUHc}nwC$!Xf@g42^{^3RN&m7RTlF8SPG+oHC6=VQ*_Y7cMkx)5~X(nbG^=R3SR z&VO9;xODQe+vO8ixL2C5I$v$-bm~0*lhaSfyPUh4uDM)mx$b(swR>jw=^LIm&fWCA zdGQwi*43UlJ>9+YdT;l|_x0Zv-F|W>{m#p~*>@-It-MdXU-UrjLD@syht)q@{@mE_ z+<$7occAmp+(-8Yg@e!jk@b%cLj{kSkAKUC4TkHUI6gT!;y-fz>HMcd&t%Ugo)`Y2 z{>!cx7B7DI)$7;J(U{Spm-3gBzioV_{p!H$8L!*M!p0uH$#^p{Ui4P`?ZJ24cOCDe z-w#jZd?0@)|7iKK^;6KN`;!@ylm7$*nDhK&GcDTy001CkNK#Dz0D2_=0Dyx40Dk%Z z004mL004C`008P>0026e000+nl3&F}0000?Nkls#ET2YW zczDM!>u3y*dU({sqaGgh@TiAJJv{2+Q4iCmrS3w8pFdH00000|NjF3 Xm!t<+*EhhG00000NkvXXu0mjfKaotE From 8a66d728a4f8a58d252f1c81d4a5694d776aea00 Mon Sep 17 00:00:00 2001 From: Tristan Rhodes Date: Sat, 26 Nov 2022 15:38:14 -0700 Subject: [PATCH 18/98] Started second scene - And deleted unused assets --- .../resource-bar/assets/Blue laser (01).png | Bin 708 -> 0 bytes .../resource-bar/assets/Bomb_No Shadow.png | Bin 0 -> 3145 bytes examples/resource-bar/assets/Bomb_Shadow.png | Bin 0 -> 3164 bytes examples/resource-bar/assets/Heart-1-1.png | Bin 0 -> 375 bytes examples/resource-bar/assets/Heart-1.png | Bin 0 -> 369 bytes examples/resource-bar/assets/Minus Key.png | Bin 0 -> 1225 bytes examples/resource-bar/assets/Plus Key.png | Bin 0 -> 1337 bytes .../resource-bar/assets/Ranger_Carry_1.png | Bin 242 -> 0 bytes .../resource-bar/assets/Ranger_Carry_2.png | Bin 224 -> 0 bytes .../resource-bar/assets/Ranger_Carry_3.png | Bin 243 -> 0 bytes .../resource-bar/assets/Ranger_Carry_4.png | Bin 224 -> 0 bytes .../resource-bar/assets/Ranger_Climb_1.png | Bin 213 -> 0 bytes .../resource-bar/assets/Ranger_Climb_2.png | Bin 230 -> 0 bytes .../resource-bar/assets/Ranger_Climb_3.png | Bin 213 -> 0 bytes .../resource-bar/assets/Ranger_Climb_4.png | Bin 232 -> 0 bytes .../resource-bar/assets/Ranger_Daze_1.png | Bin 238 -> 0 bytes .../resource-bar/assets/Ranger_Daze_2.png | Bin 244 -> 0 bytes .../resource-bar/assets/Ranger_Daze_3.png | Bin 238 -> 0 bytes .../resource-bar/assets/Ranger_Daze_4.png | Bin 238 -> 0 bytes examples/resource-bar/assets/Ranger_Dead.png | Bin 220 -> 0 bytes .../resource-bar/assets/Ranger_Get Up.png | Bin 217 -> 0 bytes .../resource-bar/assets/Ranger_Headbutt_1.png | Bin 262 -> 0 bytes .../resource-bar/assets/Ranger_Headbutt_2.png | Bin 259 -> 0 bytes examples/resource-bar/assets/Ranger_Hurt.png | Bin 240 -> 0 bytes .../resource-bar/assets/Ranger_Idle 1_1.png | Bin 247 -> 0 bytes .../resource-bar/assets/Ranger_Idle 1_2.png | Bin 248 -> 0 bytes .../resource-bar/assets/Ranger_Idle 1_3.png | Bin 245 -> 0 bytes .../resource-bar/assets/Ranger_Idle 1_4.png | Bin 247 -> 0 bytes .../resource-bar/assets/Ranger_Idle 2_1.png | Bin 230 -> 0 bytes .../resource-bar/assets/Ranger_Idle 2_2.png | Bin 232 -> 0 bytes .../resource-bar/assets/Ranger_Idle 2_3.png | Bin 227 -> 0 bytes .../resource-bar/assets/Ranger_Idle 2_4.png | Bin 231 -> 0 bytes .../assets/Ranger_Jump Kick_1.png | Bin 243 -> 0 bytes .../assets/Ranger_Jump Kick_2.png | Bin 257 -> 0 bytes .../assets/Ranger_Jump Kick_3.png | Bin 259 -> 0 bytes .../assets/Ranger_Jump Kick_4.png | Bin 243 -> 0 bytes .../resource-bar/assets/Ranger_Kick 1.png | Bin 261 -> 0 bytes .../resource-bar/assets/Ranger_Kick 2.png | Bin 265 -> 0 bytes .../resource-bar/assets/Ranger_Knockdown.png | Bin 250 -> 0 bytes .../assets/Ranger_Over Throw_1.png | Bin 244 -> 0 bytes .../assets/Ranger_Over Throw_2.png | Bin 253 -> 0 bytes .../resource-bar/assets/Ranger_Pick Up 2.png | Bin 228 -> 0 bytes .../resource-bar/assets/Ranger_Pick Up.png | Bin 238 -> 0 bytes .../resource-bar/assets/Ranger_Punch 1.png | Bin 240 -> 0 bytes .../resource-bar/assets/Ranger_Punch 2.png | Bin 258 -> 0 bytes examples/resource-bar/assets/Ranger_Run_1.png | Bin 239 -> 0 bytes examples/resource-bar/assets/Ranger_Run_2.png | Bin 244 -> 0 bytes examples/resource-bar/assets/Ranger_Run_3.png | Bin 243 -> 0 bytes examples/resource-bar/assets/Ranger_Run_4.png | Bin 246 -> 0 bytes examples/resource-bar/assets/Ranger_Stab.png | Bin 245 -> 0 bytes .../resource-bar/assets/Ranger_Strafe 1_1.png | Bin 247 -> 0 bytes .../resource-bar/assets/Ranger_Strafe 1_2.png | Bin 230 -> 0 bytes .../resource-bar/assets/Ranger_Strafe 1_3.png | Bin 247 -> 0 bytes .../resource-bar/assets/Ranger_Strafe 1_4.png | Bin 230 -> 0 bytes .../resource-bar/assets/Ranger_Strafe 2_1.png | Bin 253 -> 0 bytes .../resource-bar/assets/Ranger_Strafe 2_2.png | Bin 229 -> 0 bytes .../resource-bar/assets/Ranger_Strafe 2_3.png | Bin 253 -> 0 bytes .../resource-bar/assets/Ranger_Strafe 2_4.png | Bin 229 -> 0 bytes .../resource-bar/assets/Ranger_Walk 1_1.png | Bin 245 -> 0 bytes .../resource-bar/assets/Ranger_Walk 1_2.png | Bin 232 -> 0 bytes .../resource-bar/assets/Ranger_Walk 1_3.png | Bin 246 -> 0 bytes .../resource-bar/assets/Ranger_Walk 1_4.png | Bin 232 -> 0 bytes .../resource-bar/assets/Ranger_Walk 2_1.png | Bin 229 -> 0 bytes .../resource-bar/assets/Ranger_Walk 2_2.png | Bin 243 -> 0 bytes .../resource-bar/assets/Ranger_Walk 2_3.png | Bin 229 -> 0 bytes .../resource-bar/assets/Ranger_Walk 2_4.png | Bin 233 -> 0 bytes .../resource-bar/assets/Ranger_Walk 3_1.png | Bin 244 -> 0 bytes .../resource-bar/assets/Ranger_Walk 3_2.png | Bin 230 -> 0 bytes .../resource-bar/assets/Ranger_Walk 3_3.png | Bin 248 -> 0 bytes .../resource-bar/assets/Ranger_Walk 3_4.png | Bin 242 -> 0 bytes examples/resource-bar/game.json | 2192 +++++++---------- 71 files changed, 908 insertions(+), 1284 deletions(-) delete mode 100644 examples/resource-bar/assets/Blue laser (01).png create mode 100644 examples/resource-bar/assets/Bomb_No Shadow.png create mode 100644 examples/resource-bar/assets/Bomb_Shadow.png create mode 100644 examples/resource-bar/assets/Heart-1-1.png create mode 100644 examples/resource-bar/assets/Heart-1.png create mode 100644 examples/resource-bar/assets/Minus Key.png create mode 100644 examples/resource-bar/assets/Plus Key.png delete mode 100644 examples/resource-bar/assets/Ranger_Carry_1.png delete mode 100644 examples/resource-bar/assets/Ranger_Carry_2.png delete mode 100644 examples/resource-bar/assets/Ranger_Carry_3.png delete mode 100644 examples/resource-bar/assets/Ranger_Carry_4.png delete mode 100644 examples/resource-bar/assets/Ranger_Climb_1.png delete mode 100644 examples/resource-bar/assets/Ranger_Climb_2.png delete mode 100644 examples/resource-bar/assets/Ranger_Climb_3.png delete mode 100644 examples/resource-bar/assets/Ranger_Climb_4.png delete mode 100644 examples/resource-bar/assets/Ranger_Daze_1.png delete mode 100644 examples/resource-bar/assets/Ranger_Daze_2.png delete mode 100644 examples/resource-bar/assets/Ranger_Daze_3.png delete mode 100644 examples/resource-bar/assets/Ranger_Daze_4.png delete mode 100644 examples/resource-bar/assets/Ranger_Dead.png delete mode 100644 examples/resource-bar/assets/Ranger_Get Up.png delete mode 100644 examples/resource-bar/assets/Ranger_Headbutt_1.png delete mode 100644 examples/resource-bar/assets/Ranger_Headbutt_2.png delete mode 100644 examples/resource-bar/assets/Ranger_Hurt.png delete mode 100644 examples/resource-bar/assets/Ranger_Idle 1_1.png delete mode 100644 examples/resource-bar/assets/Ranger_Idle 1_2.png delete mode 100644 examples/resource-bar/assets/Ranger_Idle 1_3.png delete mode 100644 examples/resource-bar/assets/Ranger_Idle 1_4.png delete mode 100644 examples/resource-bar/assets/Ranger_Idle 2_1.png delete mode 100644 examples/resource-bar/assets/Ranger_Idle 2_2.png delete mode 100644 examples/resource-bar/assets/Ranger_Idle 2_3.png delete mode 100644 examples/resource-bar/assets/Ranger_Idle 2_4.png delete mode 100644 examples/resource-bar/assets/Ranger_Jump Kick_1.png delete mode 100644 examples/resource-bar/assets/Ranger_Jump Kick_2.png delete mode 100644 examples/resource-bar/assets/Ranger_Jump Kick_3.png delete mode 100644 examples/resource-bar/assets/Ranger_Jump Kick_4.png delete mode 100644 examples/resource-bar/assets/Ranger_Kick 1.png delete mode 100644 examples/resource-bar/assets/Ranger_Kick 2.png delete mode 100644 examples/resource-bar/assets/Ranger_Knockdown.png delete mode 100644 examples/resource-bar/assets/Ranger_Over Throw_1.png delete mode 100644 examples/resource-bar/assets/Ranger_Over Throw_2.png delete mode 100644 examples/resource-bar/assets/Ranger_Pick Up 2.png delete mode 100644 examples/resource-bar/assets/Ranger_Pick Up.png delete mode 100644 examples/resource-bar/assets/Ranger_Punch 1.png delete mode 100644 examples/resource-bar/assets/Ranger_Punch 2.png delete mode 100644 examples/resource-bar/assets/Ranger_Run_1.png delete mode 100644 examples/resource-bar/assets/Ranger_Run_2.png delete mode 100644 examples/resource-bar/assets/Ranger_Run_3.png delete mode 100644 examples/resource-bar/assets/Ranger_Run_4.png delete mode 100644 examples/resource-bar/assets/Ranger_Stab.png delete mode 100644 examples/resource-bar/assets/Ranger_Strafe 1_1.png delete mode 100644 examples/resource-bar/assets/Ranger_Strafe 1_2.png delete mode 100644 examples/resource-bar/assets/Ranger_Strafe 1_3.png delete mode 100644 examples/resource-bar/assets/Ranger_Strafe 1_4.png delete mode 100644 examples/resource-bar/assets/Ranger_Strafe 2_1.png delete mode 100644 examples/resource-bar/assets/Ranger_Strafe 2_2.png delete mode 100644 examples/resource-bar/assets/Ranger_Strafe 2_3.png delete mode 100644 examples/resource-bar/assets/Ranger_Strafe 2_4.png delete mode 100644 examples/resource-bar/assets/Ranger_Walk 1_1.png delete mode 100644 examples/resource-bar/assets/Ranger_Walk 1_2.png delete mode 100644 examples/resource-bar/assets/Ranger_Walk 1_3.png delete mode 100644 examples/resource-bar/assets/Ranger_Walk 1_4.png delete mode 100644 examples/resource-bar/assets/Ranger_Walk 2_1.png delete mode 100644 examples/resource-bar/assets/Ranger_Walk 2_2.png delete mode 100644 examples/resource-bar/assets/Ranger_Walk 2_3.png delete mode 100644 examples/resource-bar/assets/Ranger_Walk 2_4.png delete mode 100644 examples/resource-bar/assets/Ranger_Walk 3_1.png delete mode 100644 examples/resource-bar/assets/Ranger_Walk 3_2.png delete mode 100644 examples/resource-bar/assets/Ranger_Walk 3_3.png delete mode 100644 examples/resource-bar/assets/Ranger_Walk 3_4.png diff --git a/examples/resource-bar/assets/Blue laser (01).png b/examples/resource-bar/assets/Blue laser (01).png deleted file mode 100644 index 937b258d35d221760c85a377537a7b6d751b29cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 708 zcmeAS@N?(olHy`uVBq!ia0vp^oIq^G!3HEn_ioMr2^4rl7Bet#3xP1>rMq>17#Nt! zJY5_^EKZkR_4g1-lsNuzdGK_F7gto9tTcsIST_Z_u=5Mb+K8}}YIMAKptwk*tLsC6 zfW$C(7nNCO zBfD453B8v0)V6$=MBDVVSa#p@lW*0FPMf2__1J29lf|^Tw|vqi|ExHtV7>CNZiDPK z$&_$*{qxQ%S8e;{T~?}Q&7bW!*RiaYRX*WpzhsKKa<>1WNz%qA)@{??-^Qw*HX*kD zvWCc;8IEOHXQL!%tUkiCX?64M^NR6(5-Hci4H%4DKAWJT=`tQ3gk+S?*PpQ~1u`HfV!Nu3Cc>DKX zl>j>T@tlVC_|-tM?o9b+_ExRtHz_>Pa|`nKol@AntLaqYj^9gxtbbce4!qq7l+3dJ z%}`R$Cy^4Kzig{`UL6<6+!9OH>z^2#-&~oZ`L0o0o|*0D%G48i4c(hTVkR;7c%P@& z039h2bDuHxeJxPdaPKbJbH2ZUwpQ1tO3#`3Nit>mv42-}3tr7VuV8)g@1Zmc%a_2= z_#bC>@FQoxW7(v~FQWS!C%HYB?pG|lII$2!E)3Umezd4>I*4pe29dSOVVVC|oQ`_5 mXq))A-fx1_zb=1M&#)?a`l{ZDH4eaJ$>8bg=d#Wzp$PzT8AHMV diff --git a/examples/resource-bar/assets/Bomb_No Shadow.png b/examples/resource-bar/assets/Bomb_No Shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..65b4770fcd106341af80cdfcb44bb9597ad36b21 GIT binary patch literal 3145 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Bomb_Shadow.png b/examples/resource-bar/assets/Bomb_Shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..a784165a1e3396559b3967369a2dba9beb8933c7 GIT binary patch literal 3164 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Heart-1-1.png b/examples/resource-bar/assets/Heart-1-1.png new file mode 100644 index 0000000000000000000000000000000000000000..6132a435ae20722a03406d3c1d88fffed1f2220b GIT binary patch literal 375 zcmV--0f_#IP)Px$F-b&0R7gv`m9Y*1K@f(iBr1(wB@%@YtxD$!R31U6zh37NRGvVm(h5;XM5WhU zB~g*tB)lUo{o0|>yf zRm*Ay`*W^_AM6DL0YI9KCyX{ij03o!1Gp!E;>hmcn&yB4mRGsfMU)#7%nU)q-8q73B2Lu?&OtO-$eCW2UlKZfXPgFF8n|$ zh!Px$D@jB_R7gu>WWWK8Oq~D2q|Tk$%ZN=GF={Y0!ZdZW3&71R{rLgRhFJttvrS(C zuEy))0~9qd2^0&^4cFE{SOU@jGX&XSWS?QP1a1K~mxDBeEV+8)1DHkzT!x}3{BP%9 zgZb!|;I#nVP`X+Gvkc@DnCmI_0n9M;-~ky-^&rBPyortjeBqDFaGXJOYf=L^Q$;K~ z4AzUB2k@mNm_?ve1_H4BvLenF%vZ~6V8ojbV20y!F|sA-84@IiVgVtaAX^A?H7=Kf z%);;i%r*Ej9kOrGg9clfg;5s4e1R`cV3weVIV{|f9f7r!B;*rp7Jz~STU_C_09Tw~ zb2&EGV?;8p)Ph{@BdftxPY@MEuvCC8PLR_%p(Knqh|o2|EW;Jv*enA8E*!rUS_nx- P00000NkvXXu0mjf{CAQi literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Minus Key.png b/examples/resource-bar/assets/Minus Key.png new file mode 100644 index 0000000000000000000000000000000000000000..1e6dcf7224dfda73c32b082acc5ea6b547bf115a GIT binary patch literal 1225 zcmV;)1UCDLP)?EyIfDl3mA%qY@2qAUI@ltSy9S1Aq{s9mnzI)6>(hmFrz)<9faR(f9pt08UqJNJ0F~ zIsdjwFxr7Mo6S$2=UoE$pj$^ly~J^R-05_F>TK-k?$z_WGf)^RA0~aHMJteIv-uT3 zOLwOmpf%~ErTID=F~&|+<=flaD3wZYUqu#0(c9N>I86L}(nsHytyedYW4SB{0_^VY z>Qt9|zVD;o@6VN~`X~+UIYhRpVF15J22+*}q*|^1A(t^`prJkL}1fvT_Gt!vp0 zdcEGia+wff*=h<$)d#A+dXLr|vaBEou(!8|t*x!M?``6oV>leHyr1d3FdB`}?RFFM zgbliZv>~1LMp2|ZvpPCDLbY1e+>IXJ_l<-;ts@8m)M_<6KR=`0ZYO>(iXzqK$zM!C zYf_)y!Y)XDDIQB#zrJ)zVA#4!|zV<-^EP#})68b}dNecwCfHI4p597BOPh5~Vn(}ViX&JH}! z{NK#$>#OlPO>sJqX0wTtlM|zLUSD71;^M++ohCUQ2mn+nm322EQ#6Md;KJ?qOSvF# zFVC7px8Dnl0&xrl;uzg`F1F;dqA$?-KdNKbU4^U_$aMMhEDB_vs*lp3AMF34?{k8SODd(*rgBEKg#&#Q3dw#&!1_SZv*J+v%3 zg)G}{Es)V@H1~a}R6@C2wzWHJDwRrNNE!?V*7j%Z^^oy+jL~TH_KYkbyTj+wIz{ej&z~l`uHxxWB(QUhgd3KoSp7R*kb^7^2tfY3{-;oO9gV z+$?$|tZEajhfM2Uhx{p*Et((h?(PtVVPa0nlU}d4FbqI_?5aLWBa_$E!!Se`hFRP{{!w|0Fvi*d&K@2feyqDK ngb+dqA%qY@2qA z!A|Qq6o&t#DF{IX6%|rj5S3W6U}nP_A+er$g9~qRA7y6A4&DG*!eY2f7Kjd|>4vJk zDr%J~iSL3If#Y5hCk{?~KB)`b_}D%_^|2j00SJO12!bF8f*=TjAP9mWi2P%uVWd*2 zY@4QeU>HUn01U&ZGsfy^*wz)pFdB@p1^_U|8bJ_TwA=0f6WdLaxl*ZYTbA`5z;V)w z%n1K@p7%Y8Fw%n5YPCJnG%oSG_p#*)co7{;+EeQ9Y4g+k%&Gt2nC|MnRUhoSGsKKeJVU0Fd6_%z$L zvAn!2V=nhtmW6)5{~=A}qbNwn5T1Dz19kcuI3v27dc>+4utTzvamC7$PDI2*idQyOHkb=WiiCIZCKVv z^MkJVr%UkRG291VO^8asM0jzvcx%epHQgx?KVC=^gE7F89ejD>}TP?t0q43w3pY#uTijo`ZOhb^61JqD05 z2H*FUoJZ;R`$`8WO1rF1r=!yRR1CvVB8KOAczk?J-R^s21qmH}74@@@dvy>qKgv z7>!16ZGX?$N3oF&>SqwVRYz2@IY#OoBGQXAo12^e$qwyi9md%0)6>(RGI^zgI%Dh@ zlIQ4VoZi?sQb-HZYPEg@L2w`&yk-%`*lm*cPXQ^tHg9Wd>n{L*&-$zKrePRH1Hf6c v+0^HJH9-&rK@bE%5ClOG1VIo4@rC>Xj-sNpD;Aq+1_&)Cm*S=j-vn^&QCtPY_$$Z)Pbv zTsQA{v4X_g*HfC$inW;fHkh3LZs72ID%-b=R6<}%?hk)*7@O1TaS?83{1OOBcU+Mq= diff --git a/examples/resource-bar/assets/Ranger_Carry_2.png b/examples/resource-bar/assets/Ranger_Carry_2.png deleted file mode 100644 index 6dcee5873cd9ee5aa4aae0b7052c8051ed6f93c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qk(@Ik;M!Qe1}1p@p%4<6rkWF zPZ!4!kK@S+3lx9!w{>1)NOSjGnB>&j-sNmC;Az?1_&)Cm*S=j-vn^&QyXdgY`l4>RCh6gUY4@hL9Gmvy=s~wc z=U;K@y8OqU?^EgA$vV+C)*W|C|5*yMZ}Bb7XH1gda!@$+!E!-bgTiBmv}B1(yY@LVtk1pcek@KY pgW>!0k4z$8jU^cBa%Q^qaL-a*qIDvxx(4WA22WQ%mvv4FO#n{0UW)(# diff --git a/examples/resource-bar/assets/Ranger_Carry_4.png b/examples/resource-bar/assets/Ranger_Carry_4.png deleted file mode 100644 index 6dcee5873cd9ee5aa4aae0b7052c8051ed6f93c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qk(@Ik;M!Qe1}1p@p%4<6rkWF zPZ!4!kK@S+3lx9!w{>1)NOSjGnB>&Uqds*r%SPb_rxqu!zcD~;(yd{mLKEA#T)A|OA!f!lHU;UXc|sFSADcD=m^?CKNM}+~cNDzjQ{}d3HRJ!Elg%F=W%=uG z%6#E6W2BzLb)R_V3nG0Y%paCoEed*4Z?pAcy;t_Czy@{(29=7Q1I_v`ZUCLc;OXk; Jvd$@?2>?GbPC@_x diff --git a/examples/resource-bar/assets/Ranger_Climb_2.png b/examples/resource-bar/assets/Ranger_Climb_2.png deleted file mode 100644 index 5a67543caaf2e9e2e6dde4ae016f07c103c893e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qk(@Ik;M!Qe1}1p@p%4<6rkV? zPZ!4!kK<>jUgT|1;BndA_&@In*S}p;vkhh_U&&a+c<7+$g$qyqy?E@^*!AFo$Fd8h ze5s9lIO~jdI<_l*EAuuN bJ+NS$USB)?cvV?4(2We9u6{1-oD!MUqds*r%SPb_rxqu!zcD~;(yd{mLKEA#T)A|OA!f!lHU;UXc|sFSADcD=m^?CKNM}+~cNDzjQ{}d3HRJ!Elg%F=W%=uG z%6#E6W2BzLb)R_V3nG0Y%paCoEed*4Z?pAcy;t_Czy@{(29=7Q1I_v`ZUCLc;OXk; Jvd$@?2>?GbPC@_x diff --git a/examples/resource-bar/assets/Ranger_Climb_4.png b/examples/resource-bar/assets/Ranger_Climb_4.png deleted file mode 100644 index 7f26ff71cc6527cd639e36df1e521337a7cf57c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qk(@Ik;M!Qe1}1p@p%4<6rkWN zPZ!4!kK@S+2YCN2PMmb$zlLUrPnTi=?}=HShEMF}#09_m!qB8Lk@uizuf=7CGYmE7)GhfZOqS=6beN~@@aWIU*#~D# zP%LQOVQ{bE$nwq<<_VV>Po8t^TxR3`uc diff --git a/examples/resource-bar/assets/Ranger_Daze_1.png b/examples/resource-bar/assets/Ranger_Daze_1.png deleted file mode 100644 index 2b39c4cc5e52ddac59e397fd313ea884120f5bce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qk(@Ik;M!Qe1}1p@p%4<6rkV& zPZ!4!kK@S+3k-ksw|QQcQElz=G-O%V7~>pZqWrnjkl|>Vz~8!Q>Jq})99?G(&ZqU^E#cq>*|Q9XQW?#bPtIl774Ei*amh7aiCG?cmp+O-|L?gf&inOHU*HDNtqh*7elF{r5}E+PI8!_T diff --git a/examples/resource-bar/assets/Ranger_Daze_2.png b/examples/resource-bar/assets/Ranger_Daze_2.png deleted file mode 100644 index b8f3fb6e63f7f0eb9fbcfd758a42250e98e3696a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qk(@Ik;M!Qe1}1p@p%4<6rkWT zPZ!4!kK@S+3z&cOw|QQcQElz=G-O%V7~>pZqWrnjkl|>Vz~8!Q>Jq})99?G(&ZDo zRrpfRL#9=d49UXLD-MW0GH58UY&iQeMY`eLq=WekUvt&B`W?97QWV&?T;jifP-@dV nrb(}ub6h1)o}6*#)D)mQFG|my;q+q#$Qulvu6{1-oD!M<0XpZqWrnjkl|>Vz~8!Q>Jq})99?G(&ZqU^E#cq>*|Q9XQW?#bPtIl774Ei*amh7aiCG?cmp+O-|L?gf&inOHU*HDNtqh*7elF{r5}E+PI8!_T diff --git a/examples/resource-bar/assets/Ranger_Daze_4.png b/examples/resource-bar/assets/Ranger_Daze_4.png deleted file mode 100644 index 6db8160092943fe95de7dbdc5236b7a23d5c7d1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 238 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qk(@Ik;M!Qe1}1p@p%4<6rkV& zPZ!4!kK@S+3j}}kw|QQcQElz=G-O%V7~>pZqWrnjkl|>Vz~8!Q>Jq})99?G(&Z%Z~e{3WMY@3N{~<-gHo iHffTv>Qrq{28J2S7oO%Vn7bC}Rt8U3KbLh*2~7YhG*s#U diff --git a/examples/resource-bar/assets/Ranger_Dead.png b/examples/resource-bar/assets/Ranger_Dead.png deleted file mode 100644 index 6d33f273dee34e2fdee83cb338b66cf22c115fa9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^vOvtu!3HFoW!gG{6lZ})WHAE+-(e7DJf6QI1t{3( z>Eak-aeD9Mi@XgA0?zr&|L>j<{Zp!ay}-cTVsU5CDaP_nuS*UdFBbE5>@gPk(%r~+ z`kMyVKE5-_lMX8|yB*{Sa!=a3aK|?%;|KfvTGw<(yj04J4Op}HVuy6hjLHQmIoEos zzjz3*nYL&ukA7N1mYq`0nb&cDd7dtj=+ZXNc6nfVU2Z0;OU8TYSJ$l=wyp9Hxqq{H QFVJNSp00i_>zopr0EL}YQvd(} diff --git a/examples/resource-bar/assets/Ranger_Get Up.png b/examples/resource-bar/assets/Ranger_Get Up.png deleted file mode 100644 index f2f274bb69d147166b5f00a69601f6fbd0ed7ea9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 217 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qk(@Ik;M!Q+(IDCc;8GTc;X@|2h^-r?o)VpbxXfR9Ut(0|T^SBwmtUaq${?Oh)UbQXiB LtDnm{r-UW|o_Rz4 diff --git a/examples/resource-bar/assets/Ranger_Headbutt_1.png b/examples/resource-bar/assets/Ranger_Headbutt_1.png deleted file mode 100644 index 143243f8c5cb55e484719c56cd9f60846321a8cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^5ACn2IvO{Pgg&e IbxsLQ029=mh z8k^T|=9%Kse28T#*So(v^>qc93O}*SiH6h_`98?qvchz&dHdwO@1KbHZ4NY&6wXk6 zu=r)`YNp(8&R@4bm~gRXvP0aO9LJZY;+h$gGOb+>7+rXd-2 z7QFOxgt>NLet}}+CN4A1lKADDZBOz}PndqdYZhw`ljgx9S((f^2ZURi7q>NWcc?tP zGm#-r;rGotJ&9>=FP`bFaZgbFW~sU%bA`yg+bdc4e7yIGDs+fjF#OS0X2{EAxv^W3 l_ds(igX`rh_qez2Tv!K=KBGS;yj*&@##P#&;qKUYHSApwplE|rp&YbH!& zc~Rmm?!j1+ao}$3jI>a(`>nobO>}OnzHrl;xtrmq^{Tqle>e{aU7k?S=y8OZhjEUe u2Sa_PO2gR}mVyHcjqa(x?j_#Z!?)(}BF6uW@i9PGGkCiCxvXj-sNpj;Ay#epxnHOHU91?Q<*b@2D1_}a`!U#cwLe>d-wW$j+PJ4MMI~| zJRax9`NZUkQ;TJNI)l>he=*M=a)>DzsTUh6O#N%oFst$E{y@i)&C!oc#1|`ZUU(XH zQ?r4OcgO73Y`4F=XRpZ8FS%UAStTFwOwHk6@2mU9`jUgT|1;BmQopx(TQwf^oYQ<*b@1``r)ITh!6hD>V9co*jwJ!6@DzsjNX zdt!2OCz3myX3VsUX3(jgw?0`nv30|lt8bVta4^2ur^@j6TGF{Bu9XY!-C@W$#x?o0 zxb`K+TmMWqbG^LUvYP$SQkyH>pXGZSx$GV?w>IXWS!PC{xWt~$(697D^Ue*8r diff --git a/examples/resource-bar/assets/Ranger_Idle 2_1.png b/examples/resource-bar/assets/Ranger_Idle 2_1.png deleted file mode 100644 index e45760c05aaca90c77b7e929db4427fb69b01732..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qk(@Ik;M!Qe1}1p@p%4<6rkV? zPZ!4!kK@S+3lx9!w|QQcQElz=G-O%V7~>pZqWrnjkl|>Vz~8!Q>Jq})99?G(&ZpZqWrnjkl|>Vz~8!Q>Jq})99?G(&ZQjbAhX3)tU!acsB9+D#jR#i7%9Dco&ny=rM)yg~VNkn#9InW5xfE z&$Onbs{MO%R-)noPs7LdKE?>s{t{-7wbK8BXHEGi`uxA=s*nq@4ncbxRDVyJKK10v c5KlG+Ba`;j(EEW=Kvyz&y85}Sb4q9e00A#j^8f$< diff --git a/examples/resource-bar/assets/Ranger_Idle 2_3.png b/examples/resource-bar/assets/Ranger_Idle 2_3.png deleted file mode 100644 index 41ccf9b6abf93dabcd1938ef57db895c03d54a61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qk(@Ik;M!Qe1}1p@p%4<6rkW# zPZ!4!kK@S+5@#OROR4!5PZ7~lJ1Ve)t%%q0V$T`%V+DS;=`t+t}ECUSc}ho>mu3EcaisixR`~h@F)9oJ}zN# z5B%@-G_s##kf?tl(GdFC!@S|jqQCY_JtgBa|IA-v#dw!hMf7#VCjH9DnRBcr0-d$+ XK=roT$zrF04rK6j^>bP0l+XkK?UPfq diff --git a/examples/resource-bar/assets/Ranger_Idle 2_4.png b/examples/resource-bar/assets/Ranger_Idle 2_4.png deleted file mode 100644 index 7dca05bbc42a6530d65db49033688e8571a74846..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qk(@Ik;M!Qe1}1p@p%4<6rkWt zPZ!4!kK@S+5@#OROR4!5PZ7~lJ1Ve)t%%q0V$T`%V+!zto1fLcX znSPjO`7YKC2@7|#hIBILJnTQp{{Li|t=Zv(k4;D2mqa$m$=rzX7v;WSxQlhl5mvv$ zn!NRMT4m0jQkpf@`OnGO4<(*)m)Kp^aWIqUJ}MHbcV#<+cSZ8nhD9+wKFQtOU6<^m otd4JJxOAmu-A8*yn+gVoSE|0>c8GDk13H+&)78&qol`;+0FlmF)c^nh diff --git a/examples/resource-bar/assets/Ranger_Jump Kick_2.png b/examples/resource-bar/assets/Ranger_Jump Kick_2.png deleted file mode 100644 index cc10fcd8c726e1bad4e05da77ff3da5bf6d7a332..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^5a(Q~35GUiM;^9yMPnjTtw>RWf;G{w-cw))=a*%mXDLqwE(ZIai9*P95qv{ZYZ+oJeG&^Ji= z+gd-h6!A5zfsbBVGcQ;bKmYTM+>=c!PPxwEo3L>Y--3#UXZ%(jN3SXyeq=2v;ZHc; zxN12=PL#vP4gnV3yUCL;v$!8kzVMJo=wsT9kVQ@F9pJzA7Hz;Rc#c=P#gMRycBHWgXGV-?k{Z$3@0E4HipUXO@ GgeCyhoM$iq diff --git a/examples/resource-bar/assets/Ranger_Jump Kick_4.png b/examples/resource-bar/assets/Ranger_Jump Kick_4.png deleted file mode 100644 index 1995ed79c17694fe682a200ad050668a53d2145d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^5!zto1fLcX znSPjO`7YKC2@7|#hIBILJnTQp{{Li|t=Zv(k4;D2mqa$m$=rzX7v;WSxQlhl5mvv$ zn!NRMT4m0jQkpf@`OnGO4<(*)m)Kp^aWIqUJ}MHbcV#<+cSZ8nhD9+wKFQtOU6<^m otd4JJxOAmu-A8*yn+gVoSE|0>c8GDk13H+&)78&qol`;+0FlmF)c^nh diff --git a/examples/resource-bar/assets/Ranger_Kick 1.png b/examples/resource-bar/assets/Ranger_Kick 1.png deleted file mode 100644 index c392e859c9cfb2c9d6028fc41b501768e7e680ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^5xqL-O%E-u3JRa( zu~7PJUnQrcrMDsS(EL4;%*onGAF2drEB-L(b8*_q%F@)`xIp!W&f+lFmh)4uXnxtS zV^*SvgxwjP1+5QF@`VjAtkOFc`SZdR_AQ@|)>j=l{D7U|cU7+0yU3D4pcfcCUHx3v IIVCg!01rrHga7~l diff --git a/examples/resource-bar/assets/Ranger_Kick 2.png b/examples/resource-bar/assets/Ranger_Kick 2.png deleted file mode 100644 index 3ba72e43ed43e2bbbd9caeedf4803a52406f3e96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 265 zcmeAS@N?(olHy`uVBq!ia0vp^5GIlJo-~ZbxHpy|(iMf`t4^CZ@b$H3R%KpTGdwp^))=a*%mXDT|~65Pq=pFnEc6ujiEcPtE_cd7~mn? zoxbJIJ=TYnXLJ?rh{iR)d0p~TSB1M_?rw%H4b^k+?F?&pIG=HYP&h+dHIv8eW|p0d zey0~}y>odv<2D2T!!>uMvs1Gy?sX^L)JxtVtjF+U}2zjyh=)(Q48M-GnXVfPgtpmE7!PC{xWt~$(698HbW8?q; diff --git a/examples/resource-bar/assets/Ranger_Over Throw_1.png b/examples/resource-bar/assets/Ranger_Over Throw_1.png deleted file mode 100644 index 58576e01fe331bf2783c014776748cccef61aeef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 244 zcmeAS@N?(olHy`uVBq!ia0vp^5))=a*(C<0Sd)SA0zDZI}{c^T; z{V6WSXTE=qIK}OG+bXrwQaXrX%g(sVjN#UcmwL>*$f%^o;H1-V%Tx3~@r8*@6Z#gd z=K1hXucUg>{{}V(p@!XJrVPn?d$aB_{W#mMI&aeYZP`)|(##uP7d&JRa1=an_5ZJ~ qtcOx1WhM~~+h@P&Ub(RT2%r15xb}!$-6231GkCiCxvX!Hh+r)1pMrMo#0}l3T^-clB0d zk1qq~&Fh+8g)f(^Q)o4CSaq$M!{N2e6Sgb+YcprOD=eF7t!VCW*@GeNVDUSLhE$e_ ycB#hj+iVOs7qMSsn;=?ouQ_|$E&0>mA2VF84T(ASkUb0NbOujXKbLh*2~7Z##$P)C diff --git a/examples/resource-bar/assets/Ranger_Pick Up 2.png b/examples/resource-bar/assets/Ranger_Pick Up 2.png deleted file mode 100644 index b8267558f80aa64bdc33cb095a0d98df58dbdc62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qk(@Ik;M!Q+(IDCcaw!yCBRbCjIfZ{7r_Gvj)r@ iqFOJ6{&Ob0Vr1BG+T-$hvvnX3FnGH9xvXvRpsyNes{UC$-|e9D zX{H&CC0iS2Oy=m~1w(O4(W kaW%+9JGQfw;V&aY&d2IK!naZ{0$t1C>FVdQ&MBb@0Jh{(&j0`b diff --git a/examples/resource-bar/assets/Ranger_Punch 2.png b/examples/resource-bar/assets/Ranger_Punch 2.png deleted file mode 100644 index d7c787d5d26342082586cb7600106bf0fd3c772e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 258 zcmeAS@N?(olHy`uVBq!ia0vp^5))=a*%mXDL!wrgWIA8jqoB(Y_;H=tuM7_R{u5l> z@##?>Cwae25~!%{6PR#w`Qx4XI|GD_J~Op*pW3v8$MAFONoCAH+BPz^^TOS9)O zu?&GZ4h%ECdq^FSk(4?xXBm*Lky42IEztZq?Rsj=*6e-FkwtwzK=(6vy85}Sb4q9e E09r_8jsO4v diff --git a/examples/resource-bar/assets/Ranger_Run_1.png b/examples/resource-bar/assets/Ranger_Run_1.png deleted file mode 100644 index 9eac15a12984cc610a678d6b13c707b633f64a32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qk(@Ik;M!Qe1}1p@p%4<6rkWj zPZ!4!kK=o%-sNpj;Ay#epxnHOHU91?Q;9Qz2D37DM4j0h;whDMruK_?(60i~M6-`J ziy{@aAK+#z{Ck$+!I$Lw*It^4F{#HViG3)rmT~C3?_{9r?=-VbYpu|!tP8Rc?E*{- ztOL0Z+HiY?{_vEU#*-$SF3ylNHHnR>vzXb0Kf=R)!LOHmiz7MDpS`1cjp4tY)-8vh j42p6Udo=_r7hL1(Tpw|LaX~L1(6J1ju6{1-oD!MpZqWrnjkl|>Vz~8!Q>Jq})99?G(&K{9! zc$l+F+F?psO`L+}hYdS9bQ={-7F!A)Ha)TKz%!+uhC|CFWs`R>&3G zrFWSEawGJoTw{*0(V6LT-J0LnL24%Jr8@__7#wF^KEAn}@hX34&ljiMRlgIrrtz`v p(Tc5_ThlOsYftEu4!b{_%lEt;bWS-57rHXqhJX~g0 z$W=~p$aB74(cqaoCO|8J|wDhbM&kMtNsCUMxYMw~Qw67QhL$!?*$>pjb-jvd#f tc79%`EVz5uGp9N3_f}l_H6v_3vs}ddux9-!oIpo2c)I$ztaD0e0s#B8TOj}d diff --git a/examples/resource-bar/assets/Ranger_Strafe 1_2.png b/examples/resource-bar/assets/Ranger_Strafe 1_2.png deleted file mode 100644 index e45760c05aaca90c77b7e929db4427fb69b01732..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qk(@Ik;M!Qe1}1p@p%4<6rkV? zPZ!4!kK@S+3lx9!w|QQcQElz=G-O%V7~>pZqWrnjkl|>Vz~8!Q>Jq})99?G(&Zt;bWS-57rHXqhJX~g0 z$W=~p$aB74(cqaoCO|8J|wDhbM&kMtNsCUMxYMw~Qw67QhL$!?*$>pjb-jvd#f tc79%`EVz5uGp9N3_f}l_H6v_3vs}ddux9-!oIpo2c)I$ztaD0e0s#B8TOj}d diff --git a/examples/resource-bar/assets/Ranger_Strafe 1_4.png b/examples/resource-bar/assets/Ranger_Strafe 1_4.png deleted file mode 100644 index e45760c05aaca90c77b7e929db4427fb69b01732..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 230 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qk(@Ik;M!Qe1}1p@p%4<6rkV? zPZ!4!kK@S+3lx9!w|QQcQElz=G-O%V7~>pZqWrnjkl|>Vz~8!Q>Jq})99?G(&Z7J>>1-nMq zX%Q?>QllR|uyASm<nPB}!^Psu9+XIjPOT=H^=rW&VEF{M4$7J>>1-nMq zX%Q?>QllR|uyASm<nPB}!^Psu9+XIjPOT=H^=rW&VEF{M4$!a@dup+4T=Tt+5I2X sotww-TUb#v!qbMaGB@b8t5lq{&ii?Wg4IDcfKF!cboFyt=akR{0JMQ&KL7v# diff --git a/examples/resource-bar/assets/Ranger_Walk 1_2.png b/examples/resource-bar/assets/Ranger_Walk 1_2.png deleted file mode 100644 index 17572ff23750a932f516e5aae6c5b27fc0eb75e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qk(@Ik;M!Qe1}1p@p%4<6rkWN zPZ!4!kK@S+3k-ksw|QQcQElz=G-O%V7~>pZqWrnjkl|>Vz~8!Q>Jq})99?G(&Z& cS|=G8#9doH7b=Ip0lJdG)78&qol`;+0LY_LUjP6A diff --git a/examples/resource-bar/assets/Ranger_Walk 1_3.png b/examples/resource-bar/assets/Ranger_Walk 1_3.png deleted file mode 100644 index d34d3a6fe65c3f664327574444021c89ec682d41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qk(@Ik;M!Qe1}1p@p%4<6rkV= zPZ!4!kK=o%UgT^r;BndA_&@In*S}p;vn^&QhlnVtsl-hR<96iQTb}vyW{{m+Xo!zZ z{~o0Y(Gyw?J{G@YH2D5`_xj7BaU8{Jg%S?AAL#nn7soZpZqWrnjkl|>Vz~8!Q>Jq})99?G(&Z& cS|=G8#9doH7b=Ip0lJdG)78&qol`;+0LY_LUjP6A diff --git a/examples/resource-bar/assets/Ranger_Walk 2_1.png b/examples/resource-bar/assets/Ranger_Walk 2_1.png deleted file mode 100644 index 36b23fd318ecb192d39332aa44882839c7cea81d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qk(@Ik;M!Qe1}1p@p%4<6rkXA zPZ!4!kK@S+3lx9!w|QQcQDwczu_!U8%VcsAN1IwutmDMD8f*a~Y|M{pM9!X&(A9ll zBH(Jci_zfMUmbsgV`&_E(FbcLs7dsmW?+knYsgeuBDtFJ#5uJkGaEY`{`d!39Z2Fx zJp1S5?2V5UGZ=OyE@qpM$slHTvXt>9+XIjPOT=H^=rW&VEF{M4$;BdWpV7K(nrts}WyzIp+KH0OjaIiY%%oZ^D`G2a=76yAgm50Xf zUuXO5v}r#hcjEYywMtv6nK`~Dc>V0%$!El^v_UY~;pF$7Pah~;TKCg-rq?tE1=)o& zOpLi#oW6D@Awy}`vxdeO&z|nMA;JG3L5xFmH^UqYo(HR>7!;g78&)Y@Hu>iA$|Z~G q-SJ04EAF?dIjrTE*vtKVEqhi9+XIjPOT=H^=rW&VEF{M4$pZqWrnjkl|>Vz~8!Q>Jq})99?G(&ZpZqWrnjkl|>Vz~8!Q>Jq})99?G(&Z;BejDSZ-d#x<2oz6yGxr310(N#>Q*Sz8x2T$nRe=CCD!3fRfrg zcPYUWx+k1EcGP`m@c8z5=laW{aU3Um9vLv?mb353Qg|C*z>rn;GJQ?=gAS%0v6{QN z4>U8ciCXb!``^{RQ{J^MOOu-RR?wcMV8U;`6|BAuI!ojk_=8v&m=pZqWrnjkl|>Vz~8!Q>Jq})99?G(&Z?$1XZAqnqs~B(0>B&*3TJyk^L2|KlgT78dmYW$% zzQ!U=6;07cXFOD-56s^q$;>~8(cs?&Lx$DQCgw4$EM>k{;}A5lZ@I;P|DdH!@0cdN mVl4@uAjJ1yb8Uzx8-rY9+wZ3m%T0jpW$<+Mb6Mw<&;$Uk{ZVTG diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 878e3f075..10f2be000 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -1304,6 +1304,85 @@ "identifier": "https://resources.gdevelop-app.com/assets/Pirate Bomb Pack/Objects/Health Bar/Heart.png", "name": "gdevelop-asset-store" } + }, + { + "alwaysLoaded": false, + "file": "assets/Heart.png", + "kind": "image", + "metadata": "", + "name": "assets\\Heart.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Heart-1.png", + "kind": "image", + "metadata": "", + "name": "assets\\Heart-1.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Heart-1-1.png", + "kind": "image", + "metadata": "", + "name": "assets\\Heart-1-1.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Bomb_No Shadow.png", + "kind": "image", + "metadata": "", + "name": "Bomb_No Shadow.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/32x32 Fantasy Icons Pack v2/Icons/General Items/1ceb65f6eab8e1594f3d784d881fc1eaf87a02d9e331b7ff811acc1bca3e1c2a_Bomb_No Shadow.png", + "name": "Bomb_No Shadow.png" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Bomb_Shadow.png", + "kind": "image", + "metadata": "", + "name": "Bomb_Shadow.png", + "smoothed": false, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/32x32 Fantasy Icons Pack v2/Icons/General Items/a58e750a7f074351f00ca54fa599fb9c383dcf55c942a27441d0d799228051e1_Bomb_Shadow.png", + "name": "Bomb_Shadow.png" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Plus Key.png", + "kind": "image", + "metadata": "", + "name": "Plus Key.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/Xelu Free Controller and Key Prompts/Keyboard/Dark/fc542dd4d657e2a0bc2a7beaf49ca6135611119f11b7bcd5b5b0f97d273c6634_Plus Key.png", + "name": "Plus Key.png" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Minus Key.png", + "kind": "image", + "metadata": "", + "name": "Minus Key.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/Xelu Free Controller and Key Prompts/Keyboard/Dark/4c2d6e9b511305699472697c840548f3081e21e6a8f678342495570fda6a6edb_Minus Key.png", + "name": "Minus Key.png" + } } ], "resourceFolders": [] @@ -1315,8 +1394,8 @@ { "b": 0, "disableInputWhenNotFocused": true, - "mangledName": "Game2", - "name": "Game2", + "mangledName": "Sprite_32and_32Tiled_32Sprite", + "name": "Sprite and Tiled Sprite", "r": 0, "standardSortMethod": true, "stopSoundsOnStartup": true, @@ -1332,10 +1411,22 @@ "gridColor": 10401023, "gridAlpha": 0.2, "snap": true, - "zoomFactor": 1.8600000000000008, + "zoomFactor": 0.6599999999999997, "windowMask": false }, - "objectsGroups": [], + "objectsGroups": [ + { + "name": "Buttons", + "objects": [ + { + "name": "PlusKey" + }, + { + "name": "MinusKey" + } + ] + } + ], "variables": [], "instances": [ { @@ -1343,12 +1434,12 @@ "customSize": false, "height": 0, "layer": "", - "name": "Shield_Bar", - "persistentUuid": "b581caf8-44ee-423e-b57e-cdd910fb7374", + "name": "Title_Text", + "persistentUuid": "29ae792c-1331-430c-aadf-70fa8d9e36d6", "width": 0, - "x": 192, - "y": 216, - "zOrder": 2, + "x": 208, + "y": 16, + "zOrder": 12, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -1358,12 +1449,12 @@ "customSize": false, "height": 0, "layer": "", - "name": "ResourceMouseX_Bar", - "persistentUuid": "17a23f4a-a442-4b52-8380-9f2b6a9c2494", + "name": "Unit_ResourceBar", + "persistentUuid": "0c4d4e97-0b53-4f05-8468-7d8b7a7fa8dd", "width": 0, - "x": 192, - "y": 536, - "zOrder": 3, + "x": 80, + "y": 146, + "zOrder": 13, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -1371,14 +1462,14 @@ { "angle": 0, "customSize": true, - "height": 80, + "height": 16, "layer": "", - "name": "Fly", - "persistentUuid": "e0b70af7-7a81-41c3-88ac-88305df91ed2", - "width": 128, - "x": 481.13275146484375, - "y": 293, - "zOrder": 4, + "name": "TiledEmptyUiHeart", + "persistentUuid": "a1be0010-4eb7-4e54-a651-7d77ae646149", + "width": 80, + "x": 513, + "y": 276, + "zOrder": 0, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -1386,74 +1477,74 @@ { "angle": 0, "customSize": true, - "height": 128, + "height": 16, "layer": "", - "name": "Moon", - "persistentUuid": "8428ea9d-6d1e-41b0-9f54-1840f3378846", - "width": 129.1327362060547, - "x": 480, - "y": 272, - "zOrder": 0, + "name": "Tiled_ResourceBar", + "persistentUuid": "be98771a-978f-443c-80e8-197098aef457", + "width": 80, + "x": 513, + "y": 252, + "zOrder": 15, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, - "customSize": false, - "height": 0, + "customSize": true, + "height": 24, "layer": "", - "name": "Health_Text", - "persistentUuid": "921b2f28-8bee-4ab2-a6cc-1ee823c5215e", - "width": 0, - "x": 48, - "y": 96, - "zOrder": 9, + "name": "HealthBarBox", + "persistentUuid": "fddebf95-4d5f-40b5-a087-80bd8c33b68c", + "width": 265, + "x": 504, + "y": 296, + "zOrder": 0, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, - "customSize": false, - "height": 0, + "customSize": true, + "height": 16, "layer": "", - "name": "Shield_Text", - "persistentUuid": "a231209b-a5d8-4280-868d-1e9beb31527b", - "width": 0, - "x": 48, - "y": 208, - "zOrder": 10, + "name": "HealthBarFill", + "persistentUuid": "1e7ce7cc-5104-4c95-95a0-343f3d97e140", + "width": 248, + "x": 513, + "y": 300, + "zOrder": 17, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, - "customSize": false, - "height": 0, + "customSize": true, + "height": 62, "layer": "", - "name": "ResourceMouseX_Text", - "persistentUuid": "07fda015-55f8-4959-80fc-f1ee3074d028", - "width": 0, - "x": 32, - "y": 512, - "zOrder": 11, + "name": "NewPanelSprite", + "persistentUuid": "d0461165-f597-4574-b3e8-8e78014d1c61", + "width": 336, + "x": 440, + "y": 496, + "zOrder": 0, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, - "customSize": false, - "height": 0, + "customSize": true, + "height": 19, "layer": "", - "name": "Title_Text", - "persistentUuid": "29ae792c-1331-430c-aadf-70fa8d9e36d6", - "width": 0, - "x": 208, - "y": 16, - "zOrder": 12, + "name": "Heart_Tiled", + "persistentUuid": "63560c9a-582e-4a76-9560-e929ab4a1fdf", + "width": 24, + "x": 480, + "y": 518, + "zOrder": 21, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -1463,12 +1554,12 @@ "customSize": false, "height": 0, "layer": "", - "name": "Unit_ResourceBar", - "persistentUuid": "0c4d4e97-0b53-4f05-8468-7d8b7a7fa8dd", + "name": "Heart", + "persistentUuid": "19dc3b0f-137e-428c-ae37-9a64934186c6", "width": 0, - "x": 32, - "y": 464, - "zOrder": 13, + "x": 64, + "y": 520, + "zOrder": 19, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -1478,12 +1569,12 @@ "customSize": false, "height": 0, "layer": "", - "name": "Health_Bar", - "persistentUuid": "c411b32c-f357-4b8f-9e87-f3fdde7657d5", + "name": "SpriteResourceBar_Text", + "persistentUuid": "fc5e8093-d3c3-4114-9b18-685091e1055e", "width": 0, - "x": 192, - "y": 104, - "zOrder": 1, + "x": 64, + "y": 88, + "zOrder": 22, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -1493,42 +1584,12 @@ "customSize": false, "height": 0, "layer": "", - "name": "TiledEmptyUiHeart", - "persistentUuid": "a1be0010-4eb7-4e54-a651-7d77ae646149", + "name": "TiledSpriteResourceBar_Text", + "persistentUuid": "6337ed4e-77e0-4cf5-b4cd-b4770b6396e5", "width": 0, - "x": 40, - "y": 416, - "zOrder": 14, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 16, - "layer": "", - "name": "Tiled_ResourceBar", - "persistentUuid": "be98771a-978f-443c-80e8-197098aef457", - "width": 16, - "x": 40, - "y": 416, - "zOrder": 15, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 24, - "layer": "", - "name": "HealthBarBox", - "persistentUuid": "fddebf95-4d5f-40b5-a087-80bd8c33b68c", - "width": 98, - "x": 32, - "y": 360, - "zOrder": 16, + "x": 528, + "y": 80, + "zOrder": 23, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -1536,29 +1597,14 @@ { "angle": 0, "customSize": true, - "height": 16, - "layer": "", - "name": "HealthBarFill", - "persistentUuid": "1e7ce7cc-5104-4c95-95a0-343f3d97e140", - "width": 80, - "x": 41, - "y": 364, - "zOrder": 17, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, "height": 62, "layer": "", - "name": "HealthBar", - "persistentUuid": "e57b54cd-d15f-45ae-91e7-56a12aaf0d2f", - "width": 368, - "x": 64, - "y": 288, - "zOrder": 18, + "name": "NewPanelSprite", + "persistentUuid": "4598dbb6-59cf-4253-9998-1c3b796491f3", + "width": 336, + "x": 24, + "y": 498, + "zOrder": 0, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -1568,12 +1614,12 @@ "customSize": false, "height": 0, "layer": "", - "name": "Heart", - "persistentUuid": "a45e39e0-8703-466e-9ece-c114c69b92bd", + "name": "Bomb", + "persistentUuid": "70dc048d-f1b7-4ed5-8d6b-f8a54eb65201", "width": 0, - "x": 154, - "y": 309, - "zOrder": 19, + "x": 56, + "y": 280, + "zOrder": 24, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -1583,12 +1629,12 @@ "customSize": false, "height": 0, "layer": "", - "name": "Heart", - "persistentUuid": "d575e256-78f3-4b72-8f11-1c0003d651ce", + "name": "PlusKey", + "persistentUuid": "75acefa2-30d2-45f3-8955-bdbcc059a348", "width": 0, - "x": 104, - "y": 309, - "zOrder": 19, + "x": 450, + "y": 98, + "zOrder": 25, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -1598,27 +1644,12 @@ "customSize": false, "height": 0, "layer": "", - "name": "Heart", - "persistentUuid": "a6abf64b-8fa3-4d12-9bad-22314ac4a313", + "name": "MinusKey", + "persistentUuid": "68d80c16-a4fc-4793-aa38-eb458b7c1a28", "width": 0, - "x": 130, - "y": 309, - "zOrder": 19, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 62, - "layer": "", - "name": "NewPanelSprite", - "persistentUuid": "d0461165-f597-4574-b3e8-8e78014d1c61", - "width": 272, - "x": 168, - "y": 376, - "zOrder": 20, + "x": 342, + "y": 98, + "zOrder": 26, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -2695,7 +2726,7 @@ "assetStoreId": "", "bold": true, "italic": false, - "name": "Health_Text", + "name": "SpriteResourceBar_Text", "smoothed": true, "tags": "", "type": "TextObject::Text", @@ -2703,9 +2734,9 @@ "variables": [], "effects": [], "behaviors": [], - "string": "Health", + "string": "Sprite Resource Bar", "font": "", - "characterSize": 30, + "characterSize": 20, "color": { "b": 255, "g": 255, @@ -2716,7 +2747,7 @@ "assetStoreId": "", "bold": true, "italic": false, - "name": "Shield_Text", + "name": "TiledSpriteResourceBar_Text", "smoothed": true, "tags": "", "type": "TextObject::Text", @@ -2724,9 +2755,9 @@ "variables": [], "effects": [], "behaviors": [], - "string": "Shield", + "string": "Tiled Sprite Resource Bar", "font": "", - "characterSize": 30, + "characterSize": 20, "color": { "b": 255, "g": 255, @@ -2766,7 +2797,7 @@ "variables": [], "effects": [], "behaviors": [], - "string": "Extension: Draw Resource Bar", + "string": "Extension: Resource Bar", "font": "", "characterSize": 30, "color": { @@ -3103,27 +3134,217 @@ "variables": [], "effects": [], "behaviors": [] - } - ], - "events": [ + }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Initialize game", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DepartScene" - }, - "parameters": [ - "" + "assetStoreId": "", + "height": 19, + "name": "Heart_Tiled", + "tags": "", + "texture": "assets\\Heart-1-1.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 26, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "902b8968115fd8572e4f7f6e83ad67a28c447b24e162ffc028333e716c54eb2f", + "name": "Bomb", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "No Shadow", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Bomb_No Shadow.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Shadow", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Bomb_Shadow.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "996e07c73069934a868dc8212a0d7d959dfdd245af964998aad12cf57d252ac3", + "name": "PlusKey", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [ + { + "effectType": "Outline", + "name": "Effect", + "doubleParameters": { + "padding": 2, + "thickness": 2 + }, + "stringParameters": { + "color": "255;255;255" + }, + "booleanParameters": {} + } + ], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Plus Key.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 50, + "y": 50 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "90731de0069b2f3684767c392c6e4c48255a2647bc849497f25b672771290626", + "name": "MinusKey", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [ + { + "effectType": "Outline", + "name": "Effect", + "doubleParameters": { + "padding": 2, + "thickness": 2 + }, + "stringParameters": { + "color": "255;255;255" + }, + "booleanParameters": {} + } + ], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Minus Key.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 50, + "y": 50 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Initialize game", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DepartScene" + }, + "parameters": [ + "" ] } ], @@ -3262,464 +3483,76 @@ "parameters": [] }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, + "colorB": 224, + "colorG": 16, + "colorR": 189, "creationTime": 0, - "folded": true, - "name": "Spawn items", + "name": "Draw Resource bars", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Tiled resource bar", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "RepeatEveryXSeconds::Repeat" - }, - "parameters": [ - "", - "\"SpawnShield\"", - "5", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetMaxQuantityOp" + }, + "parameters": [ + "Tiled_ResourceBar", + "TiledResourceBar", + "=", + "10", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantityOp" + }, + "parameters": [ + "TiledEmptyUiHeart", + "TiledResourceBar", + "=", + "10", + "" + ] + } ] - } - ], - "actions": [ - { - "type": { - "value": "Create" - }, - "parameters": [ - "", - "SilverShield", - "Fly.CenterX()", - "CameraBorderTop()", - "" - ] - }, - { - "type": { - "value": "AddForceAL" - }, - "parameters": [ - "SilverShield", - "90", - "75", - "1" - ] - }, - { - "type": { - "value": "ChangeColor" - }, - "parameters": [ - "SilverShield", - "\"144;19;254\"" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "RepeatEveryXSeconds::Repeat" - }, - "parameters": [ - "", - "\"SpawnHealth\"", - "12", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "Create" - }, - "parameters": [ - "", - "UpgradedPotionBlue", - "Fly.CenterX()", - "CameraBorderBottom()", - "" - ] - }, - { - "type": { - "value": "AddForceAL" - }, - "parameters": [ - "UpgradedPotionBlue", - "270", - "75", - "1" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "RepeatEveryXSeconds::Repeat" - }, - "parameters": [ - "", - "\"SpawnRock\"", - "1", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "Create" - }, - "parameters": [ - "", - "MeteorDetailed", - "CameraBorderLeft()", - "Fly.CenterY()", - "" - ] - }, - { - "type": { - "value": "AddForceAL" - }, - "parameters": [ - "MeteorDetailed", - "0", - "300", - "1" - ] - }, - { - "type": { - "value": "ChangeScale" - }, - "parameters": [ - "MeteorDetailed", - "=", - "0.5" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Rotate" - }, - "parameters": [ - "MeteorDetailed", - "30", - "" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "folded": true, - "name": "Collisions", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Shield::IsShieldActive" - }, - "parameters": [ - "Fly", - "Shield", - "" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "Montre" - }, - "parameters": [ - "Moon", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "Health::Shield::IsShieldActive" - }, - "parameters": [ - "Fly", - "Shield", - "" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "Cache" - }, - "parameters": [ - "Moon" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "CollisionNP" - }, - "parameters": [ - "SilverShield", - "Fly", - "", - "", - "" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "Health::Shield::ActivateShield" - }, - "parameters": [ - "Fly", - "Shield", - "" - ] - }, - { - "type": { - "value": "Delete" - }, - "parameters": [ - "SilverShield", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "CollisionNP" - }, - "parameters": [ - "UpgradedPotionBlue", - "Fly", - "", - "", - "" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::Heal" - }, - "parameters": [ - "Fly", - "Health", - "100", - "" - ] - }, - { - "type": { - "value": "Delete" - }, - "parameters": [ - "UpgradedPotionBlue", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "CollisionNP" - }, - "parameters": [ - "MeteorDetailed", - "Fly", - "", - "", - "" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "Health::Shield::ShieldHit" - }, - "parameters": [ - "Fly", - "Shield", - "10", - "" - ] - }, - { - "type": { - "value": "Delete" - }, - "parameters": [ - "MeteorDetailed", - "" - ] - }, - { - "type": { - "value": "ShakeObject::ShakeObject_PositionAngleScale::ShakeObject_PositionAngleScale" - }, - "parameters": [ - "Fly", - "ShakeObject_PositionAngleScale", - "", - "10", - "10", - "5", - "", - "", - "", - "" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 224, - "colorG": 16, - "colorR": 189, - "creationTime": 0, - "name": "Draw Resource bars", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "This resource shows the horizontal mouse position in scene, but it can be used for anything!", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarScene" - }, - "parameters": [ - "MyResource", - "=", - "MouseX()" - ] - } - ] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Shape painter resource bar", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "value": "KeyReleased" + }, + "parameters": [ + "", + "Left" + ] + } + ], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::DrawHealthBar" + "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantityOp" }, "parameters": [ - "MiniHealth_Bar", - "DrawResourceBar", - "Fly", - "Health", + "Tiled_ResourceBar", + "TiledResourceBar", + "-", + "1", "" ] } @@ -3727,17 +3560,27 @@ }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "value": "KeyReleased" + }, + "parameters": [ + "", + "Right" + ] + } + ], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::DrawShieldBar" + "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantityOp" }, "parameters": [ - "Shield_Bar", - "DrawResourceBar222", - "Fly", - "Shield", + "Tiled_ResourceBar", + "TiledResourceBar", + "+", + "1", "" ] } @@ -3749,13 +3592,21 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::DrawResourceBar" + "value": "ResourceBar::ResourceBar_TiledSprite::DrawResourceBar" }, "parameters": [ - "ResourceMouseX_Bar", - "DrawResourceBar222", - "Variable(MyResource)", - "Variable(MaxResource)", + "Tiled_ResourceBar", + "TiledResourceBar", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::DrawResourceBar" + }, + "parameters": [ + "TiledEmptyUiHeart", + "TiledResourceBar", "" ] } @@ -3767,13 +3618,11 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::DrawHealthBar" + "value": "ResourceBar::ResourceBar_TiledSprite::DrawResourceBar" }, "parameters": [ - "Health_Bar", - "DrawResourceBar222", - "Fly", - "Health", + "HealthBarFill", + "TiledResourceBar", "" ] } @@ -3787,36 +3636,98 @@ "colorG": 176, "colorR": 74, "creationTime": 0, - "name": "Tiled resource bar", + "name": "Sprite resource bar", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "conditions": [ { "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetMaxQuantityOp" + "value": "DepartScene" }, "parameters": [ - "Tiled_ResourceBar", - "TiledResourceBar", - "=", - "10", "" ] - }, + } + ], + "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantityOp" + "value": "ModVarScene" }, "parameters": [ - "TiledEmptyUiHeart", - "TiledResourceBar", + "Units", "=", - "10", - "" + "5" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetMaxQuantityOp" + }, + "parameters": [ + "Tiled_ResourceBar", + "TiledResourceBar", + "=", + "10", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Unit_ResourceBar" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetMaxQuantity" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "10", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetEmptyUnitColor" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "\"74;144;226\"", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetEmptyUnitOpacity" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "64", + "" + ] + } ] } ] @@ -3837,14 +3748,50 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantityOp" + "value": "ModVarScene" }, "parameters": [ - "Tiled_ResourceBar", - "TiledResourceBar", - "-", - "1", - "" + "Units", + "=", + "max(0,Variable(Units)-1)" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "-", + "1", + "" + ] + } + ] + }, + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::DecreaseQuantity" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "1", + "" + ] + } ] } ] @@ -3865,14 +3812,50 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantityOp" + "value": "ModVarScene" }, "parameters": [ - "Tiled_ResourceBar", - "TiledResourceBar", + "Units", "+", - "1", - "" + "1" + ] + } + ], + "events": [ + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::IncreaseQuantity" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "1", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "+", + "1", + "" + ] + } ] } ] @@ -3883,40 +3866,97 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::DrawResourceBar" + "value": "ResourceBar::ResourceBar_Sprite::DrawResourceBar" }, "parameters": [ - "Tiled_ResourceBar", - "TiledResourceBar", + "Unit_ResourceBar", + "UnitResourceBar", + "Heart_Unit", + "5", + "" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [] + }, + { + "colorB": 224, + "colorG": 16, + "colorR": 189, + "creationTime": 0, + "name": "Buttons", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Hover", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SourisSurObjet" + }, + "parameters": [ + "Buttons", + "", + "", "" ] - }, + } + ], + "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::DrawResourceBar" + "value": "EnableEffect" }, "parameters": [ - "TiledEmptyUiHeart", - "TiledResourceBar", - "" + "Buttons", + "\"Effect\"", + "no" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "conditions": [ { "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::DrawResourceBar" + "value": "SourisSurObjet" }, "parameters": [ - "HealthBarFill", - "TiledResourceBar", + "Buttons", + "", + "", "" ] } + ], + "actions": [ + { + "type": { + "value": "EnableEffect" + }, + "parameters": [ + "Buttons", + "\"Effect\"", + "yes" + ] + } ] } ], @@ -3927,7 +3967,7 @@ "colorG": 176, "colorR": 74, "creationTime": 0, - "name": "Unit resource bar", + "name": "Clicked", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ @@ -3936,151 +3976,200 @@ "conditions": [ { "type": { - "value": "DepartScene" + "value": "MouseButtonReleased" }, "parameters": [ - "" + "", + "Left" ] - } - ], - "actions": [ + }, { "type": { - "value": "ModVarScene" + "value": "ScaleWidth" }, "parameters": [ - "Units", + "Buttons", "=", - "5" + "0.9" ] } ], + "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "conditions": [ { "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetMaxQuantityOp" + "value": "SourisSurObjet" }, "parameters": [ - "Tiled_ResourceBar", - "TiledResourceBar", - "=", - "10", + "PlusKey", + "", + "", "" ] } + ], + "actions": [], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Sprite", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Tiled sprite", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [] + } + ], + "parameters": [] + } ] }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Cache" - }, - "parameters": [ - "Unit_ResourceBar" - ] - }, + "conditions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetMaxQuantity" + "value": "SourisSurObjet" }, "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "10", + "MinusKey", + "", + "", "" ] - }, + } + ], + "actions": [], + "events": [ { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetEmptyUnitColor" - }, - "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "\"74;144;226\"", - "" - ] + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Sprite", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [] + } + ], + "parameters": [] }, { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetEmptyUnitOpacity" - }, - "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "64", - "" - ] + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Tiled sprite", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [] + } + ], + "parameters": [] } ] } ] - }, + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Press", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "KeyReleased" + "value": "MouseButtonPressed" }, "parameters": [ "", "Left" ] - } - ], - "actions": [ + }, { "type": { - "value": "ModVarScene" + "value": "BuiltinCommonInstructions::Once" }, - "parameters": [ - "Units", - "=", - "max(0,Variable(Units)-1)" - ] + "parameters": [] } ], + "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "conditions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "SourisSurObjet" }, "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "-", - "1", + "Buttons", + "", + "", "" ] } - ] - }, - { - "disabled": true, - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + ], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::DecreaseQuantity" + "value": "ChangeColor" }, "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "1", - "" + "Buttons", + "\"189;16;224\"" + ] + }, + { + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "Buttons", + "=", + "0.9" ] } ] @@ -4092,79 +4181,33 @@ "conditions": [ { "type": { - "value": "KeyReleased" + "inverted": true, + "value": "MouseButtonPressed" }, "parameters": [ "", - "Right" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarScene" - }, - "parameters": [ - "Units", - "+", - "1" - ] - } - ], - "events": [ - { - "disabled": true, - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::IncreaseQuantity" - }, - "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "1", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" - }, - "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "+", - "1", - "" - ] - } + "Left" ] } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + ], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::DrawResourceBar" + "value": "ChangeColor" }, "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "Heart_Unit", - "5", - "" + "Buttons", + "\"255;255;255\"" + ] + }, + { + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "Buttons", + "=", + "1" ] } ] @@ -4238,8 +4281,8 @@ { "b": 0, "disableInputWhenNotFocused": true, - "mangledName": "Game", - "name": "Game", + "mangledName": "Shape_32Painter_32_40Game_41", + "name": "Shape Painter (Game)", "r": 0, "standardSortMethod": true, "stopSoundsOnStartup": true, @@ -4255,7 +4298,7 @@ "gridColor": 10401023, "gridAlpha": 0.2, "snap": true, - "zoomFactor": 1.1800000000000002, + "zoomFactor": 1.06, "windowMask": false }, "objectsGroups": [], @@ -4381,21 +4424,6 @@ "stringProperties": [], "initialVariables": [] }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "Unit_ResourceBar", - "persistentUuid": "0c4d4e97-0b53-4f05-8468-7d8b7a7fa8dd", - "width": 0, - "x": 32, - "y": 464, - "zOrder": 13, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, { "angle": 0, "customSize": false, @@ -4410,36 +4438,6 @@ "numberProperties": [], "stringProperties": [], "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "TiledEmptyUiHeart", - "persistentUuid": "a1be0010-4eb7-4e54-a651-7d77ae646149", - "width": 0, - "x": 40, - "y": 416, - "zOrder": 14, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 16, - "layer": "", - "name": "Tiled_ResourceBar", - "persistentUuid": "be98771a-978f-443c-80e8-197098aef457", - "width": 16, - "x": 40, - "y": 416, - "zOrder": 15, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] } ], "objects": [ @@ -5584,7 +5582,7 @@ "variables": [], "effects": [], "behaviors": [], - "string": "Extension: Draw Resource Bar", + "string": "Extension: Resource Bar", "font": "", "characterSize": 30, "color": { @@ -6602,455 +6600,81 @@ "comment": "This resource shows the horizontal mouse position in scene, but it can be used for anything!", "comment2": "" }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarScene" - }, - "parameters": [ - "MyResource", - "=", - "MouseX()" - ] - } - ] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Shape painter resource bar", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::DrawHealthBar" - }, - "parameters": [ - "MiniHealth_Bar", - "DrawResourceBar", - "Fly", - "Health", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::DrawShieldBar" - }, - "parameters": [ - "Shield_Bar", - "DrawResourceBar222", - "Fly", - "Shield", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::DrawResourceBar" - }, - "parameters": [ - "ResourceMouseX_Bar", - "DrawResourceBar222", - "Variable(MyResource)", - "Variable(MaxResource)", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::DrawHealthBar" - }, - "parameters": [ - "Health_Bar", - "DrawResourceBar222", - "Fly", - "Health", - "" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Tiled resource bar", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetMaxQuantityOp" - }, - "parameters": [ - "Tiled_ResourceBar", - "TiledResourceBar", - "=", - "10", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantityOp" - }, - "parameters": [ - "TiledEmptyUiHeart", - "TiledResourceBar", - "=", - "10", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "KeyReleased" - }, - "parameters": [ - "", - "Left" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantityOp" - }, - "parameters": [ - "Tiled_ResourceBar", - "TiledResourceBar", - "-", - "1", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "KeyReleased" - }, - "parameters": [ - "", - "Right" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantityOp" - }, - "parameters": [ - "Tiled_ResourceBar", - "TiledResourceBar", - "+", - "1", - "" - ] - } - ] - }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::DrawResourceBar" - }, - "parameters": [ - "Tiled_ResourceBar", - "TiledResourceBar", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::DrawResourceBar" - }, - "parameters": [ - "TiledEmptyUiHeart", - "TiledResourceBar", - "" - ] - } + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "MyResource", + "=", + "MouseX()" ] } - ], - "parameters": [] + ] }, { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, - "name": "Unit resource bar", + "name": "Shape painter resource bar", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DepartScene" - }, - "parameters": [ - "" - ] - } - ], + "conditions": [], "actions": [ { "type": { - "value": "ModVarScene" + "value": "ResourceBar::ResourceBar_ShapePainter::DrawHealthBar" }, "parameters": [ - "Units", - "=", - "5" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetMaxQuantityOp" - }, - "parameters": [ - "Tiled_ResourceBar", - "TiledResourceBar", - "=", - "10", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Cache" - }, - "parameters": [ - "Unit_ResourceBar" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetMaxQuantity" - }, - "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "10", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetEmptyUnitColor" - }, - "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "\"74;144;226\"", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetEmptyUnitOpacity" - }, - "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "64", - "" - ] - } + "MiniHealth_Bar", + "DrawResourceBar", + "Fly", + "Health", + "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "KeyReleased" - }, - "parameters": [ - "", - "Left" - ] - } - ], + "conditions": [], "actions": [ { "type": { - "value": "ModVarScene" + "value": "ResourceBar::ResourceBar_ShapePainter::DrawShieldBar" }, "parameters": [ - "Units", - "=", - "max(0,Variable(Units)-1)" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" - }, - "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "-", - "1", - "" - ] - } - ] - }, - { - "disabled": true, - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::DecreaseQuantity" - }, - "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "1", - "" - ] - } + "Shield_Bar", + "DrawResourceBar222", + "Fly", + "Shield", + "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "KeyReleased" - }, - "parameters": [ - "", - "Right" - ] - } - ], + "conditions": [], "actions": [ { "type": { - "value": "ModVarScene" + "value": "ResourceBar::ResourceBar_ShapePainter::DrawResourceBar" }, "parameters": [ - "Units", - "+", - "1" - ] - } - ], - "events": [ - { - "disabled": true, - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::IncreaseQuantity" - }, - "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "1", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" - }, - "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "+", - "1", - "" - ] - } + "ResourceMouseX_Bar", + "DrawResourceBar222", + "Variable(MyResource)", + "Variable(MaxResource)", + "" ] } ] @@ -7061,13 +6685,13 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::DrawResourceBar" + "value": "ResourceBar::ResourceBar_ShapePainter::DrawHealthBar" }, "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "Heart_Unit", - "5", + "Health_Bar", + "DrawResourceBar222", + "Fly", + "Health", "" ] } From 4a91ef452301a47cb3e0b0aed90a525c8337d8f1 Mon Sep 17 00:00:00 2001 From: Tristan Rhodes Date: Sat, 26 Nov 2022 23:09:18 -0700 Subject: [PATCH 19/98] More cleanup - Removed old extension versions - Removed unused files - Added new images for sprite resource bars --- examples/resource-bar/assets/Arrow.png | Bin 0 -> 3049 bytes examples/resource-bar/assets/Arrow2.png | Bin 0 -> 3056 bytes examples/resource-bar/assets/Key_Filled.png | Bin 0 -> 1372 bytes examples/resource-bar/assets/Key_Outline.png | Bin 0 -> 1007 bytes .../assets/Playing Card_Back Blue 1.png | Bin 0 -> 25862 bytes .../assets/Playing Card_Back Blue 2.png | Bin 0 -> 27646 bytes .../assets/Playing Card_Back Brown 1.png | Bin 0 -> 27300 bytes .../assets/Playing Card_Back Brown 2.png | Bin 0 -> 28338 bytes .../assets/Playing Card_Back Red 1.png | Bin 0 -> 24606 bytes .../assets/Playing Card_Back Red 2.png | Bin 0 -> 25981 bytes .../assets/Playing Card_Clubs 02.png | Bin 0 -> 3650 bytes .../assets/Playing Card_Clubs 03.png | Bin 0 -> 4294 bytes .../assets/Playing Card_Clubs 04.png | Bin 0 -> 4198 bytes .../assets/Playing Card_Clubs 05.png | Bin 0 -> 5059 bytes .../assets/Playing Card_Clubs 06.png | Bin 0 -> 5266 bytes .../assets/Playing Card_Clubs 07.png | Bin 0 -> 5574 bytes .../assets/Playing Card_Clubs 08.png | Bin 0 -> 6176 bytes .../assets/Playing Card_Clubs 09.png | Bin 0 -> 6423 bytes .../assets/Playing Card_Clubs 10.png | Bin 0 -> 6689 bytes .../assets/Playing Card_Clubs A.png | Bin 0 -> 3668 bytes .../assets/Playing Card_Clubs J.png | Bin 0 -> 4645 bytes .../assets/Playing Card_Clubs K.png | Bin 0 -> 6073 bytes .../assets/Playing Card_Clubs Q.png | Bin 0 -> 4798 bytes .../assets/Playing Card_Diamond 02.png | Bin 0 -> 3231 bytes .../assets/Playing Card_Diamond 03.png | Bin 0 -> 3707 bytes .../assets/Playing Card_Diamond 04.png | Bin 0 -> 3639 bytes .../assets/Playing Card_Diamond 05.png | Bin 0 -> 4366 bytes .../assets/Playing Card_Diamond 06.png | Bin 0 -> 4921 bytes .../assets/Playing Card_Diamond 07.png | Bin 0 -> 5057 bytes .../assets/Playing Card_Diamond 08.png | Bin 0 -> 5630 bytes .../assets/Playing Card_Diamond 09.png | Bin 0 -> 5825 bytes .../assets/Playing Card_Diamond 10.png | Bin 0 -> 5960 bytes .../assets/Playing Card_Diamond A.png | Bin 0 -> 3175 bytes .../assets/Playing Card_Diamond J.png | Bin 0 -> 4540 bytes .../assets/Playing Card_Diamond K.png | Bin 0 -> 6132 bytes .../assets/Playing Card_Diamond Q.png | Bin 0 -> 4869 bytes .../assets/Playing Card_Hearts 02.png | Bin 0 -> 3366 bytes .../assets/Playing Card_Hearts 03.png | Bin 0 -> 3991 bytes .../assets/Playing Card_Hearts 04.png | Bin 0 -> 3869 bytes .../assets/Playing Card_Hearts 05.png | Bin 0 -> 4643 bytes .../assets/Playing Card_Hearts 06.png | Bin 0 -> 5063 bytes .../assets/Playing Card_Hearts 07.png | Bin 0 -> 5265 bytes .../assets/Playing Card_Hearts 08.png | Bin 0 -> 5826 bytes .../assets/Playing Card_Hearts 09.png | Bin 0 -> 6094 bytes .../assets/Playing Card_Hearts 10.png | Bin 0 -> 6327 bytes .../assets/Playing Card_Hearts A.png | Bin 0 -> 3479 bytes .../assets/Playing Card_Hearts J.png | Bin 0 -> 4565 bytes .../assets/Playing Card_Hearts K.png | Bin 0 -> 6159 bytes .../assets/Playing Card_Hearts Q.png | Bin 0 -> 4901 bytes .../assets/Playing Card_Joker Black.png | Bin 0 -> 5617 bytes .../assets/Playing Card_Joker Red.png | Bin 0 -> 5623 bytes .../assets/Playing Card_Spades 02.png | Bin 0 -> 3473 bytes .../assets/Playing Card_Spades 03.png | Bin 0 -> 4060 bytes .../assets/Playing Card_Spades 04.png | Bin 0 -> 3785 bytes .../assets/Playing Card_Spades 05.png | Bin 0 -> 4702 bytes .../assets/Playing Card_Spades 06.png | Bin 0 -> 5219 bytes .../assets/Playing Card_Spades 07.png | Bin 0 -> 5428 bytes .../assets/Playing Card_Spades 08.png | Bin 0 -> 5907 bytes .../assets/Playing Card_Spades 09.png | Bin 0 -> 6234 bytes .../assets/Playing Card_Spades 10.png | Bin 0 -> 6614 bytes .../assets/Playing Card_Spades A.png | Bin 0 -> 3576 bytes .../assets/Playing Card_Spades J.png | Bin 0 -> 4530 bytes .../assets/Playing Card_Spades K.png | Bin 0 -> 5933 bytes .../assets/Playing Card_Spades Q.png | Bin 0 -> 4768 bytes examples/resource-bar/game.json | 44974 ++++++++-------- 65 files changed, 22225 insertions(+), 22749 deletions(-) create mode 100644 examples/resource-bar/assets/Arrow.png create mode 100644 examples/resource-bar/assets/Arrow2.png create mode 100644 examples/resource-bar/assets/Key_Filled.png create mode 100644 examples/resource-bar/assets/Key_Outline.png create mode 100644 examples/resource-bar/assets/Playing Card_Back Blue 1.png create mode 100644 examples/resource-bar/assets/Playing Card_Back Blue 2.png create mode 100644 examples/resource-bar/assets/Playing Card_Back Brown 1.png create mode 100644 examples/resource-bar/assets/Playing Card_Back Brown 2.png create mode 100644 examples/resource-bar/assets/Playing Card_Back Red 1.png create mode 100644 examples/resource-bar/assets/Playing Card_Back Red 2.png create mode 100644 examples/resource-bar/assets/Playing Card_Clubs 02.png create mode 100644 examples/resource-bar/assets/Playing Card_Clubs 03.png create mode 100644 examples/resource-bar/assets/Playing Card_Clubs 04.png create mode 100644 examples/resource-bar/assets/Playing Card_Clubs 05.png create mode 100644 examples/resource-bar/assets/Playing Card_Clubs 06.png create mode 100644 examples/resource-bar/assets/Playing Card_Clubs 07.png create mode 100644 examples/resource-bar/assets/Playing Card_Clubs 08.png create mode 100644 examples/resource-bar/assets/Playing Card_Clubs 09.png create mode 100644 examples/resource-bar/assets/Playing Card_Clubs 10.png create mode 100644 examples/resource-bar/assets/Playing Card_Clubs A.png create mode 100644 examples/resource-bar/assets/Playing Card_Clubs J.png create mode 100644 examples/resource-bar/assets/Playing Card_Clubs K.png create mode 100644 examples/resource-bar/assets/Playing Card_Clubs Q.png create mode 100644 examples/resource-bar/assets/Playing Card_Diamond 02.png create mode 100644 examples/resource-bar/assets/Playing Card_Diamond 03.png create mode 100644 examples/resource-bar/assets/Playing Card_Diamond 04.png create mode 100644 examples/resource-bar/assets/Playing Card_Diamond 05.png create mode 100644 examples/resource-bar/assets/Playing Card_Diamond 06.png create mode 100644 examples/resource-bar/assets/Playing Card_Diamond 07.png create mode 100644 examples/resource-bar/assets/Playing Card_Diamond 08.png create mode 100644 examples/resource-bar/assets/Playing Card_Diamond 09.png create mode 100644 examples/resource-bar/assets/Playing Card_Diamond 10.png create mode 100644 examples/resource-bar/assets/Playing Card_Diamond A.png create mode 100644 examples/resource-bar/assets/Playing Card_Diamond J.png create mode 100644 examples/resource-bar/assets/Playing Card_Diamond K.png create mode 100644 examples/resource-bar/assets/Playing Card_Diamond Q.png create mode 100644 examples/resource-bar/assets/Playing Card_Hearts 02.png create mode 100644 examples/resource-bar/assets/Playing Card_Hearts 03.png create mode 100644 examples/resource-bar/assets/Playing Card_Hearts 04.png create mode 100644 examples/resource-bar/assets/Playing Card_Hearts 05.png create mode 100644 examples/resource-bar/assets/Playing Card_Hearts 06.png create mode 100644 examples/resource-bar/assets/Playing Card_Hearts 07.png create mode 100644 examples/resource-bar/assets/Playing Card_Hearts 08.png create mode 100644 examples/resource-bar/assets/Playing Card_Hearts 09.png create mode 100644 examples/resource-bar/assets/Playing Card_Hearts 10.png create mode 100644 examples/resource-bar/assets/Playing Card_Hearts A.png create mode 100644 examples/resource-bar/assets/Playing Card_Hearts J.png create mode 100644 examples/resource-bar/assets/Playing Card_Hearts K.png create mode 100644 examples/resource-bar/assets/Playing Card_Hearts Q.png create mode 100644 examples/resource-bar/assets/Playing Card_Joker Black.png create mode 100644 examples/resource-bar/assets/Playing Card_Joker Red.png create mode 100644 examples/resource-bar/assets/Playing Card_Spades 02.png create mode 100644 examples/resource-bar/assets/Playing Card_Spades 03.png create mode 100644 examples/resource-bar/assets/Playing Card_Spades 04.png create mode 100644 examples/resource-bar/assets/Playing Card_Spades 05.png create mode 100644 examples/resource-bar/assets/Playing Card_Spades 06.png create mode 100644 examples/resource-bar/assets/Playing Card_Spades 07.png create mode 100644 examples/resource-bar/assets/Playing Card_Spades 08.png create mode 100644 examples/resource-bar/assets/Playing Card_Spades 09.png create mode 100644 examples/resource-bar/assets/Playing Card_Spades 10.png create mode 100644 examples/resource-bar/assets/Playing Card_Spades A.png create mode 100644 examples/resource-bar/assets/Playing Card_Spades J.png create mode 100644 examples/resource-bar/assets/Playing Card_Spades K.png create mode 100644 examples/resource-bar/assets/Playing Card_Spades Q.png diff --git a/examples/resource-bar/assets/Arrow.png b/examples/resource-bar/assets/Arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..aebf650552cb5eb4d3613b533f7235b007e38f23 GIT binary patch literal 3049 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Back Blue 1.png b/examples/resource-bar/assets/Playing Card_Back Blue 1.png new file mode 100644 index 0000000000000000000000000000000000000000..90f2de27a8e381926d2329386747d0d66fce733a GIT binary patch literal 25862 zcmXt91y~nPv_(Pb?iP^lZuk?@-QC^YA=2H_EdtWr-Hn8Fmvnc%@xAZ)sXthj-PzeY z_nv#snQ#R;aYQ&gI0y&`L`exzCGcqu{zbri1phZ?s1$+^C}&|w6&Ucx2gW1}d=Kj& zq3I0Hpa1vooiJ5~2RMl9@-O$Mt!rk4S!P3s!+1Sv*l)>J~JmZuP4+7#7 zgrumDibv*gySs;~>C)}Xa(l|Po}}=nAe8rcL3n7Q2ko$7*I^@Le>Dco2OJ5!{eOhP zaU>z-Nr-zfPLsg?xLb2yKO?rTB`FTO;+lLST<4v4gogNRs$`$FpzD{9e~hTS^L!nwt78 zCheK{>4UVKoZ0zC_Z`tG#YePLfrO-_>rOYtw`$%$h0-bB$mC(o=7G3aSht;SLf{}4 z9-h}3N#V7S|Ds)E?VA_LD6;OhlO#R;cV2{oIg^5t#c!f?!VD=>OI9M~2}U&wj$E04 z>)|lq!tw1{mMv^*K4C>FjF8vWEh&`zNY(YoQj1Y?+@BsZ<3*I+%h{mE;&lr}FBgkB ztf(|IxH9fG2n;nvoP3*kN7OgWgFSyHrcs$$C)NHj<; z%LcCh-cv*-CsFyw>?IjmF$<0IQ@U>Qe(-ee$c@m7obz3oH44G1#kW!z4u`$jF;Zlw zch6dnwr3Y9O%qUjM=(rn>->sUTZq^p5(mADNRRP{0r1d7G1fqTy${DVzL+~lYT`a>luKZ;7tQwEer zcxxt`$qv}<&Q1u;D%rgPl0nom^uKHYK*_VIl^>Cg)5Kh5o!6Lw7u?^&XN zv(6~CV|nRgCPmeuFX@)AG+Ip~n03Nk#JmyY-apZ7e3E+S=f%DcPZKZg@5QZYS`R@m z!O*|wprGY{h7nYD$rEMuL7%8KMu_}vagx^FqTj~Zp&}P8a$HDHm5joAc|1pkbPv4K zcOTi;^+&|%zODQk$jPK_Z6gX+>3OW>gk>sj*3k*P&rX}Ns#a867d9;j&y4Uo)TW

(G|=pE_JVrZ%v;^&6L9%(E*mE=U>L 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Back Blue 2.png b/examples/resource-bar/assets/Playing Card_Back Blue 2.png new file mode 100644 index 0000000000000000000000000000000000000000..76fea3c2f2ad04faed80702ef911b7c59096c8e4 GIT binary patch literal 27646 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 IH`-qR15%dt8~^|S literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Back Red 1.png b/examples/resource-bar/assets/Playing Card_Back Red 1.png new file mode 100644 index 0000000000000000000000000000000000000000..4c904df93d92bfa28528832b465741f1f11667f8 GIT binary patch literal 24606 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Clubs 02.png b/examples/resource-bar/assets/Playing Card_Clubs 02.png new file mode 100644 index 0000000000000000000000000000000000000000..0be3cf9af8751ac7fc5dba4a7ec9c8ac3955d513 GIT binary patch literal 3650 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 PKL?1R?sXlawqw-)eaA`0 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Clubs 04.png b/examples/resource-bar/assets/Playing Card_Clubs 04.png new file mode 100644 index 0000000000000000000000000000000000000000..990ce0705f5e233b95c53c09a6c5dc8d3d582383 GIT binary patch literal 4198 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Clubs 07.png b/examples/resource-bar/assets/Playing Card_Clubs 07.png new file mode 100644 index 0000000000000000000000000000000000000000..d0105853bdc2fd9257c1a2df0c4fbb2beefdc8dc GIT binary patch literal 5574 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 Uio1^*oVh}j71ZS`WZwk;4^qVFX#fBK literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Clubs 08.png b/examples/resource-bar/assets/Playing Card_Clubs 08.png new file mode 100644 index 0000000000000000000000000000000000000000..4b113cf35cdad581baf146add363195cdb755fb7 GIT binary patch literal 6176 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 J)$*2a{|Crl1nd9+ literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Clubs 09.png b/examples/resource-bar/assets/Playing Card_Clubs 09.png new file mode 100644 index 0000000000000000000000000000000000000000..30ae1db2b730f30fec600913b3b969874fa7cd38 GIT binary patch literal 6423 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 F{{S%Di;(~T literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Clubs 10.png b/examples/resource-bar/assets/Playing Card_Clubs 10.png new file mode 100644 index 0000000000000000000000000000000000000000..0b8e005a5c33666ad46d024fd3fe377b77335be2 GIT binary patch literal 6689 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Clubs K.png b/examples/resource-bar/assets/Playing Card_Clubs K.png new file mode 100644 index 0000000000000000000000000000000000000000..5c17db37cbae39cb181e448d1c568e7b6a9deff2 GIT binary patch literal 6073 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Diamond 02.png b/examples/resource-bar/assets/Playing Card_Diamond 02.png new file mode 100644 index 0000000000000000000000000000000000000000..b5c65a0b9a9abdfa8030ad09808eccacd333f489 GIT binary patch literal 3231 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 Z{vVY&ldTH_m?r=L002ovPDHLkV1jk(N1y-z literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Diamond 04.png b/examples/resource-bar/assets/Playing Card_Diamond 04.png new file mode 100644 index 0000000000000000000000000000000000000000..210b18a04d180cb281699b1776a163c94b9ad9f2 GIT binary patch literal 3639 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 IM6N<$g1R|AKmY&$ literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Diamond 06.png b/examples/resource-bar/assets/Playing Card_Diamond 06.png new file mode 100644 index 0000000000000000000000000000000000000000..6840e3733eadfcb1528cf5670859681d2de8d150 GIT binary patch literal 4921 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Diamond 07.png b/examples/resource-bar/assets/Playing Card_Diamond 07.png new file mode 100644 index 0000000000000000000000000000000000000000..49f50e55b9f75884a3b8b7d761517a5ac3a15eff GIT binary patch literal 5057 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 X9JT0v6SyGn00000NkvXXu0mjf<1(D& literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Diamond 08.png b/examples/resource-bar/assets/Playing Card_Diamond 08.png new file mode 100644 index 0000000000000000000000000000000000000000..29e69034a893578d86d00f5e855820bde91f6393 GIT binary patch literal 5630 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 Y1sFI8?k{&%9{>OV07*qoM6N<$f?nm#6aWAK literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Diamond 09.png b/examples/resource-bar/assets/Playing Card_Diamond 09.png new file mode 100644 index 0000000000000000000000000000000000000000..e5e3fe67978dc1cbdb2240c656f092b0c3dbc0db GIT binary patch literal 5825 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 LNkvXXu0mjfl$$N0 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Diamond 10.png b/examples/resource-bar/assets/Playing Card_Diamond 10.png new file mode 100644 index 0000000000000000000000000000000000000000..26cfdaaf7b2908622b928e60c531b931d17eb631 GIT binary patch literal 5960 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Diamond A.png b/examples/resource-bar/assets/Playing Card_Diamond A.png new file mode 100644 index 0000000000000000000000000000000000000000..98dfb51d8f27f0545741eefa21261be94f0d929c GIT binary patch literal 3175 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 N002ovPDHLkV1h5Y4lDow literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Diamond J.png b/examples/resource-bar/assets/Playing Card_Diamond J.png new file mode 100644 index 0000000000000000000000000000000000000000..99dbd1c53385fc16e2ff9be05f2cc2d80da41e23 GIT binary patch literal 4540 zcmahtXEYpK(*#ix(IP}I(R*Jl+Oh=8>Q+fuy~b{|ut>C3BOxKt%OVLDS%eVLQ}ieg zR*BVu)ywMNzR&yT`}KYI%$+$iXU@5E=iW0d$s7!#r{ka_BO{|XG6Y(Xs3&PB(_AOv zrd%sDiBKYRjjU)$E0V?yMdE268`>jC`jh|J?$Uv9&)h8y4l*((RU@E|RahP&KRoC5cyr>srE%y`ExiJTXaYG<*}ad6 zk%_7!9!TDNUDmnuv9&o%TT&%tXT%T}�pxYk;6wq*EDLkQd19q@*TyXSo)8v#Uf@ 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Diamond K.png b/examples/resource-bar/assets/Playing Card_Diamond K.png new file mode 100644 index 0000000000000000000000000000000000000000..38176310a741cb9016c6dd5bb5c9873ed0faa2bf GIT binary patch literal 6132 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%0DFyUBfVf+763 zO+(!i%|;NXPU9al8FB1H&BPN?@K2aYWWy(j)1~;wOg6j|S8j`=s`&4ng|cmTeDS}J z;vf5H+^X?eK~eGF_Xi?tx5SFX$y1aTK8#xOoo;tIElyziVj}NuN_tM&{WXERW@^v6 zPM5Omy2$De5>FjHj=yjc;@A(mT;{Aep~Wi*|LL7-Z6fQp5}5u>R^kavT@<%}YGu>| zhbbNPFyhBkntkS^IN>+`MsWVi+H6;>CiLHLWHg@8!sUcltWIgC?)et~?T^K6k69f# zCr;%3j|oh9TGutf*)Jw-Zp=VEaG2oY6`JjpZMzAtT%*Z0r^Hb{`;x$2Pw4MQgus9Q zoP>dcDKQm&t~+f$vSFJhyPOe6{iX!}*r^D=!4X&}9DN4*XY!p&j3S-aAbEM+Je>WL z?`|bEOtF%D895=2IC>oa&5s~XYVS;w`uXux^cm>*Ns}T2XRmHa_q=wEABktiJ&AL= zWx2|Ukd?^^aRLv{L;d$rQ+%l<-w~L)$P`}ycs=-*&qnUh768fT#dXuQxW|t`Zl8~L z*2LJR7*gFlybCAexau-Zt}Q<`D*X2P>bEmCK;+#`MAmP``OBWEjWr2}PN{O+Nk^}4_+EU%ymUl0e$#Z%b7CHZX2e}yv>DppPQcHpfXGD zh?B#(Mh(W+v1pvvZEOC%2!u(4(=PxQ8kdKYKxO5Qj7S7j>4Cdx)WgR1Ot8gC6X%d?2(R7%k!Vw;9y|ioY&ii(OTEG$G(5~c=k zmWYnnHUd{yJmYXU=-00w1qB7<=j-dpY*JHFQbJKt5gRsaNGc5Q3rPrpBuPIb+V^B; z_c|Lr_<=4$hZzTu@PurQ4gt1lo*mE xNx%r8FHit<0X*24O%T`(6agOsD@7$S{vYDG$|{MMY?uH5002ovPDHLkV1mSnwDkZ0 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Hearts 04.png b/examples/resource-bar/assets/Playing Card_Hearts 04.png new file mode 100644 index 0000000000000000000000000000000000000000..2720d7d147af4fa486093b80c1bf382138af2f4f GIT binary patch literal 3869 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Hearts 05.png b/examples/resource-bar/assets/Playing Card_Hearts 05.png new file mode 100644 index 0000000000000000000000000000000000000000..79ae89b52485ca5573912b10dc30c7fa8423f8e3 GIT binary patch literal 4643 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Hearts 07.png b/examples/resource-bar/assets/Playing Card_Hearts 07.png new file mode 100644 index 0000000000000000000000000000000000000000..88b6e099b876ab757f8f67e1d15ea6cd9ce82f22 GIT binary patch literal 5265 zcmV;C6mIK@P)z1^@s6x0_U@00004b3#c}2nYxW zd z1Plm>ih`GbfQWQR@P~@hq$mVIe|ABz5b1&tss+I-K>=w}5|V8*bM7CTY<70G%Er2A69zMeK0B|V=GI=e3E&%9Wq6wjtf)G*%z)t`wA&${p1kjvP zda6X64FK--wO|+qcinXtQd3iroSbY-Hm_px^74?In~Uw+worOH_U-+}$zcGr@-6Jzwr#6p$r?u~si~>{Nv#<8bujDKuU}>vic?D6x^?}N5;!#u z#A7Gm7%^S3y*XnLxQ_8RF;Y~C1G^K#zF!raGdJF#Ha~HEV4~%iTvrK9{Trj@{+b|a z;;^?i1qg|j`)dMK#TrSj1zUDzz-!K_^CAA0=l#y6Hq(@`IBLbIkN~c8JNX4sgyZS6 zlBBpe+ELda2!ePd5A;e=X#&H5Y1KsW{q$l!goD3P%9*9RHfb-O)wmkYq&(g@@_yLn`G9!xdO-H@l@*%B5%&Hnd9q05iePT46Z)QmM-=&XXMYLt@E>9A z#A7Ex?G69{EhvPTcT&MUC*WH8v7&q^&9B~Q7stOyQ_%UOr_P4FUV{G{8Qf3=J$s?p z_c_JIkW&9j^Q$+S#StTD3^0vSwEnCFl4t`{$1{${q$CAyy=j1HV$4Xrw!eZ>*+3|x zKpeK+ExHcvuy@@GFvWk0#SHeA#=7~2$prTHmiqZqfhKXpBgdr`D#L(n-8B4r?^EjB=HFfc&7EOPFe|^I=OjgwS1OUspAz&J4U)5t7 zI~YveBuN_EvN0^925R=rG^r2E3u&7DMEv_&ZuV~us~Jxt6%&!LdXA&#K$ z9_XOjH>sG2gzQX1hi(83;?ROZh)0i0(%4&XR-b`JDX^`W31YK`H!k^|)=goZKQVm0 z!Z5JCJrV5ftwP)RVlu(DY#Nv*^_1TeB_b9_*!zpL^I53^n1-@N3W{J;o58yHRe)o| z+A=A%VOudvxtL}XY|E#EY1SaTEg`VJ{u0GjQJIjP&F#WrWD&Ns0VsY48 zZ;q%K3x(;?dqMxX1m~0mvTMXA(wS<6f*r26%+t)7FTho1#KcTslToZb`W;g3h; zJ6c3-4MC)shdn0$C$S8y3nzh9F@YBdrf!m_qW5d=bN9E0Wy%OmzN0}z;)n+h!!dRa zoNulIcwTai-?0yl5!2w#{vzT`StbmFsrP-}@75Wkz;(SnVt>9c%^SkDd^%t@0RY%G z&0%|cV(AD&457MMb7n1r>x~tj)w}@QuPuZ1-I?Gzw?p9_{U9Fqj0n3w`3|lHA0Tn- zO7(v@A+XNL0KIq_OtS`>`YVB8Z*K+LTNB}&vkbO(XBgU-35CiPpC{pZeT5{A@&X(g zS+G3wxK|jjecnkpM$Lxxjd2m=jD_u;Dc&bsZ@BIqz;(SXW`zM%isSz5+kolx?{jcW zT^R5hzdiUYW?1}%aX8^xum=40eGrcx2h*@FOug@g>9PCedHrw$+#hc6*fmN4*Zx+| zXo9a8F)R$Awpe3BJjE_|z+__5Weo|$qsL)?Y9hqn|MaE_=PyF|VL$kFn_*iv-P2DJ zMc9W<0>6H%)NaQae~%41luECeyecETaZQk}nCa_dX9h zUF}-92K3B%xZVuCen2>Q1n$-HE&s8I>h_~)*kdq1*Eg&kNveUwZ{CS0Q~n4$4=6Aa z;hehAyOuz+zZf8*#=T|S5SY??BG?;5s#ZpYtt*tR$W(xM_?RL)_ov?}vJ({gGn$Bd zUe;+Zz|^OkES*$HK*FZ?0ITv*=5PdELK~^Ss_Mq(j6zel*gAI{xb7W&63j@*Sq`Sk zbz1W!foXb^uKw5-jdb-FEi{i=*cMOr>^$H&B(7T=mHBq_;74>TB1xhR=BFOj#aFb^ zWkAW6or%PqtHCr$(Zih#rcnya&px4xFLTCVkQ=J$;w#$dHrmHTc}mwZIz6H(XJ1Uc z?t%HKUOMF{`o!K)Y%n63a`u63p9<^$jV)JOA5(q}+-F08Fz6k|}2|guwRZc(At_vjAN$%C$H^>6EkYREFi1;ou(XY+$bR zq1=lDc&41KGd)Xl%|jlAd1xPlbEFUDt8EzqQ~w?yHLB{iN+%Y$YQzB`iCu6ta8(p* zS1X3UIYREw;J?}e;h-mM3fG|xOiw%@TdP3-KIe%^aG*F0OY5dEJ@EiY<%&Ul)5`^L zzrPN`zF$EvdBUcc2ltY1?GQz{SFHuVbr0yJD_~nT2G_j<*jC|p=|vOc#1TX|XD@+k z!5VKg4FKTRZi4%xuVGt0-Mepx|8@r)Bc@BXIPz;Z!L{Tg*xq_MV3S$cc>wn3rh)!_ zt~71?UbwTrgmvBoaQEB+z$2i2z&Hqdev;U^7JUHoi2ksQPB&~k&ah(5wdDUj!5u{T zN*LkCLvW0m4FC|2pMvALX#s;d(7(^Y{^WSjGv}r0XU==leT4B|D=38H*{R-b?vBw} z5@AX+A;R_g3QxQpgD^xKdgeS_S<6G(@ZW3)pR)_jneRv=Qu+HTD1>A3d`X&P^8ApI zIcT9B&S?uF?AQnXt1Th(;hgyn=s%Z2+C&RO#Nl`BSF}ooU%Lsy_q)Q{3E%%%`h`*m zIpOc&x9lkmeiQE_QgSh_C2G@yrWzL};sfiq|WuQA1%)dI_mQM$Nd zTQ-I{y{9D2GHM{0`k}*$DS}~O&HRs|UEa~auzn8Lxg9JSgEaXd)vt$j(Pa6~2aDO$ ziPgAL)bh%3-8Utx!O*ca^T+`(J=rt7VE{;i6}A<#y`jAPVHzaEwsN*4(5kAu4S5vi zA-yBIS1$}7__R(Pp?+eFV_{u18Elw}nr+<_*2U^q-EiGI!t%;9>hcr?3>OCs1KYgu zVB5>ij|qx(=8NF&{+A+Ku5&wB=PF;X#=b2=kCfLvH#aHLAdtof#96 z*h`2Rae(63Hmm1=)Tk=E#&v89YgUFP|CVt>VS4-l`R^v$JfT~HG%k!Hro;gNrp^sW zSe*q@sX}R5vj(s(o~%oM!boH&3dd}B#u4exT=3JLl+XBpTQ zP6FGm1pvT0OL^m>tTB9=IvDJ~Zh>v_WH8CK0v2WT21?#ZG5z_;o<&yj>DD0R9T)qMu$AWvXQ^c;~Z;qZg9Jq26Qr-0wOCt`PTarDB)1gkK|o>8 z5fFbr9^l5%#KqBp!n+5BJTwVz9)Q!J}_$pv24#r0S=B7HZyfGf!gPp+L+rIRmSwdh+?+H_{uBv{6`hFHHSU_U| z`R#`ACtodoeGZNVDE6K7D=Hv{x?fzvbk zh#7JCEqh>perCuXG(Gzd?ES~cp8RmoLObkfW4)20g5iAiZSd- z4iMr?A>#gDC1G1gg#<8->qX?taB;*x{(?PiENG!!@jb$ihhQHuJ^VNorLaFg1N;^h zb1F_3>`#slda`2JyygBZ`OdU#67l9=L&c$I&cog}Bcga_{JPC>`o&rE$N9=U@So?X z&)21VPw{#7g6eyP++QT$+0Kj<|j zh<}}ieZWgW52p==u-8wVHsw$pSLV{NXMZZeIen2#VDabQy@$GLK{#~86Y5eS;;|E; z7cNWEw1j6dCK%q)mo2@WTmQ~kn7j(;8C1zp@b=dB7DD>M+Y`ljBEn&R&mB95@@ zpsGoyu>LmhDed9A+z|FhHfJ9Yr%Umijh^)lVAPxQo4$vr(kn&YqD?$@Qn$CJ1f|8V z|C__6YKu5!h&ZyK+d)uzx)cZjsdjy_?`n$U+%PG%mAO}NIwCD{$V4ocZ;sM{45qXm ziVi1YQfhlccacgJ6h%Q~>L$q|90o&4er27{1S^;(^%eOKhB4yY(Hd;a#vyG;f)(6D zonh*8Us!+Ur=>@-n4ft(>^-K(?uV&+hp@pX*f!0QD-ePMuNGqCd@(B(D0n&$nv<^K<<`YE}yw&XQD2 zgf(llqGD23-)QLHlwepthiTRT3EwP{^#e$i%CIe*1XJ(gH-=?kdv}IB(gw%E{Cpa0 zD`(69d4#~WayHD*r^({wn4ahk+lpD#>6fIaziz63R*-;?Ic(& zis}qvvwDLSsYO=b)J+1Zs{Lep!$+mB2BJ~l05S6Blz05a;kWNY(SyU~h9(XPp9Y@k z4MbcVjnE>8Y^IZ*J`dq^fa!3RQF`OWnnuI}ht(a3p@O(L8u4!o=t;a-(+Jn~b}-Ev zC^Kf%o&ClEZ~*Yel+Vk{Q{~`VhiOs|Oq0kKaQO1)pRzRzb_T!!-;~|E^;uaNM;&|j z?)6VPzyOdeP1&?*6Si&JR%V%s1LWl7V9OTSdbvFefX%)sq9~$Yzkb-YEBv8!akR62 z`*x(IrGd)VYHuX~2!L+^bn(5yvMjoE>4MbMR3s-Smr+))9rE(>kei!}oSYnp@+tf8 zD5duhN+}2-DF6-uP`>RdPPE7e(412G7Xtv4(mVj^02G|z7$=Gp02oLq^(^Y9lzKk^ z>H*jUzYSIKPnmqa1(58k2l20n2q6SOZvY(tv;oi(KK-CLy5Rt@AHZ&S8fBkQKQaCX X>Ytg6swYL=00000NkvXXu0mjfnzaKo literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Hearts 08.png b/examples/resource-bar/assets/Playing Card_Hearts 08.png new file mode 100644 index 0000000000000000000000000000000000000000..7623d82cbd4a4292145716b2d96bae35de087adf GIT binary patch literal 5826 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 Uj-qQ8z1^@s6x0_U@00004b3#c}2nYxW zde zL=-M?Q9%WfUAAEd2Zl{q6a)lWMDXIyat9R<7+Hpk;>NxW3bM#PZPO+>?;nBAbec9v zo2CWl`}yRLCeJy~X`klgJ9Z)Kt1<%NANh?Af|?D@{#JRqEn81Hin3CmDvJ+1c6gZu8%YZQHg{hG7aDXC4FK z{(|>Y%a$$CxN+kc+{i_QqDhk`XxXx5;nVjskl$ncG;G+=v_=(?kHYU>he4qi%<|>S zo7SKr@=^HR?VMU6{>}FwZvPPgz}!~@_DKW$*XYG7@bn%JdNnVooTd9yuykk@RfGTT zs2WE)dJ^If`{WOHYyJg6fV<}?h}-unmJ@$D3?{Wa*niw-NJIaQFp(DY40|i2VE_O= zAKX1gLHhknND-RnhWNi^ecCC4dlcEgHiqY+ zQhqrxdk;KsOoMdd6aat}bHeg+N7(vz16Y0kE9vM-c=}C}djU!ThJmGh3)m*S4pO{W z{&!ou1)lV`K+j#2b(Sm++pr$6bZx6kpAkf499(k+e6-IT0djju|7Y*)_1@DXxAnn}`$I{7~ zn=Af&5bkIC1-3EAR}P0de0^*faWT)@cM0 zcWVXV8rK8Y>>vJvl)f#bET29z&@cs{f1U?FdN!!b1J8iTA-fde+a2(&-k_~HR+6H>| zuds67d8;((6nE@}xc5MKovX7Ttltv;IRwD_-p87B8ilFG5q~+PF68yWo4HU`OgeNN z@cInVNzYz@ckW6<>M{~jjYH2}&?G0F{8L>>5LHKc06@=#zXSE?q~|Z1I(jqJI82Qy zhSfz%76&PFySmP5#w~ZScUJ)jF|0l{Of?RBe@&2NW7hMy#~;$B^P#!`#~PxO{iima zMq#RPNQq=v-*_?ldWtz=OMgX^EK}u9SYK!#wN9o&Sy=mYj=COQI!)CEz}o$3a7`OT zRflb2Urk+_U*{Vyf~i$Ca)lfV`;4I=4s)H5Og9c#2KEKx!Q4|VqT<%RU0`|k30-AK zk^|1=nIPrMM5NQ6F#znt^&=`94dxpMa<}AMo(ZNxSzYD0w#{K1@=|0v%aww2`ILaE z8ZB6RcY@_#ts~MIEpagp0FW}b!|~x1kP^w7R6XdoMa^1)OfOqaHhFiy);_0?G+l+3+p>9MYj&Ff}THd%O`W-P!>RBX^Id&w(F5SFue@#d2_b zkOA0jn!iUZh{!lhl?s5x0{GTnOv8!ntxfnA-A)jL(=4?>j5<3U8-8dIw(>{AA*%CQgJ1N)fXn(DOn>;UV_9RtqU zrw#(!s2%`-o<0Xp|49LcxdHv_65PGUfx0~qHs=HwrXb?BJ>cJb&;QvrrZ>2>NAm?Z z4vvKrz|^R$sm-w_;%APf;}fvmoB+TuaLi8kFQwZj$7jeK3e|4S(ylp}+VVRIQ?XpY zHQVr>Af;14uLl2{Eon`Io&%~70>`Wo@YcN>)?UvCToU*ErdnM1>|2OAKZh5RB#66z z@pqN5S>gB~1HxzDz|tvAUwdPWs&Tls%|i<@Oi))8HC9WIVL&OQqra;b6~4>Sq(VA) zJm51akqk@sr?s}wG~zmx)(jyaWkRp6>aH%rnF6!XWgP1EKv=&OzSSFo`hR*g55AB8 z3t>aHrbRHlun|u8DAx5rZNut{C7OrQ((h;B?mXE4FeT|u*fIvd@=Oc(R;~j-Y8I%= z0{~!ZR)KTH)BsPKXtDP12I1QsQM*TRt(t(XSIeMQ#TLzXj%QG2{wN2sCk#JvF6jA- z;4|j?4Fdqu{$ucjah8Y#wq8wGyFV3G9V9skwsEf;)S}p<%{X44qUQ-cdjYNv{Xze_ z6m(78v`h9$GZ5RD*T6OVM`VRL7WVn$f<~N)j5gyiHv-^-kq(_uF2k|c%NYpA!v5Yk zuytzaE^5yh5cN8e*=REk$AN35FJ^~(>Yp*0G$ct5IF@FDNxegJnRrh7M}y{Pjy+=l zm`d8hLzr4sVH?#e;zp@KN~gfFde!rfNmind3y5_KyZ#?>S7xa&Ue;BjmIUDOU=PmD3GShMejhZF9deuesnEHUoJNK8I`7o_5#w}XAKE`+RYa4ejl zIf9K|z6#gVeIcy*4)o%6ciKD`#9co_{BAca9a{k`3u*r`xSo6k(t%_0T_cL1r_Mt7 zawEWd!9DUoK)u`}4}c!~1J;+?gL|@Rpw3fg;cELD#4Wo)ugK2o^hzGYt^b4c+hJJR zHU|iSxMMF|?fZhBI3*j+CxD*(6Ta11U{Z?5bY@}q?%i0sHgM50s)p*$}rO7M(*H(-Xu45FTu*5h7FPo0Ht#hS1(zGYuR*tQ4Kz9V7f z_$luzG$wddCjN8~LRNNoor^z(kd+-aL=rw9yfc@Et;cB04FTDEKy~7hUUSLMAGNxE zI;iP^E&aGpUFO6oc;~Cf-iSZ!SCugmbAzX@$9Ag9X^DgJ@R~wOq~pfvlyXns!XY4) zD;QQ6aoRP#Pcf;+O>{C_@=9mSW=!Y~Gou-J#{8djGU%nbo4TME`! z4DdPNSlC9ss!5csR});@=25F8$w{ycdLin1^k9An$bfEOYDO2~X6@Y>OwGGA%iG7j z7WJyEZFFz_-b7Jix^alZ4(GB=kaCgzSX^3D*oNo}z#?UCmqS2`IU~|(?fEP$oy~Wf zicbhg`7-j4r85MPtyc?Sp_QfpEK?$H7%LLOH~?VJ=nwAkMgixneLBa^xtwKS zpEnk4-Ma(Z@n%18k0r)FrwL;m`NtaLUo+uaKL*>do-tKPoOU>tPWC&lSYLfE%UGGKZ7anl?#NU0P!mS@7!IZgA%6J}w|M3;e(QYo;{8EL9c=B|pcPt`ue zHj9M1bBYM0$T$g1k#Q23BI6`5MaD^Bij0%M6d5OhDKbt1Q)HY3rpP!6Op$RCn1nM9 zy?6zlK~wzOg_(hL;uQFiGvk_$MTx|k_~gBCzc2z~&M$!12m9>wn5(20ufW}9D5Rq& zf#js{tFk7OICqXD!QE$~Y#0E(Prn8~{e#%*^zd;1d$?>E0Nz>4;ajynwmNl?Fvj7> zz5`+1mVk5K86Rj*#iExRe}@148gSY(WIDv`J+aZLlY}si_q|o{zW<5hHP7IwG09uQ zkDd)-{np?Mf&h1q(V;iLFp;<$NBC+J_zCku3;29+zck9<^%#M7?n-zUe-`pOy>boi zZo?F}jWLtB8b{o*7w*0ps-q-&=?dIkhlR{or3c}QjRE_7hC<3c4R`ku0Pl@jXQaf< zIMTu6aKAWG^WJRI@ju{xF+Hli+{EpB;qEs{^N?BG^P8qWPppWGap>8<;O;UM^zv0* z<;0v{!sc=dhjie$Y+Rl1Pr{nb;3qH8tRH4692E=7zd!*c)0aG|#Omlc99tv|&1>qrcz6q3#-Y7i8|Ot}bM= zhRx*bud9-AI+=>)ZrxCKrq11}Uyc-WYML2l@2##Wc{o!jia=4OQh8W=KC7-%LtRE< zu5s=x3(Ir=7gom7r46{I52yx9SqBG)o%@!4AwSm&z}Bk;u6g(rl9m^q2G^=d_#k4A zgSB7Ru=Ny1I&>m`XRHV?eJE`k`6`&ZD=S`O?yWB0H5>=WoRJ|z{;WMa1nqPytlI)l z`b@aH4-eX4$d=I`%$>^l;kf1x!P=vP9NIW@gmR23!@!pQvaaYl>F7zgp6w5Jmmwi{ zzf!~eQ1_JLNLu$EtUWvU6Y7zY#bNE)0ZCuX@uzfQ?x_anh6QrU6pIDmSg`lifaBfK zu#N2#P^Xyl3*3Ds0+IxJ?jqdXh6W@7XDXJ1bHhSdIzHjwl7*B`fo)KCIo;Uxu9khc zKAc~@E5``23}Cf@ec&EAKbod1p@x)u8m^85LC;-;_~U-KUr3K=j*b8b7=Fy1I~T9M zs%>`+BcPYBswdUsy`Yk$cqd7RbKz>&Cn!%f*R%l~%Q6+S>(WbCKuU(+S(myzARMbJ z{|_K1VRE(aD{o>{ustmrUymMF&h|TR-aPc`6&O+<_ay^O*$!=1MZ?gu7vye3A%VEC zWj8z{-cr`7Vi-VoI&V(n2qHW$kJhwD8lN#A!rJd*-X3??p^y$7R~7Xw z`5fN4+NQ8>O5=FmmGe{>+%Nw;`-v*30?66OJ19VJp z&`Vc!<$Aa|j6-S29n~WtW)6cKm!BNA5F|NC_vU{$N4G`@7!7-LYDrQK0HlKQBxs_M zc*YR~co%&dbehqSC)Cn8P19Cfg>$~qt9kIP2%VWeUL;nxMkzc4Gi8U2Yk9Et&0jyU zzWy%=Uw8XW<(U@x+AKfoISZ-A?oTxOYP4#FkE+g1g74 zh@Dyz#yGyEU%)&2!~7GJ!rgyTz}vTN_{(t28zVn-udl%{HSdD+KW~9+(@Yj(7&uo< zg|&C5faFVD+M`JNW>LTco6ndJ-)G+xXoNnedEfG{LPkg2K-{qxo}n`|)mNB==+=a+ zY#BSB9``#(-18gUy~l@4w?Z#mR`jbTC6Ytt zWb?x?vd2#$!wBoQf*(CQWHHT7^99n)So?NGv3+a&hhyHDLSIC`OI2KrBOUu4?tc#l zJbZY$qbK2hX`~?ziQ?}3CGD_syMBgeV5a7JiQNiPyqN!hGx}7VaWf7*e-Z9~4bdEP zBW~Xd&){iM>6DI~lw)pG{tP$pefEv!t}7PACj`XhfxFu<-E&;N)mafwT+(wFy$eB7mQ^7{1TH)m4VNJ#cp$s<^hV1<&AVF^Nl6!*t{L zmVX6dzGqp)vJjs3+Y6ZY0b5 zPt-c4+|#Bxi`>B65Rf1C=?*mvh4A(F+H`LJF=Xmw-8wgfPibj1=7xYAIA&N~^ulG( zvl_A;9?msPr+DD_ts4SDZZD}#u6!AFA&vzpQB1uqjcHx9=p?t5xOGE7*n2d@-B>KJ z4OP!?!&FNJY*s^bl2R$K_Ih4JUFypgMq+LV$laAyGi+GWnu2@c5!I;~t&Zhvqk3TP zs}WYl(!K>OX-z?r!oSrUlBrP#=7)e}3<&KmROU9=CiDd<<_w#WifjImYMhTBmVs@` z;E+E&Q=>9$Ltg?ZTMD*ueH3K?z|yT9*v9v3(`gW<8;7Y>9!VP(%3riV|IIzx5YDgW z`VGfD-UyCmnILzR&M$1U!rHfsoV!g2Y@Hf#u6r*qw2%;RZJNRP$xMG9I7_EA*k`8) zIJ%Q!PT0o34*R45VRd+yeF<0VUjBn0_l~YMDiN0@19C@cIREn&=+!((2abWMTtTrL zCABOu;{yM&i1jLz0sMmy8vKh@tt~$ZaLShUixPund^m zRaNV}Fk{SkUW*llnuelxIZ){O&(900MR!&C1Hcu3fuKYg7@y&Ye4vl@+w0 zw}%0+t>76^6!HA?&tvD#ou)PJ@64`UyU?jqCy1h0_|i54dBpY|fQJiSVObW=8l;fQ|r~0%!=J t4hp;n6=4`WfS&;50N4s(6)j|p{|8x2&M-EXoiG3Z002ovPDHLkV1nrv5|{u0 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Hearts A.png b/examples/resource-bar/assets/Playing Card_Hearts A.png new file mode 100644 index 0000000000000000000000000000000000000000..86009da91836ee5bbd9d7e8fc19611af877dfbc3 GIT binary patch literal 3479 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Hearts J.png b/examples/resource-bar/assets/Playing Card_Hearts J.png new file mode 100644 index 0000000000000000000000000000000000000000..bc5a54c97b4cb33ced050895a3e8f2600536ae7b GIT binary patch literal 4565 zcmaJlcQ_nQ(|U<$5&h2nbb@mt$}dN>6W!_2qIcn(E}RyT6Fn|Oi5iJ6M6c0>h~AEn zAWrWs9QWP({`LLyefvDSv$H!hyYuYq%l2{R%>S7LolLq%*G zvrUSLfWl8z%Y=ql!f2e(M4Z+~)54EPKl`6bsw$ElOdRC&S2y=JM!5I~+50+^1O)|w z-Mu~i9PNFa!3ba1>^%i85)x)3EtrZ)aL(@gkYJPPp94y`C1_@5OiD^jWC3kTRZ|~>sDE9X+3t?;n7#WRgPwR*->vq$x6d!#76p79U>qY z)Av&Fo0H3);yy@@!9wWUdlcmSSm9WAPZ5`UJRF8w4E?c>|G~*y{6R_;T^>2E%nPCM zk@@DtBFbY2H6W`?t zFn4%ijNgUQWAzG4$*8nM&*_v&JR{?`a7?NOCMGa@dtORPO4`qdS9%r}oPvUaciGul z)|v^t5C%J;#H=SODpA(0ft7V}irX`lX++X4Z=^KojXB{%p-630ll-`Bqv%Yvtt6|u zyZ8?ftDW2R*#qPX?1vHo&+))1dtKz-J%^RvxI{RkDP%y3^cEf6stabsJvwaf#a%9X z$nnw9ic89Waj--dYj9o|Jpt-TK9IC6{QDjDLo?P~plpT1`PEosczDZ!j%0$%p%;VT zIMv*PWC{H{j`3-|b1MQ;4f0wE|2LWr%&R|FOzb%Q^0mfqDWF8X$H4)U80U;k7(FkD zz-#?7|8XfRL^Yq&-%%+jWj~6$Sh9ZE@#hN_?&QsTW^N}xuHh9C^3WdYY_fqH8E*TL z{&h(MR?Lke|NW{;$G;8hIZE6E@T%H$3sWD(GtW9Ce|PO-s=rzYXET&#Ed5d; zsxcquW6r*pvS{uu09VZqma-l;F=G3Q3hk}3g-;lwnB=QkA5wjsd(gk9Ei6?~4}eSD z=s_W8Z;RG~9&<|r07+C9C&`WWJ2!X6i&?fp$eB4e$LkvP>@5JO1+aqOUZ02}hy16L zz1XYfP{ZeI{BScvzg4o6Q!BDfJ~8rH{^M~WHuc#p+34bhEQRnlS=@Wx|J;tO`Gm=u zr^}y-$0e!L$B?Gjf=y=~g^#C9q$FkX$D0|k1u0oWX z-x-i{Cfge9`fWNUorkeTzLbC`bu>IK?Gc%3f(Or~WWc-2gdFFX+e#V5( zVffI|!BJdZ{}#cgm^k$Wq`H|2YCsweKvIPD?eW`?{;r-uE_k7YM{0@!MWG+V-YmPZ z;wElTO(T1B!*}Iol3axRxw?n#@I^qv^&gHaX`c@Ft6f1;gKnQ z;w-*32VHR+W=5s`vvqJtc{4Nlp#zh4-d?^y|1fLqs`0md-L2X_6Zj3~(T1Fg_LPs3 zALABUMQ^fOT@Iqn=s-LfN4V(ao>79LtwWe0LwJOfbErout40c|1|(V_{%qHPjygXH zkU$i>mA|BCZC1lq;qFna@u*aXxaR=yQ8vrzox6+4%ZakyPO!(E)Qm;!2=(R9^eCK7 z0?PT9)qz+gu&H{T-4oyx_qkYnN#>!B(fSR= zfVk(fP)O}9)UFGj$RYPku_z3oz3(l8%K>Jz@Y(29GJuq~u12l)`bY+$a1lJKT`~1NDZC`C`uQpzf^`!_R_w>a0>~RZGAQ*>b@3~WQC$-(a1KB864I# zIkjirM;G??F_qjB{ZgfAe#%?q?)Jp`?(97lu3x|3{Vi&u-{4c{mLp4@e^eD9WCBQ? zB-P02O#Hp_4$ztOHAq0=!4ML4H1IVpu+)uZrBlVOyU%b`QTU8uf@U1dO%HZm+}3N7 zPr?867{K)QqJ&?{CzTHfdmR)Ejy#s&!anckNV&U`@1ByCqm+?4xMV;ScKhMaJp07DO|&B-G>{u(>|k%HlJny}Pbd`Yq&Q>NrV z(!x_jE5Ml9VR&FXB{aGkF!FIx>H(RI-|rsq6bCh~OJ4@)S1u&rFXc7k5P!IgytCM3 zpcQZKuAp~xrwr8$H0a&m2z6dI6xflHGG>8tS?|8Y50mVm zjEqp{X8R-v3l#DQ6xwRWJB!cC2@40?jSQn$LVCkj8u{AKVuqG(ILp(R;f@X`cWtahDu5@y4w@<#D9JSEBq zp?J-J%t?l_XoVTbox#&JRcRw3j@YR42%Emn1`5>2By) zd&8^u8g2u1534Tz3rtOK>`aRm^*D~@8(ehiAJ(^bM_ch}b@T`yLc@t{Y27Qlz ziYUd1m-m(^VAm`rxPFAp*1z-K@w_JzSwpaO8MAM9eJ>lLsth0yMeMgo30U#*9=6Ny zGQIaRfa3CV?dk&mUBL5M!_J3kZc=YP)l#>6e+42x065J*O zzG-NRUkwcp*>2TwzsL9Kg{awpxN#emgG<4h%c|97V{FD##YaN2o*6c1;%Nd?dIrYi zycxGf(9heYstb5(u`l+gI~#JxtNF!}3!d=Mm4;~~^fH%%>vSZ08}W)?0mr>+IZc<{ z*TXll3dnmx&SKZ04Ljcxm?~||F@$Q6dPhqa8In~4C`EHV9PcC1Q9jLMTGIPa*R1ux zny4$unw;=K^|h<+_6zy=qLb}7S#OFYPcZ-Kh|;giYv8!3Ir_7ioO!=-JaR+C<9Fm& zQNlvG;}csT?XEV|%Q9kLE=_s9ox02pG#C{rh+FbggY0C~5{qOselffP=r^c}dHgrIM=vGHA& z-McWtGtk!OxytFdcKO&SL?0J^ze1f*(hEqPEyz{E5SicHcNOZGU2<=+nY@+t`m89v zTXwYZ1n99J+R_&XP2E!EoT4V0>r}zDLF|dzUzNL-9%8*F07smS!ZGME!6|6WAJt># zA^WWF?{@YW_}=Z?C#ovkP_oqboGo6?uXGn?yu79IHgeQj^@f!bBT_WJdz`e_MVEn= z7Aqj9rKkgoUJGDP*}&oCw}Pj39Km_0w5>zAx_h@H2X*0S2vbq|YUnmfAxO#PTDF+` zV(B7u@KmI|r7)4l``^x*bCO&r2)2wb{o{G383CW_8xPv)^1IqsiwM6^&70K9RO~Z) z^mmt*m^Z|p&&#RhLhtN$YODn3S#o8Je{ox8@X{VusuV9*yvPk9-#6CjVXV3Ar~_Ca zd;Pt7Ne2>!nMYu8T+s6s)ZXaDGGWg50yC(o0W?O-?kP->wjYQG1Fl!$9ZC`!gfOLx z?Cis2zSk2g6U@%al1AQFQpE6evAhs@INu>8q2cd_00VgbyR#E?ogBz67AjWcm&@>?Zc>#w6Y z0%-t*K-#SX(n{9^l91YaKI}B7nMD~pAJ#8hQ>S?pL>a7;mw$TrIQhX$0jcvmUf&NU zvoBzr#4aw{D*EFl^z0YPSF{iX#eAV7Mp~KW)-_9l&u#K{Cs#WodR1=RM&8axmzk$g zrGCpt=lLk8_4!D>^!bjKYmeB`^W%x3U~O&DG3I0Ftp&wJBY z!-RW7rz`hd47whxJ(OsS)Fs%*hY%B~J=}f|@oKlhC41(Y*)3L8_7=JQC1rHX-Tv+G z@Gbka9EX=}(pb29mBF03$y;rLZkg2l(2Ue=7btV~$Vl$`n{6e53)0P1#+JEiKK)CP zB+8OSA6gr&iD*`{!vG5}v!Kz4+vdsGWyP0>O(^d)Fl{O8SP9WjxS?`FlX7*9RRLaI z)kH9g-PKY&2l#CcIsmUHCC79E^9je3En0QeQc2x1B1N2-MmBdPfYqK9YZ~;+UY{@PIJ!k1W#~MsYI)r zctL5&i>r5@{@yuQ$Vm08>7Q>+WlZ4NuM7hRFV$OAMsh;6c27!*d0fAT{oeX~^8p+I zD1I`VQpJ+Fi?j}sDcx5B0qrgMza!D-QGy&-Lu#F4xE^Ul>b!#$@5dJg#fYGZnKrv0 zG2l>k)HY5Jm;(OP%;J@|=a%slEo*ObwEv1eh58NssczDXWt&8W@LR=%`49MKT-xU#^RgZ`;X65^l~tbuiFWZUISyr|7-A$_G8;B zB=j-NVAn}=xhKJ$XKu?gZ#Y{2{MRROi<{P5ZVNZaBb7zv>AL4IqyKq6{{K(W|2>;D zN~4u2UDPEj>5=DcC}u_O5%tvu{r2r!L$NlAd}08bs6I{XvEm=Z*_4w&xAH_q-5=dw z5(=dFyBH+$HT}}ntkSaYqh7&2ha1ZyZaHtK=`zzqIKnXU^mKHi<;Th94eOu!=U}SEtsiLBiqw5955SKPG>ZS&TF`01K zC8QYf#cWW9k(pn-f1J%>Ony7vXwQ`7112sW5&N}l;-GI10+~7Hrf4(Gs P!H{UF>%*#4?V|q&%7n+r literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Hearts K.png b/examples/resource-bar/assets/Playing Card_Hearts K.png new file mode 100644 index 0000000000000000000000000000000000000000..4bc672adf345cecb5f9483797a79adf694050bb1 GIT binary patch literal 6159 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 bK0JD{MjMB%W_=1I??EbxnhKS2??e6r?%ymq literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Hearts Q.png b/examples/resource-bar/assets/Playing Card_Hearts Q.png new file mode 100644 index 0000000000000000000000000000000000000000..099f403c09a0ac6b77bf82f7ea34e980319379a4 GIT binary patch literal 4901 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 G{`()1CVub$ literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Joker Black.png b/examples/resource-bar/assets/Playing Card_Joker Black.png new file mode 100644 index 0000000000000000000000000000000000000000..393cdeaccbf982dabfc32aae6dbcbb7b3b622893 GIT binary patch literal 5617 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 QKLoZ%is}kgDC5xo0e>c!wg3PC literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Joker Red.png b/examples/resource-bar/assets/Playing Card_Joker Red.png new file mode 100644 index 0000000000000000000000000000000000000000..327defbeb6763a8613b9f1db1420796b1f41bf2d GIT binary patch literal 5623 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 Bl_CHD literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Spades 03.png b/examples/resource-bar/assets/Playing Card_Spades 03.png new file mode 100644 index 0000000000000000000000000000000000000000..7cfff0c341da23ab3f9f8d9f7c6456d32e7c8e8c GIT binary patch literal 4060 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 E0du_sDgXcg literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Spades 04.png b/examples/resource-bar/assets/Playing Card_Spades 04.png new file mode 100644 index 0000000000000000000000000000000000000000..6ccb8ffbfde73aa1bcbfd2a80c2ba98838b2f93c GIT binary patch literal 3785 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Spades 06.png b/examples/resource-bar/assets/Playing Card_Spades 06.png new file mode 100644 index 0000000000000000000000000000000000000000..6358cbeb92d8647c162abb763233c5d83e71f0b0 GIT binary patch literal 5219 zcmY*dbyQScw4ae4l$MrMU_d}pO1itdLm0Y4$qzuJ8ax4TC@+50n&TwZYLIeBa_?gWrZM-9m7{^paN6 z#RZ>0T-zvcj_0mupH$v*hTb}EFTMS&JnbNUetujCS0^tUD|b6C zH&6SlUt-h{24>={}TJzapvcy5cttpnR zozigrJf5#K-?VM=l*I5kV`0je0$O5{lAWZOS}01wQ3kpnVN&G8muENnq4*)*SKX&70IT9ViMb^tXf7 zm#3VZO3KQxiQIt6sVSv2F0&Fkk1$A8=?0R|ezev%LxOE`axzMi!2v$1p{A!uEo|E# zKf|?$6J11oBqeL>h717V#mOB;}Xbe7?>!ojAp6r!; z{MgkQj>AX>Gom<>d2_my&#X#XU0n?xQRLXZX9;ofNaZw3frEvHX*wHrIGpkH^i=!x>(hO$1@cGI($WQO zi%UyNYHG3aH*o8%(f6KbiGNnmZ{NaDRD9TezZR{~X9G#Bl%l>*-@biY;DJxUB^wwh z7Ww2la$_iMi2sb+yfq50Q}pBJ>Wun#F#&o8U1VuxCG~6hi^^4&j+T}b8jWUi+1cAm zs<9vQJbCgYg6Mc7&4T^u)o=!%l8g*S@vUwrVuXi}FZ})c_o~l$coNJ*PWLlZvlXa5 zS+u`NOH1pTKmD~NdVY1aKA6I>OK$My0gWI7JG=7gNqRbE1QO}77W2R{rp9Akp6ubn zfryJgTYU98W@fR!*S|8evML~&8{Agz7QVrCNxPvR5}F-+iC3myp`GChs^fgO?33Yz zwMyBk*JBdAz@Q++Y!s-E&Y>ZELOL>)UtYda%@%)TKZ@4k z2vJhP6MOOE_w|LB@y`1C`ZV1W)_*I6BEi=}>#fdOEu^o0_7nfy*cj-sv$Y)`q@ku( zZmG_RlK6K`O3JFc=btiBH}S@xl*NeiM*Kt*dS zdb-AfxUjI$-ODQ}=HK3@cK$ULlagr$&Egt72q;m9*~&-DtpWM^!E#_WI(;pTjSRxV zMjUPYP*$}aQ1DY;EM%WE*K@n(=cx$@2$E;zW2t*fxgnG1N_Wn@sbdcDUm8OXDFrDk&pFNmW%<*Z2M>^Dl!X?%)EezP^6)X^%CJl8TDW?+Lqrf446( zM0`GW9gk)3MN%ZWpnBlk+y>_+6TInJSxKxKAI8}Yt*jUU%4#`|&CR8oHhCgX)Epcf z7`!%zwTy0`sH9e%_F~Sg0TP)cDS}5tM1T>Rnnawh)z#I@-MUgZ3>?z_O%|$@-%KEt zY31K*Hs4Sc?SQ6@1;CiHLne@sF-+oV(@n92#7jduV)Cp6?w!z4-pGUaf(=!KTE5F3CX8Q3oI+ z@G7`Q0mSnJ9NQYds{kQ0^YUuDSb!*xPEU*K*h?B4Db3Bzjh%Sdr4JB}^|rRQM9j?0 z@=mLect9M_PEXEOLXv=V;XB>f+?4*=%^m2oe($a*0tWX4{ zfMar>U(#Bv5TFjGMup0b6X=I4!hT^EJ)+aN?178bEw?z4lb<{wKc zE8n!YOPIF>4h*UTdK16e=OZI0XIDF0`FCq@Fv6C37wSBBlt;9_(;WmgAk=itUMJ;y=xSu_4j(@`N_Eqh#UZm#|THI+xme?>*&7!Qpf76U-so~fWI z7R0&-H8nGXe?nN3GP<~`7M!f0vGB>=9l1ePflw%J74+HFRc~MtT4lhdNp1IUBi-*@)j{iamf4yM5%E^hv^ z_?(4_nVH9XTXSb69Q#4n^OZnmgGzu+t3A=A$yuBT5-9bRFt!@8NxidGEg=gH3qX!)9y{!GO9wW+NvA7@XMbcKP*R2vCr4v zNkla@HA!2THG4A>(u@D>p)m93P*+vGU$L6>kVC)f^kjFM!`j8AVlu6wf-~Uv8Wv7= z99_AE&ny`buLX6}vp{GWT{QibHnG`*xA|Lx5pWc5oTs)dZSyQsjkUk$iI8CWn&R6 zj~|a`;?;frZ2cwm2f&Y7zZ4Bc#T>g&fI(_0y3c+sWqq5O8T`K5EA7jEeRET7J3vy1 zK*h%XUT|xNzwk{YU`oJk|99Im$QQ`O#Ps9vP-DpaE`z->eSLjG-rGd^6@n&THi`1C zQP65bRc##|;ght?Om@E>RUN}x2V$GoAU6!aA}L$Y3y0jcc3roc{?IZoP&oec2PiJa zlamwM!DKiu7Fo3H&%ZlU5k%5-62Yp2gM)?_9GsjfbfF%Xe-Rno8IX7YD93w*<9(Rv!XlVG0G?S5$S=-xF@$~YF4hsvb z6$2LRF%J(<&%}flwY`gr8elP*i~XX!`ufyzqnbC~2lIN4`5M{cKl>AyZNWue0e)`o zcPM%Zb7OoI3KiAR@O)rwtaxMZ{P#L9w=*8*z0V>4f>SR1nbl2A(On8}kx1n5gz4aN zsIR9dQ%XvTa*&?BJ_*n>NWnJ*kJxWQ-qF2?0#dL`!O7H=wqlHehDIeqnh`2l@4BSS zLCD<$=ip#2Dk`cqdH%5r1ebD|B_1SV-=?ajhLF$)oFdb9u}L$3hNM`#GXuUgng8W& z)BsXLU%~M4r}~3d<#aAV`5D(_WMq^ISY%4>t%<$*8|9UyOLHF@`??e{l*TgNEaXin zW-Xm99>lgT;311*vH;WiFE;i8<~^vLyN8EW>$|v_-V4yd!gZ|VF+A2ixX8A2l+8pZ zu$NqwIXMu(c>2vly5{C|fDkG13#PH5OM187-Qd+Jm-vK)Tf+upA6{&ncEF!LeOzB( zUwfysleWgPhfmdBh^b@O{#WRS#|54{wOOeQ)&;sF}xy)>HP`hz31r;tPLk^b+wHfPWyakHYM=!fczCo59{`?v%*x7fU6CULWG@i~MWj{tn*lSY zrq^r0!yFxNsAN=m?`RhWkWDz|PbRUbb>+%Le!EoLp2){ZOiZ+NbX4Z}($plZt*t$t zuRz$>27*65Scn90Fsbb3;DD>6qmwayTqV_9yPMqktyHHP$W{5R5MvV)W?^Bf)YMc| zAV7G=Cr_||EJ7XMT>lwM7jPoa7c-sM{UhAj*{OU+;t&VkkeHNYWp7`c$_?~cK~WJ< z@tOLUbxyNP{QSC{7N#9Bh+P0i`9($Y&Ds19Sy))^P<*dV1rTw3V&Xlp$%1TAgT^Mg zSOosYvbh4Sn_`lmnwIu;PMx$h-I+NezNCb0a3&TAxhDVLOvP=00rHPxcbmMnChKbg zFFgAy>iYW?g+*Ht${aS+ANBsX+dv~|F}DFm_$l8Hl&b3P-X3BBaMcrWadB$m;^`1C zy$3CQt{(JrUHJ_^#7{$!U2wm@sU2hF+Js&{~ z%v6|Y>F8h>7#PGJPV)O7Spt*6#Lf=8+celi>j1i^l?bL)Nqw5|J-9s@_{Orum}Hpw zTMT~JqY6%W6lGXJ!DD^F`}gk?0ap^h$;(RuOqQ*4lHa?!e*&9h*@VDUJOHMCby(2N zY4jfqXfs}uc(~}hFnDt&(2W9-HiE8;QGosidb9*cwsS}$pMdU#y4Gs<#3OuixY${~2 zN>`oQqjRDqCL#(gFMo;*F9r5f2ABiN@6H%G*dv0Lob2q@T0MkW!8ezs?;8pV3ha_) zaV0k$+QIF0kG3`G-#))`#e*(7(0QHg>VfMH6`CTULuuTgpqlLdK41)u8L`1-#D&4u zrmc$py{xookE7yysmXcSPxQarQzX!S)DS*W+TY(F>N zK32kc)~tlCgxo?TgRH{|T(lo_Ac?dYFd@>4RG|zIH{&`(k&nqn`{WizJJhj XO1D^kgiIgU5QHensmoSMTmJVys;c|x literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Spades 07.png b/examples/resource-bar/assets/Playing Card_Spades 07.png new file mode 100644 index 0000000000000000000000000000000000000000..de854dab4f69d351587bd3324fc5521ac69fec5e GIT binary patch literal 5428 zcmZ{ocTf}G+ri-sd^zb2i@SffhXt7Yzggq1VyYcnFRzV1IRq z3j8*q;li@{w*+0n6&j}I~ z6eQv5<&Jc)^Kp{!_H#jRt8hUetTj3s_u#>pt=ur9bmG5H3t>zAE0i*@c0Zlbt~fpI zq9B1hM>q9sTL_AR{Afw zFBMaEg+QVqNi3seEY$pCl#ss=Zt}ZHw)?xn5bq1m)}TUUT~^9{D{0(Z5dF2?cvKv3 zTK@@|2;~SpgA!U9LLR>s8jEBg=O~fn%Nk_5awU3X#OPpWp%YpATWyGldu(iJiE3|G zk!nAZi5IyBVYWL64hai;jt4^lbG^Pgz=K6v`H zqkE@NJ+{a~!H#Fvt%2+EH5Eo|6z$>Rp?uwcY{nSm$$@Ls0t{E5naQS)QDo}x?;m+0 z8|h!eCoWDOb@B3jSJ$$Y#%9|fLdfwhA2SP!@8;C)&AB%AI_F{gjfd=s2M7K`IdbPW zj7v<^G%?9=Y&^CdS!#3|WP899NKa2MnAT6{pPrSqzi}FNu*PJNr!tL=4eXAjY(Fq_ z*qMKih2Nz2_f*etTvNsq_m6-{a9FVa54h-9Rp3gukPLcGiI7^ z)&z&}op2RjAP@+sM)C_6$~ro%;b9ZDeo2dN!_B(O`#*IwvgO>_0(a&;5zfE&zE3s# z3RJ0ZrKP1sef+4Q5`LWgGt|{p^xN`sAp)ma^ND>lw}%uV<2|o}EiN|8K&w4d4cwaf z&#Y6mWkCTXP1vx}H6ew1o|uEc6>rbAUB#+}A4`>d`WHg=s2W`&7T-FNZ0{&Yw z8LwWwGM#SqUuO;p4W+4V@>zmSI4wu5(UULdku~n1bCrYa`%`bg^xu}1QTzJ(Hv2Be zXtuPrDwV=-&b9{VCBFxgY&ZVSAkyDQGZ}d-OLg}5$fo_@*&o=@Mkx;0Guwg`9~jD2 zW|xzbE1I%s53bR4Pcq@kgqYc&ZySbM>z9%E|o7!Ln9i8VvzFESAF)g)WR zm&+}66%$Eo<9G{&3ey_cQJYQY(+XA9f8e<~gogJ%tNoMeot&7M8Ome@kFmSdV`k#e zOLtXX|A3r|lJZT%4f$0MofnJOB0(Knc7(raI9(fk8=WJ2x6sITr7s0F$BI zqvIo?Q!e-!NhNsq`L}Q1`o4ZeS6a4wP%^N!EhzA2_*?DR&z$gUqS8t%NBsKr>uzpt z_7TsTc{jAyfNne)NEdDOw``q}v~Jf{kD;?`C*$Mell7RAn%gORRFWDSd-1J@o7>Gh z!Mj~W;-F-aB!ZLvLa`ouj#5DRc2j4kS|X=RjPbZPd0QY}!e(@I zv>w!5e_l3&29mHjT{o)x1|nK2bR+TVA$Fm~K^NVAdKw(1^XoM&=41jSs%lWl2~uV@t4D3LPDtzJY<-KN&&o7(fTf$;rHd*0=VEk8R@RUjdac_W0UJ@7?*g zQRD;*tCcIXhiM!G5!58M_^&@SKGf-USi*=su3VgdA6B$cfy33ceZSVL!bV7OBfe?y z#u8R*d>$AXF|yJ`mnvPMi55iCeO#&WNkXHq-cRJZQBGJ}dooI5j~jMa;)YDMhsao3 zT560EL7RHawVJS6J=~j86z1iHbe^4vfi^U#6wS~LKN!_&EjKKK+yDIbpV3W&PS(() z?L?s0i!G$QG?mY=r90kunQU2C=7E8M-MOFzJ~g%LlT|iaa5(FEF|G75%?FK8Fe}7bU4oS2J`1%%BRNP8fC%VZc za>>1djMO>}e!N8`e2td0LLyzI69CKdbrY2{J8OwkCv9(U`)_;^?LENb@vJN?4!r*k zCvEi1RO+VQBf-LI-3dLgog*&%yzVWI;)ae1ZuP`ob{)g&ppe&Z88D>K+(TZ%u73M3 zAuc|?d#)|Wpwh&|gil_c?bGY)3LKN?H!CE%;Wsh|>8}=ZB~posiXJb&R?~M}|Ccov zv@_51=$-zOF|+UbfpAGtQDl32dxa_)Oz2i%0ntrVPL5bE&d$!R-DrGc;s3SxCI9;Iq4Uuh%^!B&4Wn z{_O0}jwaEC8m%0=^)f&Lb0;kGb_W*w(YX=ZwMy_sB3Z0TT9^y~-=n8f$-z}i7><7b znXydPsadFu3qf}M2Xkb8et!Q6ngIrbF)}mr=ZHf94P};|+_FQGG&D8M=HzsrDOD9y z>gyIWD+g`MT10^IJ|`bcSb_IoPfyP`);UfYXI@p+`G*sl#gAIOfg2`(Zk)iL1qKH8 zW{O*k;2uj_&7!?K;@8JZ&}$sPDS-PkUb*5lI#F%cV`OR?$8H_my)yHXn&o_T=Ded} zFRa=Em&!`=r28jb@*`rlzBbj}%s2HPNPeL&)N}fKKLvw9MMjdRr>EPF6x`#Gb7S@M z^Yi&Wa3yyWxIb#2^w|NhTwj0x3v>K^Q&Wx)A3m6V?xm)of!W#d0W$^6Psb1Q_m>3~ z#K^|>E)9pnsYgWI0S=ywMkl1EGSl%Wu>!B#-P>dSt6JT?dWT|F(Pt5|oV=gRr_RB? zK~q>*_`*8;rzVSqUke7{qj}-zF38Jimf`EiX(oeJ= zj%Ytq?~1zM+t@3Cd1P#C7l2va>HK%!(h?(*PDBsPXWz8X zZmq5!DcElM*x)`X<+FHqzLD$d)zR5m6woDHt)`}C#r_S-z$Hw2Ix7~7o%)CXK9`)9 z=D=bBt4VMhCX-+PAY!TgUp3vg_P!6EPq~;`hVG4HIyBy*sdgr2dVHJ($l5zzi(W-2)HikKz-r_XS|U1&e$4?!j$r49)SGfQKA^#%zpFOxy={he`sKS`-sQm9V}w z00pr~7P+cF7cxo{9eFYmS^JNd=EBOtj<(Y=m?2kATXS4H-bC`*FoLt^uup14|dz|_^(0RbXBr94%ZNTg40lJ0H3g#QxQ z`vKwp>>TRvj|Z0obgIK(eZ#|v#*HqY^ZY^hOK7Y&7k_`Ufn&p=lRD>SXGH`BKUQo4 zJ;!GnJR4*KLr%~}Y<+-wdU~>6yGGcc91sGjH4aeR(9G9**R&^%kdf}Fi}*}qJYpOO za%p{i`e8&3E$Q@N+^}f=7NkC8-}$};S7MB>BoCk6RJC2|EPLA;U$VUx9a2fsreml% zD~S=9W&sFeL{|nNYKA)%azk5}t<20sTLDE!fyf(QnRPCT!#Z$FP9^`+VGpRXa?irT z!sg-XsTp7=!7~tJk(t1h|p}f!o%a~mz<{RLcrXf z$~w=`m+0tLoCa43Zxns`m)H5i<6pnlvbX17mV2WgV}O>AcOC?6c2&WvUgZBG^3u{$ z`(#((K=OH|EpBazn;L@fir*&BNKSq}UFSmENLeqL#Vz|JS@R7r?x+P|>X9BZrvmA5 zrS0t)fDs`IuG1cbnHTrp7AnjKs~fT8Y^_$j4?UFDJ|g8mtJQU3Ux1!iHv8P0jOe-1 z+}2h%Khb<)If~Ho67YUatuYXn)W*unBop(tW5TGgh{z=X39J4OGwSMO&J#dB7SL)< z*pU}Ok62=WjsbbPE>-U7g38e>GWcY@1UfxlG9Fu|uCAW)=8bD@JBAvFGKlXe9_7p| zaTgbtQ(!*M3K>$)z}&U<^c*6>v!`~@4}us*tmD+qj(fg!NK3z=JCCGar5zG*I59w| zE&=}{foh!sT1S!ivU`sEIaR|It5i0|U3a)07{6ycbk~@=N!Pj}`0Ps3DGw-0kk}rfMW7 zCtm{tVgj68T+p)SL-aZ_c0u&yLd?v}yMQM)k}N`w=7MTM58ZS;LV|;N#l-X`|H{~Q zK^&c&I6Zbguq_`M1P3=Sj@NG5yQSX-J^94bQxkz;llPe7EyG*C4_yLkrmd^{A&Eyh zIOvF@)BB}76+}6J0fK$^jvtVSP$RGwpKl+j?!ZVG0U16fq|)jin?A-2){z#u0@CazVH*Ei1d7 z@?9x@&KOUPt*%a5dtfo~f`9EMe8 zoq~#LFR!c6Fd(487oNb~wQzDfIyyR%9=gcT!%6*Ykc`8_F$8?9!Kj3cIlu9PIJ&q9 zC@4%SwrVphHa|syX4BQxEx9ImB$$$w6$?ICy-Rd5?1S_{9Lc0O+CY{9$>9<`z2?8O zzn0gfr=O6i0AxZbTR+P0Cd1@gClSi>b$C`rf`4`hEY+0X6K_u_) tDEGa1QctdUxqxvivG$JR3hLj5Kl}MsPCwqbgD;#A9nA+Cl`z}L{{h-8t`-0Q literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Spades 08.png b/examples/resource-bar/assets/Playing Card_Spades 08.png new file mode 100644 index 0000000000000000000000000000000000000000..86f074578f12f20f482ba8a1b3d253b56ec56317 GIT binary patch literal 5907 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 L0aLGdU>Es6nsZf- literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Spades 10.png b/examples/resource-bar/assets/Playing Card_Spades 10.png new file mode 100644 index 0000000000000000000000000000000000000000..f122789f34555eccf3845d4ec680ebdfe1ed9c4f GIT binary patch literal 6614 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 `q602$?`p}!^6YZPo4k| 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Spades K.png b/examples/resource-bar/assets/Playing Card_Spades K.png new file mode 100644 index 0000000000000000000000000000000000000000..c71a5e0e3199aea5ecc2a0a10837adaa2c18f27a GIT binary patch literal 5933 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 NqNVl(R<2?h`9Eb8pyL1l literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Playing Card_Spades Q.png b/examples/resource-bar/assets/Playing Card_Spades Q.png new file mode 100644 index 0000000000000000000000000000000000000000..618c6936c1b68439e3e75bf40098685441cb0125 GIT binary patch literal 4768 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 Ny0Vs1m4a31{{h~JFVO%1 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 10f2be000..8d5c49a46 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -59,1329 +59,1298 @@ "resources": [ { "alwaysLoaded": false, - "file": "assets/Ranger_Carry_1.png", + "file": "assets/Fly_1.png", "kind": "image", "metadata": "", - "name": "Ranger_Carry_1.png", - "smoothed": false, + "name": "Fly_1.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Carry_1.png", + "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_1.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Carry_2.png", + "file": "assets/Fly_10.png", "kind": "image", "metadata": "", - "name": "Ranger_Carry_2.png", - "smoothed": false, + "name": "Fly_10.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Carry_2.png", + "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_10.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Carry_3.png", + "file": "assets/Fly_2.png", "kind": "image", "metadata": "", - "name": "Ranger_Carry_3.png", - "smoothed": false, + "name": "Fly_2.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Carry_3.png", + "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_2.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Carry_4.png", + "file": "assets/Fly_3.png", "kind": "image", "metadata": "", - "name": "Ranger_Carry_4.png", - "smoothed": false, + "name": "Fly_3.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Carry_4.png", + "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_3.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Climb_1.png", + "file": "assets/Fly_4.png", "kind": "image", "metadata": "", - "name": "Ranger_Climb_1.png", - "smoothed": false, + "name": "Fly_4.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Climb_1.png", + "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_4.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Climb_2.png", + "file": "assets/Fly_5.png", "kind": "image", "metadata": "", - "name": "Ranger_Climb_2.png", - "smoothed": false, + "name": "Fly_5.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Climb_2.png", + "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_5.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Climb_3.png", + "file": "assets/Fly_6.png", "kind": "image", "metadata": "", - "name": "Ranger_Climb_3.png", - "smoothed": false, + "name": "Fly_6.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Climb_3.png", + "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_6.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Climb_4.png", + "file": "assets/Fly_7.png", "kind": "image", "metadata": "", - "name": "Ranger_Climb_4.png", - "smoothed": false, + "name": "Fly_7.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Climb_4.png", + "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_7.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Daze_1.png", + "file": "assets/Fly_8.png", "kind": "image", "metadata": "", - "name": "Ranger_Daze_1.png", - "smoothed": false, + "name": "Fly_8.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Daze_1.png", + "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_8.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Daze_2.png", + "file": "assets/Fly_9.png", "kind": "image", "metadata": "", - "name": "Ranger_Daze_2.png", - "smoothed": false, + "name": "Fly_9.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Daze_2.png", + "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_9.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Daze_3.png", + "file": "assets/Star_LargeNarrow.png", "kind": "image", "metadata": "", - "name": "Ranger_Daze_3.png", - "smoothed": false, + "name": "Star_LargeNarrow.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Daze_3.png", + "identifier": "https://resources.gdevelop-app.com/assets/Simple Space/stars/Star_LargeNarrow.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Daze_4.png", + "file": "assets/Star_LargeWide.png", "kind": "image", "metadata": "", - "name": "Ranger_Daze_4.png", - "smoothed": false, + "name": "Star_LargeWide.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Daze_4.png", + "identifier": "https://resources.gdevelop-app.com/assets/Simple Space/stars/Star_LargeWide.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Dead.png", + "file": "assets/Star_Medium.png", "kind": "image", "metadata": "", - "name": "Ranger_Dead.png", - "smoothed": false, + "name": "Star_Medium.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Dead.png", + "identifier": "https://resources.gdevelop-app.com/assets/Simple Space/stars/Star_Medium.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Get Up.png", + "file": "assets/Star_Small.png", "kind": "image", "metadata": "", - "name": "Ranger_Get Up.png", - "smoothed": false, + "name": "Star_Small.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Get Up.png", + "identifier": "https://resources.gdevelop-app.com/assets/Simple Space/stars/Star_Small.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Headbutt_1.png", + "file": "assets/Silver shield.png", "kind": "image", "metadata": "", - "name": "Ranger_Headbutt_1.png", - "smoothed": false, + "name": "Silver shield.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Headbutt_1.png", + "identifier": "https://resources.gdevelop-app.com/assets/Space Shooter/PNG/Power-ups/Silver shield.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Headbutt_2.png", + "file": "assets/Meteor Detailed_Large.png", "kind": "image", "metadata": "", - "name": "Ranger_Headbutt_2.png", - "smoothed": false, + "name": "Meteor Detailed_Large.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Headbutt_2.png", + "identifier": "https://resources.gdevelop-app.com/assets/Simple Space/meteors/Meteor Detailed_Large.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Hurt.png", + "file": "assets/Meteor Detailed_Small.png", "kind": "image", "metadata": "", - "name": "Ranger_Hurt.png", - "smoothed": false, + "name": "Meteor Detailed_Small.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Hurt.png", + "identifier": "https://resources.gdevelop-app.com/assets/Simple Space/meteors/Meteor Detailed_Small.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Idle 1_1.png", + "file": "assets/Upgraded Potion Blue_No Shadow.png", "kind": "image", "metadata": "", - "name": "Ranger_Idle 1_1.png", + "name": "Upgraded Potion Blue_No Shadow.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Idle 1_1.png", + "identifier": "https://resources.gdevelop-app.com/assets/32x32 Fantasy Icons Pack v2/Icons/Healing Items/Upgraded Potion Blue_No Shadow.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Idle 1_2.png", + "file": "assets/Upgraded Potion Blue_Shadow.png", "kind": "image", "metadata": "", - "name": "Ranger_Idle 1_2.png", + "name": "Upgraded Potion Blue_Shadow.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Idle 1_2.png", + "identifier": "https://resources.gdevelop-app.com/assets/32x32 Fantasy Icons Pack v2/Icons/Healing Items/Upgraded Potion Blue_Shadow.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Idle 1_3.png", + "file": "assets/Moon.png", "kind": "image", "metadata": "", - "name": "Ranger_Idle 1_3.png", - "smoothed": false, + "name": "Moon.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Idle 1_3.png", + "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Background/Moon.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Idle 1_4.png", + "file": "assets/Emote Heart.png", "kind": "image", "metadata": "", - "name": "Ranger_Idle 1_4.png", - "smoothed": false, + "name": "Emote Heart.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Idle 1_4.png", + "identifier": "https://resources.gdevelop-app.com/assets/Emotes/Normal/Emote/Emote Heart.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Idle 2_1.png", + "file": "assets/tiled_Tiled Empty UI Heart.png", "kind": "image", "metadata": "", - "name": "Ranger_Idle 2_1.png", + "name": "tiled_Tiled Empty UI Heart.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Idle 2_1.png", + "identifier": "https://resources.gdevelop-app.com/assets/16x16 Dungeon Tileset/UI/tiled_Tiled Empty UI Heart.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Idle 2_2.png", + "file": "assets/tiled_Tiled Filler UI Heart.png", "kind": "image", "metadata": "", - "name": "Ranger_Idle 2_2.png", + "name": "tiled_Tiled Filler UI Heart.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Idle 2_2.png", + "identifier": "https://resources.gdevelop-app.com/assets/16x16 Dungeon Tileset/UI/tiled_Tiled Filler UI Heart.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Idle 2_3.png", + "file": "assets/Health Bar.png", "kind": "image", "metadata": "", - "name": "Ranger_Idle 2_3.png", + "name": "Health Bar.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Idle 2_3.png", + "identifier": "https://resources.gdevelop-app.com/assets/Pirate Bomb Pack/Objects/Health Bar/Health Bar.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Idle 2_4.png", + "file": "assets/tiled_Health Bar Fill.png", "kind": "image", "metadata": "", - "name": "Ranger_Idle 2_4.png", + "name": "tiled_Health Bar Fill.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Idle 2_4.png", + "identifier": "https://resources.gdevelop-app.com/assets/Space Shooter by Pixel boy/Hud/tiled_Health Bar Fill.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Jump Kick_1.png", + "file": "assets/tiled_Energy Bar Fill.png", "kind": "image", "metadata": "", - "name": "Ranger_Jump Kick_1.png", + "name": "tiled_Energy Bar Fill.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Jump Kick_1.png", + "identifier": "https://resources.gdevelop-app.com/assets/Space Shooter by Pixel boy/Hud/tiled_Energy Bar Fill.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Jump Kick_2.png", + "file": "assets/Health Bar Box.png", "kind": "image", "metadata": "", - "name": "Ranger_Jump Kick_2.png", + "name": "Health Bar Box.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Jump Kick_2.png", + "identifier": "https://resources.gdevelop-app.com/assets/Western FPS 2D/Hud/Bar/Health Bar Box.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Jump Kick_3.png", + "file": "assets/Health Indicator_Black Outline Empty.png", "kind": "image", "metadata": "", - "name": "Ranger_Jump Kick_3.png", + "name": "Health Indicator_Black Outline Empty.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Jump Kick_3.png", + "identifier": "https://resources.gdevelop-app.com/assets/GrafxKid Pack/Mini FX, Items & UI/Mini UI/Health Indicator_Black Outline Empty.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Jump Kick_4.png", + "file": "assets/Health Indicator_Black Outline Heart.png", "kind": "image", "metadata": "", - "name": "Ranger_Jump Kick_4.png", + "name": "Health Indicator_Black Outline Heart.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Jump Kick_4.png", + "identifier": "https://resources.gdevelop-app.com/assets/GrafxKid Pack/Mini FX, Items & UI/Mini UI/Health Indicator_Black Outline Heart.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Kick 1.png", + "file": "assets/Health Indicator_White Outline Empty.png", "kind": "image", "metadata": "", - "name": "Ranger_Kick 1.png", + "name": "Health Indicator_White Outline Empty.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Kick 1.png", + "identifier": "https://resources.gdevelop-app.com/assets/GrafxKid Pack/Mini FX, Items & UI/Mini UI/Health Indicator_White Outline Empty.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Kick 2.png", + "file": "assets/Health Indicator_White Outline Heart.png", "kind": "image", "metadata": "", - "name": "Ranger_Kick 2.png", + "name": "Health Indicator_White Outline Heart.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Kick 2.png", + "identifier": "https://resources.gdevelop-app.com/assets/GrafxKid Pack/Mini FX, Items & UI/Mini UI/Health Indicator_White Outline Heart.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Knockdown.png", + "file": "assets/Heart.png", "kind": "image", "metadata": "", - "name": "Ranger_Knockdown.png", + "name": "Heart.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Knockdown.png", + "identifier": "https://resources.gdevelop-app.com/assets/Pirate Bomb Pack/Objects/Health Bar/Heart.png", "name": "gdevelop-asset-store" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Over Throw_1.png", + "file": "assets/Heart-1-1.png", + "kind": "image", + "metadata": "", + "name": "assets\\Heart-1-1.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Bomb_No Shadow.png", "kind": "image", "metadata": "", - "name": "Ranger_Over Throw_1.png", + "name": "Bomb_No Shadow.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Over Throw_1.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/32x32 Fantasy Icons Pack v2/Icons/General Items/1ceb65f6eab8e1594f3d784d881fc1eaf87a02d9e331b7ff811acc1bca3e1c2a_Bomb_No Shadow.png", + "name": "Bomb_No Shadow.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Over Throw_2.png", + "file": "assets/Bomb_Shadow.png", "kind": "image", "metadata": "", - "name": "Ranger_Over Throw_2.png", + "name": "Bomb_Shadow.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Over Throw_2.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/32x32 Fantasy Icons Pack v2/Icons/General Items/a58e750a7f074351f00ca54fa599fb9c383dcf55c942a27441d0d799228051e1_Bomb_Shadow.png", + "name": "Bomb_Shadow.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Pick Up 2.png", + "file": "assets/Plus Key.png", "kind": "image", "metadata": "", - "name": "Ranger_Pick Up 2.png", - "smoothed": false, + "name": "Plus Key.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Pick Up 2.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Xelu Free Controller and Key Prompts/Keyboard/Dark/fc542dd4d657e2a0bc2a7beaf49ca6135611119f11b7bcd5b5b0f97d273c6634_Plus Key.png", + "name": "Plus Key.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Pick Up.png", + "file": "assets/Minus Key.png", "kind": "image", "metadata": "", - "name": "Ranger_Pick Up.png", - "smoothed": false, + "name": "Minus Key.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Pick Up.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Xelu Free Controller and Key Prompts/Keyboard/Dark/4c2d6e9b511305699472697c840548f3081e21e6a8f678342495570fda6a6edb_Minus Key.png", + "name": "Minus Key.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Punch 1.png", + "file": "assets/Arrow.png", "kind": "image", "metadata": "", - "name": "Ranger_Punch 1.png", + "name": "Arrow.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Punch 1.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Western FPS 2D/Hud/261d2f5da18169c3f3f0cf2940b975a4eb4eef808b2a5d5a6d0533c21117b142_Arrow.png", + "name": "Arrow.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Punch 2.png", + "file": "assets/Key_Filled.png", "kind": "image", "metadata": "", - "name": "Ranger_Punch 2.png", - "smoothed": false, + "name": "Key_Filled.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Punch 2.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Rolling Ball Pack/Interface/7bb3db5bbfaf32c67bd19d326370f4cd2f7a3ae8fcb99f38a7c7805cb117d8d4_Key_Filled.png", + "name": "Key_Filled.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Run_1.png", + "file": "assets/Key_Outline.png", "kind": "image", "metadata": "", - "name": "Ranger_Run_1.png", - "smoothed": false, + "name": "Key_Outline.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Run_1.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Rolling Ball Pack/Interface/9817de9005c1a3ab785d2d6c8265d4028bb4f7286eb33bdd65fbd43f9e55556f_Key_Outline.png", + "name": "Key_Outline.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Run_2.png", + "file": "assets/Playing Card_Back Blue 1.png", "kind": "image", "metadata": "", - "name": "Ranger_Run_2.png", + "name": "Playing Card_Back Blue 1.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Run_2.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/45d8c10efbc8b88551c4f3bbf86ad7c8fc4605c9a9c6d735eca88b42425e7cd0_Playing Card_Back Blue 1.png", + "name": "Playing Card_Back Blue 1.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Run_3.png", + "file": "assets/Playing Card_Back Blue 2.png", "kind": "image", "metadata": "", - "name": "Ranger_Run_3.png", + "name": "Playing Card_Back Blue 2.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Run_3.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/702ac50f6b09f2fd9c8bedff300f69243e9b869be8bb167ba8f312d3da23d2d3_Playing Card_Back Blue 2.png", + "name": "Playing Card_Back Blue 2.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Run_4.png", + "file": "assets/Playing Card_Back Brown 1.png", "kind": "image", "metadata": "", - "name": "Ranger_Run_4.png", + "name": "Playing Card_Back Brown 1.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Run_4.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/2cd9e2c953aa53dbf5c6d0e47b4578be7f93b5efc3ea68956794d0b1289f6609_Playing Card_Back Brown 1.png", + "name": "Playing Card_Back Brown 1.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Stab.png", + "file": "assets/Playing Card_Back Brown 2.png", "kind": "image", "metadata": "", - "name": "Ranger_Stab.png", + "name": "Playing Card_Back Brown 2.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Stab.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/65cbd17e62582bacd5f00582d4bb5aeeb6ea4ee640e21818b6eba5081e587304_Playing Card_Back Brown 2.png", + "name": "Playing Card_Back Brown 2.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Strafe 1_1.png", + "file": "assets/Playing Card_Back Red 1.png", "kind": "image", "metadata": "", - "name": "Ranger_Strafe 1_1.png", + "name": "Playing Card_Back Red 1.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Strafe 1_1.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/4ff2180e54ad5fe99a9d640f2c60942286941b87c696e2cfadbd6443a8c19b5e_Playing Card_Back Red 1.png", + "name": "Playing Card_Back Red 1.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Strafe 1_2.png", + "file": "assets/Playing Card_Back Red 2.png", "kind": "image", "metadata": "", - "name": "Ranger_Strafe 1_2.png", + "name": "Playing Card_Back Red 2.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Strafe 1_2.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/fdac3c95127abee6786eef00b03a15658d0801fc7f1c11fc6d165f5ddbc7761f_Playing Card_Back Red 2.png", + "name": "Playing Card_Back Red 2.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Strafe 1_3.png", + "file": "assets/Playing Card_Clubs 02.png", "kind": "image", "metadata": "", - "name": "Ranger_Strafe 1_3.png", + "name": "Playing Card_Clubs 02.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Strafe 1_3.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/1d01b932a889b44d89f2b96368f7b3fa3366e7ccb6de30bb22430133ca21bb42_Playing Card_Clubs 02.png", + "name": "Playing Card_Clubs 02.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Strafe 1_4.png", + "file": "assets/Playing Card_Clubs 03.png", "kind": "image", "metadata": "", - "name": "Ranger_Strafe 1_4.png", + "name": "Playing Card_Clubs 03.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Strafe 1_4.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/a59c3bc065a12015b69cad078fb3a74e2c18cf825be48cf69044010795482f45_Playing Card_Clubs 03.png", + "name": "Playing Card_Clubs 03.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Strafe 2_1.png", + "file": "assets/Playing Card_Clubs 04.png", "kind": "image", "metadata": "", - "name": "Ranger_Strafe 2_1.png", + "name": "Playing Card_Clubs 04.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Strafe 2_1.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/6e15b233c29d5f9b92c216d2dcba39a2f83720c3fc732dfa2abddabb332ba85e_Playing Card_Clubs 04.png", + "name": "Playing Card_Clubs 04.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Strafe 2_2.png", + "file": "assets/Playing Card_Clubs 05.png", "kind": "image", "metadata": "", - "name": "Ranger_Strafe 2_2.png", + "name": "Playing Card_Clubs 05.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Strafe 2_2.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/37e6767258064bf343185e32a2878ab6f008acb4cdd737311267078e852b2a32_Playing Card_Clubs 05.png", + "name": "Playing Card_Clubs 05.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Strafe 2_3.png", + "file": "assets/Playing Card_Clubs 06.png", "kind": "image", "metadata": "", - "name": "Ranger_Strafe 2_3.png", + "name": "Playing Card_Clubs 06.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Strafe 2_3.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/cfdbccd7c1f67bfbbc04119d2df55fbe0411f82eef9c5779fdcce4e479ad3cde_Playing Card_Clubs 06.png", + "name": "Playing Card_Clubs 06.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Strafe 2_4.png", + "file": "assets/Playing Card_Clubs 07.png", "kind": "image", "metadata": "", - "name": "Ranger_Strafe 2_4.png", + "name": "Playing Card_Clubs 07.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Strafe 2_4.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/c76e0e677e1ddd6dd05848f51c49e0f4c87711c226b7deb94357de22282fd268_Playing Card_Clubs 07.png", + "name": "Playing Card_Clubs 07.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Walk 1_1.png", + "file": "assets/Playing Card_Clubs 08.png", "kind": "image", "metadata": "", - "name": "Ranger_Walk 1_1.png", + "name": "Playing Card_Clubs 08.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Walk 1_1.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/245935a2431ddf72509e0f3cd12ec3b0229aa005310eed111818da8265760fbc_Playing Card_Clubs 08.png", + "name": "Playing Card_Clubs 08.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Walk 1_2.png", + "file": "assets/Playing Card_Clubs 09.png", "kind": "image", "metadata": "", - "name": "Ranger_Walk 1_2.png", + "name": "Playing Card_Clubs 09.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Walk 1_2.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/352eb13ac79b60b8c650601b6495e0558de553604ce1124d0bdf75d6087d6049_Playing Card_Clubs 09.png", + "name": "Playing Card_Clubs 09.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Walk 1_3.png", + "file": "assets/Playing Card_Clubs 10.png", "kind": "image", "metadata": "", - "name": "Ranger_Walk 1_3.png", + "name": "Playing Card_Clubs 10.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Walk 1_3.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/fb330a065248677911f6b14f8294e03777cb585c19e4aacabb53109c335d3575_Playing Card_Clubs 10.png", + "name": "Playing Card_Clubs 10.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Walk 1_4.png", + "file": "assets/Playing Card_Clubs A.png", "kind": "image", "metadata": "", - "name": "Ranger_Walk 1_4.png", + "name": "Playing Card_Clubs A.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Walk 1_4.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/f97a1e91ad3f63787c6175b116d4999c14dc462a2e287494142a8b01f5c43d06_Playing Card_Clubs A.png", + "name": "Playing Card_Clubs A.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Walk 2_1.png", + "file": "assets/Playing Card_Clubs J.png", "kind": "image", "metadata": "", - "name": "Ranger_Walk 2_1.png", + "name": "Playing Card_Clubs J.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Walk 2_1.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/6c143342e09e253c9d0446c2e59b27faadf330b15f1657d45a07850bb598a38a_Playing Card_Clubs J.png", + "name": "Playing Card_Clubs J.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Walk 2_2.png", + "file": "assets/Playing Card_Clubs K.png", "kind": "image", "metadata": "", - "name": "Ranger_Walk 2_2.png", + "name": "Playing Card_Clubs K.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Walk 2_2.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/600a46d080fa5e086ef3c1a1f8515f8232273845f39ae25996d2db959b7f229c_Playing Card_Clubs K.png", + "name": "Playing Card_Clubs K.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Walk 2_3.png", + "file": "assets/Playing Card_Clubs Q.png", "kind": "image", "metadata": "", - "name": "Ranger_Walk 2_3.png", + "name": "Playing Card_Clubs Q.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Walk 2_3.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/7c7d22520dd102f71744c6689c5b0a47417e4765e18c7789400da1676d538706_Playing Card_Clubs Q.png", + "name": "Playing Card_Clubs Q.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Walk 2_4.png", + "file": "assets/Playing Card_Diamond 02.png", "kind": "image", "metadata": "", - "name": "Ranger_Walk 2_4.png", + "name": "Playing Card_Diamond 02.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Walk 2_4.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/d7d5824c27e5521de286fa6a9d294d9c3827ca003367dc9bb0c8e1c4d9ba45b7_Playing Card_Diamond 02.png", + "name": "Playing Card_Diamond 02.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Walk 3_1.png", + "file": "assets/Playing Card_Diamond 03.png", "kind": "image", "metadata": "", - "name": "Ranger_Walk 3_1.png", + "name": "Playing Card_Diamond 03.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Walk 3_1.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/03bbe9833d1ff0faefacf07001f57db2bb2c82412b093ec0ce6c1fdc05034c7c_Playing Card_Diamond 03.png", + "name": "Playing Card_Diamond 03.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Walk 3_2.png", + "file": "assets/Playing Card_Diamond 04.png", "kind": "image", "metadata": "", - "name": "Ranger_Walk 3_2.png", + "name": "Playing Card_Diamond 04.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Walk 3_2.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/b2a86bc52b75ab9fbaabd7041f7900e749eeeeaf46d90ebbac0abb4b9843df42_Playing Card_Diamond 04.png", + "name": "Playing Card_Diamond 04.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Walk 3_3.png", + "file": "assets/Playing Card_Diamond 05.png", "kind": "image", "metadata": "", - "name": "Ranger_Walk 3_3.png", + "name": "Playing Card_Diamond 05.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Walk 3_3.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/673ac4ebb82a45d89b321a744a96fc9703f4cd6e69d2d0bd442372dfcece2c75_Playing Card_Diamond 05.png", + "name": "Playing Card_Diamond 05.png" } }, { "alwaysLoaded": false, - "file": "assets/Ranger_Walk 3_4.png", + "file": "assets/Playing Card_Diamond 06.png", "kind": "image", "metadata": "", - "name": "Ranger_Walk 3_4.png", + "name": "Playing Card_Diamond 06.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Brawler Series/NES/Ranger_Walk 3_4.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/0b0eb2394c93d49b4f978cfdf88a7dcfb796f16207d898acf9e3a8decd9bfc87_Playing Card_Diamond 06.png", + "name": "Playing Card_Diamond 06.png" } }, { "alwaysLoaded": false, - "file": "assets/Fly_1.png", + "file": "assets/Playing Card_Diamond 07.png", "kind": "image", "metadata": "", - "name": "Fly_1.png", - "smoothed": true, + "name": "Playing Card_Diamond 07.png", + "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_1.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/942705e1185fb80c12ddbcd095f168495e938c44509f7832fcdbe186e66a914a_Playing Card_Diamond 07.png", + "name": "Playing Card_Diamond 07.png" } }, { "alwaysLoaded": false, - "file": "assets/Fly_10.png", + "file": "assets/Playing Card_Diamond 08.png", "kind": "image", "metadata": "", - "name": "Fly_10.png", - "smoothed": true, + "name": "Playing Card_Diamond 08.png", + "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_10.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/71811d6f57968e799c534df2df62762203ec073b9375d4026f8f4a1c04380421_Playing Card_Diamond 08.png", + "name": "Playing Card_Diamond 08.png" } }, { "alwaysLoaded": false, - "file": "assets/Fly_2.png", + "file": "assets/Playing Card_Diamond 09.png", "kind": "image", "metadata": "", - "name": "Fly_2.png", - "smoothed": true, + "name": "Playing Card_Diamond 09.png", + "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_2.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/82a1fca7de0ad3af5222008612f09081958a06aa5af07ef9d7000b293fd40162_Playing Card_Diamond 09.png", + "name": "Playing Card_Diamond 09.png" } }, { "alwaysLoaded": false, - "file": "assets/Fly_3.png", + "file": "assets/Playing Card_Diamond 10.png", "kind": "image", "metadata": "", - "name": "Fly_3.png", - "smoothed": true, + "name": "Playing Card_Diamond 10.png", + "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_3.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/3ca86ef6e65fef7170ca7d3792ab14f1f52f7094cfac978210e51b42d560aaa8_Playing Card_Diamond 10.png", + "name": "Playing Card_Diamond 10.png" } }, { "alwaysLoaded": false, - "file": "assets/Fly_4.png", + "file": "assets/Playing Card_Diamond A.png", "kind": "image", "metadata": "", - "name": "Fly_4.png", - "smoothed": true, + "name": "Playing Card_Diamond A.png", + "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_4.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/1907fdccf9cf1727959f8e554657c39fc7897cf6342a6577906096f333cc993a_Playing Card_Diamond A.png", + "name": "Playing Card_Diamond A.png" } }, { "alwaysLoaded": false, - "file": "assets/Fly_5.png", + "file": "assets/Playing Card_Diamond J.png", "kind": "image", "metadata": "", - "name": "Fly_5.png", - "smoothed": true, + "name": "Playing Card_Diamond J.png", + "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_5.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/b2db6ddff7ce5fa38afaf11255a080ace2d9b8fa6983c7734f7ba432bb91022c_Playing Card_Diamond J.png", + "name": "Playing Card_Diamond J.png" } }, { "alwaysLoaded": false, - "file": "assets/Fly_6.png", + "file": "assets/Playing Card_Diamond K.png", "kind": "image", "metadata": "", - "name": "Fly_6.png", - "smoothed": true, + "name": "Playing Card_Diamond K.png", + "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_6.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/8cf19bd2048868217422ac1702a810e64ac5a1241c815dd43a6d86bc20228e06_Playing Card_Diamond K.png", + "name": "Playing Card_Diamond K.png" } }, { "alwaysLoaded": false, - "file": "assets/Fly_7.png", + "file": "assets/Playing Card_Diamond Q.png", "kind": "image", "metadata": "", - "name": "Fly_7.png", - "smoothed": true, + "name": "Playing Card_Diamond Q.png", + "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_7.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/62666ce404454229888659d2aa76ece6e40d69a0aed746b291341939580fde62_Playing Card_Diamond Q.png", + "name": "Playing Card_Diamond Q.png" } }, { "alwaysLoaded": false, - "file": "assets/Fly_8.png", + "file": "assets/Playing Card_Hearts 02.png", "kind": "image", "metadata": "", - "name": "Fly_8.png", - "smoothed": true, + "name": "Playing Card_Hearts 02.png", + "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_8.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/6759af6b5226a83322915bfed1b6cecd8efcad620b96ba0d63bbe9689c8db42c_Playing Card_Hearts 02.png", + "name": "Playing Card_Hearts 02.png" } }, { "alwaysLoaded": false, - "file": "assets/Fly_9.png", + "file": "assets/Playing Card_Hearts 03.png", "kind": "image", "metadata": "", - "name": "Fly_9.png", - "smoothed": true, + "name": "Playing Card_Hearts 03.png", + "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_9.png", - "name": "gdevelop-asset-store" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Star_LargeNarrow.png", - "kind": "image", - "metadata": "", - "name": "Star_LargeNarrow.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Simple Space/stars/Star_LargeNarrow.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/ec5f7db10e42a1d9e6c7d246193f7db5e507bc1b1ec561dc9f0aa60ecd04616b_Playing Card_Hearts 03.png", + "name": "Playing Card_Hearts 03.png" } }, { "alwaysLoaded": false, - "file": "assets/Star_LargeWide.png", + "file": "assets/Playing Card_Hearts 04.png", "kind": "image", "metadata": "", - "name": "Star_LargeWide.png", - "smoothed": true, + "name": "Playing Card_Hearts 04.png", + "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Simple Space/stars/Star_LargeWide.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/e356db36b32f4a7e7e7969504caeda79b8f9ee552b3518151c437ba663684273_Playing Card_Hearts 04.png", + "name": "Playing Card_Hearts 04.png" } }, { "alwaysLoaded": false, - "file": "assets/Star_Medium.png", + "file": "assets/Playing Card_Hearts 05.png", "kind": "image", "metadata": "", - "name": "Star_Medium.png", - "smoothed": true, + "name": "Playing Card_Hearts 05.png", + "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Simple Space/stars/Star_Medium.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/a337b7ec298507602bfd253623e4678e456ab6af70a39c938e6d07e642265a78_Playing Card_Hearts 05.png", + "name": "Playing Card_Hearts 05.png" } }, { "alwaysLoaded": false, - "file": "assets/Star_Small.png", + "file": "assets/Playing Card_Hearts 06.png", "kind": "image", "metadata": "", - "name": "Star_Small.png", - "smoothed": true, + "name": "Playing Card_Hearts 06.png", + "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Simple Space/stars/Star_Small.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/6d06b53368b61e1d3237a9e555e041886db74e4b7cfd7b713b523256dc0a8274_Playing Card_Hearts 06.png", + "name": "Playing Card_Hearts 06.png" } }, { "alwaysLoaded": false, - "file": "assets/Blue laser (01).png", + "file": "assets/Playing Card_Hearts 07.png", "kind": "image", "metadata": "", - "name": "Blue laser (01).png", - "smoothed": true, + "name": "Playing Card_Hearts 07.png", + "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Space Shooter/PNG/Lasers/Blue laser (01).png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/8cde3a832de612c2680c0ffa3b4bd094ace4d6073a1be2034370a0298677f626_Playing Card_Hearts 07.png", + "name": "Playing Card_Hearts 07.png" } }, { "alwaysLoaded": false, - "file": "assets/Silver shield.png", + "file": "assets/Playing Card_Hearts 08.png", "kind": "image", "metadata": "", - "name": "Silver shield.png", - "smoothed": true, + "name": "Playing Card_Hearts 08.png", + "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Space Shooter/PNG/Power-ups/Silver shield.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/5607ed43a0667f9d88a28dd37d879588206da0b0e17865e592fab5c856a3a642_Playing Card_Hearts 08.png", + "name": "Playing Card_Hearts 08.png" } }, { "alwaysLoaded": false, - "file": "assets/Meteor Detailed_Large.png", + "file": "assets/Playing Card_Hearts 09.png", "kind": "image", "metadata": "", - "name": "Meteor Detailed_Large.png", - "smoothed": true, + "name": "Playing Card_Hearts 09.png", + "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Simple Space/meteors/Meteor Detailed_Large.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/a4a2b7ad1e25c76b520368fd96cb44f33024218b5bc5d499ac997ebbfdb56cd5_Playing Card_Hearts 09.png", + "name": "Playing Card_Hearts 09.png" } }, { "alwaysLoaded": false, - "file": "assets/Meteor Detailed_Small.png", + "file": "assets/Playing Card_Hearts 10.png", "kind": "image", "metadata": "", - "name": "Meteor Detailed_Small.png", - "smoothed": true, + "name": "Playing Card_Hearts 10.png", + "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Simple Space/meteors/Meteor Detailed_Small.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/ffcff1a17db2fe8890a788bd3069ff71621e036ace4aad2c73f4af0d6771e4f0_Playing Card_Hearts 10.png", + "name": "Playing Card_Hearts 10.png" } }, { "alwaysLoaded": false, - "file": "assets/Upgraded Potion Blue_No Shadow.png", + "file": "assets/Playing Card_Hearts A.png", "kind": "image", "metadata": "", - "name": "Upgraded Potion Blue_No Shadow.png", + "name": "Playing Card_Hearts A.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/32x32 Fantasy Icons Pack v2/Icons/Healing Items/Upgraded Potion Blue_No Shadow.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/1266821f3f5a138d1b387d4eb18b61bd802e74af9fd248acdd4c8308a5b6bf74_Playing Card_Hearts A.png", + "name": "Playing Card_Hearts A.png" } }, { "alwaysLoaded": false, - "file": "assets/Upgraded Potion Blue_Shadow.png", + "file": "assets/Playing Card_Hearts J.png", "kind": "image", "metadata": "", - "name": "Upgraded Potion Blue_Shadow.png", + "name": "Playing Card_Hearts J.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/32x32 Fantasy Icons Pack v2/Icons/Healing Items/Upgraded Potion Blue_Shadow.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/5e4cfddc34a3bdc59e72c802faf36c574258b974fd41451525e0177a4e850ffc_Playing Card_Hearts J.png", + "name": "Playing Card_Hearts J.png" } }, { "alwaysLoaded": false, - "file": "assets/Moon.png", + "file": "assets/Playing Card_Hearts K.png", "kind": "image", "metadata": "", - "name": "Moon.png", - "smoothed": true, + "name": "Playing Card_Hearts K.png", + "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Background/Moon.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/6463be18b9a44c4224fe12d34d8afc6f99e6dc39e6fac033e04f7295b331bc08_Playing Card_Hearts K.png", + "name": "Playing Card_Hearts K.png" } }, { "alwaysLoaded": false, - "file": "assets/Emote Heart.png", + "file": "assets/Playing Card_Hearts Q.png", "kind": "image", "metadata": "", - "name": "Emote Heart.png", - "smoothed": true, + "name": "Playing Card_Hearts Q.png", + "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Emotes/Normal/Emote/Emote Heart.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/0de8c8afc90d4084ad528060b7b01d22ec4bf68e6fe13d44c02e859445b89836_Playing Card_Hearts Q.png", + "name": "Playing Card_Hearts Q.png" } }, { "alwaysLoaded": false, - "file": "assets/tiled_Tiled Empty UI Heart.png", + "file": "assets/Playing Card_Joker Black.png", "kind": "image", "metadata": "", - "name": "tiled_Tiled Empty UI Heart.png", + "name": "Playing Card_Joker Black.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/16x16 Dungeon Tileset/UI/tiled_Tiled Empty UI Heart.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/ed5a7db38327142a6d26f1122ee0180f671d99fb72cad242a0fce2b7ca972eaa_Playing Card_Joker Black.png", + "name": "Playing Card_Joker Black.png" } }, { "alwaysLoaded": false, - "file": "assets/tiled_Tiled Filler UI Heart.png", + "file": "assets/Playing Card_Joker Red.png", "kind": "image", "metadata": "", - "name": "tiled_Tiled Filler UI Heart.png", + "name": "Playing Card_Joker Red.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/16x16 Dungeon Tileset/UI/tiled_Tiled Filler UI Heart.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/c694c06b970aa68c106844440df67c138b851141c43a8f2e717604c1c0807682_Playing Card_Joker Red.png", + "name": "Playing Card_Joker Red.png" } }, { "alwaysLoaded": false, - "file": "assets/Health Bar.png", + "file": "assets/Playing Card_Spades 02.png", "kind": "image", "metadata": "", - "name": "Health Bar.png", + "name": "Playing Card_Spades 02.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Pirate Bomb Pack/Objects/Health Bar/Health Bar.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/c93fce6db7fb23b3a6e2736c364ec796c708db24a204de1daf4a670a7220d0b0_Playing Card_Spades 02.png", + "name": "Playing Card_Spades 02.png" } }, { "alwaysLoaded": false, - "file": "assets/tiled_Health Bar Fill.png", + "file": "assets/Playing Card_Spades 03.png", "kind": "image", "metadata": "", - "name": "tiled_Health Bar Fill.png", + "name": "Playing Card_Spades 03.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Space Shooter by Pixel boy/Hud/tiled_Health Bar Fill.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/c1c38935c1e8cc0a9442858f317dc370dfad0aa142354ecb33b7dc2c017f91c3_Playing Card_Spades 03.png", + "name": "Playing Card_Spades 03.png" } }, { "alwaysLoaded": false, - "file": "assets/tiled_Energy Bar Fill.png", + "file": "assets/Playing Card_Spades 04.png", "kind": "image", "metadata": "", - "name": "tiled_Energy Bar Fill.png", + "name": "Playing Card_Spades 04.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Space Shooter by Pixel boy/Hud/tiled_Energy Bar Fill.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/fa91978a59d726ac490a26f610523115f58e84e1c2ff7379698dbd454b4e108c_Playing Card_Spades 04.png", + "name": "Playing Card_Spades 04.png" } }, { "alwaysLoaded": false, - "file": "assets/Health Bar Box.png", + "file": "assets/Playing Card_Spades 05.png", "kind": "image", "metadata": "", - "name": "Health Bar Box.png", + "name": "Playing Card_Spades 05.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Western FPS 2D/Hud/Bar/Health Bar Box.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/2386553aae77dacdc3bdb5cb36d2418cb534779ea5ae5c50536c3b593f9ac173_Playing Card_Spades 05.png", + "name": "Playing Card_Spades 05.png" } }, { "alwaysLoaded": false, - "file": "assets/Health Indicator_Black Outline Empty.png", + "file": "assets/Playing Card_Spades 06.png", "kind": "image", "metadata": "", - "name": "Health Indicator_Black Outline Empty.png", + "name": "Playing Card_Spades 06.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GrafxKid Pack/Mini FX, Items & UI/Mini UI/Health Indicator_Black Outline Empty.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/d524989c528da32a21b024f0a930d8b01a2900672d911216ce4fffbcea3187f5_Playing Card_Spades 06.png", + "name": "Playing Card_Spades 06.png" } }, { "alwaysLoaded": false, - "file": "assets/Health Indicator_Black Outline Heart.png", + "file": "assets/Playing Card_Spades 07.png", "kind": "image", "metadata": "", - "name": "Health Indicator_Black Outline Heart.png", + "name": "Playing Card_Spades 07.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GrafxKid Pack/Mini FX, Items & UI/Mini UI/Health Indicator_Black Outline Heart.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/f070b7efd25a8d1f303904f95611daf1cc24f0205c25fca92c8b93e787b21ee1_Playing Card_Spades 07.png", + "name": "Playing Card_Spades 07.png" } }, { "alwaysLoaded": false, - "file": "assets/Health Indicator_White Outline Empty.png", + "file": "assets/Playing Card_Spades 08.png", "kind": "image", "metadata": "", - "name": "Health Indicator_White Outline Empty.png", + "name": "Playing Card_Spades 08.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GrafxKid Pack/Mini FX, Items & UI/Mini UI/Health Indicator_White Outline Empty.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/18f2fc0be76a66e7c5ed5774371850f90e62173c23f328b44fd5d912a0f466aa_Playing Card_Spades 08.png", + "name": "Playing Card_Spades 08.png" } }, { "alwaysLoaded": false, - "file": "assets/Health Indicator_White Outline Heart.png", + "file": "assets/Playing Card_Spades 09.png", "kind": "image", "metadata": "", - "name": "Health Indicator_White Outline Heart.png", + "name": "Playing Card_Spades 09.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GrafxKid Pack/Mini FX, Items & UI/Mini UI/Health Indicator_White Outline Heart.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/3634469f717dae7070b4c5abd88412879706f44fa13fd0f2ad239f129302eaa3_Playing Card_Spades 09.png", + "name": "Playing Card_Spades 09.png" } }, { "alwaysLoaded": false, - "file": "assets/Heart.png", + "file": "assets/Playing Card_Spades 10.png", "kind": "image", "metadata": "", - "name": "Heart.png", + "name": "Playing Card_Spades 10.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Pirate Bomb Pack/Objects/Health Bar/Heart.png", - "name": "gdevelop-asset-store" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/10cdac8fed60ae31c662be905c8c32321670af7eca3ac24e59905a1b8b6fc1f4_Playing Card_Spades 10.png", + "name": "Playing Card_Spades 10.png" } }, { "alwaysLoaded": false, - "file": "assets/Heart.png", - "kind": "image", - "metadata": "", - "name": "assets\\Heart.png", - "smoothed": true, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Heart-1.png", - "kind": "image", - "metadata": "", - "name": "assets\\Heart-1.png", - "smoothed": true, - "userAdded": false - }, - { - "alwaysLoaded": false, - "file": "assets/Heart-1-1.png", - "kind": "image", - "metadata": "", - "name": "assets\\Heart-1-1.png", - "smoothed": true, - "userAdded": false - }, - { - "alwaysLoaded": false, - "file": "assets/Bomb_No Shadow.png", + "file": "assets/Playing Card_Spades A.png", "kind": "image", "metadata": "", - "name": "Bomb_No Shadow.png", + "name": "Playing Card_Spades A.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/32x32 Fantasy Icons Pack v2/Icons/General Items/1ceb65f6eab8e1594f3d784d881fc1eaf87a02d9e331b7ff811acc1bca3e1c2a_Bomb_No Shadow.png", - "name": "Bomb_No Shadow.png" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/d6c8fa7a19720e25768ac3cdddc4790cbd56ff04e861f5cc06157491289efb52_Playing Card_Spades A.png", + "name": "Playing Card_Spades A.png" } }, { "alwaysLoaded": false, - "file": "assets/Bomb_Shadow.png", + "file": "assets/Playing Card_Spades J.png", "kind": "image", "metadata": "", - "name": "Bomb_Shadow.png", + "name": "Playing Card_Spades J.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/32x32 Fantasy Icons Pack v2/Icons/General Items/a58e750a7f074351f00ca54fa599fb9c383dcf55c942a27441d0d799228051e1_Bomb_Shadow.png", - "name": "Bomb_Shadow.png" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/136684a4f36434065d973b1ece901950de48a869b9fc16e07df140cdd702bc92_Playing Card_Spades J.png", + "name": "Playing Card_Spades J.png" } }, { "alwaysLoaded": false, - "file": "assets/Plus Key.png", + "file": "assets/Playing Card_Spades K.png", "kind": "image", "metadata": "", - "name": "Plus Key.png", - "smoothed": true, + "name": "Playing Card_Spades K.png", + "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Xelu Free Controller and Key Prompts/Keyboard/Dark/fc542dd4d657e2a0bc2a7beaf49ca6135611119f11b7bcd5b5b0f97d273c6634_Plus Key.png", - "name": "Plus Key.png" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/80dea9fc24669c302a3d28f41c35765295c1d16098b99d123257ead12cdddd9a_Playing Card_Spades K.png", + "name": "Playing Card_Spades K.png" } }, { "alwaysLoaded": false, - "file": "assets/Minus Key.png", + "file": "assets/Playing Card_Spades Q.png", "kind": "image", "metadata": "", - "name": "Minus Key.png", - "smoothed": true, + "name": "Playing Card_Spades Q.png", + "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Xelu Free Controller and Key Prompts/Keyboard/Dark/4c2d6e9b511305699472697c840548f3081e21e6a8f678342495570fda6a6edb_Minus Key.png", - "name": "Minus Key.png" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/88c238e3e05549f19877a9a2788496d7fa198ebb3270dd5099373cbd8ed1b71c_Playing Card_Spades Q.png", + "name": "Playing Card_Spades Q.png" } } ], @@ -1411,7 +1380,7 @@ "gridColor": 10401023, "gridAlpha": 0.2, "snap": true, - "zoomFactor": 0.6599999999999997, + "zoomFactor": 1.04, "windowMask": false }, "objectsGroups": [ @@ -1452,8 +1421,8 @@ "name": "Unit_ResourceBar", "persistentUuid": "0c4d4e97-0b53-4f05-8468-7d8b7a7fa8dd", "width": 0, - "x": 80, - "y": 146, + "x": 128, + "y": 224, "zOrder": 13, "numberProperties": [], "stringProperties": [], @@ -1526,9 +1495,9 @@ "layer": "", "name": "NewPanelSprite", "persistentUuid": "d0461165-f597-4574-b3e8-8e78014d1c61", - "width": 336, - "x": 440, - "y": 496, + "width": 288, + "x": 464, + "y": 490, "zOrder": 0, "numberProperties": [], "stringProperties": [], @@ -1542,8 +1511,8 @@ "name": "Heart_Tiled", "persistentUuid": "63560c9a-582e-4a76-9560-e929ab4a1fdf", "width": 24, - "x": 480, - "y": 518, + "x": 504, + "y": 512, "zOrder": 21, "numberProperties": [], "stringProperties": [], @@ -1557,8 +1526,8 @@ "name": "Heart", "persistentUuid": "19dc3b0f-137e-428c-ae37-9a64934186c6", "width": 0, - "x": 64, - "y": 520, + "x": 152, + "y": 512, "zOrder": 19, "numberProperties": [], "stringProperties": [], @@ -1601,9 +1570,9 @@ "layer": "", "name": "NewPanelSprite", "persistentUuid": "4598dbb6-59cf-4253-9998-1c3b796491f3", - "width": 336, - "x": 24, - "y": 498, + "width": 280, + "x": 112, + "y": 490, "zOrder": 0, "numberProperties": [], "stringProperties": [], @@ -1617,7 +1586,7 @@ "name": "Bomb", "persistentUuid": "70dc048d-f1b7-4ed5-8d6b-f8a54eb65201", "width": 0, - "x": 56, + "x": 128, "y": 280, "zOrder": 24, "numberProperties": [], @@ -1653,6 +1622,111 @@ "numberProperties": [], "stringProperties": [], "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Arrow", + "persistentUuid": "7d2f81fb-834d-4237-8dbb-9fa7cceb316c", + "width": 0, + "x": 139, + "y": 331, + "zOrder": 28, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 58, + "layer": "", + "name": "PlayingCard", + "persistentUuid": "398851ad-3ee9-42b2-a8f9-44c10a9a25b6", + "width": 43.28985595703125, + "x": 132.71014404296875, + "y": 398, + "zOrder": 29, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "ChangeAnimation_Text", + "persistentUuid": "9f9d682b-8f01-4be1-8309-47306157a1b4", + "width": 0, + "x": 32, + "y": 416, + "zOrder": 31, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "PartialOpacity_Text", + "persistentUuid": "6b1134a9-2476-4e8d-a028-928ceb707c67", + "width": 0, + "x": 40, + "y": 344, + "zOrder": 32, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "HideSprite_Text", + "persistentUuid": "9ddf0239-b395-4c47-97be-1c1c609e58d9", + "width": 0, + "x": 37, + "y": 502, + "zOrder": 33, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "TintColor_Text", + "persistentUuid": "18cc456d-0b24-48da-9237-60dce916d4ae", + "width": 0, + "x": 40, + "y": 224, + "zOrder": 34, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "NoMaximum_Text", + "persistentUuid": "8b35a177-ffc1-455f-a122-c2b3ffde519f", + "width": 0, + "x": 32, + "y": 288, + "zOrder": 35, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] } ], "objects": [ @@ -2747,7 +2821,7 @@ "assetStoreId": "", "bold": true, "italic": false, - "name": "TiledSpriteResourceBar_Text", + "name": "ChangeAnimation_Text", "smoothed": true, "tags": "", "type": "TextObject::Text", @@ -2755,9 +2829,9 @@ "variables": [], "effects": [], "behaviors": [], - "string": "Tiled Sprite Resource Bar", + "string": " Change\nAnimation", "font": "", - "characterSize": 20, + "characterSize": 15, "color": { "b": 255, "g": 255, @@ -2768,7 +2842,7 @@ "assetStoreId": "", "bold": true, "italic": false, - "name": "ResourceMouseX_Text", + "name": "HideSprite_Text", "smoothed": true, "tags": "", "type": "TextObject::Text", @@ -2776,9 +2850,9 @@ "variables": [], "effects": [], "behaviors": [], - "string": "Resource \n(Mouse X)", + "string": " Zero\nOpacity", "font": "", - "characterSize": 30, + "characterSize": 15, "color": { "b": 255, "g": 255, @@ -2789,7 +2863,7 @@ "assetStoreId": "", "bold": true, "italic": false, - "name": "Title_Text", + "name": "PartialOpacity_Text", "smoothed": true, "tags": "", "type": "TextObject::Text", @@ -2797,9 +2871,9 @@ "variables": [], "effects": [], "behaviors": [], - "string": "Extension: Resource Bar", + "string": " Partial\nOpacity", "font": "", - "characterSize": 30, + "characterSize": 15, "color": { "b": 255, "g": 255, @@ -2808,15 +2882,120 @@ }, { "assetStoreId": "", - "name": "ResourceBarNew", + "bold": true, + "italic": false, + "name": "TintColor_Text", + "smoothed": true, "tags": "", - "type": "PrimitiveDrawing::Drawer", + "type": "TextObject::Text", + "underlined": false, "variables": [], "effects": [], - "behaviors": [ - { - "name": "DrawResourceBar", - "type": "DrawResourceBar::DrawResourceBar", + "behaviors": [], + "string": " Tint\nColor", + "font": "", + "characterSize": 15, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + }, + { + "assetStoreId": "", + "bold": true, + "italic": false, + "name": "NoMaximum_Text", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": " No\nMaximum", + "font": "", + "characterSize": 15, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + }, + { + "assetStoreId": "", + "bold": true, + "italic": false, + "name": "TiledSpriteResourceBar_Text", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Tiled Sprite Resource Bar", + "font": "", + "characterSize": 20, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + }, + { + "assetStoreId": "", + "bold": true, + "italic": false, + "name": "ResourceMouseX_Text", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Resource \n(Mouse X)", + "font": "", + "characterSize": 30, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + }, + { + "assetStoreId": "", + "bold": true, + "italic": false, + "name": "Title_Text", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Extension: Resource Bar", + "font": "", + "characterSize": 30, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + }, + { + "assetStoreId": "", + "name": "ResourceBarNew", + "tags": "", + "type": "PrimitiveDrawing::Drawer", + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "DrawResourceBar", + "type": "DrawResourceBar::DrawResourceBar", "ValueMin": 0, "ValueMax": 1, "TickSpacing": 0, @@ -3324,1378 +3503,748 @@ ] } ] - } - ], - "events": [ + }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Initialize game", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "assetStoreId": "34375c20ea59e09d2ee67954a88f957e3e54b1b6b11709c90358582201efd2fa", + "name": "Arrow", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DepartScene" - }, - "parameters": [ - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "Opacity" - }, - "parameters": [ - "Moon", - "=", - "128" - ] - }, - { - "type": { - "value": "ModVarScene" - }, - "parameters": [ - "MaxResource", - "=", - "CameraBorderRight()" - ] - } - ], - "events": [ + "name": "", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "ChangeColor" + "hasCustomCollisionMask": false, + "image": "Arrow.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Moon", - "\"144;19;254\"" - ] - }, - { - "type": { - "value": "SetCenter" + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 }, - "parameters": [ - "Moon", - "=", - "Fly.CenterX()", - "=", - "Fly.CenterY()-10" - ] - }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "fc2056e93d67c0f9c0bbc0b5fd35264bce619b4ea8d1896ba95cc8e91da5df7e", + "name": "Key", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "Filled", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "Sticker::Sticker::Stick" + "hasCustomCollisionMask": false, + "image": "Key_Filled.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Moon", - "Sticker", - "Fly", - "" - ] - }, - { - "type": { - "value": "Cache" + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 }, - "parameters": [ - "Moon" - ] + "customCollisionMask": [] } ] - }, + } + ] + }, + { + "name": "Outline", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "Create" - }, - "parameters": [ - "", - "MiniHealth_Bar", - "Fly.X()", - "Fly.Y()", - "\"\"" - ] - }, - { - "type": { - "value": "MettreXY" - }, - "parameters": [ - "MiniHealth_Bar", - "=", - "Fly.CenterX() - MiniHealth_Bar.DrawResourceBar::BarLength()/2", - "=", - "Fly.BoundingBoxTop()" - ] - }, - { - "type": { - "value": "Sticker::Sticker::Stick" + "hasCustomCollisionMask": false, + "image": "Key_Outline.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "MiniHealth_Bar", - "Sticker", - "Fly", - "" - ] - } - ] - }, - { - "disabled": true, - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DebuggerTools::EnableDebugDraw" + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 }, - "parameters": [ - "", - "", - "", - "", - "" - ] + "customCollisionMask": [] } ] } ] } - ], - "parameters": [] + ] }, { - "colorB": 224, - "colorG": 16, - "colorR": 189, - "creationTime": 0, - "name": "Draw Resource bars", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "assetStoreId": "aa070e1502e7340c6d3e71f79a2ae05f56f9ad9f7cbb9d6cc587118ed28504aa", + "name": "PlayingCard", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Tiled resource bar", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "name": "Hearts A", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetMaxQuantityOp" + "hasCustomCollisionMask": false, + "image": "Playing Card_Hearts A.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Tiled_ResourceBar", - "TiledResourceBar", - "=", - "10", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantityOp" + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 }, - "parameters": [ - "TiledEmptyUiHeart", - "TiledResourceBar", - "=", - "10", - "" - ] + "customCollisionMask": [] } ] - }, + } + ] + }, + { + "name": "Back Blue 1", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "KeyReleased" + "hasCustomCollisionMask": false, + "image": "Playing Card_Back Blue 1.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "", - "Left" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantityOp" + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 }, - "parameters": [ - "Tiled_ResourceBar", - "TiledResourceBar", - "-", - "1", - "" - ] + "customCollisionMask": [] } ] - }, + } + ] + }, + { + "name": "Clubs 02", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "KeyReleased" + "hasCustomCollisionMask": false, + "image": "Playing Card_Clubs 02.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "", - "Right" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantityOp" + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 }, - "parameters": [ - "Tiled_ResourceBar", - "TiledResourceBar", - "+", - "1", - "" - ] + "customCollisionMask": [] } ] - }, + } + ] + }, + { + "name": "Back Blue 2", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::DrawResourceBar" + "hasCustomCollisionMask": false, + "image": "Playing Card_Back Blue 2.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Tiled_ResourceBar", - "TiledResourceBar", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::DrawResourceBar" + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 }, - "parameters": [ - "TiledEmptyUiHeart", - "TiledResourceBar", - "" - ] + "customCollisionMask": [] } ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + } + ] + }, + { + "name": "Back Brown 1", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::DrawResourceBar" + "hasCustomCollisionMask": false, + "image": "Playing Card_Back Brown 1.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "HealthBarFill", - "TiledResourceBar", - "" - ] + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] } ] } - ], - "parameters": [] + ] }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Sprite resource bar", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "name": "Back Brown 2", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "DepartScene" + "hasCustomCollisionMask": false, + "image": "Playing Card_Back Brown 2.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "" - ] + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] } - ], - "actions": [ + ] + } + ] + }, + { + "name": "Back Red 1", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "ModVarScene" + "hasCustomCollisionMask": false, + "image": "Playing Card_Back Red 1.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Units", - "=", - "5" - ] + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetMaxQuantityOp" - }, - "parameters": [ - "Tiled_ResourceBar", - "TiledResourceBar", - "=", - "10", - "" - ] - } - ] - }, + ] + } + ] + }, + { + "name": "Back Red 2", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Cache" - }, - "parameters": [ - "Unit_ResourceBar" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetMaxQuantity" - }, - "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "10", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetEmptyUnitColor" - }, - "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "\"74;144;226\"", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetEmptyUnitOpacity" - }, - "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "64", - "" - ] - } - ] + "hasCustomCollisionMask": false, + "image": "Playing Card_Back Red 2.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] } ] - }, + } + ] + }, + { + "name": "Clubs 03", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "KeyReleased" + "hasCustomCollisionMask": false, + "image": "Playing Card_Clubs 03.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "", - "Left" - ] + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] } - ], - "actions": [ + ] + } + ] + }, + { + "name": "Clubs 04", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "ModVarScene" + "hasCustomCollisionMask": false, + "image": "Playing Card_Clubs 04.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Units", - "=", - "max(0,Variable(Units)-1)" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" - }, - "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "-", - "1", - "" - ] - } - ] - }, - { - "disabled": true, - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::DecreaseQuantity" - }, - "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "1", - "" - ] - } - ] + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] } ] - }, + } + ] + }, + { + "name": "Clubs 05", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "KeyReleased" - }, - "parameters": [ - "", - "Right" - ] - } - ], - "actions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "ModVarScene" + "hasCustomCollisionMask": false, + "image": "Playing Card_Clubs 05.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Units", - "+", - "1" - ] - } - ], - "events": [ - { - "disabled": true, - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::IncreaseQuantity" - }, - "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "1", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" - }, - "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "+", - "1", - "" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::DrawResourceBar" + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 }, - "parameters": [ - "Unit_ResourceBar", - "UnitResourceBar", - "Heart_Unit", - "5", - "" - ] + "customCollisionMask": [] } ] } - ], - "parameters": [] - } - ], - "parameters": [] - }, - { - "colorB": 224, - "colorG": 16, - "colorR": 189, - "creationTime": 0, - "name": "Buttons", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + ] + }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Hover", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "name": "Clubs 06", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "inverted": true, - "value": "SourisSurObjet" + "hasCustomCollisionMask": false, + "image": "Playing Card_Clubs 06.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Buttons", - "", - "", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "EnableEffect" + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 }, - "parameters": [ - "Buttons", - "\"Effect\"", - "no" - ] + "customCollisionMask": [] } ] - }, + } + ] + }, + { + "name": "Clubs 07", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "SourisSurObjet" + "hasCustomCollisionMask": false, + "image": "Playing Card_Clubs 07.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Buttons", - "", - "", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "EnableEffect" + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 }, - "parameters": [ - "Buttons", - "\"Effect\"", - "yes" - ] + "customCollisionMask": [] } ] } - ], - "parameters": [] + ] }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Clicked", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "name": "Clubs 08", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "MouseButtonReleased" + "hasCustomCollisionMask": false, + "image": "Playing Card_Clubs 08.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "value": "ScaleWidth" + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 }, - "parameters": [ - "Buttons", - "=", - "0.9" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SourisSurObjet" - }, - "parameters": [ - "PlusKey", - "", - "", - "" - ] - } - ], - "actions": [], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Sprite", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Tiled sprite", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [] - } - ], - "parameters": [] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SourisSurObjet" - }, - "parameters": [ - "MinusKey", - "", - "", - "" - ] - } - ], - "actions": [], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Sprite", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Tiled sprite", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [] - } - ], - "parameters": [] - } - ] + "customCollisionMask": [] } ] } - ], - "parameters": [] + ] }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Press", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "name": "Clubs 09", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "MouseButtonPressed" + "hasCustomCollisionMask": false, + "image": "Playing Card_Clubs 09.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 }, - "parameters": [] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SourisSurObjet" - }, - "parameters": [ - "Buttons", - "", - "", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "ChangeColor" - }, - "parameters": [ - "Buttons", - "\"189;16;224\"" - ] - }, - { - "type": { - "value": "ChangeScale" - }, - "parameters": [ - "Buttons", - "=", - "0.9" - ] - } - ] + "customCollisionMask": [] } ] - }, + } + ] + }, + { + "name": "Clubs 10", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "inverted": true, - "value": "MouseButtonPressed" + "hasCustomCollisionMask": false, + "image": "Playing Card_Clubs 10.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "", - "Left" - ] - } - ], - "actions": [ - { - "type": { - "value": "ChangeColor" + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 }, - "parameters": [ - "Buttons", - "\"255;255;255\"" - ] - }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Clubs A", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "ChangeScale" + "hasCustomCollisionMask": false, + "image": "Playing Card_Clubs A.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Buttons", - "=", - "1" - ] + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] } ] } - ], - "parameters": [] - } - ], - "parameters": [] - } - ], - "layers": [ - { - "ambientLightColorB": 32, - "ambientLightColorG": 0, - "ambientLightColorR": 0, - "followBaseLayerCamera": false, - "isLightingLayer": false, - "name": "", - "visibility": true, - "cameras": [ + ] + }, { - "defaultSize": true, - "defaultViewport": true, - "height": 0, - "viewportBottom": 1, - "viewportLeft": 0, - "viewportRight": 1, - "viewportTop": 0, - "width": 0 - } - ], - "effects": [] - } - ], - "behaviorsSharedData": [ - { - "name": "DrawResourceBar", - "type": "DrawResourceBarOLD::DrawResourceBarOLD" - }, - { - "name": "DrawResourceBar222", - "type": "ResourceBar::ResourceBar_ShapePainter" - }, - { - "name": "Health", - "type": "Health::Health" - }, - { - "name": "ShakeObject_PositionAngleScale", - "type": "ShakeObject::ShakeObject_PositionAngleScale" - }, - { - "name": "Shield", - "type": "Health::Shield" - }, - { - "name": "Sticker", - "type": "Sticker::Sticker" - }, - { - "name": "TiledResourceBar", - "type": "ResourceBar::ResourceBar_TiledSprite" - }, - { - "name": "UnitResourceBar", - "type": "ResourceBar::ResourceBar_Sprite" - } - ] - }, - { - "b": 0, - "disableInputWhenNotFocused": true, - "mangledName": "Shape_32Painter_32_40Game_41", - "name": "Shape Painter (Game)", - "r": 0, - "standardSortMethod": true, - "stopSoundsOnStartup": true, - "title": "", - "v": 0, - "uiSettings": { - "grid": true, - "gridType": "rectangular", - "gridWidth": 8, - "gridHeight": 8, - "gridOffsetX": 0, - "gridOffsetY": 0, - "gridColor": 10401023, - "gridAlpha": 0.2, - "snap": true, - "zoomFactor": 1.06, - "windowMask": false - }, - "objectsGroups": [], - "variables": [], - "instances": [ - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "Shield_Bar", - "persistentUuid": "b581caf8-44ee-423e-b57e-cdd910fb7374", - "width": 0, - "x": 192, - "y": 216, - "zOrder": 2, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "ResourceMouseX_Bar", - "persistentUuid": "17a23f4a-a442-4b52-8380-9f2b6a9c2494", - "width": 0, - "x": 192, - "y": 536, - "zOrder": 3, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 80, - "layer": "", - "name": "Fly", - "persistentUuid": "e0b70af7-7a81-41c3-88ac-88305df91ed2", - "width": 128, - "x": 481.13275146484375, - "y": 293, - "zOrder": 4, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 128, - "layer": "", - "name": "Moon", - "persistentUuid": "8428ea9d-6d1e-41b0-9f54-1840f3378846", - "width": 129.1327362060547, - "x": 480, - "y": 272, - "zOrder": 0, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "Health_Text", - "persistentUuid": "921b2f28-8bee-4ab2-a6cc-1ee823c5215e", - "width": 0, - "x": 48, - "y": 96, - "zOrder": 9, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "Shield_Text", - "persistentUuid": "a231209b-a5d8-4280-868d-1e9beb31527b", - "width": 0, - "x": 48, - "y": 208, - "zOrder": 10, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "ResourceMouseX_Text", - "persistentUuid": "07fda015-55f8-4959-80fc-f1ee3074d028", - "width": 0, - "x": 32, - "y": 512, - "zOrder": 11, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "Title_Text", - "persistentUuid": "29ae792c-1331-430c-aadf-70fa8d9e36d6", - "width": 0, - "x": 208, - "y": 16, - "zOrder": 12, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "Health_Bar", - "persistentUuid": "c411b32c-f357-4b8f-9e87-f3fdde7657d5", - "width": 0, - "x": 192, - "y": 104, - "zOrder": 1, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - } - ], - "objects": [ - { - "assetStoreId": "", - "name": "Health_Bar", - "tags": "", - "type": "PrimitiveDrawing::Drawer", - "variables": [], - "effects": [], - "behaviors": [ + "name": "Clubs J", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Playing Card_Clubs J.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, { - "name": "DrawResourceBar222", - "type": "ResourceBar::ResourceBar_ShapePainter", - "ValueMin": 0, - "ValueMax": 1, - "TickSpacing": 0, - "BarLength": 200, - "BarThickness": 16, - "InactiveBarColor": "11;255;0", - "InactiveBarOpacity": 96, - "ActiveBarColor": " 11;255;0", - "ActiveBarOpacity": 255, - "RoundedBar": true, - "Value": 0, - "ThumbOffset": 0, - "NeedRedraw": true - } - ], - "fillOpacity": 255, - "outlineSize": 1, - "outlineOpacity": 255, - "fillColor": { - "b": 255, - "g": 255, - "r": 255 - }, - "outlineColor": { - "b": 0, - "g": 0, - "r": 0 - }, - "absoluteCoordinates": false, - "clearBetweenFrames": true - }, - { - "assetStoreId": "", - "name": "MiniHealth_Bar", - "tags": "", - "type": "PrimitiveDrawing::Drawer", - "variables": [], - "effects": [], - "behaviors": [ + "name": "Clubs K", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Playing Card_Clubs K.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, { - "name": "DrawResourceBar", - "type": "ResourceBar::ResourceBar_ShapePainter", - "ValueMin": 0, - "ValueMax": 1, - "TickSpacing": 0, - "BarLength": 50, - "BarThickness": 4, - "InactiveBarColor": "11;255;0", - "InactiveBarOpacity": 96, - "ActiveBarColor": " 11;255;0", - "ActiveBarOpacity": 255, - "Value": 0, - "ThumbOffset": 0, - "NeedRedraw": true + "name": "Clubs Q", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Playing Card_Clubs Q.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] }, { - "name": "Sticker", - "type": "Sticker::Sticker", - "OnlyFollowPosition": true - } - ], - "fillOpacity": 255, - "outlineSize": 1, - "outlineOpacity": 255, - "fillColor": { - "b": 255, - "g": 255, - "r": 255 - }, - "outlineColor": { - "b": 0, - "g": 0, - "r": 0 - }, - "absoluteCoordinates": false, - "clearBetweenFrames": true - }, - { - "assetStoreId": "", - "name": "Shield_Bar", - "tags": "", - "type": "PrimitiveDrawing::Drawer", - "variables": [], - "effects": [], - "behaviors": [ + "name": "Diamond 02", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Playing Card_Diamond 02.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, { - "name": "DrawResourceBar222", - "type": "ResourceBar::ResourceBar_ShapePainter", - "ValueMin": 0, - "ValueMax": 1, - "TickSpacing": 0, - "ThumbShape": "circle", - "ThumbWidth": 20, - "ThumbHeight": 20, - "ThumbColor": " 24;119;211", - "ThumbOpacity": 255, - "BarLength": 200, - "BarThickness": 16, - "InactiveBarColor": "144;19;254", - "InactiveBarOpacity": 96, - "ActiveBarColor": " 144;19;254", - "ActiveBarOpacity": 255, - "HaloRadius": 24, - "HaloOpacityHover": 32, - "HaloOpacityClick": 64, - "RoundedBar": true, - "Enabled": true, - "IsBeingDragged": false, - "Value": 0, - "ThumbOffset": 0, - "NeedRedraw": true, - "IsHovered": false, - "MouseX": 0, - "MouseY": 0, - "CurrentHaloRadius": 0, - "HaloGrowSpeed": 0.2, - "TargetHaloRadius": 0.19999992847442627 - } - ], - "fillOpacity": 255, - "outlineSize": 1, - "outlineOpacity": 255, - "fillColor": { - "b": 255, - "g": 255, - "r": 255 - }, - "outlineColor": { - "b": 0, - "g": 0, - "r": 0 - }, - "absoluteCoordinates": false, - "clearBetweenFrames": true - }, - { - "assetStoreId": "", - "name": "ResourceMouseX_Bar", - "tags": "", - "type": "PrimitiveDrawing::Drawer", - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "DrawResourceBar222", - "type": "ResourceBar::ResourceBar_ShapePainter", - "ValueMin": 0, - "ValueMax": 1, - "TickSpacing": 0, - "ThumbShape": "circle", - "ThumbWidth": 20, - "ThumbHeight": 20, - "ThumbColor": "248;231;28", - "ThumbOpacity": 255, - "BarLength": 200, - "BarThickness": 16, - "InactiveBarColor": "248;231;28", - "InactiveBarOpacity": 96, - "ActiveBarColor": "248;231;28", - "ActiveBarOpacity": 255, - "HaloRadius": 24, - "HaloOpacityHover": 32, - "HaloOpacityClick": 64, - "RoundedBar": false, - "Enabled": true, - "IsBeingDragged": false, - "Value": 0, - "ThumbOffset": 0, - "NeedRedraw": true, - "IsHovered": false, - "MouseX": 0, - "MouseY": 0, - "CurrentHaloRadius": 0, - "HaloGrowSpeed": 0.2, - "TargetHaloRadius": 0.19999992847442627 - } - ], - "fillOpacity": 255, - "outlineSize": 1, - "outlineOpacity": 255, - "fillColor": { - "b": 255, - "g": 255, - "r": 255 - }, - "outlineColor": { - "b": 0, - "g": 0, - "r": 0 - }, - "absoluteCoordinates": false, - "clearBetweenFrames": true - }, - { - "assetStoreId": "48a2d179a1921276abe3f99ce3cf195fa7c310bc511fa215d9647c3fb9027921", - "name": "Fly", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "Health", - "type": "Health::Health", - "Health": 100, - "DamageCooldown": 0, - "MaxHealth": 100, - "IsJustDamaged": false, - "HealthRegenRate": 0, - "HealthRegenDelay": 0, - "AllowOverHealing": false, - "HitAtLeastOnce": false - }, - { - "name": "ShakeObject_PositionAngleScale", - "type": "ShakeObject::ShakeObject_PositionAngleScale" - }, - { - "name": "Shield", - "type": "Health::Shield", - "RequireHealth": "Health", - "MaxShieldPoints": 30, - "ShieldDuration": 5, - "ShieldPoints": 0, - "ShieldRegenRate": 0, - "ShieldBlocksExcessDamage": false, - "ShieldRegenDelay": 0, - "RegenShieldWhenZeroPoints": false, - "IsShieldJustDamaged": false - } - ], - "animations": [ - { - "name": "", + "name": "Diamond 03", "useMultipleDirections": false, "directions": [ { "looping": true, - "timeBetweenFrames": 0.05000000074505806, + "timeBetweenFrames": 0.02500000037252903, "sprites": [ { - "hasCustomCollisionMask": true, - "image": "Fly_1.png", + "hasCustomCollisionMask": false, + "image": "Playing Card_Diamond 03.png", "points": [], "originPoint": { "name": "origine", @@ -4703,35 +4252,28 @@ "y": 0 }, "centerPoint": { - "automatic": false, + "automatic": true, "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 + "x": 0, + "y": 0 }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Diamond 04", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "hasCustomCollisionMask": true, - "image": "Fly_2.png", + "hasCustomCollisionMask": false, + "image": "Playing Card_Diamond 04.png", "points": [], "originPoint": { "name": "origine", @@ -4739,35 +4281,28 @@ "y": 0 }, "centerPoint": { - "automatic": false, + "automatic": true, "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 + "x": 0, + "y": 0 }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Diamond 05", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "hasCustomCollisionMask": true, - "image": "Fly_3.png", + "hasCustomCollisionMask": false, + "image": "Playing Card_Diamond 05.png", "points": [], "originPoint": { "name": "origine", @@ -4775,35 +4310,28 @@ "y": 0 }, "centerPoint": { - "automatic": false, + "automatic": true, "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 + "x": 0, + "y": 0 }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Diamond 06", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "hasCustomCollisionMask": true, - "image": "Fly_4.png", + "hasCustomCollisionMask": false, + "image": "Playing Card_Diamond 06.png", "points": [], "originPoint": { "name": "origine", @@ -4811,35 +4339,28 @@ "y": 0 }, "centerPoint": { - "automatic": false, + "automatic": true, "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 + "x": 0, + "y": 0 }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Diamond 07", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "hasCustomCollisionMask": true, - "image": "Fly_5.png", + "hasCustomCollisionMask": false, + "image": "Playing Card_Diamond 07.png", "points": [], "originPoint": { "name": "origine", @@ -4847,71 +4368,28 @@ "y": 0 }, "centerPoint": { - "automatic": false, + "automatic": true, "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_6.png", - "points": [], - "originPoint": { - "name": "origine", "x": 0, "y": 0 }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Diamond 08", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "hasCustomCollisionMask": true, - "image": "Fly_7.png", + "hasCustomCollisionMask": false, + "image": "Playing Card_Diamond 08.png", "points": [], "originPoint": { "name": "origine", @@ -4919,71 +4397,28 @@ "y": 0 }, "centerPoint": { - "automatic": false, + "automatic": true, "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_8.png", - "points": [], - "originPoint": { - "name": "origine", "x": 0, "y": 0 }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Diamond 09", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "hasCustomCollisionMask": true, - "image": "Fly_9.png", + "hasCustomCollisionMask": false, + "image": "Playing Card_Diamond 09.png", "points": [], "originPoint": { "name": "origine", @@ -4991,86 +4426,19 @@ "y": 0 }, "centerPoint": { - "automatic": false, + "automatic": true, "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_10.png", - "points": [], - "originPoint": { - "name": "origine", "x": 0, "y": 0 }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] + "customCollisionMask": [] } ] } ] - } - ] - }, - { - "assetStoreId": "574655a4565bd983af8f5dd98e0fd8cda3bd67cf929c00d3db317e898322e06b", - "name": "Star", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ + }, { - "name": "LargeNarrow", + "name": "Diamond 10", "useMultipleDirections": false, "directions": [ { @@ -5079,7 +4447,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "Star_LargeNarrow.png", + "image": "Playing Card_Diamond 10.png", "points": [], "originPoint": { "name": "origine", @@ -5099,7 +4467,7 @@ ] }, { - "name": "LargeWide", + "name": "Diamond A", "useMultipleDirections": false, "directions": [ { @@ -5108,7 +4476,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "Star_LargeWide.png", + "image": "Playing Card_Diamond A.png", "points": [], "originPoint": { "name": "origine", @@ -5128,7 +4496,7 @@ ] }, { - "name": "Medium", + "name": "Diamond J", "useMultipleDirections": false, "directions": [ { @@ -5137,7 +4505,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "Star_Medium.png", + "image": "Playing Card_Diamond J.png", "points": [], "originPoint": { "name": "origine", @@ -5157,7 +4525,7 @@ ] }, { - "name": "Small", + "name": "Diamond K", "useMultipleDirections": false, "directions": [ { @@ -5166,7 +4534,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "Star_Small.png", + "image": "Playing Card_Diamond K.png", "points": [], "originPoint": { "name": "origine", @@ -5184,21 +4552,9 @@ ] } ] - } - ] - }, - { - "assetStoreId": "8d92592738465177b86ec18299ef6e6394ae24eeb7a7d6dfdcbbdb55fab902aa", - "name": "BlueLaser01", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ + }, { - "name": "", + "name": "Diamond Q", "useMultipleDirections": false, "directions": [ { @@ -5207,7 +4563,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "Blue laser (01).png", + "image": "Playing Card_Diamond Q.png", "points": [], "originPoint": { "name": "origine", @@ -5225,34 +4581,38 @@ ] } ] - } - ] - }, - { - "assetStoreId": "794ab341df538c9b3bdad418dfdcccc7be5d90f3d0b5929d6d528a542c6ed3ae", - "name": "SilverShield", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [ + }, { - "effectType": "Outline", - "name": "Effect", - "doubleParameters": { - "padding": 2, - "thickness": 2 - }, - "stringParameters": { - "color": "255;255;255" - }, - "booleanParameters": {} - } - ], - "behaviors": [], - "animations": [ + "name": "Hearts 02", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Playing Card_Hearts 02.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, { - "name": "", + "name": "Hearts 03", "useMultipleDirections": false, "directions": [ { @@ -5261,12 +4621,12 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "Silver shield.png", + "image": "Playing Card_Hearts 03.png", "points": [], "originPoint": { "name": "origine", - "x": 14.592423439025879, - "y": 15.103429794311523 + "x": 0, + "y": 0 }, "centerPoint": { "automatic": true, @@ -5279,21 +4639,9 @@ ] } ] - } - ] - }, - { - "assetStoreId": "d2bc2d266f5bb666ef68023abc14f51bc8fe8b5222af931efa378ac10c50f98a", - "name": "MeteorDetailed", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ + }, { - "name": "Large", + "name": "Hearts 04", "useMultipleDirections": false, "directions": [ { @@ -5301,13 +4649,13 @@ "timeBetweenFrames": 0.02500000037252903, "sprites": [ { - "hasCustomCollisionMask": true, - "image": "Meteor Detailed_Large.png", + "hasCustomCollisionMask": false, + "image": "Playing Card_Hearts 04.png", "points": [], "originPoint": { "name": "origine", - "x": 65.07723999023438, - "y": 63.82252502441406 + "x": 0, + "y": 0 }, "centerPoint": { "automatic": true, @@ -5315,33 +4663,14 @@ "x": 0, "y": 0 }, - "customCollisionMask": [ - [ - { - "x": 20, - "y": 20 - }, - { - "x": 110, - "y": 20 - }, - { - "x": 110, - "y": 110 - }, - { - "x": 20, - "y": 110 - } - ] - ] + "customCollisionMask": [] } ] } ] }, { - "name": "Small", + "name": "Hearts 05", "useMultipleDirections": false, "directions": [ { @@ -5349,13 +4678,13 @@ "timeBetweenFrames": 0.02500000037252903, "sprites": [ { - "hasCustomCollisionMask": true, - "image": "Meteor Detailed_Small.png", + "hasCustomCollisionMask": false, + "image": "Playing Card_Hearts 05.png", "points": [], "originPoint": { "name": "origine", - "x": 65.07723999023438, - "y": 63.82252502441406 + "x": 0, + "y": 0 }, "centerPoint": { "automatic": true, @@ -5363,45 +4692,14 @@ "x": 0, "y": 0 }, - "customCollisionMask": [ - [ - { - "x": 20, - "y": 20 - }, - { - "x": 110, - "y": 20 - }, - { - "x": 110, - "y": 110 - }, - { - "x": 20, - "y": 110 - } - ] - ] + "customCollisionMask": [] } ] } ] - } - ] - }, - { - "assetStoreId": "a1e62f5a19d1fe476e2ad0b8977768d020cc1dc55423427f79a486664cebb631", - "name": "UpgradedPotionBlue", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ + }, { - "name": "No Shadow", + "name": "Hearts 06", "useMultipleDirections": false, "directions": [ { @@ -5410,12 +4708,12 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "Upgraded Potion Blue_No Shadow.png", + "image": "Playing Card_Hearts 06.png", "points": [], "originPoint": { "name": "origine", - "x": 15.793042182922363, - "y": 15.89681625366211 + "x": 0, + "y": 0 }, "centerPoint": { "automatic": true, @@ -5430,7 +4728,7 @@ ] }, { - "name": "Shadow", + "name": "Hearts 07", "useMultipleDirections": false, "directions": [ { @@ -5439,12 +4737,12 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "Upgraded Potion Blue_Shadow.png", + "image": "Playing Card_Hearts 07.png", "points": [], "originPoint": { "name": "origine", - "x": 15.793042182922363, - "y": 15.89681625366211 + "x": 0, + "y": 0 }, "centerPoint": { "automatic": true, @@ -5457,27 +4755,38 @@ ] } ] - } - ] - }, - { - "assetStoreId": "c2ce913ddbcd055c4e49a1c01b63aff1a3d59e4e1c1845db4c38aedda3712d3a", - "name": "Moon", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [ + }, { - "name": "Sticker", - "type": "Sticker::Sticker", - "OnlyFollowPosition": false - } - ], - "animations": [ + "name": "Hearts 08", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Playing Card_Hearts 08.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, { - "name": "", + "name": "Hearts 09", "useMultipleDirections": false, "directions": [ { @@ -5486,7 +4795,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "Moon.png", + "image": "Playing Card_Hearts 09.png", "points": [], "originPoint": { "name": "origine", @@ -5504,162 +4813,9 @@ ] } ] - } - ] - }, - { - "assetStoreId": "", - "bold": true, - "italic": false, - "name": "Health_Text", - "smoothed": true, - "tags": "", - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [], - "string": "Health", - "font": "", - "characterSize": 30, - "color": { - "b": 255, - "g": 255, - "r": 255 - } - }, - { - "assetStoreId": "", - "bold": true, - "italic": false, - "name": "Shield_Text", - "smoothed": true, - "tags": "", - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [], - "string": "Shield", - "font": "", - "characterSize": 30, - "color": { - "b": 255, - "g": 255, - "r": 255 - } - }, - { - "assetStoreId": "", - "bold": true, - "italic": false, - "name": "ResourceMouseX_Text", - "smoothed": true, - "tags": "", - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [], - "string": "Resource \n(Mouse X)", - "font": "", - "characterSize": 30, - "color": { - "b": 255, - "g": 255, - "r": 255 - } - }, - { - "assetStoreId": "", - "bold": true, - "italic": false, - "name": "Title_Text", - "smoothed": true, - "tags": "", - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [], - "string": "Extension: Resource Bar", - "font": "", - "characterSize": 30, - "color": { - "b": 255, - "g": 255, - "r": 255 - } - }, - { - "assetStoreId": "", - "name": "ResourceBarNew", - "tags": "", - "type": "PrimitiveDrawing::Drawer", - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "DrawResourceBar", - "type": "DrawResourceBar::DrawResourceBar", - "ValueMin": 0, - "ValueMax": 1, - "TickSpacing": 0, - "BarLength": 200, - "BarThickness": 4, - "InactiveBarColor": "11;255;0", - "InactiveBarOpacity": 96, - "ActiveBarColor": "11;255;0", - "ActiveBarOpacity": 255, - "RoundedBar": false, - "Value": 0, - "ThumbOffset": 0, - "NeedRedraw": true - } - ], - "fillOpacity": 255, - "outlineSize": 1, - "outlineOpacity": 255, - "fillColor": { - "b": 255, - "g": 255, - "r": 255 - }, - "outlineColor": { - "b": 0, - "g": 0, - "r": 0 - }, - "absoluteCoordinates": false, - "clearBetweenFrames": true - }, - { - "assetStoreId": "8d524a624fbc72a1fd6c3975369a7cd55b8a52035887ef664bcd93bf8e273881", - "name": "Unit_ResourceBar", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "UnitResourceBar", - "type": "ResourceBar::ResourceBar_Sprite", - "StartingUnits": 3, - "CurrentUnits": 3, - "MaxUnits": 3, - "UnitSpacing": 0, - "NextUnitToCreate": 0, - "HideEmptyUnits": false, - "EmptyUnitOpacity": 64, - "EmptyUnitAnimation": 0, - "EmptyColorTint": "255;255;255", - "ActiveUnitOpacity": 255 - } - ], - "animations": [ + }, { - "name": "", + "name": "Hearts 10", "useMultipleDirections": false, "directions": [ { @@ -5668,7 +4824,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "Emote Heart.png", + "image": "Playing Card_Hearts 10.png", "points": [], "originPoint": { "name": "origine", @@ -5686,21 +4842,9 @@ ] } ] - } - ] - }, - { - "assetStoreId": "8d524a624fbc72a1fd6c3975369a7cd55b8a52035887ef664bcd93bf8e273881", - "name": "Heart_Unit", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ + }, { - "name": "", + "name": "Hearts J", "useMultipleDirections": false, "directions": [ { @@ -5709,7 +4853,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "Emote Heart.png", + "image": "Playing Card_Hearts J.png", "points": [], "originPoint": { "name": "origine", @@ -5727,62 +4871,9 @@ ] } ] - } - ] - }, - { - "assetStoreId": "752e405ef67d9f9d1bd36f9763f1b6fc05633d64700982c0f3118a25a32e39b2", - "height": 16, - "name": "TiledEmptyUiHeart", - "tags": "", - "texture": "tiled_Tiled Empty UI Heart.png", - "type": "TiledSpriteObject::TiledSprite", - "width": 16, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "TiledResourceBar", - "type": "ResourceBar::ResourceBar_TiledSprite", - "StartingQuantity": 0, - "CurrentQuantity": 0, - "UnitWidth": 16, - "MaxQuantity": 0 - } - ] - }, - { - "assetStoreId": "abf51d082db5a117d9ee2e65299660f6787d47664e4571bad6db3075b3393c5f", - "height": 16, - "name": "Tiled_ResourceBar", - "tags": "", - "texture": "tiled_Tiled Filler UI Heart.png", - "type": "TiledSpriteObject::TiledSprite", - "width": 16, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "TiledResourceBar", - "type": "ResourceBar::ResourceBar_TiledSprite", - "StartingQuantity": 6, - "CurrentQuantity": 0, - "UnitWidth": 16 - } - ] - }, - { - "assetStoreId": "45107bbfbc2b5cbc83e3785f802b99664a23d59e74414e332c9afafac63e1ca3", - "name": "HealthBar", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ + }, { - "name": "", + "name": "Hearts K", "useMultipleDirections": false, "directions": [ { @@ -5791,7 +4882,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "Health Bar.png", + "image": "Playing Card_Hearts K.png", "points": [], "originPoint": { "name": "origine", @@ -5809,62 +4900,9 @@ ] } ] - } - ] - }, - { - "assetStoreId": "1f3dba67c868b7320572a6591d1d0418f23b7c132df0963cf77286a9149971d9", - "height": 128, - "name": "HealthBarFill", - "tags": "", - "texture": "tiled_Health Bar Fill.png", - "type": "TiledSpriteObject::TiledSprite", - "width": 128, - "variables": [], - "effects": [], - "behaviors": [] - }, - { - "assetStoreId": "3bd9517a10ad3d98341eea33f0c139f08a1b04f26500e85ac49bb7f9e157a303", - "height": 128, - "name": "EnergyBarFill", - "tags": "", - "texture": "tiled_Energy Bar Fill.png", - "type": "TiledSpriteObject::TiledSprite", - "width": 128, - "variables": [], - "effects": [], - "behaviors": [] - }, - { - "assetStoreId": "138ee716846635e3e0e5ab7b63752d1a36754f1ac874c70e1b5fa372d5a05474", - "bottomMargin": 6, - "height": 15, - "leftMargin": 11, - "name": "HealthBarBox", - "rightMargin": 9, - "tags": "", - "texture": "Health Bar Box.png", - "tiled": true, - "topMargin": 6, - "type": "PanelSpriteObject::PanelSprite", - "width": 96, - "variables": [], - "effects": [], - "behaviors": [] - }, - { - "assetStoreId": "7c1048053bc2d851157c4e0868c4ac0338f4ca93170d28990a7f64eaed2a1723", - "name": "HealthIndicator", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ + }, { - "name": "Black Outline Empty", + "name": "Hearts Q", "useMultipleDirections": false, "directions": [ { @@ -5873,7 +4911,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "Health Indicator_Black Outline Empty.png", + "image": "Playing Card_Hearts Q.png", "points": [], "originPoint": { "name": "origine", @@ -5893,7 +4931,7 @@ ] }, { - "name": "Black Outline Heart", + "name": "Joker Black", "useMultipleDirections": false, "directions": [ { @@ -5902,7 +4940,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "Health Indicator_Black Outline Heart.png", + "image": "Playing Card_Joker Black.png", "points": [], "originPoint": { "name": "origine", @@ -5922,7 +4960,7 @@ ] }, { - "name": "White Outline Empty", + "name": "Joker Red", "useMultipleDirections": false, "directions": [ { @@ -5931,7 +4969,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "Health Indicator_White Outline Empty.png", + "image": "Playing Card_Joker Red.png", "points": [], "originPoint": { "name": "origine", @@ -5951,7 +4989,7 @@ ] }, { - "name": "White Outline Heart", + "name": "Spades 02", "useMultipleDirections": false, "directions": [ { @@ -5960,7 +4998,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "Health Indicator_White Outline Heart.png", + "image": "Playing Card_Spades 02.png", "points": [], "originPoint": { "name": "origine", @@ -5978,21 +5016,9 @@ ] } ] - } - ] - }, - { - "assetStoreId": "0714257da345b4ec7de558ac0e42290362b85a79c97160c0e09636cd2fc31e3c", - "name": "Heart", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ + }, { - "name": "", + "name": "Spades 03", "useMultipleDirections": false, "directions": [ { @@ -6001,7 +5027,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "Heart.png", + "image": "Playing Card_Spades 03.png", "points": [], "originPoint": { "name": "origine", @@ -6019,278 +5045,347 @@ ] } ] - } - ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Initialize game", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DepartScene" - }, - "parameters": [ - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "Opacity" - }, - "parameters": [ - "Moon", - "=", - "128" - ] - }, + "name": "Spades 04", + "useMultipleDirections": false, + "directions": [ { - "type": { - "value": "ModVarScene" - }, - "parameters": [ - "MaxResource", - "=", - "CameraBorderRight()" + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Playing Card_Spades 04.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } ] } - ], - "events": [ + ] + }, + { + "name": "Spades 05", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "ChangeColor" + "hasCustomCollisionMask": false, + "image": "Playing Card_Spades 05.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Moon", - "\"144;19;254\"" - ] - }, - { - "type": { - "value": "SetCenter" + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 }, - "parameters": [ - "Moon", - "=", - "Fly.CenterX()", - "=", - "Fly.CenterY()-10" - ] - }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Spades 06", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "Sticker::Sticker::Stick" + "hasCustomCollisionMask": false, + "image": "Playing Card_Spades 06.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Moon", - "Sticker", - "Fly", - "" - ] - }, - { - "type": { - "value": "Cache" + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 }, - "parameters": [ - "Moon" - ] + "customCollisionMask": [] } ] - }, + } + ] + }, + { + "name": "Spades 07", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Create" - }, - "parameters": [ - "", - "MiniHealth_Bar", - "Fly.X()", - "Fly.Y()", - "\"\"" - ] - }, + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "MettreXY" + "hasCustomCollisionMask": false, + "image": "Playing Card_Spades 07.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "MiniHealth_Bar", - "=", - "Fly.CenterX() - MiniHealth_Bar.DrawResourceBar::BarLength()/2", - "=", - "Fly.BoundingBoxTop()" - ] - }, - { - "type": { - "value": "Sticker::Sticker::Stick" + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 }, - "parameters": [ - "MiniHealth_Bar", - "Sticker", - "Fly", - "" - ] + "customCollisionMask": [] } ] - }, + } + ] + }, + { + "name": "Spades 08", + "useMultipleDirections": false, + "directions": [ { - "disabled": true, - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "DebuggerTools::EnableDebugDraw" + "hasCustomCollisionMask": false, + "image": "Playing Card_Spades 08.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "", - "", - "", - "", - "" - ] + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] } ] } ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "folded": true, - "name": "Spawn items", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "name": "Spades 09", + "useMultipleDirections": false, + "directions": [ { - "type": { - "value": "RepeatEveryXSeconds::Repeat" - }, - "parameters": [ - "", - "\"SpawnShield\"", - "5", - "" + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Playing Card_Spades 09.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } ] } - ], - "actions": [ - { - "type": { - "value": "Create" - }, - "parameters": [ - "", - "SilverShield", - "Fly.CenterX()", - "CameraBorderTop()", - "" - ] - }, + ] + }, + { + "name": "Spades 10", + "useMultipleDirections": false, + "directions": [ { - "type": { - "value": "AddForceAL" - }, - "parameters": [ - "SilverShield", - "90", - "75", - "1" + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Playing Card_Spades 10.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } ] - }, + } + ] + }, + { + "name": "Spades A", + "useMultipleDirections": false, + "directions": [ { - "type": { - "value": "ChangeColor" - }, - "parameters": [ - "SilverShield", - "\"144;19;254\"" + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Playing Card_Spades A.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } ] } ] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "name": "Spades J", + "useMultipleDirections": false, + "directions": [ { - "type": { - "value": "RepeatEveryXSeconds::Repeat" - }, - "parameters": [ - "", - "\"SpawnHealth\"", - "12", - "" + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Playing Card_Spades J.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } ] } - ], - "actions": [ + ] + }, + { + "name": "Spades K", + "useMultipleDirections": false, + "directions": [ { - "type": { - "value": "Create" - }, - "parameters": [ - "", - "UpgradedPotionBlue", - "Fly.CenterX()", - "CameraBorderBottom()", - "" + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Playing Card_Spades K.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } ] - }, + } + ] + }, + { + "name": "Spades Q", + "useMultipleDirections": false, + "directions": [ { - "type": { - "value": "AddForceAL" - }, - "parameters": [ - "UpgradedPotionBlue", - "270", - "75", - "1" + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Playing Card_Spades Q.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } ] } ] - }, + } + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Initialize game", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "RepeatEveryXSeconds::Repeat" + "value": "DepartScene" }, "parameters": [ - "", - "\"SpawnRock\"", - "1", "" ] } @@ -6298,51 +5393,130 @@ "actions": [ { "type": { - "value": "Create" + "value": "Opacity" }, "parameters": [ - "", - "MeteorDetailed", - "CameraBorderLeft()", - "Fly.CenterY()", - "" + "Moon", + "=", + "128" ] }, { "type": { - "value": "AddForceAL" + "value": "ModVarScene" }, "parameters": [ - "MeteorDetailed", - "0", - "300", - "1" - ] - }, - { - "type": { - "value": "ChangeScale" - }, - "parameters": [ - "MeteorDetailed", + "MaxResource", "=", - "0.5" + "CameraBorderRight()" ] } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + ], + "events": [ { - "type": { - "value": "Rotate" - }, - "parameters": [ - "MeteorDetailed", - "30", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ChangeColor" + }, + "parameters": [ + "Moon", + "\"144;19;254\"" + ] + }, + { + "type": { + "value": "SetCenter" + }, + "parameters": [ + "Moon", + "=", + "Fly.CenterX()", + "=", + "Fly.CenterY()-10" + ] + }, + { + "type": { + "value": "Sticker::Sticker::Stick" + }, + "parameters": [ + "Moon", + "Sticker", + "Fly", + "" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Moon" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "MiniHealth_Bar", + "Fly.X()", + "Fly.Y()", + "\"\"" + ] + }, + { + "type": { + "value": "MettreXY" + }, + "parameters": [ + "MiniHealth_Bar", + "=", + "Fly.CenterX() - MiniHealth_Bar.DrawResourceBar::BarLength()/2", + "=", + "Fly.BoundingBoxTop()" + ] + }, + { + "type": { + "value": "Sticker::Sticker::Stick" + }, + "parameters": [ + "MiniHealth_Bar", + "Sticker", + "Fly", + "" + ] + } + ] + }, + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::EnableDebugDraw" + }, + "parameters": [ + "", + "", + "", + "", + "" + ] + } ] } ] @@ -6351,311 +5525,104 @@ "parameters": [] }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, + "colorB": 224, + "colorG": 16, + "colorR": 189, "creationTime": 0, - "folded": true, - "name": "Collisions", + "name": "Draw Resource bars", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Tiled resource bar", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "Health::Shield::IsShieldActive" - }, - "parameters": [ - "Fly", - "Shield", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetMaxQuantityOp" + }, + "parameters": [ + "Tiled_ResourceBar", + "TiledResourceBar", + "=", + "10", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantityOp" + }, + "parameters": [ + "TiledEmptyUiHeart", + "TiledResourceBar", + "=", + "10", + "" + ] + } ] }, { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "Montre" - }, - "parameters": [ - "Moon", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "Health::Shield::IsShieldActive" - }, - "parameters": [ - "Fly", - "Shield", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "KeyReleased" + }, + "parameters": [ + "", + "Left" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantityOp" + }, + "parameters": [ + "Tiled_ResourceBar", + "TiledResourceBar", + "-", + "1", + "" + ] + } ] }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "Cache" - }, - "parameters": [ - "Moon" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "CollisionNP" - }, - "parameters": [ - "SilverShield", - "Fly", - "", - "", - "" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "Health::Shield::ActivateShield" - }, - "parameters": [ - "Fly", - "Shield", - "" - ] - }, - { - "type": { - "value": "Delete" - }, - "parameters": [ - "SilverShield", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "CollisionNP" - }, - "parameters": [ - "UpgradedPotionBlue", - "Fly", - "", - "", - "" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::Heal" - }, - "parameters": [ - "Fly", - "Health", - "100", - "" - ] - }, - { - "type": { - "value": "Delete" - }, - "parameters": [ - "UpgradedPotionBlue", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "CollisionNP" - }, - "parameters": [ - "MeteorDetailed", - "Fly", - "", - "", - "" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "Health::Shield::ShieldHit" - }, - "parameters": [ - "Fly", - "Shield", - "10", - "" - ] - }, - { - "type": { - "value": "Delete" - }, - "parameters": [ - "MeteorDetailed", - "" - ] - }, - { - "type": { - "value": "ShakeObject::ShakeObject_PositionAngleScale::ShakeObject_PositionAngleScale" - }, - "parameters": [ - "Fly", - "ShakeObject_PositionAngleScale", - "", - "10", - "10", - "5", - "", - "", - "", - "" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 224, - "colorG": 16, - "colorR": 189, - "creationTime": 0, - "name": "Draw Resource bars", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "This resource shows the horizontal mouse position in scene, but it can be used for anything!", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarScene" - }, - "parameters": [ - "MyResource", - "=", - "MouseX()" - ] - } - ] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Shape painter resource bar", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "conditions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::DrawHealthBar" + "value": "KeyReleased" }, "parameters": [ - "MiniHealth_Bar", - "DrawResourceBar", - "Fly", - "Health", - "" + "", + "Right" ] } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + ], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::DrawShieldBar" + "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantityOp" }, "parameters": [ - "Shield_Bar", - "DrawResourceBar222", - "Fly", - "Shield", + "Tiled_ResourceBar", + "TiledResourceBar", + "+", + "1", "" ] } @@ -6667,13 +5634,21 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::DrawResourceBar" + "value": "ResourceBar::ResourceBar_TiledSprite::DrawResourceBar" }, "parameters": [ - "ResourceMouseX_Bar", - "DrawResourceBar222", - "Variable(MyResource)", - "Variable(MaxResource)", + "Tiled_ResourceBar", + "TiledResourceBar", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::DrawResourceBar" + }, + "parameters": [ + "TiledEmptyUiHeart", + "TiledResourceBar", "" ] } @@ -6685,13 +5660,11 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::DrawHealthBar" + "value": "ResourceBar::ResourceBar_TiledSprite::DrawResourceBar" }, "parameters": [ - "Health_Bar", - "DrawResourceBar222", - "Fly", - "Health", + "HealthBarFill", + "TiledResourceBar", "" ] } @@ -6699,927 +5672,524 @@ } ], "parameters": [] - } - ], - "parameters": [] - } - ], - "layers": [ - { - "ambientLightColorB": 32, - "ambientLightColorG": 0, - "ambientLightColorR": 0, - "followBaseLayerCamera": false, - "isLightingLayer": false, - "name": "", - "visibility": true, - "cameras": [ - { - "defaultSize": true, - "defaultViewport": true, - "height": 0, - "viewportBottom": 1, - "viewportLeft": 0, - "viewportRight": 1, - "viewportTop": 0, - "width": 0 - } - ], - "effects": [] - } - ], - "behaviorsSharedData": [ - { - "name": "DrawResourceBar", - "type": "DrawResourceBarOLD::DrawResourceBarOLD" - }, - { - "name": "DrawResourceBar222", - "type": "ResourceBar::ResourceBar_ShapePainter" - }, - { - "name": "Health", - "type": "Health::Health" - }, - { - "name": "ShakeObject_PositionAngleScale", - "type": "ShakeObject::ShakeObject_PositionAngleScale" - }, - { - "name": "Shield", - "type": "Health::Shield" - }, - { - "name": "Sticker", - "type": "Sticker::Sticker" - }, - { - "name": "TiledResourceBar", - "type": "ResourceBar::ResourceBar_TiledSprite" - }, - { - "name": "UnitResourceBar", - "type": "ResourceBar::ResourceBar_Sprite" - } - ] - } - ], - "externalEvents": [], - "eventsFunctionsExtensions": [ - { - "author": "@4ian", - "category": "Game mechanic", - "extensionNamespace": "", - "fullName": "Fire bullets", - "helpPath": "https://gdevelop.io/game-example/fire-bullet", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", - "name": "FireBullet", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", - "shortDescription": "Fire bullets, manage ammo, reloading, and overheating.", - "version": "0.3.0", - "description": "Fire bullets, manage ammo, reloading, and overheating.\n\nFiring bullets:\n- Cooldown: Time between shots (seconds)\n- Bullet Quantity: Number of bullets created each time Fire Bullet action is used. \n- Angle Variance: Each bullet trajectory will be adjusted by a random value within this range (degrees)\n- Firing Arc: Range of angles (in degrees) that bullets will shoot. Bullets are evenly spread within this range.\n- Rotate bullet: Change the angle of each bullet to match the direction it is travelling (enabled by default)\n\n Ammo:\n- Starting ammo\n- Max ammo\n- Shots per reload. Use 0 to disable reloading\n- Reload duration\n- Automatic reloading is enabled by default, but it can also be done manually.\n\nOverheat:\n- Heat increase per shot. Object is Overheated when Heat reaches 1.\n- Cooling rate per second\n- When overheated, the object cannot fire any bullets\n\nStatistics:\n- Total bullets created\n- Total shots taken\n- Total reloads completed\n\nBullets:\n- Each bullet is assigned several variables that can be used for advanced object picking\n- __FireBullet.BulletID = Unique number for every bullet created\n- __FireBullet.BatchID = Unique number for all bullets created in the same frame\n- __FireBullet.BatchOrderID = Unique number for each bullet in the same batch. Can be used to identify the position in the firing arc.", - "origin": { - "identifier": "FireBullet", - "name": "gdevelop-extension-store" - }, - "tags": [ - "fire", - "bullet", - "spawn", - "firerate", - "reload", - "weapon", - "ranged", - "ammo", - "overheat" - ], - "authorIds": [ - "wWP8BSlAW0UP4NeaHa2LcmmDzmH2", - "xpwUwByyImTDcHEqDUqfyg0oRBt1", - "2OwwM8ToR9dx9RJ2sAKTcrLmCB92", - "gqDaZjCfevOOxBYkK6zlhtZnXCg1" - ], - "dependencies": [], - "eventsFunctions": [], - "eventsBasedBehaviors": [ - { - "description": "Fire bullets, manage ammo, reloading, and overheating.", - "fullName": "Fire bullets", - "name": "FireBullet", - "objectType": "", - "eventsFunctions": [ + }, { - "fullName": "", - "functionType": "Action", - "name": "onCreated", - "sentence": "", + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Sprite resource bar", + "source": "", + "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__FireBullet.FiringCooldown\"" - ] - }, + "conditions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "DepartScene" }, "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyStartingAmmo()" + "" ] - }, + } + ], + "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + "value": "ModVarScene" }, "parameters": [ - "Object", - "Behavior", + "Units", "=", - "Object.Behavior::PropertyShotsPerReload()" + "5" ] } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "fullName": "", - "functionType": "Action", - "name": "doStepPreEvents", - "sentence": "", - "events": [ - { - "colorB": 224, - "colorG": 16, - "colorR": 189, - "creationTime": 0, - "name": "Take a shot (if triggered)", - "source": "", - "type": "BuiltinCommonInstructions::Group", + ], "events": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Creators can use the \"FireBullet\" action multiple times in a frame and it will be counted as a single \"shot\".", - "comment2": "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetMaxQuantityOp" + }, + "parameters": [ + "Tiled_ResourceBar", + "TiledResourceBar", + "=", + "10", + "" + ] + } + ] }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "conditions": [], + "actions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHasJustFired" + "value": "Cache" }, "parameters": [ - "Object", - "Behavior" + "Unit_ResourceBar" ] - } - ], - "actions": [], - "events": [ + }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Reset firing cooldown", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__FireBullet.FiringCooldown\"" - ] - } - ] - } - ], - "parameters": [] + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetMaxQuantity" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "10", + "" + ] }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update ammo", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Subtract 1 from ammo (if not unlimited ammo)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "FireBullet::FireBullet::PropertyUnlimitedAmmo" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "-", - "1" - ] - } - ] - } - ], - "parameters": [] + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetEmptyUnitColor" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "\"74;144;226\"", + "" + ] }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update reloading counter", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyShotsPerReload" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" - }, - "parameters": [ - "Object", - "Behavior", - "-", - "1" - ] - } - ] - } - ], - "parameters": [] - }, + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetEmptyUnitOpacity" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "64", + "" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "KeyReleased" + }, + "parameters": [ + "", + "Left" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "Units", + "=", + "max(0,Variable(Units)-1)" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Automatically reload gun when needed", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyAutomaticReloading" - }, - "parameters": [ - "Object", - "Behavior" - ] - }, - { - "type": { - "value": "FireBullet::FireBullet::IsReloadNeeded" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "inverted": true, - "value": "FireBullet::FireBullet::IsReloadInProgress" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::ReloadAmmo" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ] - } - ], - "parameters": [] - }, + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "-", + "1", + "" + ] + } + ] + }, + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update Overheat", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Increase heat (if needed)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyHeatIncreasePerShot" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyHeatLevel" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "Object.Behavior::PropertyHeatIncreasePerShot()" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Check if this caused overheat", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyOverheatDuration" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - }, - { - "type": { - "value": "FireBullet::FireBullet::IsOverheated" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__FireBullet.OverheatDuration\"" - ] - } - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update statistics", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalShotsFired" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "1" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Reset firing detection", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyHasJustFired" - }, - "parameters": [ - "Object", - "Behavior", - "=" - ] - } - ] - } - ], - "parameters": [] + "type": { + "value": "ResourceBar::ResourceBar_Sprite::DecreaseQuantity" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "1", + "" + ] } ] } - ], - "parameters": [] + ] }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Reload gun when needed", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "KeyReleased" }, - "comment": "Detect when reload is completed", - "comment2": "" - }, + "parameters": [ + "", + "Right" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "Units", + "+", + "1" + ] + } + ], + "events": [ { + "disabled": true, "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "conditions": [], + "actions": [ { "type": { - "value": "FireBullet::FireBullet::IsReloadInProgress" + "value": "ResourceBar::ResourceBar_Sprite::IncreaseQuantity" }, "parameters": [ - "Object", - "Behavior", + "Unit_ResourceBar", + "UnitResourceBar", + "1", "" ] - }, - { - "type": { - "value": "CompareObjectTimer" - }, - "parameters": [ - "Object", - "\"__FireBullet.ReloadingTimer\"", - ">=", - "Object.Behavior::PropertyReloadDuration()" - ] } - ], + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalReloadsCompleted" + "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" }, "parameters": [ - "Object", - "Behavior", + "Unit_ResourceBar", + "UnitResourceBar", "+", - "1" - ] - }, - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyReloadInProgress" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::IsUnlimitedAmmo" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyShotsPerReload()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Only reload the amount of ammo available", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "FireBullet::FireBullet::IsUnlimitedAmmo" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::PropertyShotsPerReload(), Object.Behavior::PropertyAmmoQuantity())" - ] - } + "1", + "" ] } ] } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::DrawResourceBar" + }, + "parameters": [ + "Unit_ResourceBar", + "UnitResourceBar", + "Heart_Unit", + "5", + "" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [] + }, + { + "colorB": 224, + "colorG": 16, + "colorR": 189, + "creationTime": 0, + "name": "Buttons", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Hover", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SourisSurObjet" + }, + "parameters": [ + "Buttons", + "", + "", + "" + ] + } ], - "parameters": [] + "actions": [ + { + "type": { + "value": "EnableEffect" + }, + "parameters": [ + "Buttons", + "\"Effect\"", + "no" + ] + } + ] }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Reduce heat level (based on cooling rate)", - "source": "", - "type": "BuiltinCommonInstructions::Group", + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SourisSurObjet" + }, + "parameters": [ + "Buttons", + "", + "", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "EnableEffect" + }, + "parameters": [ + "Buttons", + "\"Effect\"", + "yes" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Clicked", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "MouseButtonReleased" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "ScaleWidth" + }, + "parameters": [ + "Buttons", + "=", + "0.9" + ] + } + ], + "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" + "value": "SourisSurObjet" }, "parameters": [ - "Object.Behavior::HeatLevel()", - ">", - "0" + "PlusKey", + "", + "", + "" ] } ], "actions": [], "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Sprite", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "FireBullet::FireBullet::PropertyExponentialCoolingRate" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [] } ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyHeatLevel" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "max(0, Object.Behavior::PropertyHeatLevel() - TimeDelta() * Object.Behavior::PropertyExponentialCoolingRate() * Object.Behavior::PropertyHeatLevel())" - ] - } - ] + "parameters": [] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Tiled sprite", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "FireBullet::FireBullet::PropertyLinearCoolingRate" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [] } ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyHeatLevel" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "max(0, Object.Behavior::PropertyHeatLevel() - TimeDelta() * Object.Behavior::PropertyLinearCoolingRate())" - ] - } - ] + "parameters": [] } ] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Fire bullets toward a position.", - "fullName": "Fire bullets toward a position", - "functionType": "Action", - "name": "FireTowardPosition", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Calculate the trajectory angle and use the \"Fire bullets\" action", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "conditions": [ { "type": { - "value": "FireBullet::FireBullet::Fire" + "value": "SourisSurObjet" }, "parameters": [ - "Object", - "Behavior", - "GetArgumentAsNumber(\"XPosition\")", - "GetArgumentAsNumber(\"YPosition\")", - "Bullet", - "Object.AngleToPosition(GetArgumentAsNumber(\"TargetXPosition\"),GetArgumentAsNumber(\"TargetYPosition\"))", - "GetArgumentAsNumber(\"Speed\")", + "MinusKey", + "", + "", "" ] } + ], + "actions": [], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Sprite", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Tiled sprite", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [] + } + ], + "parameters": [] + } ] } - ], - "parameters": [] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "X position, where to create the bullet", - "name": "XPosition", - "type": "expression" - }, - { - "description": "Y position, where to create the bullet", - "name": "YPosition", - "type": "expression" - }, - { - "description": "The bullet object", - "name": "Bullet", - "type": "objectList" - }, - { - "description": "Target X position", - "name": "TargetXPosition", - "type": "expression" - }, - { - "description": "Target Y position", - "name": "TargetYPosition", - "type": "expression" - }, - { - "description": "Speed of the bullet, in pixels per second", - "name": "Speed", - "type": "expression" + ] } ], - "objectGroups": [] + "parameters": [] }, { - "description": "Fire bullets in the direction of a given angle.", - "fullName": "Fire bullets toward an angle", - "functionType": "Action", - "name": "Fire", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Press", + "source": "", + "type": "BuiltinCommonInstructions::Group", "events": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Check if ready to shoot", - "source": "", - "type": "BuiltinCommonInstructions::Group", + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "MouseButtonPressed" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "FireBullet::FireBullet::IsReadyToShoot" + "value": "SourisSurObjet" }, "parameters": [ - "Object", - "Behavior", + "Buttons", + "", + "", "" ] } @@ -7627,1616 +6197,1877 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyHasJustFired" + "value": "ChangeColor" }, "parameters": [ - "Object", - "Behavior", - "yes" + "Buttons", + "\"189;16;224\"" ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Single bullet", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "Object.Behavior::PropertyBulletQuantity()", - "=", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::FireSingleBullet" - }, - "parameters": [ - "Object", - "Behavior", - "GetArgumentAsNumber(\"XPosition\")", - "GetArgumentAsNumber(\"YPosition\")", - "Bullet", - "GetArgumentAsNumber(\"Angle\")", - "GetArgumentAsNumber(\"Speed\")", - "" - ] - } - ] - } - ], - "parameters": [] }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Multiple bullets", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "Object.Behavior::PropertyBulletQuantity()", - ">", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__FireBullet.CurrentBulletAngle", - "=", - "GetArgumentAsNumber(\"Angle\") - Object.Behavior::PropertyFiringArc()/2" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__FireBullet.BatchOrderID", - "=", - "0" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Repeat", - "repeatExpression": "Object.Behavior::PropertyBulletQuantity()", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::FireSingleBullet" - }, - "parameters": [ - "Object", - "Behavior", - "GetArgumentAsNumber(\"XPosition\")", - "GetArgumentAsNumber(\"YPosition\")", - "Bullet", - "Object.Variable(__FireBullet.CurrentBulletAngle) + RandomInRange(-Object.Behavior::PropertyAngleVariance(),Object.Behavior::PropertyAngleVariance())", - "GetArgumentAsNumber(\"Speed\")", - "" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move temp variable to the next angle a bullet will be sent", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__FireBullet.CurrentBulletAngle", - "+", - "Object.Behavior::PropertyFiringArc() / (Object.Behavior::PropertyBulletQuantity() - 1)" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__FireBullet.BatchOrderID", - "+", - "1" - ] - } - ] - } - ] - } - ] - } - ], - "parameters": [] + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "Buttons", + "=", + "0.9" + ] } ] } - ], - "parameters": [] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "X position, where to create the bullet", - "name": "XPosition", - "type": "expression" - }, - { - "description": "Y position, where to create the bullet", - "name": "YPosition", - "type": "expression" - }, - { - "description": "The bullet object", - "name": "Bullet", - "type": "objectList" - }, - { - "description": "Angle of the bullet, in degrees", - "name": "Angle", - "type": "expression" + ] }, { - "description": "Speed of the bullet, in pixels per second", - "name": "Speed", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Fire a single bullet. This is only meant to be used inside the \"Fire bullet\" action.", - "fullName": "Fire a single bullet", - "functionType": "Action", - "group": "Firing", - "name": "FireSingleBullet", - "private": true, - "sentence": "Fire a single bullet _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, with angle _PARAM5_ and speed _PARAM6_ px/s", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Fire a single bullet", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "inverted": true, + "value": "MouseButtonPressed" }, - "comment": "Create bullet", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Create" - }, - "parameters": [ - "", - "Bullet", - "GetArgumentAsNumber(\"XPosition\")", - "GetArgumentAsNumber(\"YPosition\")", - "\"\"" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move bullet", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "AddForceAL" - }, - "parameters": [ - "Bullet", - "GetArgumentAsNumber(\"Angle\") + RandomInRange(-Object.Behavior::PropertyAngleVariance(), Object.Behavior::PropertyAngleVariance())", - "GetArgumentAsNumber(\"Speed\")", - "1" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Add identifier variables (to enable advanced picking by users)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Bullet", - "__FireBullet.BulletID", - "=", - "Object.Behavior::PropertyTotalBulletsCreated()" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Bullet", - "__FireBullet.BatchID", - "=", - "Object.Behavior::PropertyTotalShotsFired()" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Bullet", - "__FireBullet.BatchOrderID", - "=", - "0" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Rotate newly created bullet, if needed", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyRotateBullet" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetAngle" - }, - "parameters": [ - "Bullet", - "=", - "GetArgumentAsNumber(\"Angle\")" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Update statistics", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalBulletsCreated" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "1" - ] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "X position, where to create the bullet", - "name": "XPosition", - "type": "expression" - }, - { - "description": "Y position, where to create the bullet", - "name": "YPosition", - "type": "expression" - }, - { - "description": "The bullet object", - "name": "Bullet", - "type": "objectList" - }, - { - "description": "Angle of the bullet, in degrees", - "name": "Angle", - "type": "expression" - }, - { - "description": "Speed of the bullet, in pixels per second", - "name": "Speed", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Reload ammo.", - "fullName": "Reload ammo", - "functionType": "Action", - "name": "ReloadAmmo", - "sentence": "Reload ammo on _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "FireBullet::FireBullet::IsOutOfAmmo" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyReloadInProgress" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] + "parameters": [ + "", + "Left" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeColor" + }, + "parameters": [ + "Buttons", + "\"255;255;255\"" + ] }, { "type": { - "value": "ResetObjectTimer" + "value": "ChangeScale" }, "parameters": [ - "Object", - "\"__FireBullet.ReloadingTimer\"" + "Buttons", + "=", + "1" ] } ] } ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, + "parameters": [] + } + ], + "parameters": [] + } + ], + "layers": [ + { + "ambientLightColorB": 32, + "ambientLightColorG": 0, + "ambientLightColorR": 0, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "", + "visibility": true, + "cameras": [ { - "description": "Check if the object has just fired something.", - "fullName": "Has just fired", - "functionType": "Condition", - "group": "Firing", - "name": "HasJustFired", - "sentence": "_PARAM0_ has just fired", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyHasJustFired" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "behaviorsSharedData": [ + { + "name": "DrawResourceBar", + "type": "DrawResourceBarOLD::DrawResourceBarOLD" + }, + { + "name": "DrawResourceBar222", + "type": "ResourceBar::ResourceBar_ShapePainter" + }, + { + "name": "Health", + "type": "Health::Health" + }, + { + "name": "ShakeObject_PositionAngleScale", + "type": "ShakeObject::ShakeObject_PositionAngleScale" + }, + { + "name": "Shield", + "type": "Health::Shield" + }, + { + "name": "Sticker", + "type": "Sticker::Sticker" + }, + { + "name": "TiledResourceBar", + "type": "ResourceBar::ResourceBar_TiledSprite" + }, + { + "name": "UnitResourceBar", + "type": "ResourceBar::ResourceBar_Sprite" + } + ] + }, + { + "b": 0, + "disableInputWhenNotFocused": true, + "mangledName": "Shape_32Painter_32_40Game_41", + "name": "Shape Painter (Game)", + "r": 0, + "standardSortMethod": true, + "stopSoundsOnStartup": true, + "title": "", + "v": 0, + "uiSettings": { + "grid": true, + "gridType": "rectangular", + "gridWidth": 8, + "gridHeight": 8, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.2, + "snap": true, + "zoomFactor": 1.06, + "windowMask": false + }, + "objectsGroups": [], + "variables": [], + "instances": [ + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Shield_Bar", + "persistentUuid": "b581caf8-44ee-423e-b57e-cdd910fb7374", + "width": 0, + "x": 192, + "y": 216, + "zOrder": 2, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "ResourceMouseX_Bar", + "persistentUuid": "17a23f4a-a442-4b52-8380-9f2b6a9c2494", + "width": 0, + "x": 192, + "y": 536, + "zOrder": 3, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 80, + "layer": "", + "name": "Fly", + "persistentUuid": "e0b70af7-7a81-41c3-88ac-88305df91ed2", + "width": 128, + "x": 481.13275146484375, + "y": 293, + "zOrder": 4, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 128, + "layer": "", + "name": "Moon", + "persistentUuid": "8428ea9d-6d1e-41b0-9f54-1840f3378846", + "width": 129.1327362060547, + "x": 480, + "y": 272, + "zOrder": 0, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Health_Text", + "persistentUuid": "921b2f28-8bee-4ab2-a6cc-1ee823c5215e", + "width": 0, + "x": 48, + "y": 96, + "zOrder": 9, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Shield_Text", + "persistentUuid": "a231209b-a5d8-4280-868d-1e9beb31527b", + "width": 0, + "x": 48, + "y": 208, + "zOrder": 10, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "ResourceMouseX_Text", + "persistentUuid": "07fda015-55f8-4959-80fc-f1ee3074d028", + "width": 0, + "x": 32, + "y": 512, + "zOrder": 11, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Title_Text", + "persistentUuid": "29ae792c-1331-430c-aadf-70fa8d9e36d6", + "width": 0, + "x": 208, + "y": 16, + "zOrder": 12, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Health_Bar", + "persistentUuid": "c411b32c-f357-4b8f-9e87-f3fdde7657d5", + "width": 0, + "x": 192, + "y": 104, + "zOrder": 1, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ], + "objects": [ + { + "assetStoreId": "", + "name": "Health_Bar", + "tags": "", + "type": "PrimitiveDrawing::Drawer", + "variables": [], + "effects": [], + "behaviors": [ { - "description": "Check if bullet rotates to match trajectory.", - "fullName": "Is bullet rotation enabled", - "functionType": "Condition", - "group": "Firing", - "name": "BulletRotationEnabled", - "sentence": "Bullet rotation enabled on _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyRotateBullet" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, + "name": "DrawResourceBar222", + "type": "ResourceBar::ResourceBar_ShapePainter", + "ValueMin": 0, + "ValueMax": 1, + "TickSpacing": 0, + "BarLength": 200, + "BarThickness": 16, + "InactiveBarColor": "11;255;0", + "InactiveBarOpacity": 96, + "ActiveBarColor": " 11;255;0", + "ActiveBarOpacity": 255, + "RoundedBar": true, + "Value": 0, + "ThumbOffset": 0, + "NeedRedraw": true + } + ], + "fillOpacity": 255, + "outlineSize": 1, + "outlineOpacity": 255, + "fillColor": { + "b": 255, + "g": 255, + "r": 255 + }, + "outlineColor": { + "b": 0, + "g": 0, + "r": 0 + }, + "absoluteCoordinates": false, + "clearBetweenFrames": true + }, + { + "assetStoreId": "", + "name": "MiniHealth_Bar", + "tags": "", + "type": "PrimitiveDrawing::Drawer", + "variables": [], + "effects": [], + "behaviors": [ { - "description": "Change the firing arc (in degrees) where bullets will be shot. Bullets will be evenly spaced out inside the firing arc.", - "fullName": "Set firing arc", - "functionType": "Action", - "group": "Multi-Fire", - "name": "SetFiringArc", - "sentence": "Set firing arc of _PARAM0_ to _PARAM2_ degrees", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyFiringArc" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "Firing arc (degrees) Range: 0 to 360", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] + "name": "DrawResourceBar", + "type": "ResourceBar::ResourceBar_ShapePainter", + "ValueMin": 0, + "ValueMax": 1, + "TickSpacing": 0, + "BarLength": 50, + "BarThickness": 4, + "InactiveBarColor": "11;255;0", + "InactiveBarOpacity": 96, + "ActiveBarColor": " 11;255;0", + "ActiveBarOpacity": 255, + "Value": 0, + "ThumbOffset": 0, + "NeedRedraw": true }, { - "description": "Change the angle variance (in degrees) applied to each bullet.", - "fullName": "Set angle variance", - "functionType": "Action", - "group": "Firing", - "name": "SetAngleVariance", - "sentence": "Set angle variance of _PARAM0_ to _PARAM2_ degrees", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyAngleVariance" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "Angle variance (degrees) Range: 0 to 180", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, + "name": "Sticker", + "type": "Sticker::Sticker", + "OnlyFollowPosition": true + } + ], + "fillOpacity": 255, + "outlineSize": 1, + "outlineOpacity": 255, + "fillColor": { + "b": 255, + "g": 255, + "r": 255 + }, + "outlineColor": { + "b": 0, + "g": 0, + "r": 0 + }, + "absoluteCoordinates": false, + "clearBetweenFrames": true + }, + { + "assetStoreId": "", + "name": "Shield_Bar", + "tags": "", + "type": "PrimitiveDrawing::Drawer", + "variables": [], + "effects": [], + "behaviors": [ { - "description": "Change the number of bullets shot every time the \"fire bullet\" action is used.", - "fullName": "Set number of bullets per shot", - "functionType": "Action", - "group": "Multi-Fire", - "name": "SetBulletQuantity", - "sentence": "Set number of bullets per shot of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyBulletQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "Bullets", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] + "name": "DrawResourceBar222", + "type": "ResourceBar::ResourceBar_ShapePainter", + "ValueMin": 0, + "ValueMax": 1, + "TickSpacing": 0, + "ThumbShape": "circle", + "ThumbWidth": 20, + "ThumbHeight": 20, + "ThumbColor": " 24;119;211", + "ThumbOpacity": 255, + "BarLength": 200, + "BarThickness": 16, + "InactiveBarColor": "144;19;254", + "InactiveBarOpacity": 96, + "ActiveBarColor": " 144;19;254", + "ActiveBarOpacity": 255, + "HaloRadius": 24, + "HaloOpacityHover": 32, + "HaloOpacityClick": 64, + "RoundedBar": true, + "Enabled": true, + "IsBeingDragged": false, + "Value": 0, + "ThumbOffset": 0, + "NeedRedraw": true, + "IsHovered": false, + "MouseX": 0, + "MouseY": 0, + "CurrentHaloRadius": 0, + "HaloGrowSpeed": 0.2, + "TargetHaloRadius": 0.19999992847442627 + } + ], + "fillOpacity": 255, + "outlineSize": 1, + "outlineOpacity": 255, + "fillColor": { + "b": 255, + "g": 255, + "r": 255 + }, + "outlineColor": { + "b": 0, + "g": 0, + "r": 0 + }, + "absoluteCoordinates": false, + "clearBetweenFrames": true + }, + { + "assetStoreId": "", + "name": "ResourceMouseX_Bar", + "tags": "", + "type": "PrimitiveDrawing::Drawer", + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "DrawResourceBar222", + "type": "ResourceBar::ResourceBar_ShapePainter", + "ValueMin": 0, + "ValueMax": 1, + "TickSpacing": 0, + "ThumbShape": "circle", + "ThumbWidth": 20, + "ThumbHeight": 20, + "ThumbColor": "248;231;28", + "ThumbOpacity": 255, + "BarLength": 200, + "BarThickness": 16, + "InactiveBarColor": "248;231;28", + "InactiveBarOpacity": 96, + "ActiveBarColor": "248;231;28", + "ActiveBarOpacity": 255, + "HaloRadius": 24, + "HaloOpacityHover": 32, + "HaloOpacityClick": 64, + "RoundedBar": false, + "Enabled": true, + "IsBeingDragged": false, + "Value": 0, + "ThumbOffset": 0, + "NeedRedraw": true, + "IsHovered": false, + "MouseX": 0, + "MouseY": 0, + "CurrentHaloRadius": 0, + "HaloGrowSpeed": 0.2, + "TargetHaloRadius": 0.19999992847442627 + } + ], + "fillOpacity": 255, + "outlineSize": 1, + "outlineOpacity": 255, + "fillColor": { + "b": 255, + "g": 255, + "r": 255 + }, + "outlineColor": { + "b": 0, + "g": 0, + "r": 0 + }, + "absoluteCoordinates": false, + "clearBetweenFrames": true + }, + { + "assetStoreId": "48a2d179a1921276abe3f99ce3cf195fa7c310bc511fa215d9647c3fb9027921", + "name": "Fly", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Health", + "type": "Health::Health", + "Health": 100, + "DamageCooldown": 0, + "MaxHealth": 100, + "IsJustDamaged": false, + "HealthRegenRate": 0, + "HealthRegenDelay": 0, + "AllowOverHealing": false, + "HitAtLeastOnce": false }, { - "description": "Enable bullet rotation.", - "fullName": "Enable (or disable) bullet rotation", - "functionType": "Action", - "group": "Firing", - "name": "SetRotateBullet", - "sentence": "Enable bullet rotation on _PARAM0_: _PARAM2_", - "events": [ + "name": "ShakeObject_PositionAngleScale", + "type": "ShakeObject::ShakeObject_PositionAngleScale" + }, + { + "name": "Shield", + "type": "Health::Shield", + "RequireHealth": "Health", + "MaxShieldPoints": 30, + "ShieldDuration": 5, + "ShieldPoints": 0, + "ShieldRegenRate": 0, + "ShieldBlocksExcessDamage": false, + "ShieldRegenDelay": 0, + "RegenShieldWhenZeroPoints": false, + "IsShieldJustDamaged": false + } + ], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "looping": true, + "timeBetweenFrames": 0.05000000074505806, + "sprites": [ { - "type": { - "inverted": true, - "value": "GetArgumentAsBoolean" + "hasCustomCollisionMask": true, + "image": "Fly_1.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "\"RotateBullet\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyRotateBullet" + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 }, - "parameters": [ - "Object", - "Behavior", - "no" + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + }, { - "type": { - "value": "GetArgumentAsBoolean" + "hasCustomCollisionMask": true, + "image": "Fly_2.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "\"RotateBullet\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyRotateBullet" + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "defaultValue": "yes", - "description": "Rotate bullet to match trajetory", - "name": "RotateBullet", - "optional": true, - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Enable unlimited ammo.", - "fullName": "Enable (or disable) unlimited ammo", - "functionType": "Action", - "group": "Ammo", - "name": "SetUnlimitedAmmo", - "sentence": "Enable unlimited ammo on _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, { - "type": { - "inverted": true, - "value": "GetArgumentAsBoolean" + "hasCustomCollisionMask": true, + "image": "Fly_3.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "\"UnlimitedAmmo\"" + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] ] - } - ], - "actions": [ + }, { - "type": { - "value": "FireBullet::FireBullet::SetPropertyUnlimitedAmmo" + "hasCustomCollisionMask": true, + "image": "Fly_4.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Object", - "Behavior", - "no" + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + }, { - "type": { - "value": "GetArgumentAsBoolean" + "hasCustomCollisionMask": true, + "image": "Fly_5.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "\"UnlimitedAmmo\"" + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] ] - } - ], - "actions": [ + }, { - "type": { - "value": "FireBullet::FireBullet::SetPropertyUnlimitedAmmo" + "hasCustomCollisionMask": true, + "image": "Fly_6.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Object", - "Behavior", - "yes" + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "defaultValue": "yes", - "description": "Unlimited ammo", - "name": "UnlimitedAmmo", - "optional": true, - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Change the firing cooldown, which changes the rate of fire.", - "fullName": "Set firing cooldown", - "functionType": "Action", - "group": "Firing", - "name": "SetCooldown", - "sentence": "Set the fire rate of _PARAM0_ to _PARAM2_ seconds", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + }, { - "type": { - "value": "FireBullet::FireBullet::SetPropertyFireCooldown" + "hasCustomCollisionMask": true, + "image": "Fly_7.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"NewCooldown\")" + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_8.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_9.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_10.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] ] } ] } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, + ] + } + ] + }, + { + "assetStoreId": "574655a4565bd983af8f5dd98e0fd8cda3bd67cf929c00d3db317e898322e06b", + "name": "Star", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "LargeNarrow", + "useMultipleDirections": false, + "directions": [ { - "description": "Cooldown in seconds", - "name": "NewCooldown", - "type": "expression" + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Star_LargeNarrow.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] } - ], - "objectGroups": [] + ] }, { - "description": "Change the duration to reload ammo.", - "fullName": "Set reload duration", - "functionType": "Action", - "group": "Reload", - "name": "SetReloadDuration", - "sentence": "Set the reload duration of _PARAM0_ to _PARAM2_ seconds", - "events": [ + "name": "LargeWide", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "FireBullet::FireBullet::SetPropertyReloadDuration" + "hasCustomCollisionMask": false, + "image": "Star_LargeWide.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] } ] } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, + ] + }, + { + "name": "Medium", + "useMultipleDirections": false, + "directions": [ { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "Reload duration (seconds)", - "name": "Value", - "type": "expression" + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Star_Medium.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] } - ], - "objectGroups": [] + ] }, { - "description": "Change the duration after becoming overheated.", - "fullName": "Set overheat duration", - "functionType": "Action", - "group": "Overheat", - "name": "SetOverheatDuration", - "sentence": "Set the overheat duration of _PARAM0_ to _PARAM2_ seconds", - "events": [ + "name": "Small", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "FireBullet::FireBullet::SetPropertyOverheatDuration" + "hasCustomCollisionMask": false, + "image": "Star_Small.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] } ] } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "Overheat duration (seconds)", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, + ] + } + ] + }, + { + "assetStoreId": "794ab341df538c9b3bdad418dfdcccc7be5d90f3d0b5929d6d528a542c6ed3ae", + "name": "SilverShield", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [ { - "description": "Change the quantity of ammo.", - "fullName": "Set ammo quantity", - "functionType": "Action", - "group": "Ammo", - "name": "SetAmmoQuantity", - "sentence": "Set the ammo quantity of _PARAM0_ to _PARAM2_", - "events": [ + "effectType": "Outline", + "name": "Effect", + "doubleParameters": { + "padding": 2, + "thickness": 2 + }, + "stringParameters": { + "color": "255;255;255" + }, + "booleanParameters": {} + } + ], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "hasCustomCollisionMask": false, + "image": "Silver shield.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 14.592423439025879, + "y": 15.103429794311523 }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] } ] } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "Ammo", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, + ] + } + ] + }, + { + "assetStoreId": "d2bc2d266f5bb666ef68023abc14f51bc8fe8b5222af931efa378ac10c50f98a", + "name": "MeteorDetailed", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ { - "description": "Change the heat increase per shot.", - "fullName": "Set heat increase per shot", - "functionType": "Action", - "group": "Overheat", - "name": "SetHeatPerShot", - "sentence": "Set the heat increase of _PARAM0_ to _PARAM2_ per shot", - "events": [ + "name": "Large", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "FireBullet::FireBullet::SetPropertyHeatIncreasePerShot" + "hasCustomCollisionMask": true, + "image": "Meteor Detailed_Large.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 65.07723999023438, + "y": 63.82252502441406 }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 20, + "y": 20 + }, + { + "x": 110, + "y": 20 + }, + { + "x": 110, + "y": 110 + }, + { + "x": 20, + "y": 110 + } + ] ] } ] } - ], - "parameters": [ + ] + }, + { + "name": "Small", + "useMultipleDirections": false, + "directions": [ { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "Heat increase per shot (Range: 0 to 1)", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the max ammo.", - "fullName": "Set max ammo", - "functionType": "Action", - "group": "Ammo", - "name": "SetMaxAmmo", - "sentence": "Set the max ammo of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "FireBullet::FireBullet::SetPropertyMaxAmmo" + "hasCustomCollisionMask": true, + "image": "Meteor Detailed_Small.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 65.07723999023438, + "y": 63.82252502441406 }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 20, + "y": 20 + }, + { + "x": 110, + "y": 20 + }, + { + "x": 110, + "y": 110 + }, + { + "x": 20, + "y": 110 + } + ] ] } ] - }, + } + ] + } + ] + }, + { + "assetStoreId": "a1e62f5a19d1fe476e2ad0b8977768d020cc1dc55423427f79a486664cebb631", + "name": "UpgradedPotionBlue", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "No Shadow", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "FireBullet::FireBullet::PropertyMaxAmmo" + "hasCustomCollisionMask": false, + "image": "Upgraded Potion Blue_No Shadow.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 15.793042182922363, + "y": 15.89681625366211 }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 }, - "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::MaxAmmo(),Object.Behavior::AmmoQuantity())" - ] + "customCollisionMask": [] } ] } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "Max ammo", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] + ] }, { - "description": "Reset total shots fired.", - "fullName": "Reset total shots fired", - "functionType": "Action", - "group": "Stats", - "name": "ResetTotalShotsFired", - "sentence": "Reset total shots fired by _PARAM0_", - "events": [ + "name": "Shadow", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalShotsFired" + "hasCustomCollisionMask": false, + "image": "Upgraded Potion Blue_Shadow.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 15.793042182922363, + "y": 15.89681625366211 }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] } ] } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, + ] + } + ] + }, + { + "assetStoreId": "c2ce913ddbcd055c4e49a1c01b63aff1a3d59e4e1c1845db4c38aedda3712d3a", + "name": "Moon", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ { - "description": "Reset total bullets created.", - "fullName": "Reset total bullets created", - "functionType": "Action", - "group": "Stats", - "name": "ResetTotalBulletsCreated", - "sentence": "Reset total bullets created by _PARAM0_", - "events": [ + "name": "Sticker", + "type": "Sticker::Sticker", + "OnlyFollowPosition": false + } + ], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalBulletsCreated" + "hasCustomCollisionMask": false, + "image": "Moon.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] - } + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } ] } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, + ] + } + ] + }, + { + "assetStoreId": "", + "bold": true, + "italic": false, + "name": "Health_Text", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Health", + "font": "", + "characterSize": 30, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + }, + { + "assetStoreId": "", + "bold": true, + "italic": false, + "name": "Shield_Text", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Shield", + "font": "", + "characterSize": 30, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + }, + { + "assetStoreId": "", + "bold": true, + "italic": false, + "name": "ResourceMouseX_Text", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Resource \n(Mouse X)", + "font": "", + "characterSize": 30, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + }, + { + "assetStoreId": "", + "bold": true, + "italic": false, + "name": "Title_Text", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Extension: Resource Bar", + "font": "", + "characterSize": 30, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + }, + { + "assetStoreId": "", + "name": "ResourceBarNew", + "tags": "", + "type": "PrimitiveDrawing::Drawer", + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "DrawResourceBar", + "type": "DrawResourceBar::DrawResourceBar", + "ValueMin": 0, + "ValueMax": 1, + "TickSpacing": 0, + "BarLength": 200, + "BarThickness": 4, + "InactiveBarColor": "11;255;0", + "InactiveBarOpacity": 96, + "ActiveBarColor": "11;255;0", + "ActiveBarOpacity": 255, + "RoundedBar": false, + "Value": 0, + "ThumbOffset": 0, + "NeedRedraw": true + } + ], + "fillOpacity": 255, + "outlineSize": 1, + "outlineOpacity": 255, + "fillColor": { + "b": 255, + "g": 255, + "r": 255 + }, + "outlineColor": { + "b": 0, + "g": 0, + "r": 0 + }, + "absoluteCoordinates": false, + "clearBetweenFrames": true + }, + { + "assetStoreId": "8d524a624fbc72a1fd6c3975369a7cd55b8a52035887ef664bcd93bf8e273881", + "name": "Unit_ResourceBar", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "UnitResourceBar", + "type": "ResourceBar::ResourceBar_Sprite", + "StartingUnits": 3, + "CurrentUnits": 3, + "MaxUnits": 3, + "UnitSpacing": 0, + "NextUnitToCreate": 0, + "HideEmptyUnits": false, + "EmptyUnitOpacity": 64, + "EmptyUnitAnimation": 0, + "EmptyColorTint": "255;255;255", + "ActiveUnitOpacity": 255 + } + ], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Emote Heart.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] } - ], - "objectGroups": [] - }, + ] + } + ] + }, + { + "assetStoreId": "8d524a624fbc72a1fd6c3975369a7cd55b8a52035887ef664bcd93bf8e273881", + "name": "Heart_Unit", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ { - "description": "Reset total reloads completed.", - "fullName": "Reset total reloads completed", - "functionType": "Action", - "group": "Stats", - "name": "ResetTotalReloadsCompleted", - "sentence": "Reset total reloads completed by _PARAM0_", - "events": [ + "name": "", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalReloadsCompleted" + "hasCustomCollisionMask": false, + "image": "Emote Heart.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] } ] } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, + ] + } + ] + }, + { + "assetStoreId": "752e405ef67d9f9d1bd36f9763f1b6fc05633d64700982c0f3118a25a32e39b2", + "height": 16, + "name": "TiledEmptyUiHeart", + "tags": "", + "texture": "tiled_Tiled Empty UI Heart.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 16, + "variables": [], + "effects": [], + "behaviors": [ { - "description": "Change the number of shots per reload.", - "fullName": "Set shots per reload", - "functionType": "Action", - "group": "Reload", - "name": "SetShotsPerReload", - "sentence": "Set the shots per reload of _PARAM0_ to _PARAM2_", - "events": [ + "name": "TiledResourceBar", + "type": "ResourceBar::ResourceBar_TiledSprite", + "StartingQuantity": 0, + "CurrentQuantity": 0, + "UnitWidth": 16, + "MaxQuantity": 0 + } + ] + }, + { + "assetStoreId": "abf51d082db5a117d9ee2e65299660f6787d47664e4571bad6db3075b3393c5f", + "height": 16, + "name": "Tiled_ResourceBar", + "tags": "", + "texture": "tiled_Tiled Filler UI Heart.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 16, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "TiledResourceBar", + "type": "ResourceBar::ResourceBar_TiledSprite", + "StartingQuantity": 6, + "CurrentQuantity": 0, + "UnitWidth": 16 + } + ] + }, + { + "assetStoreId": "45107bbfbc2b5cbc83e3785f802b99664a23d59e74414e332c9afafac63e1ca3", + "name": "HealthBar", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsPerReload" + "hasCustomCollisionMask": false, + "image": "Health Bar.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] } ] - }, + } + ] + } + ] + }, + { + "assetStoreId": "1f3dba67c868b7320572a6591d1d0418f23b7c132df0963cf77286a9149971d9", + "height": 128, + "name": "HealthBarFill", + "tags": "", + "texture": "tiled_Health Bar Fill.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 128, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "3bd9517a10ad3d98341eea33f0c139f08a1b04f26500e85ac49bb7f9e157a303", + "height": 128, + "name": "EnergyBarFill", + "tags": "", + "texture": "tiled_Energy Bar Fill.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 128, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "138ee716846635e3e0e5ab7b63752d1a36754f1ac874c70e1b5fa372d5a05474", + "bottomMargin": 6, + "height": 15, + "leftMargin": 11, + "name": "HealthBarBox", + "rightMargin": 9, + "tags": "", + "texture": "Health Bar Box.png", + "tiled": true, + "topMargin": 6, + "type": "PanelSpriteObject::PanelSprite", + "width": 96, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "7c1048053bc2d851157c4e0868c4ac0338f4ca93170d28990a7f64eaed2a1723", + "name": "HealthIndicator", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "Black Outline Empty", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "FireBullet::FireBullet::PropertyShotsBeforeNextReload" + "hasCustomCollisionMask": false, + "image": "Health Indicator_Black Outline Empty.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Object", - "Behavior", - ">", - "Object.Behavior::PropertyShotsPerReload()" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyShotsPerReload()" - ] + "customCollisionMask": [] } ] } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "Shots per reload", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] + ] }, { - "description": "Enable (or disable) automatic reloading.", - "fullName": "Enable (or disable) automatic reloading", - "functionType": "Action", - "group": "Reload", - "name": "SetAutomaticReload", - "sentence": "Enable automatic reloading on _PARAM0_: _PARAM2_", - "events": [ + "name": "Black Outline Heart", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "FireBullet::FireBullet::SetPropertyAutomaticReloading" + "hasCustomCollisionMask": false, + "image": "Health Indicator_Black Outline Heart.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Object", - "Behavior", - "=" - ] + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] } ] - }, + } + ] + }, + { + "name": "White Outline Empty", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "GetArgumentAsBoolean" + "hasCustomCollisionMask": false, + "image": "Health Indicator_White Outline Empty.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "\"Value\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyAutomaticReloading" + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] + "customCollisionMask": [] } ] } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "defaultValue": "yes", - "description": "Enable automatic reloading", - "name": "Value", - "optional": true, - "type": "yesorno" - } - ], - "objectGroups": [] + ] }, { - "description": "Change the linear rate of cooling.", - "fullName": "Set linear cooling rate", - "functionType": "Action", - "group": "Overheat", - "name": "SetLinearCoolingRate", - "sentence": "Set the linear cooling rate of _PARAM0_ to _PARAM2_ per second", - "events": [ + "name": "White Outline Heart", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "FireBullet::FireBullet::SetPropertyLinearCoolingRate" + "hasCustomCollisionMask": false, + "image": "Health Indicator_White Outline Heart.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] } ] } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "Heat cooling rate (per second)", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, + ] + } + ] + }, + { + "assetStoreId": "0714257da345b4ec7de558ac0e42290362b85a79c97160c0e09636cd2fc31e3c", + "name": "Heart", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ { - "description": "Change the exponential rate of cooling.", - "fullName": "Set exponential cooling rate", - "functionType": "Action", - "group": "Overheat", - "name": "SetExponentialCoolingRate", - "sentence": "Set the exponential cooling rate of _PARAM0_ to _PARAM2_", - "events": [ + "name": "", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": { - "value": "FireBullet::FireBullet::SetPropertyExponentialCoolingRate" + "hasCustomCollisionMask": false, + "image": "Heart.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] } ] } - ], - "parameters": [ + ] + } + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Initialize game", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "description": "Object", - "name": "Object", - "type": "object" - }, + "type": { + "value": "DepartScene" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" + "type": { + "value": "Opacity" + }, + "parameters": [ + "Moon", + "=", + "128" + ] }, { - "description": "Exponential cooling rate", - "name": "Value", - "supplementaryInformation": "[\"Exponential\",\"Linear\"]", - "type": "expression" + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "MaxResource", + "=", + "CameraBorderRight()" + ] } ], - "objectGroups": [] - }, - { - "description": "Increase ammo quantity.", - "fullName": "Increase ammo", - "functionType": "Action", - "name": "IncreaseAmmo", - "sentence": "Increase ammo of _PARAM0_ by _PARAM2_ shots", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -9244,615 +8075,556 @@ "actions": [ { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "ChangeColor" }, "parameters": [ - "Object", - "Behavior", - "+", - "GetArgumentAsNumber(\"AmmoGained\")" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "If Max Ammo is set, do not exceed the value", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "Moon", + "\"144;19;254\"" + ] + }, { "type": { - "value": "FireBullet::FireBullet::PropertyMaxAmmo" + "value": "SetCenter" }, "parameters": [ - "Object", - "Behavior", - ">", - "0" + "Moon", + "=", + "Fly.CenterX()", + "=", + "Fly.CenterY()-10" ] - } - ], - "actions": [ + }, { "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + "value": "Sticker::Sticker::Stick" }, "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::MaxAmmo(),Object.Behavior::AmmoQuantity())" + "Moon", + "Sticker", + "Fly", + "" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Moon" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "conditions": [], + "actions": [ { "type": { - "value": "FireBullet::FireBullet::IsReloadNeeded" + "value": "Create" }, "parameters": [ - "Object", - "Behavior", - "" + "", + "MiniHealth_Bar", + "Fly.X()", + "Fly.Y()", + "\"\"" ] }, { "type": { - "value": "FireBullet::FireBullet::PropertyAutomaticReloading" + "value": "MettreXY" }, "parameters": [ - "Object", - "Behavior" + "MiniHealth_Bar", + "=", + "Fly.CenterX() - MiniHealth_Bar.DrawResourceBar::BarLength()/2", + "=", + "Fly.BoundingBoxTop()" ] - } - ], - "actions": [ + }, { "type": { - "value": "FireBullet::FireBullet::ReloadAmmo" + "value": "Sticker::Sticker::Stick" }, "parameters": [ - "Object", - "Behavior", + "MiniHealth_Bar", + "Sticker", + "Fly", "" ] } ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "Ammo gained", - "name": "AmmoGained", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Number of bullets to shoot at once (evenly spaced inside the Firing Arc).", - "fullName": "Bullet quantity", - "functionType": "Expression", - "group": "Multi-Fire", - "name": "BulletQuantity", - "sentence": "", - "events": [ - { + "disabled": true, "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "DebuggerTools::EnableDebugDraw" }, "parameters": [ - "Object.Behavior::PropertyBulletQuantity()" + "", + "", + "", + "", + "" ] } ] } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "folded": true, + "name": "Spawn items", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RepeatEveryXSeconds::Repeat" + }, + "parameters": [ + "", + "\"SpawnShield\"", + "5", + "" + ] + } ], - "expressionType": { - "type": "expression" - }, - "parameters": [ + "actions": [ { - "description": "Object", - "name": "Object", - "type": "object" + "type": { + "value": "Create" + }, + "parameters": [ + "", + "SilverShield", + "Fly.CenterX()", + "CameraBorderTop()", + "" + ] }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" + "type": { + "value": "AddForceAL" + }, + "parameters": [ + "SilverShield", + "90", + "75", + "1" + ] + }, + { + "type": { + "value": "ChangeColor" + }, + "parameters": [ + "SilverShield", + "\"144;19;254\"" + ] } - ], - "objectGroups": [] + ] }, { - "description": "Angle variance, in degrees.", - "fullName": "Angle variance", - "functionType": "Expression", - "group": "Firing", - "name": "AngleVariance", - "sentence": "", - "events": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyAngleVariance()" - ] - } + "type": { + "value": "RepeatEveryXSeconds::Repeat" + }, + "parameters": [ + "", + "\"SpawnHealth\"", + "12", + "" ] } ], - "expressionType": { - "type": "expression" - }, - "parameters": [ + "actions": [ { - "description": "Object", - "name": "Object", - "type": "object" + "type": { + "value": "Create" + }, + "parameters": [ + "", + "UpgradedPotionBlue", + "Fly.CenterX()", + "CameraBorderBottom()", + "" + ] }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Firing arc, in degrees.", - "fullName": "Firing arc", - "functionType": "Expression", - "group": "Multi-Fire", - "name": "FiringArc", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyFiringArc()" - ] - } + "type": { + "value": "AddForceAL" + }, + "parameters": [ + "UpgradedPotionBlue", + "270", + "75", + "1" ] } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] + ] }, { - "description": "Heat level (Range: 0 to 1).", - "fullName": "Heat level", - "functionType": "Expression", - "group": "Overheat", - "name": "HeatLevel", - "sentence": "", - "events": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "min(1,Object.Behavior::PropertyHeatLevel())" - ] - } + "type": { + "value": "RepeatEveryXSeconds::Repeat" + }, + "parameters": [ + "", + "\"SpawnRock\"", + "1", + "" ] } ], - "expressionType": { - "type": "expression" - }, - "parameters": [ + "actions": [ { - "description": "Object", - "name": "Object", - "type": "object" + "type": { + "value": "Create" + }, + "parameters": [ + "", + "MeteorDetailed", + "CameraBorderLeft()", + "Fly.CenterY()", + "" + ] }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" + "type": { + "value": "AddForceAL" + }, + "parameters": [ + "MeteorDetailed", + "0", + "300", + "1" + ] + }, + { + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "MeteorDetailed", + "=", + "0.5" + ] } - ], - "objectGroups": [] + ] }, { - "description": "Firing cooldown, in seconds.", - "fullName": "Firing cooldown", - "functionType": "Expression", - "group": "Firing", - "name": "Cooldown", - "sentence": "", - "events": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyFireCooldown()" - ] - } + "type": { + "value": "Rotate" + }, + "parameters": [ + "MeteorDetailed", + "30", + "" ] } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "folded": true, + "name": "Collisions", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "description": "Object", - "name": "Object", - "type": "object" + "type": { + "value": "Health::Shield::IsShieldActive" + }, + "parameters": [ + "Fly", + "Shield", + "" + ] }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] } ], - "objectGroups": [] - }, - { - "description": "Reload duration, in seconds.", - "fullName": "Reload duration", - "functionType": "Expression", - "group": "Ammo", - "name": "ReloadDuration", - "sentence": "", - "events": [ + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyReloadDuration()" - ] - } + "type": { + "value": "Montre" + }, + "parameters": [ + "Moon", + "" ] } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "description": "Object", - "name": "Object", - "type": "object" + "type": { + "inverted": true, + "value": "Health::Shield::IsShieldActive" + }, + "parameters": [ + "Fly", + "Shield", + "" + ] }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] } ], - "objectGroups": [] + "actions": [ + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Moon" + ] + } + ] }, { - "description": "Overheat duration, in seconds.", - "fullName": "Overheat duration", - "functionType": "Expression", - "group": "Overheat", - "name": "OverheatDuration", - "sentence": "", - "events": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyOverheatDuration()" - ] - } + "type": { + "value": "CollisionNP" + }, + "parameters": [ + "SilverShield", + "Fly", + "", + "", + "" ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] } ], - "objectGroups": [] - }, - { - "description": "Heat increase per shot.", - "fullName": "Heat increase per shot", - "functionType": "Expression", - "group": "Overheat", - "name": "HeatIncreasePerShot", - "sentence": "", - "events": [ + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyHeatIncreasePerShot()" - ] - } + "type": { + "value": "Health::Shield::ActivateShield" + }, + "parameters": [ + "Fly", + "Shield", + "" ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" + "type": { + "value": "Delete" + }, + "parameters": [ + "SilverShield", + "" + ] } - ], - "objectGroups": [] + ] }, { - "description": "Linear cooling rate, per second.", - "fullName": "Linear cooling rate", - "functionType": "Expression", - "group": "Overheat", - "name": "LinearCoolingRate", - "sentence": "", - "events": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyLinearCoolingRate()" - ] - } + "type": { + "value": "CollisionNP" + }, + "parameters": [ + "UpgradedPotionBlue", + "Fly", + "", + "", + "" ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] } ], - "objectGroups": [] - }, - { - "description": "Exponential cooling rate, per second.", - "fullName": "Exponential cooling rate", - "functionType": "Expression", - "group": "Overheat", - "name": "ExponentialCoolingRate", - "sentence": "", - "events": [ + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyExponentialCoolingRate()" - ] - } + "type": { + "value": "Health::Health::Heal" + }, + "parameters": [ + "Fly", + "Health", + "100", + "" ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" + "type": { + "value": "Delete" + }, + "parameters": [ + "UpgradedPotionBlue", + "" + ] } - ], - "objectGroups": [] + ] }, { - "description": "Max ammo.", - "fullName": "Max ammo", - "functionType": "Expression", - "group": "Ammo", - "name": "MaxAmmo", - "sentence": "", - "events": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyMaxAmmo()" - ] - } + "type": { + "value": "CollisionNP" + }, + "parameters": [ + "MeteorDetailed", + "Fly", + "", + "", + "" ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] } ], - "expressionType": { - "type": "expression" - }, - "parameters": [ + "actions": [ { - "description": "Object", - "name": "Object", - "type": "object" + "type": { + "value": "Health::Shield::ShieldHit" + }, + "parameters": [ + "Fly", + "Shield", + "10", + "" + ] }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Total shots fired (multi-bullet shots are considered one shot).", - "fullName": "Shots fired", - "functionType": "Expression", - "group": "Stats", - "name": "TotalShotsFired", - "sentence": "", - "events": [ + "type": { + "value": "Delete" + }, + "parameters": [ + "MeteorDetailed", + "" + ] + }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyTotalShotsFired()" - ] - } + "type": { + "value": "ShakeObject::ShakeObject_PositionAngleScale::ShakeObject_PositionAngleScale" + }, + "parameters": [ + "Fly", + "ShakeObject_PositionAngleScale", + "", + "10", + "10", + "5", + "", + "", + "", + "" ] } - ], - "expressionType": { - "type": "expression" + ] + } + ], + "parameters": [] + }, + { + "colorB": 224, + "colorG": 16, + "colorR": 189, + "creationTime": 0, + "name": "Draw Resource bars", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, + "comment": "This resource shows the horizontal mouse position in scene, but it can be used for anything!", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "MyResource", + "=", + "MouseX()" + ] } - ], - "objectGroups": [] + ] }, { - "description": "Total bullets created.", - "fullName": "Bullets created", - "functionType": "Expression", - "group": "Stats", - "name": "TotalBulletsCreated", - "sentence": "", + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Shape painter resource bar", + "source": "", + "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -9860,203 +8632,187 @@ "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "ResourceBar::ResourceBar_ShapePainter::DrawHealthBar" }, "parameters": [ - "Object.Behavior::PropertyTotalBulletsCreated()" + "MiniHealth_Bar", + "DrawResourceBar", + "Fly", + "Health", + "" ] } ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Reloads completed.", - "fullName": "Reloads completed", - "functionType": "Expression", - "group": "Stats", - "name": "TotalReloadsCompleted", - "sentence": "", - "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "ResourceBar::ResourceBar_ShapePainter::DrawShieldBar" }, "parameters": [ - "Object.Behavior::PropertyTotalReloadsCompleted()" + "Shield_Bar", + "DrawResourceBar222", + "Fly", + "Shield", + "" ] } ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Ammo quantity.", - "fullName": "Ammo quantity", - "functionType": "Expression", - "group": "Ammo", - "name": "AmmoQuantity", - "sentence": "", - "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "ResourceBar::ResourceBar_ShapePainter::DrawResourceBar" }, "parameters": [ - "Object.Behavior::PropertyAmmoQuantity()" + "ResourceMouseX_Bar", + "DrawResourceBar222", + "Variable(MyResource)", + "Variable(MaxResource)", + "" ] } ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Shots remaining before the next reload is required.", - "fullName": "Shots before next reload", - "functionType": "Expression", - "group": "Reload", - "name": "ShotsBeforeNextReload", - "sentence": "", - "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "ResourceBar::ResourceBar_ShapePainter::DrawHealthBar" }, "parameters": [ - "Object.Behavior::PropertyShotsBeforeNextReload()" + "Health_Bar", + "DrawResourceBar222", + "Fly", + "Health", + "" ] } ] } ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Shots per reload.", - "fullName": "Shots per reload", - "functionType": "Expression", - "group": "Reload", - "name": "ShotsPerReload", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyShotsPerReload()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, + "parameters": [] + } + ], + "parameters": [] + } + ], + "layers": [ + { + "ambientLightColorB": 32, + "ambientLightColorG": 0, + "ambientLightColorR": 0, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "", + "visibility": true, + "cameras": [ { - "description": "Seconds remaining before the cooldown will permit a bullet to be fired.", - "fullName": "Time remaining before a bullet may be fired", - "functionType": "Expression", - "group": "Firing", - "name": "CooldownTimeLeft", + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "behaviorsSharedData": [ + { + "name": "DrawResourceBar", + "type": "DrawResourceBarOLD::DrawResourceBarOLD" + }, + { + "name": "DrawResourceBar222", + "type": "ResourceBar::ResourceBar_ShapePainter" + }, + { + "name": "Health", + "type": "Health::Health" + }, + { + "name": "ShakeObject_PositionAngleScale", + "type": "ShakeObject::ShakeObject_PositionAngleScale" + }, + { + "name": "Shield", + "type": "Health::Shield" + }, + { + "name": "Sticker", + "type": "Sticker::Sticker" + }, + { + "name": "TiledResourceBar", + "type": "ResourceBar::ResourceBar_TiledSprite" + }, + { + "name": "UnitResourceBar", + "type": "ResourceBar::ResourceBar_Sprite" + } + ] + } + ], + "externalEvents": [], + "eventsFunctionsExtensions": [ + { + "author": "@4ian", + "category": "Game mechanic", + "extensionNamespace": "", + "fullName": "Fire bullets", + "helpPath": "https://gdevelop.io/game-example/fire-bullet", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", + "name": "FireBullet", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", + "shortDescription": "Fire bullets, manage ammo, reloading, and overheating.", + "version": "0.3.0", + "description": "Fire bullets, manage ammo, reloading, and overheating.\n\nFiring bullets:\n- Cooldown: Time between shots (seconds)\n- Bullet Quantity: Number of bullets created each time Fire Bullet action is used. \n- Angle Variance: Each bullet trajectory will be adjusted by a random value within this range (degrees)\n- Firing Arc: Range of angles (in degrees) that bullets will shoot. Bullets are evenly spread within this range.\n- Rotate bullet: Change the angle of each bullet to match the direction it is travelling (enabled by default)\n\n Ammo:\n- Starting ammo\n- Max ammo\n- Shots per reload. Use 0 to disable reloading\n- Reload duration\n- Automatic reloading is enabled by default, but it can also be done manually.\n\nOverheat:\n- Heat increase per shot. Object is Overheated when Heat reaches 1.\n- Cooling rate per second\n- When overheated, the object cannot fire any bullets\n\nStatistics:\n- Total bullets created\n- Total shots taken\n- Total reloads completed\n\nBullets:\n- Each bullet is assigned several variables that can be used for advanced object picking\n- __FireBullet.BulletID = Unique number for every bullet created\n- __FireBullet.BatchID = Unique number for all bullets created in the same frame\n- __FireBullet.BatchOrderID = Unique number for each bullet in the same batch. Can be used to identify the position in the firing arc.", + "origin": { + "identifier": "FireBullet", + "name": "gdevelop-extension-store" + }, + "tags": [ + "fire", + "bullet", + "spawn", + "firerate", + "reload", + "weapon", + "ranged", + "ammo", + "overheat" + ], + "authorIds": [ + "wWP8BSlAW0UP4NeaHa2LcmmDzmH2", + "xpwUwByyImTDcHEqDUqfyg0oRBt1", + "2OwwM8ToR9dx9RJ2sAKTcrLmCB92", + "gqDaZjCfevOOxBYkK6zlhtZnXCg1" + ], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "Fire bullets, manage ammo, reloading, and overheating.", + "fullName": "Fire bullets", + "name": "FireBullet", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", "sentence": "", "events": [ { @@ -10065,71 +8821,38 @@ "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "ResetObjectTimer" }, "parameters": [ - "max(0,Object.Behavior::Cooldown() - Object.ObjectTimerElapsedTime(\"__FireBullet.FiringCooldown\"))" + "Object", + "\"__FireBullet.FiringCooldown\"" ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Seconds remaining before the overheat penalty ends.", - "fullName": "Time remaining before overheat penalty ends", - "functionType": "Expression", - "group": "Overheat", - "name": "OverheatTimeLeft", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + }, { "type": { - "value": "CompareObjectTimer" + "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" }, "parameters": [ "Object", - "\"__FireBullet.OverheatDuration\"", - ">", - "0" + "Behavior", + "=", + "Object.Behavior::PropertyStartingAmmo()" ] - } - ], - "actions": [ + }, { "type": { - "value": "SetReturnNumber" + "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" }, "parameters": [ - "max(0, Object.Behavior::PropertyOverheatDuration() - Object.ObjectTimerElapsedTime(\"__FireBullet.OverheatDuration\"))" + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyShotsPerReload()" ] } ] } ], - "expressionType": { - "type": "expression" - }, "parameters": [ { "description": "Object", @@ -10146,168 +8869,83 @@ "objectGroups": [] }, { - "description": "Check if object is currently performing an ammo reload.", - "fullName": "Is ammo reloading in progress", - "functionType": "Condition", - "group": "Reload", - "name": "IsReloadInProgress", - "sentence": "_PARAM0_ is reloading ammo", + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "colorB": 224, + "colorG": 16, + "colorR": 189, + "creationTime": 0, + "name": "Take a shot (if triggered)", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "SetReturnBoolean" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyReloadInProgress" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if object is ready to shoot.", - "fullName": "Is ready to shoot", - "functionType": "Condition", - "group": "Firing", - "name": "IsReadyToShoot", - "sentence": "_PARAM0_ is ready to shoot", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Check if ready to shoot", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Verify that the gun has ammo", - "comment2": "" - }, + "comment": "Creators can use the \"FireBullet\" action multiple times in a frame and it will be counted as a single \"shot\".", + "comment2": "" + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "inverted": true, - "value": "FireBullet::FireBullet::IsOutOfAmmo" + "value": "FireBullet::FireBullet::PropertyHasJustFired" }, "parameters": [ "Object", - "Behavior", - "" + "Behavior" ] } ], "actions": [], "events": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Verify that the gun does not need to be reloaded and is not currently reloading", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "FireBullet::FireBullet::IsReloadNeeded" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Reset firing cooldown", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "inverted": true, - "value": "FireBullet::FireBullet::IsReloadInProgress" - }, - "parameters": [ - "Object", - "Behavior", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__FireBullet.FiringCooldown\"" + ] + } ] } ], - "actions": [], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Update ammo", + "source": "", + "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Comment", @@ -10319,7 +8957,7 @@ "textG": 0, "textR": 0 }, - "comment": "Verify gun is not shooting sooner than the proper rate of fire", + "comment": "Subtract 1 from ammo (if not unlimited ammo)", "comment2": "" }, { @@ -10328,126 +8966,532 @@ { "type": { "inverted": true, - "value": "FireBullet::FireBullet::IsFiringCooldownActive" + "value": "FireBullet::FireBullet::PropertyUnlimitedAmmo" }, "parameters": [ "Object", - "Behavior", - "" + "Behavior" ] } ], - "actions": [], - "events": [ + "actions": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" }, - "comment": "Verify the gun is not overheated", - "comment2": "" - }, + "parameters": [ + "Object", + "Behavior", + "-", + "1" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Update reloading counter", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "FireBullet::FireBullet::IsOverheated" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } + "type": { + "value": "FireBullet::FireBullet::PropertyShotsPerReload" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + }, + "parameters": [ + "Object", + "Behavior", + "-", + "1" ] } ] } - ] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if automatic reloading is enabled.", - "fullName": "Is automatic reloading enabled", - "functionType": "Condition", - "group": "Reload", - "name": "IsAutomaticReloadingEnabled", - "sentence": "Automatic reloading is enabled on_PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Automatically reload gun when needed", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyAutomaticReloading" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "FireBullet::FireBullet::IsReloadNeeded" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsReloadInProgress" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::ReloadAmmo" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Update Overheat", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Increase heat (if needed)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyHeatIncreasePerShot" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyHeatLevel" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "Object.Behavior::PropertyHeatIncreasePerShot()" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Check if this caused overheat", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyOverheatDuration" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + }, + { + "type": { + "value": "FireBullet::FireBullet::IsOverheated" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__FireBullet.OverheatDuration\"" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Update statistics", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyTotalShotsFired" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Reset firing detection", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyHasJustFired" + }, + "parameters": [ + "Object", + "Behavior", + "=" + ] + } + ] + } + ], + "parameters": [] + } ] } - ] + ], + "parameters": [] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyAutomaticReloading" - }, - "parameters": [ - "Object", - "Behavior" + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Reload gun when needed", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Detect when reload is completed", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::IsReloadInProgress" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__FireBullet.ReloadingTimer\"", + ">=", + "Object.Behavior::PropertyReloadDuration()" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyTotalReloadsCompleted" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + }, + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyReloadInProgress" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::IsUnlimitedAmmo" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyShotsPerReload()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Only reload the amount of ammo available", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsUnlimitedAmmo" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::PropertyShotsPerReload(), Object.Behavior::PropertyAmmoQuantity())" + ] + } + ] + } ] } ], - "actions": [ + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Reduce heat level (based on cooling rate)", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::HeatLevel()", + ">", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyExponentialCoolingRate" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyHeatLevel" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0, Object.Behavior::PropertyHeatLevel() - TimeDelta() * Object.Behavior::PropertyExponentialCoolingRate() * Object.Behavior::PropertyHeatLevel())" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyLinearCoolingRate" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyHeatLevel" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0, Object.Behavior::PropertyHeatLevel() - TimeDelta() * Object.Behavior::PropertyLinearCoolingRate())" + ] + } + ] + } ] } - ] + ], + "parameters": [] } ], "parameters": [ @@ -10466,50 +9510,44 @@ "objectGroups": [] }, { - "description": "Check if ammo is unlimited.", - "fullName": "Is ammo unlimited", - "functionType": "Condition", - "group": "Ammo", - "name": "IsUnlimitedAmmo", - "sentence": "_PARAM0_ has unlimited ammo", + "description": "Fire bullets toward a position.", + "fullName": "Fire bullets toward a position", + "functionType": "Action", + "name": "FireTowardPosition", + "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Calculate the trajectory angle and use the \"Fire bullets\" action", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "FireBullet::FireBullet::PropertyUnlimitedAmmo" - }, - "parameters": [ - "Object", - "Behavior" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::Fire" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsNumber(\"XPosition\")", + "GetArgumentAsNumber(\"YPosition\")", + "Bullet", + "Object.AngleToPosition(GetArgumentAsNumber(\"TargetXPosition\"),GetArgumentAsNumber(\"TargetYPosition\"))", + "GetArgumentAsNumber(\"Speed\")", + "" + ] + } ] } ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] + "parameters": [] } ], "parameters": [ @@ -10523,238 +9561,249 @@ "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if object has no ammo available.", - "fullName": "Is out of ammo", - "functionType": "Condition", - "group": "Ammo", - "name": "IsOutOfAmmo", - "sentence": "_PARAM0_ is out of ammo", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "FireBullet::FireBullet::IsUnlimitedAmmo" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "FireBullet::FireBullet::PropertyAmmoQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" + "description": "X position, where to create the bullet", + "name": "XPosition", + "type": "expression" }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if object needs to reload ammo.", - "fullName": "Is a reload needed", - "functionType": "Condition", - "group": "Reload", - "name": "IsReloadNeeded", - "sentence": "_PARAM0_ needs to reload ammo", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] + "description": "Y position, where to create the bullet", + "name": "YPosition", + "type": "expression" }, { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Shots per reload must not be \"0\"", - "comment2": "" + "description": "The bullet object", + "name": "Bullet", + "type": "objectList" }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyShotsPerReload" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - }, - { - "type": { - "value": "FireBullet::FireBullet::PropertyShotsBeforeNextReload" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ + "description": "Target X position", + "name": "TargetXPosition", + "type": "expression" + }, { - "description": "Object", - "name": "Object", - "type": "object" + "description": "Target Y position", + "name": "TargetYPosition", + "type": "expression" }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" + "description": "Speed of the bullet, in pixels per second", + "name": "Speed", + "type": "expression" } ], "objectGroups": [] }, { - "description": "Check if object is overheated.", - "fullName": "Is overheated", - "functionType": "Condition", - "group": "Overheat", - "name": "IsOverheated", - "sentence": "_PARAM0_ is overheated", + "description": "Fire bullets in the direction of a given angle.", + "fullName": "Fire bullets toward an angle", + "functionType": "Action", + "name": "Fire", + "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Check if ready to shoot", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "FireBullet::FireBullet::PropertyHeatLevel" + "value": "FireBullet::FireBullet::IsReadyToShoot" }, "parameters": [ "Object", "Behavior", - ">=", - "1" + "" ] - }, + } + ], + "actions": [ { "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" + "value": "FireBullet::FireBullet::SetPropertyHasJustFired" }, "parameters": [ - "Object.Behavior::OverheatTimeLeft()", - ">", - "0" + "Object", + "Behavior", + "yes" ] } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Single bullet", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::PropertyBulletQuantity()", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::FireSingleBullet" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsNumber(\"XPosition\")", + "GetArgumentAsNumber(\"YPosition\")", + "Bullet", + "GetArgumentAsNumber(\"Angle\")", + "GetArgumentAsNumber(\"Speed\")", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Multiple bullets", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::PropertyBulletQuantity()", + ">", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__FireBullet.CurrentBulletAngle", + "=", + "GetArgumentAsNumber(\"Angle\") - Object.Behavior::PropertyFiringArc()/2" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__FireBullet.BatchOrderID", + "=", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "Object.Behavior::PropertyBulletQuantity()", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::FireSingleBullet" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsNumber(\"XPosition\")", + "GetArgumentAsNumber(\"YPosition\")", + "Bullet", + "Object.Variable(__FireBullet.CurrentBulletAngle) + RandomInRange(-Object.Behavior::PropertyAngleVariance(),Object.Behavior::PropertyAngleVariance())", + "GetArgumentAsNumber(\"Speed\")", + "" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move temp variable to the next angle a bullet will be sent", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__FireBullet.CurrentBulletAngle", + "+", + "Object.Behavior::PropertyFiringArc() / (Object.Behavior::PropertyBulletQuantity() - 1)" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__FireBullet.BatchOrderID", + "+", + "1" + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [] + } ] } ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] + "parameters": [] } ], "parameters": [ @@ -10768,53 +9817,321 @@ "name": "Behavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" + }, + { + "description": "X position, where to create the bullet", + "name": "XPosition", + "type": "expression" + }, + { + "description": "Y position, where to create the bullet", + "name": "YPosition", + "type": "expression" + }, + { + "description": "The bullet object", + "name": "Bullet", + "type": "objectList" + }, + { + "description": "Angle of the bullet, in degrees", + "name": "Angle", + "type": "expression" + }, + { + "description": "Speed of the bullet, in pixels per second", + "name": "Speed", + "type": "expression" } ], "objectGroups": [] }, { - "description": "Check if firing cooldown is active.", - "fullName": "Is firing cooldown active", - "functionType": "Condition", + "description": "Fire a single bullet. This is only meant to be used inside the \"Fire bullet\" action.", + "fullName": "Fire a single bullet", + "functionType": "Action", "group": "Firing", - "name": "IsFiringCooldownActive", - "sentence": "Firing cooldown is active on _PARAM0_", + "name": "FireSingleBullet", + "private": true, + "sentence": "Fire a single bullet _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, with angle _PARAM5_ and speed _PARAM6_ px/s", "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Fire a single bullet", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "SetReturnBoolean" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "False" + "comment": "Create bullet", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Bullet", + "GetArgumentAsNumber(\"XPosition\")", + "GetArgumentAsNumber(\"YPosition\")", + "\"\"" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move bullet", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "AddForceAL" + }, + "parameters": [ + "Bullet", + "GetArgumentAsNumber(\"Angle\") + RandomInRange(-Object.Behavior::PropertyAngleVariance(), Object.Behavior::PropertyAngleVariance())", + "GetArgumentAsNumber(\"Speed\")", + "1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Add identifier variables (to enable advanced picking by users)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Bullet", + "__FireBullet.BulletID", + "=", + "Object.Behavior::PropertyTotalBulletsCreated()" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Bullet", + "__FireBullet.BatchID", + "=", + "Object.Behavior::PropertyTotalShotsFired()" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Bullet", + "__FireBullet.BatchOrderID", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Rotate newly created bullet, if needed", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyRotateBullet" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Bullet", + "=", + "GetArgumentAsNumber(\"Angle\")" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Update statistics", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyTotalBulletsCreated" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + } ] } - ] + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "X position, where to create the bullet", + "name": "XPosition", + "type": "expression" + }, + { + "description": "Y position, where to create the bullet", + "name": "YPosition", + "type": "expression" + }, + { + "description": "The bullet object", + "name": "Bullet", + "type": "objectList" + }, + { + "description": "Angle of the bullet, in degrees", + "name": "Angle", + "type": "expression" }, + { + "description": "Speed of the bullet, in pixels per second", + "name": "Speed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Reload ammo.", + "fullName": "Reload ammo", + "functionType": "Action", + "name": "ReloadAmmo", + "sentence": "Reload ammo on _PARAM0_", + "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" + "inverted": true, + "value": "FireBullet::FireBullet::IsOutOfAmmo" }, "parameters": [ - "Object.Behavior::CooldownTimeLeft()", - ">", - "0" + "Object", + "Behavior", + "" ] } ], "actions": [ { "type": { - "value": "SetReturnBoolean" + "value": "FireBullet::FireBullet::SetPropertyReloadInProgress" }, "parameters": [ - "True" + "Object", + "Behavior", + "yes" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__FireBullet.ReloadingTimer\"" ] } ] @@ -10834,364 +10151,486 @@ } ], "objectGroups": [] - } - ], - "propertyDescriptors": [ + }, { - "value": "0.1", - "type": "Number", - "label": "Firing cooldown (seconds)", - "description": "Object cannot shoot while firing cooldown is active", - "group": "Shooting configuration", - "extraInformation": [], - "hidden": false, - "name": "FireCooldown" - }, - { - "value": "", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "HasJustFired" + "description": "Check if the object has just fired something.", + "fullName": "Has just fired", + "functionType": "Condition", + "group": "Firing", + "name": "HasJustFired", + "sentence": "_PARAM0_ has just fired", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyHasJustFired" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] }, { - "value": "45", - "type": "Number", - "label": "Firing arc (degrees)", - "description": "Multi-Fire bullets will be evenly spaced inside the Firing Arc", - "group": "Multi-Fire", - "extraInformation": [], - "hidden": false, - "name": "FiringArc" + "description": "Check if bullet rotates to match trajectory.", + "fullName": "Is bullet rotation enabled", + "functionType": "Condition", + "group": "Firing", + "name": "BulletRotationEnabled", + "sentence": "Bullet rotation enabled on _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyRotateBullet" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] }, { - "value": "1", - "type": "Number", - "label": "Number of bullets created at once (Multi-Fire)", - "description": "Multi-Fire bullets will be evenly spaced inside the Firing Arc", + "description": "Change the firing arc (in degrees) where bullets will be shot. Bullets will be evenly spaced out inside the firing arc.", + "fullName": "Set firing arc", + "functionType": "Action", "group": "Multi-Fire", - "extraInformation": [], - "hidden": false, - "name": "BulletQuantity" - }, - { - "value": "0", - "type": "Number", - "label": "Angle variance (degrees)", - "description": "Used to simulate imperfect aim (Range: 0 to 180 degrees)", - "group": "Shooting configuration", - "extraInformation": [], - "hidden": false, - "name": "AngleVariance" - }, - { - "value": "true", - "type": "Boolean", - "label": "Rotate bullet to match trajectory", - "description": "", - "group": "Shooting configuration", - "extraInformation": [], - "hidden": false, - "name": "RotateBullet" + "name": "SetFiringArc", + "sentence": "Set firing arc of _PARAM0_ to _PARAM2_ degrees", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyFiringArc" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Firing arc (degrees) Range: 0 to 360", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] }, { - "value": "0", - "type": "Number", - "label": "Ammo quantity (current)", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "AmmoQuantity" + "description": "Change the angle variance (in degrees) applied to each bullet.", + "fullName": "Set angle variance", + "functionType": "Action", + "group": "Firing", + "name": "SetAngleVariance", + "sentence": "Set angle variance of _PARAM0_ to _PARAM2_ degrees", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyAngleVariance" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "description": "Angle variance (degrees) Range: 0 to 180", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] }, { - "value": "0", - "type": "Number", - "label": "Shots per reload ", - "description": "Use 0 to disable reloading", - "group": "Reload", - "extraInformation": [], - "hidden": false, - "name": "ShotsPerReload" - }, - { - "value": "1", - "type": "Number", - "label": "Reloading duration (seconds)", - "description": "Object cannot shoot while reloading is in progress", - "group": "Reload", - "extraInformation": [], - "hidden": false, - "name": "ReloadDuration" - }, - { - "value": "0", - "type": "Number", - "label": "Max ammo ", - "description": "Use \"0\" to disable restrictions on ammo capacity", - "group": "Ammo", - "extraInformation": [], - "hidden": false, - "name": "MaxAmmo" - }, - { - "value": "0", - "type": "Number", - "label": "Shots before next reload", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "ShotsBeforeNextReload" - }, - { - "value": "0", - "type": "Number", - "label": "Total shots fired", - "description": "Regardless of how many bullets are created, only 1 shot will be counted per frame", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "TotalShotsFired" - }, - { - "value": "0", - "type": "Number", - "label": "Total bullets created", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "TotalBulletsCreated" - }, - { - "value": "0", - "type": "Number", - "label": "Starting ammo", - "description": "", - "group": "Ammo", - "extraInformation": [], - "hidden": false, - "name": "StartingAmmo" - }, - { - "value": "0", - "type": "Number", - "label": "Total reloads completed", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "TotalReloadsCompleted" - }, - { - "value": "true", - "type": "Boolean", - "label": "Unlimited ammo", - "description": "", - "group": "Ammo", - "extraInformation": [], - "hidden": false, - "name": "UnlimitedAmmo" - }, - { - "value": "", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "ReloadInProgress" - }, - { - "value": "0", - "type": "Number", - "label": "Heat increase per shot (Range: 0 to 1)", - "description": " Object is overheated when Heat reaches 1", - "group": "Overheat", - "extraInformation": [], - "hidden": false, - "name": "HeatIncreasePerShot" - }, - { - "value": "0", - "type": "Number", - "label": "Heat level (Range: 0 to 1)", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "HeatLevel" - }, - { - "value": "true", - "type": "Boolean", - "label": "Reload automatically", - "description": "", - "group": "Reload", - "extraInformation": [], - "hidden": false, - "name": "AutomaticReloading" - }, - { - "value": "0", - "type": "Number", - "label": "Overheat duration (seconds) ", - "description": "Object cannot shoot while overheat duration is active", - "group": "Overheat", - "extraInformation": [], - "hidden": false, - "name": "OverheatDuration" - }, - { - "value": "0.1", - "type": "Number", - "label": "Linear cooling rate (per second)", - "description": "", - "group": "Overheat", - "extraInformation": [], - "hidden": false, - "name": "LinearCoolingRate" - }, - { - "value": "0.3", - "type": "Number", - "label": "Exponential cooling rate (per second)", - "description": "Exponential cooling happens faster when heat is high and slower when heat is low", - "group": "Overheat", - "extraInformation": [ - "Linear", - "Exponential" - ], - "hidden": false, - "name": "ExponentialCoolingRate" - } - ], - "sharedPropertyDescriptors": [] - } - ], - "eventsBasedObjects": [] - }, - { - "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", - "category": "Input", - "extensionNamespace": "", - "fullName": "Resource bar", - "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", - "name": "ResourceBar", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/UI Essentials/UI Essentials_sliders_options.svg", - "shortDescription": "Display a bar that represents a resource in the game (health, shield, mana, ammo, etc)", - "version": "0.0.1", - "description": "The resource bar can be displayed using these objects:\n\n- Shape painter\n- Tiled sprite\n- Sprite\n", - "origin": { - "identifier": "DraggableSliderControl", - "name": "gdevelop-extension-store" - }, - "tags": [ - "resource", - "bar", - "shape painter", - "health", - "mana", - "shield", - "hearts", - "lives", - "ammo" - ], - "authorIds": [ - "IWykYNRvhCZBN3vEgKEbBPOR3Oc2", - "gqDaZjCfevOOxBYkK6zlhtZnXCg1" - ], - "dependencies": [], - "eventsFunctions": [], - "eventsBasedBehaviors": [ - { - "description": "Draws a solid bar that represents a resource in the game (health, shield, mana, ammo, etc)", - "fullName": "Resource bar (shape painter)", - "name": "ResourceBar_ShapePainter", - "objectType": "PrimitiveDrawing::Drawer", - "eventsFunctions": [ - { - "fullName": "", + "description": "Change the number of bullets shot every time the \"fire bullet\" action is used.", + "fullName": "Set number of bullets per shot", "functionType": "Action", - "name": "onCreated", - "sentence": "", + "group": "Multi-Fire", + "name": "SetBulletQuantity", + "sentence": "Set number of bullets per shot of _PARAM0_ to _PARAM2_", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make sure object doesn't get redrawn every frame", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "PrimitiveDrawing::ClearBetweenFrames" + "value": "FireBullet::FireBullet::SetPropertyBulletQuantity" }, "parameters": [ "Object", - "no" + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" ] } ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" }, { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Use correct min value (instead of always starting at 0)", - "comment2": "" + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "description": "Bullets", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Enable bullet rotation.", + "fullName": "Enable (or disable) bullet rotation", + "functionType": "Action", + "group": "Firing", + "name": "SetRotateBullet", + "sentence": "Enable bullet rotation on _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValue" + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"RotateBullet\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyRotateBullet" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"RotateBullet\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyRotateBullet" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "defaultValue": "yes", + "description": "Rotate bullet to match trajetory", + "name": "RotateBullet", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Enable unlimited ammo.", + "fullName": "Enable (or disable) unlimited ammo", + "functionType": "Action", + "group": "Ammo", + "name": "SetUnlimitedAmmo", + "sentence": "Enable unlimited ammo on _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"UnlimitedAmmo\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyUnlimitedAmmo" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"UnlimitedAmmo\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyUnlimitedAmmo" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + }, + { + "defaultValue": "yes", + "description": "Unlimited ammo", + "name": "UnlimitedAmmo", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Change the firing cooldown, which changes the rate of fire.", + "fullName": "Set firing cooldown", + "functionType": "Action", + "group": "Firing", + "name": "SetCooldown", + "sentence": "Set the fire rate of _PARAM0_ to _PARAM2_ seconds", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyFireCooldown" }, "parameters": [ "Object", "Behavior", "=", - "Object.Behavior::PropertyValueMin()" + "GetArgumentAsNumber(\"NewCooldown\")" ] } ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" }, + { + "description": "Cooldown in seconds", + "name": "NewCooldown", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the duration to reload ammo.", + "fullName": "Set reload duration", + "functionType": "Action", + "group": "Reload", + "name": "SetReloadDuration", + "sentence": "Set the reload duration of _PARAM0_ to _PARAM2_ seconds", + "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::UpdateHitbox" + "value": "FireBullet::FireBullet::SetPropertyReloadDuration" }, "parameters": [ "Object", "Behavior", - "" + "=", + "GetArgumentAsNumber(\"Value\")" ] } ] @@ -11201,322 +10640,89 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" + }, + { + "description": "Reload duration (seconds)", + "name": "Value", + "type": "expression" } ], "objectGroups": [] }, { - "fullName": "", + "description": "Change the duration after becoming overheated.", + "fullName": "Set overheat duration", "functionType": "Action", - "name": "doStepPostEvents", - "sentence": "", + "group": "Overheat", + "name": "SetOverheatDuration", + "sentence": "Set the overheat duration of _PARAM0_ to _PARAM2_ seconds", "events": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Draw resource bar (if needed)", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::PropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior" - ] - }, - { - "type": { - "value": "Visible" - }, - "parameters": [ - "Object" - ] - }, - { - "type": { - "value": "LayerVisible" - }, - "parameters": [ - "", - "Object.Layer()" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::Drawer::ClearShapes" - }, - "parameters": [ - "Object" - ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Inactive Bar", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set inactive Bar parameters", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyInactiveBarColor()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyInactiveBarOpacity()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::OutlineOpacity" - }, - "parameters": [ - "Object", - "=", - "0" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw inactive Bar", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyValueOffset()", - "0", - "Object.Behavior::PropertyBarLength()", - "Object.Behavior::PropertyBarThickness()" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Active Bar", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set active Bar parameters", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyActiveBarColor()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyActiveBarOpacity()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw active Bar", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "0", - "0", - "Object.Behavior::PropertyValueOffset()", - "Object.Behavior::PropertyBarThickness()" - ] - } - ] - } - ], - "parameters": [] - } + "type": { + "value": "FireBullet::FireBullet::SetPropertyOverheatDuration" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" ] } - ], - "parameters": [] + ] } ], "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" + }, + { + "description": "Overheat duration (seconds)", + "name": "Value", + "type": "expression" } ], "objectGroups": [] }, { - "description": "Draw a resource bar that shows current and max values.", - "fullName": "Draw a resource bar (shape painter)", + "description": "Change the quantity of ammo.", + "fullName": "Set ammo quantity", "functionType": "Action", - "name": "DrawResourceBar", - "sentence": "Draw a resource bar using _PARAM0_ with current value _PARAM2_ and max value _PARAM3_", + "group": "Ammo", + "name": "SetAmmoQuantity", + "sentence": "Set the ammo quantity of _PARAM0_ to _PARAM2_", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set values", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Tween::Ease(Object.Behavior::PropertyEasing(), Object.Behavior::Value(), GetArgumentAsNumber(\"CurrentValue\"), Object.Behavior::PropertyEasingSpeed())", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetValueMax" + "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" }, "parameters": [ "Object", "Behavior", - "GetArgumentAsNumber(\"MaxValue\")", - "" + "=", + "GetArgumentAsNumber(\"Value\")" ] } ] @@ -11526,73 +10732,43 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { - "description": "Current value", - "name": "CurrentValue", - "type": "expression" - }, - { - "description": "Max value", - "name": "MaxValue", - "supplementaryInformation": "Health::Health", + "description": "Ammo", + "name": "Value", "type": "expression" } ], "objectGroups": [] }, { - "description": "Draw a resource bar based on the health points of an object.", - "fullName": "Draw a health bar", + "description": "Change the heat increase per shot.", + "fullName": "Set heat increase per shot", "functionType": "Action", - "name": "DrawHealthBar", - "sentence": "Draw a resource bar using _PARAM0_ based on the health points of _PARAM2_", + "group": "Overheat", + "name": "SetHeatPerShot", + "sentence": "Set the heat increase of _PARAM0_ to _PARAM2_ per shot", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set values", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Tween::Ease(Object.Behavior::PropertyEasing(), Object.Behavior::Value(), ObjectWithHealth.HealthBehavior::Health(), Object.Behavior::PropertyEasingSpeed())", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetValueMax" + "value": "FireBullet::FireBullet::SetPropertyHeatIncreasePerShot" }, "parameters": [ "Object", "Behavior", - "ObjectWithHealth.HealthBehavior::MaxHealth()", - "" + "=", + "GetArgumentAsNumber(\"Value\")" ] } ] @@ -11602,73 +10778,72 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { - "description": "Object with health", - "name": "ObjectWithHealth", - "type": "objectList" - }, - { - "description": "Health behavior", - "name": "HealthBehavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" + "description": "Heat increase per shot (Range: 0 to 1)", + "name": "Value", + "type": "expression" } ], "objectGroups": [] }, { - "description": "Draw a resource bar based on the shield points of an object.", - "fullName": "Draw a shield bar", + "description": "Change the max ammo.", + "fullName": "Set max ammo", "functionType": "Action", - "name": "DrawShieldBar", - "sentence": "Draw a resource bar using _PARAM0_ based on the shield points of _PARAM2_", + "group": "Ammo", + "name": "SetMaxAmmo", + "sentence": "Set the max ammo of _PARAM0_ to _PARAM2_", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set values", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" + "value": "FireBullet::FireBullet::SetPropertyMaxAmmo" }, "parameters": [ "Object", "Behavior", - "Tween::Ease(Object.Behavior::PropertyEasing(), Object.Behavior::Value(), ObjectWithShield.ShieldBehavior::ShieldPoints(), Object.Behavior::PropertyEasingSpeed())", - "" + "=", + "GetArgumentAsNumber(\"Value\")" ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetValueMax" + "value": "FireBullet::FireBullet::PropertyMaxAmmo" }, "parameters": [ "Object", "Behavior", - "ObjectWithShield.ShieldBehavior::MaxShield()", - "" + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::MaxAmmo(),Object.Behavior::AmmoQuantity())" ] } ] @@ -11678,73 +10853,43 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { - "description": "Object with shield", - "name": "ObjectWithShield", - "type": "objectList" - }, - { - "description": "Shield behavior", - "name": "ShieldBehavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" + "description": "Max ammo", + "name": "Value", + "type": "expression" } ], "objectGroups": [] }, { - "description": "Draw a resource bar based on the ammo of an object.", - "fullName": "Draw an ammo bar", + "description": "Reset total shots fired.", + "fullName": "Reset total shots fired", "functionType": "Action", - "name": "DrawAmmoBar", - "sentence": "Draw a resource bar using _PARAM0_ based on the ammo of _PARAM2_", + "group": "Stats", + "name": "ResetTotalShotsFired", + "sentence": "Reset total shots fired by _PARAM0_", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set values", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Tween::Ease(Object.Behavior::PropertyEasing(), Object.Behavior::Value(), ObjectWithFireBullet.FireBulletBehavior::AmmoQuantity(), Object.Behavior::PropertyEasingSpeed())", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetValueMax" + "value": "FireBullet::FireBullet::SetPropertyTotalShotsFired" }, "parameters": [ "Object", "Behavior", - "ObjectWithFireBullet.FireBulletBehavior::MaxAmmo()", - "" + "=", + "0" ] } ] @@ -11754,23 +10899,11 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - }, - { - "description": "Object with fire bullet", - "name": "ObjectWithFireBullet", - "type": "objectList" - }, - { - "description": "Fire bullet behavior", - "name": "FireBulletBehavior", "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } @@ -11778,12 +10911,12 @@ "objectGroups": [] }, { - "description": "Value of the resource.", - "fullName": "Resource value", - "functionType": "Expression", - "group": "Resource value", - "name": "Value", - "sentence": "", + "description": "Reset total bullets created.", + "fullName": "Reset total bullets created", + "functionType": "Action", + "group": "Stats", + "name": "ResetTotalBulletsCreated", + "sentence": "Reset total bullets created by _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -11791,96 +10924,95 @@ "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "FireBullet::FireBullet::SetPropertyTotalBulletsCreated" }, "parameters": [ - "Object.Behavior::PropertyValue()" + "Object", + "Behavior", + "=", + "0" ] } ] } ], - "expressionType": { - "type": "expression" - }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { - "description": "Change the value of the resource.", - "fullName": "Resource value", + "description": "Reset total reloads completed.", + "fullName": "Reset total reloads completed", "functionType": "Action", - "group": "Resource value", - "name": "SetValue", - "sentence": "Change the value of _PARAM0_: _PARAM2_", + "group": "Stats", + "name": "ResetTotalReloadsCompleted", + "sentence": "Reset total reloads completed by _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::PropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - "<=", - "0" - ] - } - ], + "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValue" + "value": "FireBullet::FireBullet::SetPropertyTotalReloadsCompleted" }, "parameters": [ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")" + "0" ] } ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the number of shots per reload.", + "fullName": "Set shots per reload", + "functionType": "Action", + "group": "Reload", + "name": "SetShotsPerReload", + "sentence": "Set the shots per reload of _PARAM0_ to _PARAM2_", + "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::PropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], + "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValue" + "value": "FireBullet::FireBullet::SetPropertyShotsPerReload" }, "parameters": [ "Object", "Behavior", "=", - "round(GetArgumentAsNumber(\"Value\") / Object.Behavior::PropertyTickSpacing()) * Object.Behavior::PropertyTickSpacing()" + "GetArgumentAsNumber(\"Value\")" ] } ] @@ -11890,90 +11022,91 @@ "conditions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::PropertyValue" + "value": "FireBullet::FireBullet::PropertyShotsBeforeNextReload" }, "parameters": [ "Object", "Behavior", - "<", - "Object.Behavior::PropertyValueMin()" + ">", + "Object.Behavior::PropertyShotsPerReload()" ] } ], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValue" + "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" }, "parameters": [ "Object", "Behavior", "=", - "Object.Behavior::PropertyValueMin()" + "Object.Behavior::PropertyShotsPerReload()" ] } ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" }, + { + "description": "Shots per reload", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Enable (or disable) automatic reloading.", + "fullName": "Enable (or disable) automatic reloading", + "functionType": "Action", + "group": "Reload", + "name": "SetAutomaticReload", + "sentence": "Enable automatic reloading on _PARAM0_: _PARAM2_", + "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::PropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "Object.Behavior::PropertyValueMax()" - ] - } - ], + "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValue" + "value": "FireBullet::FireBullet::SetPropertyAutomaticReloading" }, "parameters": [ "Object", "Behavior", - "=", - "Object.Behavior::PropertyValueMax()" + "=" ] } ] }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set the proper offset", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "conditions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValueOffset" + "value": "GetArgumentAsBoolean" }, "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyBarLength() * (Object.Behavior::PropertyValue() - Object.Behavior::PropertyValueMin()) / (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin())" + "\"Value\"" ] - }, + } + ], + "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" + "value": "FireBullet::FireBullet::SetPropertyAutomaticReloading" }, "parameters": [ "Object", @@ -11988,30 +11121,31 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { - "description": "Slider value", + "defaultValue": "yes", + "description": "Enable automatic reloading", "name": "Value", - "type": "expression" + "optional": true, + "type": "yesorno" } ], "objectGroups": [] }, { - "description": "Minimum value of the resource.", - "fullName": "Resource minimum value", - "functionType": "Expression", - "group": "Resource value", - "name": "ValueMin", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "description": "Change the linear rate of cooling.", + "fullName": "Set linear cooling rate", + "functionType": "Action", + "group": "Overheat", + "name": "SetLinearCoolingRate", + "sentence": "Set the linear cooling rate of _PARAM0_ to _PARAM2_ per second", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -12019,41 +11153,45 @@ "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "FireBullet::FireBullet::SetPropertyLinearCoolingRate" }, "parameters": [ - "Object.Behavior::PropertyValueMin()" + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" ] } ] } ], - "expressionType": { - "type": "expression" - }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" + }, + { + "description": "Heat cooling rate (per second)", + "name": "Value", + "type": "expression" } ], "objectGroups": [] }, { - "description": "Change the minimum value of the resource.", - "fullName": "Resource minimum value", + "description": "Change the exponential rate of cooling.", + "fullName": "Set exponential cooling rate", "functionType": "Action", - "group": "Resource value", - "name": "SetValueMin", - "sentence": "Change the minimum value of _PARAM0_: _PARAM2_", + "group": "Overheat", + "name": "SetExponentialCoolingRate", + "sentence": "Set the exponential cooling rate of _PARAM0_ to _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -12061,24 +11199,13 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValueMin" + "value": "FireBullet::FireBullet::SetPropertyExponentialCoolingRate" }, "parameters": [ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"ValueMin\")" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" + "GetArgumentAsNumber(\"Value\")" ] } ] @@ -12088,30 +11215,29 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" }, { - "description": "Minimum value", - "name": "ValueMin", + "description": "Exponential cooling rate", + "name": "Value", + "supplementaryInformation": "[\"Exponential\",\"Linear\"]", "type": "expression" } ], "objectGroups": [] }, { - "description": "Maximum value of the resource.", - "fullName": "Resource maximum value", - "functionType": "Expression", - "group": "Resource value", - "name": "ValueMax", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "description": "Increase ammo quantity.", + "fullName": "Increase ammo", + "functionType": "Action", + "name": "IncreaseAmmo", + "sentence": "Increase ammo of _PARAM0_ by _PARAM2_ shots", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -12119,83 +11245,123 @@ "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" }, "parameters": [ - "Object.Behavior::PropertyValueMax()" + "Object", + "Behavior", + "+", + "GetArgumentAsNumber(\"AmmoGained\")" ] } ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ + }, { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "If Max Ammo is set, do not exceed the value", + "comment2": "" }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Thickness of the resource bar.", - "fullName": "Resource bar thickness", - "functionType": "Expression", - "group": "Resource bar configuration", - "name": "BarThickness", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyMaxAmmo" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::MaxAmmo(),Object.Behavior::AmmoQuantity())" + ] + } + ] + }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::IsReloadNeeded" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "FireBullet::FireBullet::PropertyAutomaticReloading" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "FireBullet::FireBullet::ReloadAmmo" }, "parameters": [ - "Object.Behavior::PropertyBarThickness()" + "Object", + "Behavior", + "" ] } ] } ], - "expressionType": { - "type": "expression" - }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" + }, + { + "description": "Ammo gained", + "name": "AmmoGained", + "type": "expression" } ], "objectGroups": [] }, { - "description": "Length of the resource bar.", - "fullName": "Resource bar length", + "description": "Number of bullets to shoot at once (evenly spaced inside the Firing Arc).", + "fullName": "Bullet quantity", "functionType": "Expression", - "group": "Resource bar configuration", - "name": "BarLength", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "group": "Multi-Fire", + "name": "BulletQuantity", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -12206,7 +11372,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyBarLength()" + "Object.Behavior::PropertyBulletQuantity()" ] } ] @@ -12219,25 +11385,24 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { - "description": "Change the maximum value of the resource.", - "fullName": "Resource maximum value", - "functionType": "Action", - "group": "Resource value", - "name": "SetValueMax", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "description": "Angle variance, in degrees.", + "fullName": "Angle variance", + "functionType": "Expression", + "group": "Firing", + "name": "AngleVariance", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -12245,57 +11410,40 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValueMax" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"ValueMax\")" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" + "Object.Behavior::PropertyAngleVariance()" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" - }, - { - "description": "Maximum value", - "name": "ValueMax", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Tick spacing of the resource bar.", - "fullName": "Tick spacing", + "description": "Firing arc, in degrees.", + "fullName": "Firing arc", "functionType": "Expression", - "group": "Resource bar configuration", - "name": "TickSpacing", - "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", + "group": "Multi-Fire", + "name": "FiringArc", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -12306,7 +11454,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyTickSpacing()" + "Object.Behavior::PropertyFiringArc()" ] } ] @@ -12319,30 +11467,24 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" - }, - { - "description": "Tick spacing", - "name": "TickSpacing", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Change the tick spacing of the resource bar.", - "fullName": "Tick spacing", - "functionType": "Action", - "group": "Resource bar configuration", - "name": "SetTickSpacing", - "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", + "description": "Heat level (Range: 0 to 1).", + "fullName": "Heat level", + "functionType": "Expression", + "group": "Overheat", + "name": "HeatLevel", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -12350,57 +11492,40 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"TickSpacing\")" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" + "min(1,Object.Behavior::PropertyHeatLevel())" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" - }, - { - "description": "Tick spacing", - "name": "TickSpacing", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Change length of the resource bar.", - "fullName": "Bar length", - "functionType": "Action", - "group": "Resource bar configuration", - "name": "SetBarLength", - "sentence": "Change length of _PARAM0_ to _PARAM2_ px", + "description": "Firing cooldown, in seconds.", + "fullName": "Firing cooldown", + "functionType": "Expression", + "group": "Firing", + "name": "Cooldown", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -12408,83 +11533,40 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyBarLength" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyValue()", - "" + "Object.Behavior::PropertyFireCooldown()" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" - }, - { - "description": "Bar width", - "name": "Value", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Change thickness of the resource bar.", - "fullName": "Bar thickness", - "functionType": "Action", - "group": "Resource bar configuration", - "name": "SetBarThickness", - "sentence": "Change thickness of _PARAM0_ to _PARAM2_ px", + "description": "Reload duration, in seconds.", + "fullName": "Reload duration", + "functionType": "Expression", + "group": "Ammo", + "name": "ReloadDuration", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -12492,56 +11574,40 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyBarThickness" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "yes" + "Object.Behavior::PropertyReloadDuration()" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" - }, - { - "description": "Bar thickness", - "name": "Value", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Change opacity of the inactive portion of a resource bar.", - "fullName": "Inactive opacity", - "functionType": "Action", - "group": "Resource bar configuration", - "name": "SetInactiveBarOpacity", - "sentence": "Change opacity of inactive part of _PARAM0_ to _PARAM2_", + "description": "Overheat duration, in seconds.", + "fullName": "Overheat duration", + "functionType": "Expression", + "group": "Overheat", + "name": "OverheatDuration", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -12549,56 +11615,40 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyInactiveBarOpacity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "yes" + "Object.Behavior::PropertyOverheatDuration()" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" - }, - { - "description": "Inactive bar opacity", - "name": "Value", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Change opacity of the active portion of a resource bar.", - "fullName": "Active bar opacity", - "functionType": "Action", - "group": "Resource bar configuration", - "name": "SetActiveBarOpacity", - "sentence": "Change opacity of active part of _PARAM0_ to _PARAM2_", + "description": "Heat increase per shot.", + "fullName": "Heat increase per shot", + "functionType": "Expression", + "group": "Overheat", + "name": "HeatIncreasePerShot", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -12606,56 +11656,40 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyActiveBarOpacity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "yes" + "Object.Behavior::PropertyHeatIncreasePerShot()" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" - }, - { - "description": "Active bar opacity", - "name": "Value", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Change the color of the active area of bar.", - "fullName": "Active bar color ", - "functionType": "Action", - "group": "Resource bar configuration", - "name": "SetActiveBarColor", - "sentence": "Change active bar color of _PARAM0_ to _PARAM2_", + "description": "Linear cooling rate, per second.", + "fullName": "Linear cooling rate", + "functionType": "Expression", + "group": "Overheat", + "name": "LinearCoolingRate", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -12663,56 +11697,40 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyActiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Color\")" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "yes" + "Object.Behavior::PropertyLinearCoolingRate()" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" - }, - { - "description": "Active bar color", - "name": "Color", - "type": "color" } ], "objectGroups": [] }, { - "description": "Change the color of the inactive area of bar.", - "fullName": "Inactive bar color", - "functionType": "Action", - "group": "Resource bar configuration", - "name": "SetInactiveBarColor", - "sentence": "Change inactive bar color of _PARAM0_ to _PARAM2_", + "description": "Exponential cooling rate, per second.", + "fullName": "Exponential cooling rate", + "functionType": "Expression", + "group": "Overheat", + "name": "ExponentialCoolingRate", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -12720,57 +11738,40 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyInactiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Color\")" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "yes" + "Object.Behavior::PropertyExponentialCoolingRate()" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" - }, - { - "description": "Inactive bar color", - "name": "Color", - "type": "color" } ], "objectGroups": [] }, { - "description": "Update the hitbox.", - "fullName": "Update hitbox", - "functionType": "Action", - "group": "Private", - "name": "UpdateHitbox", - "private": true, - "sentence": "Update the hitbox of _PARAM0_", + "description": "Max ammo.", + "fullName": "Max ammo", + "functionType": "Expression", + "group": "Ammo", + "name": "MaxAmmo", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -12778,202 +11779,121 @@ "actions": [ { "type": { - "value": "PrimitiveDrawing::SetRotationCenter" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyBarLength() / 2", - "Object.Behavior::PropertyBarThickness() / 2" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::SetRectangularCollisionMask" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "0", - "0", - "Object.Behavior::PropertyBarLength()", - "Object.Behavior::PropertyBarThickness()" + "Object.Behavior::PropertyMaxAmmo()" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "0", - "type": "Number", - "label": "Minimum value", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "ValueMin" - }, - { - "value": "1", - "type": "Number", - "label": "Maximum value", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "ValueMax" }, { - "value": "0", - "type": "Number", - "label": "Tick spacing", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "TickSpacing" - }, - { - "value": "200", - "type": "Number", - "label": "Bar length", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "BarLength" - }, - { - "value": "16", - "type": "Number", - "label": "Bar thickness", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "BarThickness" - }, - { - "value": "11;255;0", - "type": "Color", - "label": "Inactive Bar color", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "InactiveBarColor" - }, - { - "value": "96", - "type": "Number", - "label": "Inactive Bar opacity", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "InactiveBarOpacity" - }, - { - "value": " 11;255;0", - "type": "Color", - "label": "Active Bar color", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "ActiveBarColor" - }, - { - "value": "255", - "type": "Number", - "label": "Active Bar opacity", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "ActiveBarOpacity" - }, - { - "value": "0", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "Value" - }, - { - "value": "0", - "type": "Number", - "label": "", - "description": "Distance from the object origin to where the active and inactive bar touch", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "ValueOffset" - }, - { - "value": "true", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "NeedRedraw" + "description": "Total shots fired (multi-bullet shots are considered one shot).", + "fullName": "Shots fired", + "functionType": "Expression", + "group": "Stats", + "name": "TotalShotsFired", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTotalShotsFired()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] }, { - "value": "easeOutCirc", - "type": "Choice", - "label": "Easing", - "description": "Easing used to change the displayed value of the resource bar. (Note: Changes to the Value property are always instant)", - "group": "", - "extraInformation": [ - "easeOutCirc" + "description": "Total bullets created.", + "fullName": "Bullets created", + "functionType": "Expression", + "group": "Stats", + "name": "TotalBulletsCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTotalBulletsCreated()" + ] + } + ] + } ], - "hidden": false, - "name": "Easing" + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] }, { - "value": "0.05", - "type": "Number", - "label": "Easing speed (Range: 0 to 1)", - "description": "Higher values mean faster movement. Value of \"1\" means instant change.", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "EasingSpeed" - } - ], - "sharedPropertyDescriptors": [] - }, - { - "description": "Displays a line of objects that represent a resource in the game (hearts, lives, ammo, etc). \nUse the same image for the resource bar and the unit objects.", - "fullName": "Resource bar (sprite)", - "name": "ResourceBar_Sprite", - "objectType": "", - "eventsFunctions": [ - { - "fullName": "", - "functionType": "Action", - "name": "onCreated", + "description": "Reloads completed.", + "fullName": "Reloads completed", + "functionType": "Expression", + "group": "Stats", + "name": "TotalReloadsCompleted", "sentence": "", "events": [ { @@ -12982,18 +11902,18 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyCurrentQuantity" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyStartingQuantity()" + "Object.Behavior::PropertyTotalReloadsCompleted()" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", @@ -13003,415 +11923,79 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { - "description": "Draw a resource bar made from sprite objects.", - "fullName": "Draw a resource bar (sprite)", - "functionType": "Action", - "name": "DrawResourceBar", - "sentence": "Draw a resource bar located at _PARAM0_ that is made from _PARAM2_", + "description": "Ammo quantity.", + "fullName": "Ammo quantity", + "functionType": "Expression", + "group": "Ammo", + "name": "AmmoQuantity", + "sentence": "", "events": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Create unit objects", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "infiniteLoopWarning": true, - "type": "BuiltinCommonInstructions::While", - "whileConditions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::PropertyNextUnitToCreate" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "max(Object.Behavior::PropertyCurrentQuantity(),Object.Behavior::PropertyMaxQuantity())" - ] - } - ], - "conditions": [], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Create" - }, - "parameters": [ - "", - "UnitObject", - "Object.X() + Object.Width() * (Object.Behavior::PropertyNextUnitToCreate())", - "Object.Y()", - "Object.Layer()" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "UnitObject", - "__ResourceBar.UnitID", - "=", - "Object.Behavior::PropertyNextUnitToCreate()" - ] - }, - { - "type": { - "value": "LinkedObjects::LinkObjects" - }, - "parameters": [ - "", - "Object", - "UnitObject" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyNextUnitToCreate" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "1" - ] - } - ] - } + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyAmmoQuantity()" ] } - ], - "parameters": [] + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update state of units", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Shots remaining before the next reload is required.", + "fullName": "Shots before next reload", + "functionType": "Expression", + "group": "Reload", + "name": "ShotsBeforeNextReload", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "LinkedObjects::PickObjectsLinkedTo" - }, - "parameters": [ - "", - "UnitObject", - "Object", - "" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::ForEach", - "object": "UnitObject", - "conditions": [], - "actions": [], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Delete units higher than max unit value", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "Object.Behavior::PropertyMaxQuantity()", - "!=", - "0" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "UnitObject.Variable(__ResourceBar.UnitID)", - ">", - "Object.Behavior::PropertyMaxQuantity()" - ] - } - ], - "actions": [ - { - "type": { - "value": "Delete" - }, - "parameters": [ - "UnitObject", - "" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update non-empty units", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "UnitObject.Variable(__ResourceBar.UnitID)", - "<", - "Object.Behavior::PropertyCurrentQuantity()" - ] - } - ], - "actions": [ - { - "type": { - "value": "ChangeColor" - }, - "parameters": [ - "UnitObject", - "Object.Behavior::PropertyActiveUnitColorTint()" - ] - }, - { - "type": { - "value": "Opacity" - }, - "parameters": [ - "UnitObject", - "=", - "Object.Behavior::PropertyActiveUnitOpacity()" - ] - }, - { - "type": { - "value": "ChangeAnimation" - }, - "parameters": [ - "UnitObject", - "=", - "Object.Behavior::PropertyActiveUnitAnimationNumber()" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update empty units", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "UnitObject.Variable(__ResourceBar.UnitID)", - ">=", - "Object.Behavior::PropertyCurrentQuantity()" - ] - } - ], - "actions": [], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Color tint", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Only apply color if it has changed from default value", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareStrings" - }, - "parameters": [ - "Object.Behavior::PropertyEmptyUnitColorTint()", - "!=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "ChangeColor" - }, - "parameters": [ - "UnitObject", - "Object.Behavior::PropertyEmptyUnitColorTint()" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Opacity", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Opacity" - }, - "parameters": [ - "UnitObject", - "=", - "Object.Behavior::PropertyEmptyUnitOpacity()" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Animation", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ChangeAnimation" - }, - "parameters": [ - "UnitObject", - "=", - "Object.Behavior::PropertyEmptyUnitAnimationNumber()" - ] - } - ] - } - ], - "parameters": [] - } - ] - } - ], - "parameters": [] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Update counter", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyNextUnitToCreate" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "PickedInstancesCount(UnitObject)" - ] - } - ] - } + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyShotsBeforeNextReload()" ] } - ], - "parameters": [] + ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", @@ -13421,24 +12005,19 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" - }, - { - "description": "Object used to display each unit", - "name": "UnitObject", - "supplementaryInformation": "Sprite", - "type": "objectList" } ], "objectGroups": [] }, { - "description": "Apply color tint to empty units. Empty units exist between the current and maximum value.", - "fullName": "Color tint of empty units", - "functionType": "Action", - "name": "SetEmptyUnitColor", - "sentence": "Apply color tint _PARAM2_ to empty units of _PARAM0_", + "description": "Shots per reload.", + "fullName": "Shots per reload", + "functionType": "Expression", + "group": "Reload", + "name": "ShotsPerReload", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -13446,18 +12025,18 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyEmptyUnitColorTint" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "GetArgumentAsString(\"ColorTint\")", - "" + "Object.Behavior::PropertyShotsPerReload()" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", @@ -13467,24 +12046,19 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" - }, - { - "description": "Color tint", - "longDescription": "Use \"white\" to remove all color tint", - "name": "ColorTint", - "type": "color" } ], "objectGroups": [] }, { - "description": "Apply color tint to active units.", - "fullName": "Color tint of active units", - "functionType": "Action", - "name": "SetActiveUnitColor", - "sentence": "Apply color tint _PARAM2_ to active units of _PARAM0_", + "description": "Seconds remaining before the cooldown will permit a bullet to be fired.", + "fullName": "Time remaining before a bullet may be fired", + "functionType": "Expression", + "group": "Firing", + "name": "CooldownTimeLeft", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -13492,18 +12066,18 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyActiveUnitColorTint" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "GetArgumentAsString(\"ColorTint\")", - "" + "max(0,Object.Behavior::Cooldown() - Object.ObjectTimerElapsedTime(\"__FireBullet.FiringCooldown\"))" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", @@ -13513,43 +12087,50 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" - }, - { - "description": "Color tint", - "longDescription": "Use \"white\" to remove all color tint", - "name": "ColorTint", - "type": "color" } ], "objectGroups": [] }, { - "description": "Change the opacity of empty units. Empty units exist between the current and maximum value.", - "fullName": "Opacity of empty units", - "functionType": "Action", - "name": "SetEmptyUnitOpacity", - "sentence": "Change the opacity of empty units of _PARAM0_ to _PARAM2_", + "description": "Seconds remaining before the overheat penalty ends.", + "fullName": "Time remaining before overheat penalty ends", + "functionType": "Expression", + "group": "Overheat", + "name": "OverheatTimeLeft", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "conditions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyEmptyUnitOpacity" + "value": "CompareObjectTimer" }, "parameters": [ "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Opacity\")" + "\"__FireBullet.OverheatDuration\"", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "max(0, Object.Behavior::PropertyOverheatDuration() - Object.ObjectTimerElapsedTime(\"__FireBullet.OverheatDuration\"))" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", @@ -13559,24 +12140,19 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" - }, - { - "description": "Opacity of empty units", - "longDescription": "Range: 0 to 255", - "name": "Opacity", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Change the opacity of active units. ", - "fullName": "Opacity of active units", - "functionType": "Action", - "name": "SetActiveUnitOpacity", - "sentence": "Change the opacity of active units of _PARAM0_ to _PARAM2_", + "description": "Check if object is currently performing an ammo reload.", + "fullName": "Is ammo reloading in progress", + "functionType": "Condition", + "group": "Reload", + "name": "IsReloadInProgress", + "sentence": "_PARAM0_ is reloading ammo", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -13584,13 +12160,34 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyActiveUnitOpacity" + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyReloadInProgress" }, "parameters": [ "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Opacity\")" + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" ] } ] @@ -13605,24 +12202,19 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" - }, - { - "description": "Opacity of active units", - "longDescription": "Range: 0 to 255", - "name": "Opacity", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Change the animation of empty units. Empty units exist between the current and maximum value.", - "fullName": "Animation of empty units", - "functionType": "Action", - "name": "SetEmptyUnitAnimation", - "sentence": "Change the animation of empty units of _PARAM0_ to _PARAM2_", + "description": "Check if object is ready to shoot.", + "fullName": "Is ready to shoot", + "functionType": "Condition", + "group": "Firing", + "name": "IsReadyToShoot", + "sentence": "_PARAM0_ is ready to shoot", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -13630,16 +12222,171 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyEmptyUnitAnimationNumber" + "value": "SetReturnBoolean" }, "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"AnimationNumber\")" + "False" ] } ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Check if ready to shoot", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Verify that the gun has ammo", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsOutOfAmmo" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Verify that the gun does not need to be reloaded and is not currently reloading", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsReloadNeeded" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsReloadInProgress" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Verify gun is not shooting sooner than the proper rate of fire", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsFiringCooldownActive" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Verify the gun is not overheated", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsOverheated" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [] } ], "parameters": [ @@ -13651,23 +12398,19 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" - }, - { - "description": "Animation number", - "name": "AnimationNumber", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Change maximum units that can be displayed.", - "fullName": "Maximum units", - "functionType": "Action", - "name": "SetMaxQuantity", - "sentence": "Change maximum units of _PARAM0_ to _PARAM2_", + "description": "Check if automatic reloading is enabled.", + "fullName": "Is automatic reloading enabled", + "functionType": "Condition", + "group": "Reload", + "name": "IsAutomaticReloadingEnabled", + "sentence": "Automatic reloading is enabled on_PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -13675,13 +12418,34 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyMaxQuantity" + "value": "SetReturnBoolean" }, "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyAutomaticReloading" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" ] } ] @@ -13696,25 +12460,19 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" - }, - { - "description": "Maximum units", - "name": "Value", - "supplementaryInformation": "Sprite", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Change the current quantity of units.", - "fullName": "Unit quantity", - "functionType": "ActionWithOperator", - "getterName": "CurrentQuantity", - "name": "SetCurrentQuantity", - "sentence": "Change the unit quantity of _PARAM0_ to _PARAM2_", + "description": "Check if ammo is unlimited.", + "fullName": "Is ammo unlimited", + "functionType": "Condition", + "group": "Ammo", + "name": "IsUnlimitedAmmo", + "sentence": "_PARAM0_ has unlimited ammo", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -13722,13 +12480,34 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyCurrentQuantity" + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyUnlimitedAmmo" }, "parameters": [ "Object", - "Behavior", - "=", - "min(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyMaxQuantity())" + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" ] } ] @@ -13743,24 +12522,19 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" - }, - { - "description": "Current units", - "name": "Value", - "supplementaryInformation": "Sprite", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Increase the current quantity of units.", - "fullName": "Increase quantity", - "functionType": "Action", - "name": "IncreaseQuantity", - "sentence": "Increase the quantity of _PARAM0_ by _PARAM2_", + "description": "Check if object has no ammo available.", + "fullName": "Is out of ammo", + "functionType": "Condition", + "group": "Ammo", + "name": "IsOutOfAmmo", + "sentence": "_PARAM0_ is out of ammo", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -13768,13 +12542,47 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyCurrentQuantity" + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "FireBullet::FireBullet::IsUnlimitedAmmo" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "FireBullet::FireBullet::PropertyAmmoQuantity" }, "parameters": [ "Object", "Behavior", "=", - "min(Object.Behavior::PropertyMaxQuantity(), Object.Behavior::PropertyCurrentQuantity() + GetArgumentAsNumber(\"Value\"))" + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" ] } ] @@ -13789,24 +12597,19 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" - }, - { - "description": "Value", - "name": "Value", - "supplementaryInformation": "Sprite", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Decrease the current quantity of units.", - "fullName": "Decrease quantity", - "functionType": "Action", - "name": "DecreaseQuantity", - "sentence": "Decrease the quantity of _PARAM0_ by _PARAM2_", + "description": "Check if object needs to reload ammo.", + "fullName": "Is a reload needed", + "functionType": "Condition", + "group": "Reload", + "name": "IsReloadNeeded", + "sentence": "_PARAM0_ needs to reload ammo", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -13814,64 +12617,65 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyCurrentQuantity" + "value": "SetReturnBoolean" }, "parameters": [ - "Object", - "Behavior", - "=", - "max(0,Object.Behavior::PropertyCurrentQuantity() - GetArgumentAsNumber(\"Value\"))" + "False" ] } ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", - "type": "behavior" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Shots per reload must not be \"0\"", + "comment2": "" }, - { - "description": "Value", - "name": "Value", - "supplementaryInformation": "Sprite", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "quantity", - "fullName": "Current quantity", - "functionType": "ExpressionAndCondition", - "name": "CurrentQuantity", - "sentence": "quantity", - "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyShotsPerReload" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + }, + { + "type": { + "value": "FireBullet::FireBullet::PropertyShotsBeforeNextReload" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "SetReturnBoolean" }, "parameters": [ - "Object.Behavior::PropertyCurrentQuantity()" + "True" ] } ] } ], - "expressionType": { - "type": "expression" - }, "parameters": [ { "description": "Object", @@ -13881,18 +12685,19 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { - "description": "max quantity", - "fullName": "Max quantity", - "functionType": "ExpressionAndCondition", - "name": "MaxQuantity", - "sentence": "max quantity", + "description": "Check if object is overheated.", + "fullName": "Is overheated", + "functionType": "Condition", + "group": "Overheat", + "name": "IsOverheated", + "sentence": "_PARAM0_ is overheated", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -13900,28 +12705,132 @@ "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "SetReturnBoolean" }, "parameters": [ - "Object.Behavior::PropertyMaxQuantity()" + "False" ] } ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "FireBullet::FireBullet::PropertyHeatLevel" + }, + "parameters": [ + "Object", + "Behavior", + ">=", + "1" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::OverheatTimeLeft()", + ">", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if firing cooldown is active.", + "fullName": "Is firing cooldown active", + "functionType": "Condition", + "group": "Firing", + "name": "IsFiringCooldownActive", + "sentence": "Firing cooldown is active on _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::CooldownTimeLeft()", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], @@ -13930,113 +12839,283 @@ ], "propertyDescriptors": [ { - "value": "0", + "value": "0.1", "type": "Number", - "label": "Starting quantity", - "description": "", - "group": "", + "label": "Firing cooldown (seconds)", + "description": "Object cannot shoot while firing cooldown is active", + "group": "Shooting configuration", "extraInformation": [], "hidden": false, - "name": "StartingQuantity" + "name": "FireCooldown" }, { "value": "", - "type": "Number", - "label": "Quantity", + "type": "Boolean", + "label": "", "description": "", "group": "", "extraInformation": [], "hidden": true, - "name": "CurrentQuantity" + "name": "HasJustFired" }, { - "value": "10", + "value": "45", "type": "Number", - "label": "Maximum quantity (Use \"0\" for unlimited)", + "label": "Firing arc (degrees)", + "description": "Multi-Fire bullets will be evenly spaced inside the Firing Arc", + "group": "Multi-Fire", + "extraInformation": [], + "hidden": false, + "name": "FiringArc" + }, + { + "value": "1", + "type": "Number", + "label": "Number of bullets created at once (Multi-Fire)", + "description": "Multi-Fire bullets will be evenly spaced inside the Firing Arc", + "group": "Multi-Fire", + "extraInformation": [], + "hidden": false, + "name": "BulletQuantity" + }, + { + "value": "0", + "type": "Number", + "label": "Angle variance (degrees)", + "description": "Used to simulate imperfect aim (Range: 0 to 180 degrees)", + "group": "Shooting configuration", + "extraInformation": [], + "hidden": false, + "name": "AngleVariance" + }, + { + "value": "true", + "type": "Boolean", + "label": "Rotate bullet to match trajectory", "description": "", - "group": "", + "group": "Shooting configuration", "extraInformation": [], "hidden": false, - "name": "MaxQuantity" + "name": "RotateBullet" }, { "value": "0", "type": "Number", - "label": "", + "label": "Ammo quantity (current)", "description": "", "group": "", "extraInformation": [], "hidden": true, - "name": "NextUnitToCreate" + "name": "AmmoQuantity" }, { - "value": "", - "type": "Color", - "label": "Empty color tint", - "description": "", - "group": "", + "value": "0", + "type": "Number", + "label": "Shots per reload ", + "description": "Use 0 to disable reloading", + "group": "Reload", "extraInformation": [], "hidden": false, - "name": "EmptyUnitColorTint" + "name": "ShotsPerReload" }, { - "value": "64", + "value": "1", "type": "Number", - "label": "Opacity of empty units (Range: 0 to 255)", - "description": "Empty units exist between the current and maximum value.", - "group": "", + "label": "Reloading duration (seconds)", + "description": "Object cannot shoot while reloading is in progress", + "group": "Reload", "extraInformation": [], "hidden": false, - "name": "EmptyUnitOpacity" + "name": "ReloadDuration" }, { "value": "0", "type": "Number", - "label": "Animation number for empty units", - "description": "", - "group": "", + "label": "Max ammo ", + "description": "Use \"0\" to disable restrictions on ammo capacity", + "group": "Ammo", "extraInformation": [], "hidden": false, - "name": "EmptyUnitAnimationNumber" + "name": "MaxAmmo" }, { - "value": "255", + "value": "0", "type": "Number", - "label": "Opacity of active units", + "label": "Shots before next reload", "description": "", "group": "", "extraInformation": [], - "hidden": false, - "name": "ActiveUnitOpacity" + "hidden": true, + "name": "ShotsBeforeNextReload" }, { - "value": "255;255;255", - "type": "Color", - "label": "Color tint of active units", + "value": "0", + "type": "Number", + "label": "Total shots fired", + "description": "Regardless of how many bullets are created, only 1 shot will be counted per frame", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TotalShotsFired" + }, + { + "value": "0", + "type": "Number", + "label": "Total bullets created", "description": "", "group": "", "extraInformation": [], + "hidden": true, + "name": "TotalBulletsCreated" + }, + { + "value": "0", + "type": "Number", + "label": "Starting ammo", + "description": "", + "group": "Ammo", + "extraInformation": [], "hidden": false, - "name": "ActiveUnitColorTint" + "name": "StartingAmmo" }, { "value": "0", "type": "Number", - "label": "Animation number for active units", + "label": "Total reloads completed", "description": "", "group": "", "extraInformation": [], + "hidden": true, + "name": "TotalReloadsCompleted" + }, + { + "value": "true", + "type": "Boolean", + "label": "Unlimited ammo", + "description": "", + "group": "Ammo", + "extraInformation": [], "hidden": false, - "name": "ActiveUnitAnimationNumber" - } - ], + "name": "UnlimitedAmmo" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ReloadInProgress" + }, + { + "value": "0", + "type": "Number", + "label": "Heat increase per shot (Range: 0 to 1)", + "description": " Object is overheated when Heat reaches 1", + "group": "Overheat", + "extraInformation": [], + "hidden": false, + "name": "HeatIncreasePerShot" + }, + { + "value": "0", + "type": "Number", + "label": "Heat level (Range: 0 to 1)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "HeatLevel" + }, + { + "value": "true", + "type": "Boolean", + "label": "Reload automatically", + "description": "", + "group": "Reload", + "extraInformation": [], + "hidden": false, + "name": "AutomaticReloading" + }, + { + "value": "0", + "type": "Number", + "label": "Overheat duration (seconds) ", + "description": "Object cannot shoot while overheat duration is active", + "group": "Overheat", + "extraInformation": [], + "hidden": false, + "name": "OverheatDuration" + }, + { + "value": "0.1", + "type": "Number", + "label": "Linear cooling rate (per second)", + "description": "", + "group": "Overheat", + "extraInformation": [], + "hidden": false, + "name": "LinearCoolingRate" + }, + { + "value": "0.3", + "type": "Number", + "label": "Exponential cooling rate (per second)", + "description": "Exponential cooling happens faster when heat is high and slower when heat is low", + "group": "Overheat", + "extraInformation": [ + "Linear", + "Exponential" + ], + "hidden": false, + "name": "ExponentialCoolingRate" + } + ], "sharedPropertyDescriptors": [] - }, + } + ], + "eventsBasedObjects": [] + }, + { + "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", + "category": "Input", + "extensionNamespace": "", + "fullName": "Resource bar", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", + "name": "ResourceBar", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/UI Essentials/UI Essentials_sliders_options.svg", + "shortDescription": "Display a bar that represents a resource in the game (health, shield, mana, ammo, etc)", + "version": "0.0.1", + "description": "The resource bar can be displayed using these objects:\n\n- Shape painter\n- Tiled sprite\n- Sprite\n", + "origin": { + "identifier": "DraggableSliderControl", + "name": "gdevelop-extension-store" + }, + "tags": [ + "resource", + "bar", + "shape painter", + "health", + "mana", + "shield", + "hearts", + "lives", + "ammo" + ], + "authorIds": [ + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2", + "gqDaZjCfevOOxBYkK6zlhtZnXCg1" + ], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ { - "description": "Use a tiled sprite to display repeated objects to represent a resource in the game (hearts, lives, ammo, etc). ", - "fullName": "Resource bar (tiled sprite)", - "name": "ResourceBar_TiledSprite", - "objectType": "TiledSpriteObject::TiledSprite", + "description": "Draws a solid bar that represents a resource in the game (health, shield, mana, ammo, etc)", + "fullName": "Resource bar (shape painter)", + "name": "ResourceBar_ShapePainter", + "objectType": "PrimitiveDrawing::Drawer", "eventsFunctions": [ { "fullName": "", @@ -14044,100 +13123,76 @@ "name": "onCreated", "sentence": "", "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure object doesn't get redrawn every frame", + "comment2": "" + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyCurrentQuantity" + "value": "PrimitiveDrawing::ClearBetweenFrames" }, "parameters": [ "Object", - "Behavior", - "=", - "Object.Behavior::PropertyStartingQuantity()" + "no" ] } ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "TiledSpriteObject::TiledSprite", - "type": "object" }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Display a tiled resource bar.", - "fullName": "Draw a resource bar (tiled sprite)", - "functionType": "Action", - "name": "DrawResourceBar", - "sentence": "Display resource bar using _PARAM0_", - "events": [ + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Use correct min value (instead of always starting at 0)", + "comment2": "" + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "TiledSpriteObject::Width" + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValue" }, "parameters": [ "Object", + "Behavior", "=", - "Object.Behavior::PropertyUnitWidth() * Object.Behavior::PropertyCurrentQuantity()" + "Object.Behavior::PropertyValueMin()" ] } ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "TiledSpriteObject::TiledSprite", - "type": "object" }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change the quantity of a tiled resource bar.", - "fullName": "Quantity", - "functionType": "Action", - "name": "SetQuantity", - "sentence": "Change the quantity of _PARAM0_ to _PARAM2_", - "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyCurrentQuantity" + "value": "ResourceBar::ResourceBar_ShapePainter::UpdateHitbox" }, "parameters": [ "Object", "Behavior", - "=", - "max(0,GetArgumentAsNumber(\"Value\"))" + "" ] } ] @@ -14147,111 +13202,322 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledSpriteObject::TiledSprite", + "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", "type": "behavior" - }, - { - "description": "Value", - "name": "Value", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Change the quantity of a tiled resource bar.", - "fullName": "Quantity", - "functionType": "ActionWithOperator", - "getterName": "Quantity", - "name": "SetQuantityOp", - "sentence": "Change the quantity of _PARAM0_ to _PARAM2_", + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", "events": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "If max quantity has NOT been set, do not enforce it.", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Draw resource bar (if needed)", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::PropertyMaxQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::PropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "Visible" + }, + "parameters": [ + "Object" + ] + }, + { + "type": { + "value": "LayerVisible" + }, + "parameters": [ + "", + "Object.Layer()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::Drawer::ClearShapes" + }, + "parameters": [ + "Object" + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Inactive Bar", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set inactive Bar parameters", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyInactiveBarColor()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyInactiveBarOpacity()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::OutlineOpacity" + }, + "parameters": [ + "Object", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw inactive Bar", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyValueOffset()", + "0", + "Object.Behavior::PropertyBarLength()", + "Object.Behavior::PropertyBarThickness()" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Active Bar", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set active Bar parameters", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyActiveBarColor()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyActiveBarOpacity()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw active Bar", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "Object", + "0", + "0", + "Object.Behavior::PropertyValueOffset()", + "Object.Behavior::PropertyBarThickness()" + ] + } + ] + } + ], + "parameters": [] + } ] } ], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyCurrentQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "max(0,GetArgumentAsNumber(\"Value\"))" - ] - } - ] + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" }, { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Draw a resource bar that shows current and max values.", + "fullName": "Draw a resource bar (shape painter)", + "functionType": "Action", + "name": "DrawResourceBar", + "sentence": "Draw a resource bar using _PARAM0_ with current value _PARAM2_ and max value _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, "textR": 0 }, - "comment": "If max quantity has been set, make sure quantity does not exceed it.", + "comment": "Set values", "comment2": "" }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "conditions": [], + "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::PropertyMaxQuantity" + "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" }, "parameters": [ "Object", "Behavior", - "!=", - "0" + "Tween::Ease(Object.Behavior::PropertyEasing(), Object.Behavior::Value(), GetArgumentAsNumber(\"CurrentValue\"), Object.Behavior::PropertyEasingSpeed())", + "" ] - } - ], - "actions": [ + }, { "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyCurrentQuantity" + "value": "ResourceBar::ResourceBar_ShapePainter::SetValueMax" }, "parameters": [ "Object", "Behavior", - "=", - "clamp(GetArgumentAsNumber(\"Value\"), 0, Object.Behavior::PropertyMaxQuantity())" + "GetArgumentAsNumber(\"MaxValue\")", + "" ] } ] @@ -14261,43 +13527,73 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledSpriteObject::TiledSprite", + "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", "type": "behavior" }, { - "description": "Value", - "name": "Value", + "description": "Current value", + "name": "CurrentValue", + "type": "expression" + }, + { + "description": "Max value", + "name": "MaxValue", + "supplementaryInformation": "Health::Health", "type": "expression" } ], "objectGroups": [] }, { - "description": "Change the maximum quantity of a tiled resource bar.", - "fullName": "Maximum quantity", + "description": "Draw a resource bar based on the health points of an object.", + "fullName": "Draw a health bar", "functionType": "Action", - "name": "SetMaxQuantity", - "sentence": "Change the maximum quantity of _PARAM0_ to _PARAM2_", + "name": "DrawHealthBar", + "sentence": "Draw a resource bar using _PARAM0_ based on the health points of _PARAM2_", "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set values", + "comment2": "" + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyMaxQuantity" + "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" }, "parameters": [ "Object", "Behavior", - "=", - "max(0,GetArgumentAsNumber(\"Value\"))" + "Tween::Ease(Object.Behavior::PropertyEasing(), Object.Behavior::Value(), ObjectWithHealth.HealthBehavior::Health(), Object.Behavior::PropertyEasingSpeed())", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetValueMax" + }, + "parameters": [ + "Object", + "Behavior", + "ObjectWithHealth.HealthBehavior::MaxHealth()", + "" ] } ] @@ -14307,44 +13603,73 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledSpriteObject::TiledSprite", + "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", "type": "behavior" }, { - "description": "Value", - "name": "Value", - "type": "expression" + "description": "Object with health", + "name": "ObjectWithHealth", + "type": "objectList" + }, + { + "description": "Health behavior", + "name": "HealthBehavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" } ], "objectGroups": [] }, { - "description": "Change the maximum quantity of a tiled resource bar.", - "fullName": "Maximum quantity", - "functionType": "ActionWithOperator", - "getterName": "MaxQuantity", - "name": "SetMaxQuantityOp", - "sentence": "Change the maximum quantity of _PARAM0_ to _PARAM2_", + "description": "Draw a resource bar based on the shield points of an object.", + "fullName": "Draw a shield bar", + "functionType": "Action", + "name": "DrawShieldBar", + "sentence": "Draw a resource bar using _PARAM0_ based on the shield points of _PARAM2_", "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set values", + "comment2": "" + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyMaxQuantity" + "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" }, "parameters": [ "Object", "Behavior", - "=", - "max(0,GetArgumentAsNumber(\"Value\"))" + "Tween::Ease(Object.Behavior::PropertyEasing(), Object.Behavior::Value(), ObjectWithShield.ShieldBehavior::ShieldPoints(), Object.Behavior::PropertyEasingSpeed())", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetValueMax" + }, + "parameters": [ + "Object", + "Behavior", + "ObjectWithShield.ShieldBehavior::MaxShield()", + "" ] } ] @@ -14354,70 +13679,112 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledSpriteObject::TiledSprite", + "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", "type": "behavior" }, { - "description": "Value", - "name": "Value", - "type": "expression" + "description": "Object with shield", + "name": "ObjectWithShield", + "type": "objectList" + }, + { + "description": "Shield behavior", + "name": "ShieldBehavior", + "supplementaryInformation": "Health::Shield", + "type": "behavior" } ], "objectGroups": [] }, { - "description": "the quantity", - "fullName": "Quantity", - "functionType": "ExpressionAndCondition", - "name": "Quantity", - "sentence": "the quantity", + "description": "Draw a resource bar based on the ammo of an object.", + "fullName": "Draw an ammo bar", + "functionType": "Action", + "name": "DrawAmmoBar", + "sentence": "Draw a resource bar using _PARAM0_ based on the ammo of _PARAM2_", "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set values", + "comment2": "" + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" }, "parameters": [ - "Object.Behavior::PropertyCurrentQuantity()" + "Object", + "Behavior", + "Tween::Ease(Object.Behavior::PropertyEasing(), Object.Behavior::Value(), ObjectWithFireBullet.FireBulletBehavior::AmmoQuantity(), Object.Behavior::PropertyEasingSpeed())", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetValueMax" + }, + "parameters": [ + "Object", + "Behavior", + "ObjectWithFireBullet.FireBulletBehavior::MaxAmmo()", + "" ] } ] } ], - "expressionType": { - "type": "expression" - }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledSpriteObject::TiledSprite", + "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "type": "behavior" + }, + { + "description": "Object with fire bullet", + "name": "ObjectWithFireBullet", + "type": "objectList" + }, + { + "description": "Fire bullet behavior", + "name": "FireBulletBehavior", + "supplementaryInformation": "FireBullet::FireBullet", "type": "behavior" } ], "objectGroups": [] }, { - "description": "the max quantity", - "fullName": "Max quantity", - "functionType": "ExpressionAndCondition", - "name": "MaxQuantity", - "sentence": "the max quantity", + "description": "Value of the resource.", + "fullName": "Resource value", + "functionType": "Expression", + "group": "Resource value", + "name": "Value", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -14428,7 +13795,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyMaxQuantity()" + "Object.Behavior::PropertyValue()" ] } ] @@ -14441,1236 +13808,1167 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledSpriteObject::TiledSprite", + "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", "type": "behavior" } ], "objectGroups": [] - } - ], - "propertyDescriptors": [ + }, { - "value": "0", - "type": "Number", - "label": "Starting quantity", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "StartingQuantity" - }, - { - "value": "", - "type": "Number", - "label": "Quantity", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "CurrentQuantity" - }, - { - "value": "16", - "type": "Number", - "label": "Unit width (pixels)", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "UnitWidth" - }, - { - "value": "0", - "type": "Number", - "label": "Maximum quantity", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "MaxQuantity" - } - ], - "sharedPropertyDescriptors": [] - } - ], - "eventsBasedObjects": [] - }, - { - "author": "@Bouh, D8H", - "category": "General", - "extensionNamespace": "", - "fullName": "Extended variables support", - "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXZhcmlhYmxlLWJveCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xOSAzSDVDMy45IDMgMyAzLjkgMyA1VjE5QzMgMjAuMSAzLjkgMjEgNSAyMUgxOUMyMC4xIDIxIDIxIDIwLjEgMjEgMTlWNUMyMSAzLjkgMjAuMSAzIDE5IDNNNy40IDE4QzUuOSAxNi41IDUgMTQuMyA1IDEyUzUuOSA3LjUgNy40IDZMOSA2LjdDNy43IDcuOSA3IDkuOSA3IDEyUzcuNyAxNi4xIDkgMTcuM0w3LjQgMThNMTIuNyAxNUwxMS45IDEzTDEwLjUgMTVIOUwxMS4zIDExLjlMMTAgOUgxMS4zTDEyLjEgMTFMMTMuNSA5SDE1TDEyLjggMTJMMTQuMSAxNUgxMi43TTE2LjYgMThMMTUgMTcuM0MxNi4zIDE2IDE3IDE0LjEgMTcgMTJTMTYuMyA3LjkgMTUgNi43TDE2LjYgNkMxOC4xIDcuNSAxOSA5LjcgMTkgMTJTMTguMSAxNi41IDE2LjYgMThaIiAvPjwvc3ZnPg==", - "name": "ExtendedVariables", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/variable-box.svg", - "shortDescription": "Add conditions, actions and expressions to check for the existence of a variable, copy variables, delete existing ones from memory, and create dynamic variables.", - "version": "1.0.0", - "description": "This extension provides: \n- Conditions to check if a global/scene/object variable exists.\n- Actions to copy object variables, global and scene variables.\n- Actions to delete an existing global/scene variable from memory.\n- Actions to create a global/scene variable using a text expression, rather than a variable name input.\n- Expressions to get the value or text from a global/scene variable using a text expression, rather than a variable name.\n\nText expressions allows to enter the name of the variable with an expression like `\"MyVar\"+ ToString(Variable(Health))`", - "origin": { - "identifier": "ExtendedVariables", - "name": "gdevelop-extension-store" - }, - "tags": [ - "variable", - "scene", - "global", - "object", - "remove", - "expression", - "copy", - "structure", - "array", - "boolean", - "duplication" - ], - "authorIds": [ - "2OwwM8ToR9dx9RJ2sAKTcrLmCB92", - "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" - ], - "dependencies": [], - "eventsFunctions": [ - { - "description": "Check if a global variable exists.", - "fullName": "Global variable exists", - "functionType": "Condition", - "group": "Deprecated", - "name": "C_global_variable_exist", - "private": true, - "sentence": "If the global variable _PARAM1_ exist", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "description": "Change the value of the resource.", + "fullName": "Resource value", + "functionType": "Action", + "group": "Resource value", + "name": "SetValue", + "sentence": "Change the value of _PARAM0_: _PARAM2_", + "events": [ { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::PropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + "<=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + }, { - "type": { - "value": "ExtendedVariables::GlobalVariableExist" - }, - "parameters": [ - "", - "GetArgumentAsString(\"GlobalVariableName\")", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::PropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "round(GetArgumentAsNumber(\"Value\") / Object.Behavior::PropertyTickSpacing()) * Object.Behavior::PropertyTickSpacing()" + ] + } ] - } - ], - "actions": [ + }, { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyValueMin()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValueMin()" + ] + } ] - } - ] - } - ], - "parameters": [ - { - "description": "Name of the global variable", - "name": "GlobalVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the global variable exists.", - "fullName": "Global variable exists", - "functionType": "Condition", - "group": "Global variables", - "name": "GlobalVariableExist", - "sentence": "If the global variable _PARAM1_ exist", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const globalVariables = runtimeScene.getGame().getVariables();\r\neventsFunctionContext.returnValue = globalVariables.has(eventsFunctionContext.getArgument(\"GlobalVariableName\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the global variable", - "name": "GlobalVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Check if a scene variable exists.", - "fullName": "Scene variable exists", - "functionType": "Condition", - "group": "Deprecated", - "name": "C_scene_variable_exist", - "private": true, - "sentence": "If the scene variable _PARAM1_ exist", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + }, { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::PropertyValueMax()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValueMax()" + ] + } ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + }, { - "type": { - "value": "ExtendedVariables::SceneVariableExist" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "", - "GetArgumentAsString(\"SceneVariableName\")", - "" + "comment": "Set the proper offset", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValueOffset" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyBarLength() * (Object.Behavior::PropertyValue() - Object.Behavior::PropertyValueMin()) / (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin())" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } ] } ], - "actions": [ + "parameters": [ { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the scene variable exists.", - "fullName": "Scene variable exists", - "functionType": "Condition", - "group": "Scene variables", - "name": "SceneVariableExist", - "sentence": "If the scene variable _PARAM1_ exist", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const sceneVariables = runtimeScene.getVariables();\r\neventsFunctionContext.returnValue = sceneVariables.has(eventsFunctionContext.getArgument(\"SceneVariableName\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Check if an object variable exists.", - "fullName": "Object variable exists", - "functionType": "Condition", - "group": "Deprecated", - "name": "C_object_variable_exist", - "private": true, - "sentence": "Object _PARAM1_ has object variable _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "type": "behavior" + }, + { + "description": "Slider value", + "name": "Value", + "type": "expression" } - ] + ], + "objectGroups": [] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "description": "Minimum value of the resource.", + "fullName": "Resource minimum value", + "functionType": "Expression", + "group": "Resource value", + "name": "ValueMin", + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ { - "type": { - "value": "ExtendedVariables::ObjectVariableExist" - }, - "parameters": [ - "", - "ObjectToCheck", - "GetArgumentAsString(\"ObjectVariableName\")", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValueMin()" + ] + } ] } ], - "actions": [ + "expressionType": { + "type": "expression" + }, + "parameters": [ { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "type": "behavior" } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "ObjectToCheck", - "type": "objectList" - }, - { - "description": "Name of object variable", - "name": "ObjectVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Check if an object variable exists.", - "fullName": "Object variable exists", - "functionType": "Condition", - "group": "Object variables", - "name": "ObjectVariableExist", - "sentence": "Object _PARAM1_ has object variable _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "let returnValue = true;\r\nif (!objects.length) {\r\n returnValue = false;\r\n} else {\r\n const objectVariableName = eventsFunctionContext.getArgument(\"ObjectVariableName\");\r\n for (let i = 0; i < objects.length; i++) {\r\n if (!objects[i].hasVariable(objectVariableName)) {\r\n // If any object does NOT have the variable, return false.\r\n returnValue = false;\r\n break;\r\n }\r\n }\r\n}\r\n\r\neventsFunctionContext.returnValue = returnValue;", - "parameterObjects": "ObjectToCheck", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Object", - "name": "ObjectToCheck", - "type": "objectList" + ], + "objectGroups": [] }, { - "description": "Name of object variable", - "name": "ObjectVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Delete a global variable, removing it from memory.", - "fullName": "Delete global variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_Delete_global_variable", - "private": true, - "sentence": "Delete global variable _PARAM1_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "description": "Change the minimum value of the resource.", + "fullName": "Resource minimum value", + "functionType": "Action", + "group": "Resource value", + "name": "SetValueMin", + "sentence": "Change the minimum value of _PARAM0_: _PARAM2_", + "events": [ { - "type": { - "value": "ExtendedVariables::DeleteGlobalVariable" - }, - "parameters": [ - "", - "GetArgumentAsString(\"GlobalVariableName\")", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValueMin" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"ValueMin\")" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::Value()", + "" + ] + } ] } - ] - } - ], - "parameters": [ - { - "description": "Name of the global variable to delete", - "name": "GlobalVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Delete the global variable, removing it from memory.", - "fullName": "Delete global variable", - "functionType": "Action", - "group": "Global variables", - "name": "DeleteGlobalVariable", - "sentence": "Delete the global variable _PARAM1_ from memory", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "runtimeScene.getGame().getVariables().remove(eventsFunctionContext.getArgument(\"GlobalVariableName\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the global variable to delete", - "name": "GlobalVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the text of a scene variable.", - "fullName": "String of a scene variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_Modify_scene_variable_string", - "private": true, - "sentence": "Change the text of scene variable _PARAM1_ to _PARAM2_", - "events": [ + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "type": "behavior" + }, + { + "description": "Minimum value", + "name": "ValueMin", + "type": "expression" + } + ], + "objectGroups": [] + }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "description": "Maximum value of the resource.", + "fullName": "Resource maximum value", + "functionType": "Expression", + "group": "Resource value", + "name": "ValueMax", + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ { - "type": { - "value": "ExtendedVariables::ModifySceneVariableString" - }, - "parameters": [ - "", - "GetArgumentAsString(\"SceneVariableName\")", - "GetArgumentAsNumber(\"SceneVariableValue\")", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValueMax()" + ] + } ] } - ] - } - ], - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "type": "behavior" + } + ], + "objectGroups": [] }, { - "description": "Value", - "name": "SceneVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the text of a scene variable.", - "fullName": "String of a scene variable", - "functionType": "Action", - "group": "Scene variables", - "name": "ModifySceneVariableString", - "sentence": "Change the text of scene variable _PARAM1_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const variable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r\nvariable.setString(eventsFunctionContext.getArgument(\"SceneVariableValue\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" + "description": "Thickness of the resource bar.", + "fullName": "Resource bar thickness", + "functionType": "Expression", + "group": "Resource bar configuration", + "name": "BarThickness", + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyBarThickness()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "type": "behavior" + } + ], + "objectGroups": [] }, { - "description": "Value", - "name": "SceneVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the text of a global variable.", - "fullName": "String of a global variable", - "functionType": "Action", - "group": "Global variables", - "name": "ModifyGlobalVariableString", - "sentence": "Change the text of global variable _PARAM1_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const variable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r\nvariable.setString(eventsFunctionContext.getArgument(\"GlobalVariableValue\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the global variable", - "name": "GlobalVariableName", - "type": "string" - }, - { - "description": "Value", - "name": "GlobalVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the value of a global variable.", - "fullName": "Value of a global variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_Modify_global_variable", - "private": true, - "sentence": "Change the global variable _PARAM1_ with value: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "description": "Length of the resource bar.", + "fullName": "Resource bar length", + "functionType": "Expression", + "group": "Resource bar configuration", + "name": "BarLength", + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ { - "type": { - "value": "ExtendedVariables::ModifyGlobalVariable" - }, - "parameters": [ - "", - "GetArgumentAsString(\"SceneVariableName\")", - "GetArgumentAsNumber(\"SceneVariableValue\")", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyBarLength()" + ] + } ] } - ] - } - ], - "parameters": [ - { - "description": "Name of the global variable", - "name": "SceneVariableName", - "type": "string" + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "type": "behavior" + } + ], + "objectGroups": [] }, { - "description": "Value", - "name": "SceneVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the text of a global variable.", - "fullName": "String of a global variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_Modify_global_variable_string", - "private": true, - "sentence": "Change the text of global variable _PARAM1_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "description": "Change the maximum value of the resource.", + "fullName": "Resource maximum value", + "functionType": "Action", + "group": "Resource value", + "name": "SetValueMax", + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ { - "type": { - "value": "ExtendedVariables::ModifyGlobalVariableString" - }, - "parameters": [ - "", - "GetArgumentAsString(\"SceneVariableName\")", - "GetArgumentAsNumber(\"SceneVariableValue\")", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValueMax" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"ValueMax\")" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::Value()", + "" + ] + } ] } - ] - } - ], - "parameters": [ - { - "description": "Name of the global variable", - "name": "SceneVariableName", - "type": "string" - }, - { - "description": "Value", - "name": "SceneVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the value of a global variable.", - "fullName": "Value of a global variable", - "functionType": "Action", - "group": "Global variables", - "name": "ModifyGlobalVariable", - "sentence": "Change the global variable _PARAM1_ with value: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const variable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r\nvariable.setNumber(eventsFunctionContext.getArgument(\"GlobalVariableValue\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the global variable", - "name": "GlobalVariableName", - "type": "string" + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "type": "behavior" + }, + { + "description": "Maximum value", + "name": "ValueMax", + "type": "expression" + } + ], + "objectGroups": [] }, { - "description": "Value", - "name": "GlobalVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the value of a scene variable.", - "fullName": "Value of a scene variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_Modify_scene_variable", - "private": true, - "sentence": "Change the scene variable _PARAM1_ with value: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "description": "Tick spacing of the resource bar.", + "fullName": "Tick spacing", + "functionType": "Expression", + "group": "Resource bar configuration", + "name": "TickSpacing", + "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", + "events": [ { - "type": { - "value": "ExtendedVariables::ModifySceneVariable" - }, - "parameters": [ - "", - "GetArgumentAsString(\"SceneVariableName\")", - "GetArgumentAsNumber(\"SceneVariableValue\")", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTickSpacing()" + ] + } ] } - ] - } - ], - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - }, - { - "description": "Value", - "name": "SceneVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the value of a scene variable.", - "fullName": "Value of a scene variable", - "functionType": "Action", - "group": "Scene variables", - "name": "ModifySceneVariable", - "sentence": "Change the scene variable _PARAM1_ with value: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const variable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r\nvariable.setNumber(eventsFunctionContext.getArgument(\"SceneVariableValue\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "type": "behavior" + }, + { + "description": "Tick spacing", + "name": "TickSpacing", + "type": "expression" + } + ], + "objectGroups": [] }, { - "description": "Value", - "name": "SceneVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Delete scene variable, the variable will be deleted from the memory.", - "fullName": "Delete scene variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_Delete_scene_variable", - "private": true, - "sentence": "Delete the scene variable _PARAM1_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "description": "Change the tick spacing of the resource bar.", + "fullName": "Tick spacing", + "functionType": "Action", + "group": "Resource bar configuration", + "name": "SetTickSpacing", + "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", + "events": [ { - "type": { - "value": "ExtendedVariables::DeleteSceneVariable" - }, - "parameters": [ - "", - "GetArgumentAsString(\"SceneVariableName\")", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"TickSpacing\")" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::Value()", + "" + ] + } ] } - ] - } - ], - "parameters": [ - { - "description": "Name of the scene variable to delete", - "name": "SceneVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Delete the scene variable, the variable will be deleted from the memory.", - "fullName": "Delete scene variable", - "functionType": "Action", - "group": "Scene variables", - "name": "DeleteSceneVariable", - "sentence": "Delete the scene variable _PARAM1_ from memory", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "runtimeScene.getVariables().remove(eventsFunctionContext.getArgument(\"SceneVariableName\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the scene variable to delete", - "name": "SceneVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Copy an object variable from one object to another.", - "fullName": "Copy an object variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_CopyObjectVariable", - "private": true, - "sentence": "Copy the variable _PARAM1_ of _PARAM2_ to the variable _PARAM3_ of _PARAM4_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + ], + "parameters": [ { - "type": { - "value": "ExtendedVariables::CopyObjectVariable" - }, - "parameters": [ - "", - "SourceObject", - "GetArgumentAsString(\"SourceVariableName\")", - "TargetObject", - "GetArgumentAsString(\"TargetVariableName\")", - "no", - "" - ] + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "type": "behavior" + }, + { + "description": "Tick spacing", + "name": "TickSpacing", + "type": "expression" } - ] - } - ], - "parameters": [ - { - "description": "Source object", - "name": "SourceObject", - "type": "objectList" - }, - { - "description": "Variable to copy", - "name": "SourceVariableName", - "type": "string" - }, - { - "description": "Destination object", - "longDescription": "To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.", - "name": "TargetObject", - "type": "objectList" - }, - { - "description": "Destination variable", - "name": "TargetVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Copy the object variable from one object to another.", - "fullName": "Copy an object variable", - "functionType": "Action", - "group": "Object variables", - "name": "CopyObjectVariable", - "sentence": "Copy the variable _PARAM2_ of _PARAM1_ to the variable _PARAM4_ of _PARAM3_ (clear destination first: _PARAM5_)", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const sourceObject = eventsFunctionContext.getObjects(\"SourceObject\")[0];\nconst targetObject = eventsFunctionContext.getObjects(\"TargetObject\")[0];\nconst sourceVariableName = eventsFunctionContext.getArgument(\"SourceVariableName\");\nconst targetVariableName = eventsFunctionContext.getArgument(\"TargetVariableName\");\nconst isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");\n\nconst sourceVariables = sourceObject.getVariables();\nconst targetVariables = targetObject.getVariables();\n\nif (sourceVariables.has(sourceVariableName))\n{\n gdjs.Variable.copy\n (\n sourceVariables.get(sourceVariableName),\n targetVariables.get(targetVariableName),\n isExactCopy\n );\n}", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ - { - "description": "Source object", - "name": "SourceObject", - "type": "objectList" - }, - { - "description": "Variable to copy", - "name": "SourceVariableName", - "type": "string" + ], + "objectGroups": [] }, { - "description": "Destination object", - "longDescription": "To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.", - "name": "TargetObject", - "type": "objectList" + "description": "Change length of the resource bar.", + "fullName": "Bar length", + "functionType": "Action", + "group": "Resource bar configuration", + "name": "SetBarLength", + "sentence": "Change length of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyBarLength" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyValue()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "type": "behavior" + }, + { + "description": "Bar width", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] }, { - "description": "Destination variable", - "name": "TargetVariableName", - "type": "string" + "description": "Change thickness of the resource bar.", + "fullName": "Bar thickness", + "functionType": "Action", + "group": "Resource bar configuration", + "name": "SetBarThickness", + "sentence": "Change thickness of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyBarThickness" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "type": "behavior" + }, + { + "description": "Bar thickness", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] }, { - "defaultValue": "yes", - "description": "Clear destination first", - "name": "isExactCopy", - "optional": true, - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Copy all object variables from one object to another.", - "fullName": "Copy all object variables", - "functionType": "Action", - "group": "Deprecated", - "name": "A_CopyAllObjectVariables", - "private": true, - "sentence": "Copy all variables from _PARAM1_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "description": "Change opacity of the inactive portion of a resource bar.", + "fullName": "Inactive opacity", + "functionType": "Action", + "group": "Resource bar configuration", + "name": "SetInactiveBarOpacity", + "sentence": "Change opacity of inactive part of _PARAM0_ to _PARAM2_", + "events": [ { - "type": { - "value": "ExtendedVariables::CopyAllObjectVariables" - }, - "parameters": [ - "", - "SourceObject", - "TargetObject", - "no", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyInactiveBarOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } ] } - ] - } - ], - "parameters": [ - { - "description": "Source object", - "name": "SourceObject", - "type": "objectList" + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "type": "behavior" + }, + { + "description": "Inactive bar opacity", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] }, { - "description": "Destination object", - "name": "TargetObject", - "type": "objectList" - } - ], - "objectGroups": [] - }, - { - "description": "Copy all object variables from one object to another.", - "fullName": "Copy all object variables", - "functionType": "Action", - "group": "Object variables", - "name": "CopyAllObjectVariables", - "sentence": "Copy all variables from object _PARAM1_ to object _PARAM2_ (clear destination first: _PARAM3_)", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "// This JS event use private scope from the API, this can be borken at anytime.\n\nconst sourceObject = eventsFunctionContext.getObjects(\"SourceObject\")[0];\nconst targetObject = eventsFunctionContext.getObjects(\"TargetObject\")[0];\nconst isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");\n\nconst targetVariables = targetObject.getVariables();\nconst sourceVariables = sourceObject.getVariables()._variables.items;\nfor (const variableName in sourceVariables)\n{\n if (sourceVariables.hasOwnProperty(variableName))\n {\n gdjs.Variable.copy(sourceVariables[variableName], targetVariables.get(variableName), isExactCopy);\n }\n}", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ - { - "description": "Source object", - "name": "SourceObject", - "type": "objectList" + "description": "Change opacity of the active portion of a resource bar.", + "fullName": "Active bar opacity", + "functionType": "Action", + "group": "Resource bar configuration", + "name": "SetActiveBarOpacity", + "sentence": "Change opacity of active part of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyActiveBarOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "type": "behavior" + }, + { + "description": "Active bar opacity", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] }, { - "description": "Destination object", - "name": "TargetObject", - "type": "objectList" + "description": "Change the color of the active area of bar.", + "fullName": "Active bar color ", + "functionType": "Action", + "group": "Resource bar configuration", + "name": "SetActiveBarColor", + "sentence": "Change active bar color of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyActiveBarColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Color\")" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "type": "behavior" + }, + { + "description": "Active bar color", + "name": "Color", + "type": "color" + } + ], + "objectGroups": [] }, { - "defaultValue": "yes", - "description": "Clear destination first", - "name": "isExactCopy", - "optional": true, - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Delete an object variable, removing it from memory.", - "fullName": "Delete object variable", - "functionType": "Action", - "group": "Object variables", - "name": "DeleteObjectVariable", - "sentence": "Delete for the object _PARAM1_ the object variable _PARAM2_ from the memory", - "events": [ + "description": "Change the color of the inactive area of bar.", + "fullName": "Inactive bar color", + "functionType": "Action", + "group": "Resource bar configuration", + "name": "SetInactiveBarColor", + "sentence": "Change inactive bar color of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyInactiveBarColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Color\")" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "type": "behavior" + }, + { + "description": "Inactive bar color", + "name": "Color", + "type": "color" + } + ], + "objectGroups": [] + }, { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const object = eventsFunctionContext.getObjects(\"Object\")[0];\r\nconst objectVariables = object.getVariables();\r\n\r\nobjectVariables.remove(eventsFunctionContext.getArgument(\"VariableName\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": true + "description": "Update the hitbox.", + "fullName": "Update hitbox", + "functionType": "Action", + "group": "Private", + "name": "UpdateHitbox", + "private": true, + "sentence": "Update the hitbox of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::SetRotationCenter" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyBarLength() / 2", + "Object.Behavior::PropertyBarThickness() / 2" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::SetRectangularCollisionMask" + }, + "parameters": [ + "Object", + "0", + "0", + "Object.Behavior::PropertyBarLength()", + "Object.Behavior::PropertyBarThickness()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", + "type": "behavior" + } + ], + "objectGroups": [] } ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "objectList" - }, + "propertyDescriptors": [ { - "description": "Name of object variable", - "name": "VariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Return the text of a global variable.", - "fullName": "Text of a global variable", - "functionType": "StringExpression", - "group": "Global variables", - "name": "GlobalVariableString", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const globalVariables = runtimeScene.getGame().getVariables();\r\nconst variableExist = globalVariables.has(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r\n\r\nif (variableExist) {\r\n eventsFunctionContext.returnValue = globalVariables.get(eventsFunctionContext.getArgument(\"GlobalVariableName\")).getAsString();\r\n}", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "expressionType": { - "type": "string" - }, - "parameters": [ - { - "description": "Name of the global variable", - "name": "GlobalVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Return the text of a scene variable.", - "fullName": "Text of a scene variable", - "functionType": "StringExpression", - "group": "Scene variables", - "name": "VariableString", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const sceneVariables = runtimeScene.getVariables();\r\nconst variableExist = sceneVariables.has(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r\n\r\nif (variableExist) {\r\n eventsFunctionContext.returnValue = sceneVariables.get(eventsFunctionContext.getArgument(\"SceneVariableName\")).getAsString();\r\n}", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "expressionType": { - "type": "string" - }, - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Return the value of a global variable.", - "fullName": "Value of a global variable", - "functionType": "Expression", - "group": "Global variables", - "name": "GlobalVariable", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const globalVariables = runtimeScene.getGame().getVariables();\r\nconst variableExist = globalVariables.has(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r\n\r\nif (variableExist) {\r\n eventsFunctionContext.returnValue = globalVariables.get(eventsFunctionContext.getArgument(\"GlobalVariableName\")).getAsNumber();\r\n}", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Name of the global variable", - "name": "GlobalVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Return the value of a scene variable.", - "fullName": "Value of a scene variable", - "functionType": "Expression", - "group": "Scene variables", - "name": "Variable", - "sentence": "", - "events": [ + "value": "0", + "type": "Number", + "label": "Minimum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ValueMin" + }, { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const sceneVariables = runtimeScene.getVariables();\r\nconst variableExist = sceneVariables.has(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r\n\r\nif (variableExist) {\r\n eventsFunctionContext.returnValue = sceneVariables.get(eventsFunctionContext.getArgument(\"SceneVariableName\")).getAsNumber();\r\n}", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ + "value": "1", + "type": "Number", + "label": "Maximum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ValueMax" + }, { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Copy the global variable to scene. This copy everything from the types to the values.", - "fullName": "Copy a global variable to scene", - "functionType": "Action", - "group": "Convert", - "name": "CopyGlobalVariableToScene", - "sentence": "Copy the global variable:_PARAM1_ to a scene variable:_PARAM2_ (clear destination first: _PARAM3_)", - "events": [ + "value": "0", + "type": "Number", + "label": "Tick spacing", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "TickSpacing" + }, { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const globalVariable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"globalVariableName\"));\nconst sceneVariable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"sceneVariableName\"));\nconst isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");\n\ngdjs.Variable.copy(globalVariable, sceneVariable, isExactCopy);\n", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ + "value": "200", + "type": "Number", + "label": "Bar length", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "BarLength" + }, { - "description": "Global variable to copy", - "name": "globalVariableName", - "type": "string" + "value": "16", + "type": "Number", + "label": "Bar thickness", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "BarThickness" }, { - "description": "Scene variable destination", - "name": "sceneVariableName", - "type": "string" + "value": "11;255;0", + "type": "Color", + "label": "Inactive Bar color", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "InactiveBarColor" }, { - "defaultValue": "yes", - "description": "Clear destination first", - "name": "isExactCopy", - "optional": true, - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Copy the scene variable to global. This copy everything from the types to the values.", - "fullName": "Copy a scene variable to global ", - "functionType": "Action", - "group": "Copy variables", - "name": "CopySceneVariableToGlobal", - "sentence": "Copy the scene variable:_PARAM1_ to a global variable:_PARAM2_ (clear destination first: _PARAM3_)", - "events": [ + "value": "96", + "type": "Number", + "label": "Inactive Bar opacity", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "InactiveBarOpacity" + }, { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const sceneVariable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"sceneVariableName\"));\nconst globalVariable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"globalVariableName\"));\nconst isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");\n\ngdjs.Variable.copy(sceneVariable, globalVariable, isExactCopy);", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ + "value": " 11;255;0", + "type": "Color", + "label": "Active Bar color", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "ActiveBarColor" + }, { - "description": "Scene variable to copy", - "name": "sceneVariableName", - "type": "string" + "value": "255", + "type": "Number", + "label": "Active Bar opacity", + "description": "", + "group": "Bar", + "extraInformation": [], + "hidden": false, + "name": "ActiveBarOpacity" }, { - "description": "Global variable destination", - "name": "globalVariableName", - "type": "string" + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "Value" }, { - "defaultValue": "yes", - "description": "Clear destination first", - "name": "isExactCopy", - "optional": true, - "type": "yesorno" - } - ], - "objectGroups": [] - } - ], - "eventsBasedBehaviors": [], - "eventsBasedObjects": [] - }, - { - "author": "D8H", - "category": "", - "extensionNamespace": "", - "fullName": "Stick objects to others", - "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXN0aWNrZXItb3V0bGluZSIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik01LjUgMkMzLjYgMiAyIDMuNiAyIDUuNVYxOC41QzIgMjAuNCAzLjYgMjIgNS41IDIySDE2TDIyIDE2VjUuNUMyMiAzLjYgMjAuNCAyIDE4LjUgMkg1LjVNNS44IDRIMTguM0MxOS4zIDQgMjAuMSA0LjggMjAuMSA1LjhWMTVIMTguNkMxNi43IDE1IDE1LjEgMTYuNiAxNS4xIDE4LjVWMjBINS44QzQuOCAyMCA0IDE5LjIgNCAxOC4yVjUuOEM0IDQuOCA0LjggNCA1LjggNCIgLz48L3N2Zz4=", - "name": "Sticker", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/sticker-outline.svg", - "shortDescription": "Behavior to stick objects to other objects - so that they follow the position and rotation of the object they are stuck to.", - "version": "0.3.4", - "description": "This extension can be useful for:\n* Stick an accessory to a moving object,\n* Animate a skeleton.", - "origin": { - "identifier": "Sticker", - "name": "gdevelop-extension-store" - }, - "tags": [ - "sticker", - "stick", - "follow", - "skeleton", - "joint" - ], - "authorIds": [ - "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" - ], - "dependencies": [], - "eventsFunctions": [ - { - "description": "Check if the object is stuck to another object.", - "fullName": "Is stuck to another object", - "functionType": "Condition", - "name": "IsStuck", - "sentence": "_PARAM1_ is stuck to _PARAM3_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const stickerBehaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\n/** @type {Hashtable} */\nconst stickerObjectsLists = eventsFunctionContext.getObjectsLists(\"Object\");\n/** @type {Hashtable} */\nconst basisObjectsLists = eventsFunctionContext.getObjectsLists(\"BasisObject\");\n\neventsFunctionContext.returnValue = gdjs.evtTools.object.twoListsTest(\n (stickerObject, basisObject, stickerBehaviorName) => {\n const behavior = stickerObject.getBehavior(stickerBehaviorName);\n return behavior.basisObject === basisObject;\n },\n stickerObjectsLists,\n basisObjectsLists,\n false,\n stickerBehaviorName\n);", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ + "value": "0", + "type": "Number", + "label": "", + "description": "Distance from the object origin to where the active and inactive bar touch", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ValueOffset" + }, { - "description": "Sticker", - "name": "Object", - "type": "objectList" + "value": "true", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "NeedRedraw" }, { - "description": "Sticker behavior", - "name": "Behavior", - "supplementaryInformation": "Sticker::Sticker", - "type": "behavior" + "value": "easeOutCirc", + "type": "Choice", + "label": "Easing", + "description": "Easing used to change the displayed value of the resource bar. (Note: Changes to the Value property are always instant)", + "group": "", + "extraInformation": [ + "easeOutCirc" + ], + "hidden": false, + "name": "Easing" }, { - "description": "Basis", - "name": "BasisObject", - "type": "objectList" + "value": "0.05", + "type": "Number", + "label": "Easing speed (Range: 0 to 1)", + "description": "Higher values mean faster movement. Value of \"1\" means instant change.", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "EasingSpeed" } ], - "objectGroups": [] - } - ], - "eventsBasedBehaviors": [ + "sharedPropertyDescriptors": [] + }, { - "description": "Stick the object to another. Use the action to stick the object, or unstick it later.", - "fullName": "Sticker", - "name": "Sticker", + "description": "Displays a line of objects that represent a resource in the game (hearts, lives, ammo, etc). \nUse the same image for the resource bar and the unit objects.", + "fullName": "Resource bar (sprite)", + "name": "ResourceBar_Sprite", "objectType": "", "eventsFunctions": [ { @@ -15680,11 +14978,21 @@ "sentence": "", "events": [ { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\nconst object = objects[0];\nconst behavior = object.getBehavior(behaviorName);\n\n// Set up the scene sticker objects list - if not done already.\nif (!runtimeScene.__allStickers)\n runtimeScene.__allStickers = new Set();\n\n// Set up the behavior extra methods - if not done already.\nconst prototype = Object.getPrototypeOf(behavior);\nif (!prototype.updateRelativeCoordinates) {\n // Unstick from deleted objects.\n gdjs.registerObjectDeletedFromSceneCallback(function (runtimeScene, deletedObject) {\n if (!runtimeScene.__allStickers) return;\n\n for (const sticker of runtimeScene.__allStickers) {\n if (sticker.basisObject === deletedObject) {\n sticker.basisObject = null;\n }\n }\n });\n\n /**\n * Update the coordinates in the basisObject basis.\n * \n * It uses the basisObject coordinates from the previous frame.\n * This way, the sticker can move relatively to it and still\n * follow basisObject.\n * \n * @param {gdjs.RuntimeObject} basisObject\n */\n prototype.updateRelativeCoordinates = function (basisObject) {\n const object = this.owner;\n\n // Update relative coordinates\n this.relativeX = object.getX() - this.basisOldX;\n this.relativeY = object.getY() - this.basisOldY;\n if (!this._getOnlyFollowPosition()) {\n this.relativeAngle = object.getAngle() - this.basisOldAngle;\n this.relativeWidth = object.getWidth() / this.basisOldWidth;\n this.relativeHeight = object.getHeight() / this.basisOldHeight;\n const deltaX = object.getCenterXInScene() - this.basisOldCenterXInScene;\n const deltaY = object.getCenterYInScene() - this.basisOldCenterYInScene;\n const angle = this.basisOldAngle * Math.PI / 180;\n this.relativeRotatedX = (deltaX * Math.cos(angle) + deltaY * Math.sin(angle)) / this.basisOldWidth;\n this.relativeRotatedY = (-deltaX * Math.sin(angle) + deltaY * Math.cos(angle)) / this.basisOldHeight;\n\n // Save initial values to avoid calculus and rounding errors\n this.basisOriginalWidth = basisObject.getWidth();\n this.basisOriginalHeight = basisObject.getHeight();\n this.basisOriginalAngle = basisObject.getAngle();\n }\n }\n\n /**\n * Copy the coordinates to use it the next frame.\n * @param basisObject {gdjs.RuntimeObject}\n */\n prototype.updateOldCoordinates = function (basisObject) {\n const object = this.owner;\n\n this.ownerOldX = object.getX();\n this.ownerOldY = object.getY();\n\n this.basisOldX = basisObject.getX();\n this.basisOldY = basisObject.getY();\n\n if (!this._getOnlyFollowPosition()) {\n this.ownerOldAngle = object.getAngle();\n this.ownerOldWidth = object.getWidth();\n this.ownerOldHeight = object.getHeight();\n\n this.basisOldAngle = basisObject.getAngle();\n this.basisOldWidth = basisObject.getWidth();\n this.basisOldHeight = basisObject.getHeight();\n this.basisOldCenterXInScene = basisObject.getCenterXInScene();\n this.basisOldCenterYInScene = basisObject.getCenterYInScene();\n }\n }\n /**\n * Follow the basisObject (called in doStepPostEvents).\n * \n * This method is also called by children to ensure\n * parents are updated first.\n */\n prototype.followBasisObject = function () {\n if (this.followingDoneThisFrame) {\n return;\n }\n this.followingDoneThisFrame = true;\n /** @type {gdjs.RuntimeObject} */\n const basisObject = this.basisObject;\n if (basisObject) {\n // If the behavior on the basis object has a different name,\n // the objects will still follow their basis objects\n // but frame delays could happen.\n if (basisObject.hasBehavior(behaviorName)) {\n const basisBehavior = basisObject.getBehavior(behaviorName);\n if (basisBehavior.type === this.type) {\n // Follow parents 1st to avoid frame delays\n basisBehavior.followBasisObject();\n }\n }\n\n const object = this.owner;\n\n if (this._getOnlyFollowPosition()) {\n if (object.getX() !== this.ownerOldX\n || object.getY() !== this.ownerOldY) {\n this.updateRelativeCoordinates(basisObject);\n }\n\n if (this.basisOldX !== basisObject.getX() ||\n this.basisOldY !== basisObject.getY()) {\n object.setPosition(\n basisObject.getX() + this.relativeX,\n basisObject.getY() + this.relativeY);\n }\n } else {\n if (object.getX() !== this.ownerOldX\n || object.getY() !== this.ownerOldY\n || object.getAngle() !== this.ownerOldAngle\n || object.getWidth() !== this.ownerOldWidth\n || object.getHeight() !== this.ownerOldHeight) {\n this.updateRelativeCoordinates(basisObject);\n }\n\n // Follow basisObject\n if (basisObject.getAngle() === this.basisOriginalAngle && this.basisOriginalAngle === 0) {\n if (basisObject.getWidth() === this.basisOriginalWidth ||\n basisObject.getHeight() === this.basisOriginalHeight) {\n if (this.basisOldX !== basisObject.getX() ||\n this.basisOldY !== basisObject.getY()) {\n object.setPosition(\n basisObject.getX() + this.relativeX,\n basisObject.getY() + this.relativeY);\n }\n } else {\n object.setPosition(\n basisObject.getX() + this.relativeRotatedX * basisObject.getWidth(),\n basisObject.getY() + this.relativeRotatedY * basisObject.getHeight());\n }\n } else {\n object.setAngle(basisObject.getAngle() + this.relativeAngle);\n\n const deltaX = this.relativeRotatedX * basisObject.getWidth();\n const deltaY = this.relativeRotatedY * basisObject.getHeight();\n const angle = -basisObject.getAngle() * Math.PI / 180;\n object.setX(basisObject.getCenterXInScene() + object.getX() - object.getCenterXInScene() + deltaX * Math.cos(angle) + deltaY * Math.sin(angle));\n object.setY(basisObject.getCenterYInScene() + object.getY() - object.getCenterYInScene() - deltaX * Math.sin(angle) + deltaY * Math.cos(angle));\n }\n // Unproportional dimensions changes won't work as expected\n // if the object angle is not null but nothing more can be done\n // because there is no full affine transformation on objects.\n if (basisObject.getWidth() !== this.basisOriginalWidth) {\n object.setWidth(this.relativeWidth * basisObject.getWidth());\n }\n if (basisObject.getHeight() !== this.basisOriginalHeight) {\n object.setHeight(this.relativeHeight * basisObject.getHeight());\n }\n }\n\n this.updateOldCoordinates(basisObject);\n }\n }\n}\n\n// Register this object as a sticker.\nruntimeScene.__allStickers.add(behavior);\n", - "parameterObjects": "Object", - "useStrict": true, - "eventsSheetExpanded": true + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyCurrentQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyStartingQuantity()" + ] + } + ] } ], "parameters": [ @@ -15696,579 +15004,551 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "Sticker::Sticker", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", "type": "behavior" } ], "objectGroups": [] }, { - "fullName": "", + "description": "Draw a resource bar made from sprite objects.", + "fullName": "Draw a resource bar (sprite)", "functionType": "Action", - "name": "doStepPreEvents", - "sentence": "", + "name": "DrawResourceBar", + "sentence": "Draw a resource bar located at _PARAM0_ that is made from _PARAM2_", "events": [ { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\nconst object = objects[0];\nconst behavior = object.getBehavior(behaviorName);\n\nbehavior.followingDoneThisFrame = false;", - "parameterObjects": "Object", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Create unit objects", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "infiniteLoopWarning": true, + "type": "BuiltinCommonInstructions::While", + "whileConditions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::PropertyNextUnitToCreate" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "max(Object.Behavior::PropertyCurrentQuantity(),Object.Behavior::PropertyMaxQuantity())" + ] + } + ], + "conditions": [], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "UnitObject", + "Object.X() + Object.Width() * (Object.Behavior::PropertyNextUnitToCreate())", + "Object.Y()", + "Object.Layer()" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "UnitObject", + "__ResourceBar.UnitID", + "=", + "Object.Behavior::PropertyNextUnitToCreate()" + ] + }, + { + "type": { + "value": "LinkedObjects::LinkObjects" + }, + "parameters": [ + "", + "Object", + "UnitObject" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyNextUnitToCreate" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + } + ] + } + ] + } + ], + "parameters": [] }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Sticker::Sticker", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "fullName": "", - "functionType": "Action", - "name": "doStepPostEvents", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\nconst object = objects[0];\nconst behavior = object.getBehavior(behaviorName);\n\nbehavior.followBasisObject();", - "parameterObjects": "Object", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Sticker::Sticker", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Stick on another object.", - "fullName": "Stick", - "functionType": "Action", - "name": "Stick", - "sentence": "Stick _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const object = objects[0];\nconst behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\nconst basisObjects = eventsFunctionContext.getObjects(\"BasisObject\");\n\nif (basisObjects.length === 0) return;\nconst basisObject = basisObjects[0];\n\nconst behavior = object.getBehavior(behaviorName);\n\nbehavior.basisObject = basisObject;\nbehavior.updateOldCoordinates(basisObject);\nbehavior.updateRelativeCoordinates(basisObject);\n", - "parameterObjects": "Object", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Sticker::Sticker", - "type": "behavior" - }, - { - "description": "Object to stick to", - "name": "BasisObject", - "type": "objectList" - } - ], - "objectGroups": [] - }, - { - "description": "Unstick from the object it was stuck to.", - "fullName": "Unstick", - "functionType": "Action", - "name": "Unstick", - "sentence": "Unstick _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const object = objects[0];\nconst behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\nconst behavior = object.getBehavior(behaviorName);\n\nbehavior.basisObject = null;", - "parameterObjects": "Object", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Sticker::Sticker", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "fullName": "", - "functionType": "Action", - "name": "onDestroy", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\nconst object = objects[0];\nconst behavior = object.getBehavior(behaviorName);\n\nif (runtimeScene.__allStickers)\n runtimeScene.__allStickers.delete(behavior);\n", - "parameterObjects": "Object", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Sticker::Sticker", - "type": "behavior" - } - ], - "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "", - "type": "Boolean", - "label": "Only follow the position", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "OnlyFollowPosition" - } - ], - "sharedPropertyDescriptors": [] - } - ], - "eventsBasedObjects": [] - }, - { - "author": "Tristan Rhodes (https://victrisgames.itch.io/)", - "category": "", - "extensionNamespace": "", - "fullName": "Shake Object (position, angle, scale)", - "helpPath": "https://victrisgames.itch.io/gdevelop-camera-shake-example", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWFycm93LWFsbCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xMywxMUgxOEwxNi41LDkuNUwxNy45Miw4LjA4TDIxLjg0LDEyTDE3LjkyLDE1LjkyTDE2LjUsMTQuNUwxOCwxM0gxM1YxOEwxNC41LDE2LjVMMTUuOTIsMTcuOTJMMTIsMjEuODRMOC4wOCwxNy45Mkw5LjUsMTYuNUwxMSwxOFYxM0g2TDcuNSwxNC41TDYuMDgsMTUuOTJMMi4xNiwxMkw2LjA4LDguMDhMNy41LDkuNUw2LDExSDExVjZMOS41LDcuNUw4LjA4LDYuMDhMMTIsMi4xNkwxNS45Miw2LjA4TDE0LjUsNy41TDEzLDZWMTFaIiAvPjwvc3ZnPg==", - "name": "ShakeObject", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/arrow-all.svg", - "shortDescription": "Shake an object, using one or more ways to shake (position, angle, scale).", - "version": "1.5.5", - "description": "Select one or more methods of shaking:\n- Position: Shake the X and/or Y position of the object \n- Angle: Shake the angle (rotation) of the object \n- Scale: Shake the scale of the object (must be a sprite)\n\nControl how the object shakes:\n- Amplitude: How far the object moves during each shake\n- Duration: Amount of time to shake the object\n- Time between shakes: Amount of time between each movement of the object\n- Keep shaking until stopped (boolean)\n\nTips:\n- For a single-shake effect, set the \"Time between shakes\" to be equal to \"Duration\" (great for a hit or impact)\n- To make the single-shake move in the opposite direction, use negative numbers \n- To repeat a single-shake effect in a loop, add a condition \"Object is not shaking\" \n- Use a long \"Time between shakes\" to simulate a slow moving object (like a ship rocking back and forth)\n- Make sure to \"Stop shaking\" before starting a new shake if it uses different parameters. \n- Use \"Shake until stopped\" to simulate engine vibration, earthquake, or pulsing", - "origin": { - "identifier": "ShakeObject", - "name": "gdevelop-extension-store" - }, - "tags": [ - "shaking", - "object", - "effect", - "shake", - "scale", - "position", - "rotate", - "angle" - ], - "authorIds": [ - "gqDaZjCfevOOxBYkK6zlhtZnXCg1" - ], - "dependencies": [], - "eventsFunctions": [], - "eventsBasedBehaviors": [ - { - "description": "Shake an object, using one or more ways to shake (position, angle).\nThis behavior can be used on any type of object.", - "fullName": "Shake object (position, angle)", - "name": "ShakeObject_PositionAngle", - "objectType": "", - "eventsFunctions": [ - { - "description": "Shake an object, using one or more ways to shake (position, angle).", - "fullName": "Shake object (position, angle)", - "functionType": "Action", - "name": "ShakeObject_PositionAngle", - "sentence": "Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_. Wait _PARAM6_ seconds between shakes. Keep shaking until stopped: _PARAM7_", - "events": [ { "colorB": 228, "colorG": 176, "colorR": 74, "creationTime": 0, - "name": "Shake Object", + "name": "Update state of units", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Start/Reset duration timer", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "conditions": [ { "type": { - "value": "ResetObjectTimer" + "value": "LinkedObjects::PickObjectsLinkedTo" }, "parameters": [ + "", + "UnitObject", "Object", - "\"__ShakeObject_DurationTimer\"" + "" ] } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Pass input parameters to global variables so that onScenePostEvents can use them", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_Duration", - "=", - "GetArgumentAsNumber(\"Duration\")" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "=", - "GetArgumentAsNumber(\"PowerX\")" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "=", - "GetArgumentAsNumber(\"PowerY\")" - ] - }, + ], + "actions": [], + "events": [ { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerAngle", - "=", - "GetArgumentAsNumber(\"PowerAngle\")" + "type": "BuiltinCommonInstructions::ForEach", + "object": "UnitObject", + "conditions": [], + "actions": [], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Delete units higher than max unit value", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Behavior::PropertyMaxQuantity()", + "!=", + "0" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "UnitObject.Variable(__ResourceBar.UnitID)", + ">", + "Object.Behavior::PropertyMaxQuantity()" + ] + } + ], + "actions": [ + { + "type": { + "value": "Delete" + }, + "parameters": [ + "UnitObject", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Update non-empty units", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "UnitObject.Variable(__ResourceBar.UnitID)", + "<", + "Object.Behavior::PropertyCurrentQuantity()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeColor" + }, + "parameters": [ + "UnitObject", + "Object.Behavior::PropertyActiveUnitColorTint()" + ] + }, + { + "type": { + "value": "Opacity" + }, + "parameters": [ + "UnitObject", + "=", + "Object.Behavior::PropertyActiveUnitOpacity()" + ] + }, + { + "type": { + "value": "ChangeAnimation" + }, + "parameters": [ + "UnitObject", + "=", + "Object.Behavior::PropertyActiveUnitAnimationNumber()" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Update empty units", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "UnitObject.Variable(__ResourceBar.UnitID)", + ">=", + "Object.Behavior::PropertyCurrentQuantity()" + ] + } + ], + "actions": [], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Color tint", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Only apply color if it has changed from default value", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "Object.Behavior::PropertyEmptyUnitColorTint()", + "!=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeColor" + }, + "parameters": [ + "UnitObject", + "Object.Behavior::PropertyEmptyUnitColorTint()" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Opacity", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Opacity" + }, + "parameters": [ + "UnitObject", + "=", + "Object.Behavior::PropertyEmptyUnitOpacity()" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Animation", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ChangeAnimation" + }, + "parameters": [ + "UnitObject", + "=", + "Object.Behavior::PropertyEmptyUnitAnimationNumber()" + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + } ] }, { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_TimeBetweenShakes", - "=", - "GetArgumentAsNumber(\"TimeBetweenShakes\")" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Update counter", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyNextUnitToCreate" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "PickedInstancesCount(UnitObject)" + ] + } ] } ] - }, + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "type": "behavior" + }, + { + "description": "Object used to display each unit", + "name": "UnitObject", + "supplementaryInformation": "Sprite", + "type": "objectList" + } + ], + "objectGroups": [] + }, + { + "description": "Apply color tint to empty units. Empty units exist between the current and maximum value.", + "fullName": "Color tint of empty units", + "functionType": "Action", + "name": "SetEmptyUnitColor", + "sentence": "Apply color tint _PARAM2_ to empty units of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyEmptyUnitColorTint" }, - "comment": "Determine if the shake should keep going until stopped", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetObjectVariableAsBoolean" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeForever", - "False" - ] - } + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsString(\"ColorTint\")", + "" ] - }, + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "type": "behavior" + }, + { + "description": "Color tint", + "longDescription": "Use \"white\" to remove all color tint", + "name": "ColorTint", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "Apply color tint to active units.", + "fullName": "Color tint of active units", + "functionType": "Action", + "name": "SetActiveUnitColor", + "sentence": "Apply color tint _PARAM2_ to active units of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"ShakeForever\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetObjectVariableAsBoolean" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeForever", - "True" - ] - } + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyActiveUnitColorTint" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsString(\"ColorTint\")", + "" ] - }, + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "type": "behavior" + }, + { + "description": "Color tint", + "longDescription": "Use \"white\" to remove all color tint", + "name": "ColorTint", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "Change the opacity of empty units. Empty units exist between the current and maximum value.", + "fullName": "Opacity of empty units", + "functionType": "Action", + "name": "SetEmptyUnitOpacity", + "sentence": "Change the opacity of empty units of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyEmptyUnitOpacity" }, - "comment": "Add default values if none were provided", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_Duration", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_Duration", - "=", - "0.5" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_TimeBetweenShakes", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_TimeBetweenShakes", - "=", - "0.08" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "If duration is less than a single shake, increase duration to make 1 full shake", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_Duration", - "<", - "Object.Variable(__ShakeObject_TimeBetweenShakes)" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_Duration", - "=", - "Object.Variable(__ShakeObject_TimeBetweenShakes)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Detect initial shake", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_InitialShake", - "=", - "1" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Initiate the onScenePostEvents function", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "1" - ] - } + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Opacity\")" ] } - ], - "parameters": [] + ] } ], "parameters": [ @@ -16280,9932 +15560,4346 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngle", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", "type": "behavior" }, { - "description": "Duration of shake (in seconds) (Default: 0.5) ", - "name": "Duration", + "description": "Opacity of empty units", + "longDescription": "Range: 0 to 255", + "name": "Opacity", "type": "expression" - }, + } + ], + "objectGroups": [] + }, + { + "description": "Change the opacity of active units. ", + "fullName": "Opacity of active units", + "functionType": "Action", + "name": "SetActiveUnitOpacity", + "sentence": "Change the opacity of active units of _PARAM0_ to _PARAM2_", + "events": [ { - "description": "Amplitude of postion shake in X direction (in pixels) (For example: 5)", - "name": "PowerX", - "type": "expression" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyActiveUnitOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Opacity\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" }, { - "description": "Amplitude of position shake in Y direction (in pixels) (For example: 5)", - "name": "PowerY", - "type": "expression" + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "type": "behavior" }, { - "description": "Amplitude of angle rotation shake (in degrees) (For example: 5)", - "name": "PowerAngle", + "description": "Opacity of active units", + "longDescription": "Range: 0 to 255", + "name": "Opacity", "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the animation of empty units. Empty units exist between the current and maximum value.", + "fullName": "Animation of empty units", + "functionType": "Action", + "name": "SetEmptyUnitAnimation", + "sentence": "Change the animation of empty units of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyEmptyUnitAnimationNumber" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"AnimationNumber\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" }, { - "description": "Amount of time between shakes (in seconds) (Default: 0.08)", - "name": "TimeBetweenShakes", - "type": "expression" + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "type": "behavior" }, { - "description": "Keep shaking until stopped", - "longDescription": "Duration value will be ignored", - "name": "ShakeForever", - "type": "yesorno" + "description": "Animation number", + "name": "AnimationNumber", + "type": "expression" } ], "objectGroups": [] }, { - "fullName": "", + "description": "Change maximum units that can be displayed.", + "fullName": "Maximum units", "functionType": "Action", - "name": "doStepPostEvents", - "sentence": "", + "name": "SetMaxQuantity", + "sentence": "Change maximum units of _PARAM0_ to _PARAM2_", "events": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Shake Object", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Start shaking", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "1" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Keep object shaking forever (if desired)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ObjectVariableAsBoolean" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeForever", - "True" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_Duration", - "=", - "100" - ] - }, - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_DurationTimer\"" - ] - } - ] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Calculate movement of the shake", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Run once before every shake movement", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_InitialShake", - "=", - "1" - ] - }, - { - "type": { - "value": "ObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_ShakeTimer\"", - "Object.Variable(__ShakeObject_TimeBetweenShakes)" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_ShakeTimer\"" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeCounter", - "+", - "1" - ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Correct for drift and reset drift tracking variables", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move to correct any drift from previous shake", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - }, - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "MettreX" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_DisplacementTravelledX)" - ] - }, - { - "type": { - "value": "MettreY" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_DisplacementTravelledY)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerAngle", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetAngle" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_AngleTravelled)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Reset drift detection variables", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledX", - "=", - "0" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledY", - "=", - "0" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_AngleTravelled", - "=", - "0" - ] - } - ] - } - ], - "parameters": [] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Calculate Position Shake", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - }, - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "PositionDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude * [-1 or 1]", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make initial shake NOT random so users can set a direction for a one-shake effect", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_InitialShake", - "=", - "1" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementX", - "=", - "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerX)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementY", - "=", - "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerY)" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "After initial shake pick a random direction", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_InitialShake", - "=", - "0" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementX", - "=", - "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerX) * RandomWithStep(-1, 1, 2)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementY", - "=", - "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerY) * RandomWithStep(-1, 1, 2)" - ] - } - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Calculate Rotation (angle) shake ", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerAngle", - "!=", - "0" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Every \"even\" shake, rotate clockwise", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "AngleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementAngle", - "=", - "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerAngle)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Every \"odd\" shake, rotate counter-clockwise", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "AngleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", - "=", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementAngle", - "=", - "-1 *(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerAngle)" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Save that initial shake has been processed", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_InitialShake", - "=", - "0" - ] - } - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Move object", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Calculate the fraction of shake that occured during this frame", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PercentTimeElapsedThisFrame", - "=", - "min(1,TimeDelta()/Object.Variable(__ShakeObject_TimeBetweenShakes))" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Increase change for the first half of the shake (move away from original values)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "ObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_ShakeTimer\"", - "Object.Variable(__ShakeObject_TimeBetweenShakes)/2" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Change position", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - }, - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "MettreX" - }, - "parameters": [ - "Object", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - }, - { - "type": { - "value": "MettreY" - }, - "parameters": [ - "Object", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Save movement to calculate drift", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledX", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledY", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Change angle", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Variable(__ShakeObject_PowerAngle)", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetAngle" - }, - "parameters": [ - "Object", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Save movement to calculate drift", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_AngleTravelled", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Decrease change the second half of the shake (return to original position)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_ShakeTimer\"", - "Object.Variable(__ShakeObject_TimeBetweenShakes)/2" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Change position", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - }, - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "MettreX" - }, - "parameters": [ - "Object", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - }, - { - "type": { - "value": "MettreY" - }, - "parameters": [ - "Object", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Save movement to calculate drift", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledX", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledY", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Change angle", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Variable(__ShakeObject_PowerAngle)", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetAngle" - }, - "parameters": [ - "Object", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Save movement to calculate drift", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_AngleTravelled", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ] - } - ] - } - ] - } - ], - "parameters": [] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Stop shaking", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Stop shaking when the duration has been reached (or if the stop shaking function was called)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "ObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_DurationTimer\"", - "Object.Variable(__ShakeObject_Duration)" - ] - }, - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "-1" - ] - } - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "0" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeCounter", - "=", - "0" - ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Correct for drift and reset drift tracking variables", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move to correct any drift from previous shake", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - }, - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "MettreX" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_DisplacementTravelledX)" - ] - }, - { - "type": { - "value": "MettreY" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_DisplacementTravelledY)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerAngle", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetAngle" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_AngleTravelled)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Reset drift detection variables", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledX", - "=", - "0" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledY", - "=", - "0" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_AngleTravelled", - "=", - "0" - ] - } - ] - } - ], - "parameters": [] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngle", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Stop any shaking of object that was initiated by the Shake Object extension.", - "fullName": "Stop shaking the object", - "functionType": "Action", - "name": "StopShaking", - "sentence": "Stop shaking _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ShakeObject::ShakeObject_PositionAngle::IsShaking" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "-1" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngle", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if an object is shaking.", - "fullName": "Check if an object is shaking", - "functionType": "Condition", - "name": "IsShaking", - "sentence": "_PARAM0_ is shaking", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngle", - "type": "behavior" - } - ], - "objectGroups": [] - } - ], - "propertyDescriptors": [], - "sharedPropertyDescriptors": [] - }, - { - "description": "Shake an object, using one or more ways to shake (position, angle, scale)\nThis behavior can only be used on sprite objects.", - "fullName": "Shake object (position, angle, scale)", - "name": "ShakeObject_PositionAngleScale", - "objectType": "Sprite", - "eventsFunctions": [ - { - "description": "Shake an object, using one or more ways to shake (position, angle, scale).", - "fullName": "Shake object (position, angle, scale)", - "functionType": "Action", - "name": "ShakeObject_PositionAngleScale", - "sentence": "Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_, and scale amplitude _PARAM6_. Wait _PARAM7_ seconds between shakes. Keep shaking until stopped: _PARAM8_", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Shake Object", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Start/Reset duration timer", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_DurationTimer\"" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Pass input parameters to global variables so that onScenePostEvents can use them", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_Duration", - "=", - "GetArgumentAsNumber(\"Duration\")" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "=", - "GetArgumentAsNumber(\"PowerX\")" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "=", - "GetArgumentAsNumber(\"PowerY\")" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerAngle", - "=", - "GetArgumentAsNumber(\"PowerAngle\")" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerScale", - "=", - "GetArgumentAsNumber(\"PowerScale\")" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_TimeBetweenShakes", - "=", - "GetArgumentAsNumber(\"TimeBetweenShakes\")" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Determine if the shake should keep going until stopped", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetObjectVariableAsBoolean" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeForever", - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"ShakeForever\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetObjectVariableAsBoolean" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeForever", - "True" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Add default values if none were provided", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_Duration", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_Duration", - "=", - "0.5" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_TimeBetweenShakes", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_TimeBetweenShakes", - "=", - "0.08" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "If duration is less than a single shake, increase duration to make 1 full shake", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_Duration", - "<", - "Object.Variable(__ShakeObject_TimeBetweenShakes)" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_Duration", - "=", - "Object.Variable(__ShakeObject_TimeBetweenShakes)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Detect initial shake", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_InitialShake", - "=", - "1" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Initiate the onScenePostEvents function", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "1" - ] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "Sprite", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngleScale", - "type": "behavior" - }, - { - "description": "Duration of shake (in seconds) (Default: 0.5)", - "name": "Duration", - "type": "expression" - }, - { - "description": "Amplitude of postion shake in X direction (in pixels) (For example: 5)", - "name": "PowerX", - "type": "expression" - }, - { - "description": "Amplitude of position shake in Y direction (in pixels) (For example: 5)", - "name": "PowerY", - "type": "expression" - }, - { - "description": "Amplitude of angle rotation shake (in degrees) (For example: 5)", - "name": "PowerAngle", - "type": "expression" - }, - { - "description": "Amplitude of scale shake (in percent change) (For example: 5)", - "name": "PowerScale", - "type": "expression" - }, - { - "description": "Amount of time between shakes (in seconds) (Default: 0.08)", - "name": "TimeBetweenShakes", - "type": "expression" - }, - { - "description": "Keep shaking until stopped", - "longDescription": "Duration value will be ignored", - "name": "ShakeForever", - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "fullName": "", - "functionType": "Action", - "name": "doStepPostEvents", - "sentence": "", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Shake Object", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Start shaking", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "1" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Keep object shaking forever (if desired)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ObjectVariableAsBoolean" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeForever", - "True" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_Duration", - "=", - "100" - ] - }, - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_DurationTimer\"" - ] - } - ] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Calculate movement of the shake", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Run once before every shake movement", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_InitialShake", - "=", - "1" - ] - }, - { - "type": { - "value": "ObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_ShakeTimer\"", - "Object.Variable(__ShakeObject_TimeBetweenShakes)" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_ShakeTimer\"" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeCounter", - "+", - "1" - ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "folded": true, - "name": "Correct for drift and reset drift tracking variables", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move to correct any drift from previous shake", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - }, - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "MettreX" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_DisplacementTravelledX)" - ] - }, - { - "type": { - "value": "MettreY" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_DisplacementTravelledY)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerAngle", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetAngle" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_AngleTravelled)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerScale", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ChangeScale" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_ScaleTravelled)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Reset drift detection variables", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledX", - "=", - "0" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledY", - "=", - "0" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_AngleTravelled", - "=", - "0" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ScaleTravelled", - "=", - "0" - ] - } - ] - } - ], - "parameters": [] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Calculate Position Shake", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - }, - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "PositionDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude * [-1 or 1]", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make initial shake NOT random so users can set a direction for a one-shake effect", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_InitialShake", - "=", - "1" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementX", - "=", - "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerX)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementY", - "=", - "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerY)" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "After initial shake pick a random direction", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_InitialShake", - "=", - "0" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementX", - "=", - "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerX) * RandomWithStep(-1, 1, 2)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementY", - "=", - "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerY) * RandomWithStep(-1, 1, 2)" - ] - } - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Calculate Rotation (angle) shake ", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerAngle", - "!=", - "0" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Every \"even\" shake, rotate clockwise", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "AngleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementAngle", - "=", - "-1 * (Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerAngle)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Every \"odd\" shake, rotate counter-clockwise", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "AngleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", - "=", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementAngle", - "=", - "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerAngle)" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Calculate Scale shake", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerScale", - "!=", - "0" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Calculate object scale displacement, with linear decay over time", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "ScaleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude * 1/100", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Every even shake, increase scale", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementScale", - "=", - "-1 * (Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerScale) * (1/100)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Every \"odd\" shake, decrease scale", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "ScaleDisplacement = -1 * (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude * 1/100", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", - "=", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementScale", - "=", - "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerScale) * (1/100)" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Save that initial shake has been processed", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_InitialShake", - "=", - "0" - ] - } - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Move object", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Calculate the fraction of shake that occured during this frame", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PercentTimeElapsedThisFrame", - "=", - "min(1,TimeDelta()/Object.Variable(__ShakeObject_TimeBetweenShakes))" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Increase change for the first half of the shake (move away from original values)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "ObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_ShakeTimer\"", - "Object.Variable(__ShakeObject_TimeBetweenShakes)/2" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Change position", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - }, - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "MettreX" - }, - "parameters": [ - "Object", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - }, - { - "type": { - "value": "MettreY" - }, - "parameters": [ - "Object", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Save movement to calculate drift", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledX", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledY", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Change angle", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Variable(__ShakeObject_PowerAngle)", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetAngle" - }, - "parameters": [ - "Object", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Save movement to calculate drift", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_AngleTravelled", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Change scale", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Variable(__ShakeObject_PowerScale)", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ChangeScale" - }, - "parameters": [ - "Object", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementScale) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Save movement to calculate drift", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ScaleTravelled", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementScale) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Decrease change the second half of the shake (return to original position)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_ShakeTimer\"", - "Object.Variable(__ShakeObject_TimeBetweenShakes)/2" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Change position", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - }, - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "MettreX" - }, - "parameters": [ - "Object", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - }, - { - "type": { - "value": "MettreY" - }, - "parameters": [ - "Object", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Save movement to calculate drift", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledX", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledY", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Change angle", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Variable(__ShakeObject_PowerAngle)", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetAngle" - }, - "parameters": [ - "Object", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Save movement to calculate drift", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_AngleTravelled", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Change scale", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Variable(__ShakeObject_PowerScale)", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ChangeScale" - }, - "parameters": [ - "Object", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementScale) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Save movement to calculate drift", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ScaleTravelled", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementScale) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ] - } - ] - } - ] - } - ], - "parameters": [] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Stop shaking", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Stop shaking when the duration has been reached (or if the stop shaking function was called)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "ObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_DurationTimer\"", - "Object.Variable(__ShakeObject_Duration)" - ] - }, - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "-1" - ] - } - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "0" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeCounter", - "=", - "0" - ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Correct for drift and reset drift tracking variables", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move to correct any drift from previous shake", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - }, - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "MettreX" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_DisplacementTravelledX)" - ] - }, - { - "type": { - "value": "MettreY" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_DisplacementTravelledY)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerAngle", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetAngle" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_AngleTravelled)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerScale", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ChangeScale" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_ScaleTravelled)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Reset drift detection variables", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledX", - "=", - "0" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledY", - "=", - "0" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_AngleTravelled", - "=", - "0" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ScaleTravelled", - "=", - "0" - ] - } - ] - } - ], - "parameters": [] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "Sprite", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngleScale", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Stop shaking an object.", - "fullName": "Stop shaking an object", - "functionType": "Action", - "name": "StopShaking", - "sentence": "Stop shaking _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ShakeObject::ShakeObject_PositionAngleScale::IsShaking" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "-1" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "Sprite", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngleScale", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if an object is shaking.", - "fullName": "Check if an object is shaking", - "functionType": "Condition", - "name": "IsShaking", - "sentence": "_PARAM0_ is shaking", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "Sprite", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngleScale", - "type": "behavior" - } - ], - "objectGroups": [] - } - ], - "propertyDescriptors": [], - "sharedPropertyDescriptors": [] - } - ], - "eventsBasedObjects": [] - }, - { - "author": "VegeTato, arthuro555", - "category": "", - "extensionNamespace": "", - "fullName": "Repeat every X seconds", - "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXJlcGVhdCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNywxN0g3VjE0TDMsMThMNywyMlYxOUgxOVYxM0gxN003LDdIMTdWMTBMMjEsNkwxNywyVjVINVYxMUg3VjdaIiAvPjwvc3ZnPg==", - "name": "RepeatEveryXSeconds", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/repeat.svg", - "shortDescription": "This allows to trigger an event every X seconds.", - "version": "0.1.0", - "description": "Convenience conditions, actions and behaviors for timers to trigger a condition every X seconds.", - "origin": { - "identifier": "RepeatEveryXSeconds", - "name": "gdevelop-extension-store" - }, - "tags": [ - "repeat", - "timer", - "time", - "convenience" - ], - "authorIds": [ - "ZgrsWuRTAkXgeuPV9bo0zuEcA2w1", - "IRIhkkTTl2UHhfjrLTTH5GYwkYu1" - ], - "dependencies": [], - "eventsFunctions": [ - { - "description": "Triggers every X seconds.", - "fullName": "Repeat every X seconds", - "functionType": "Condition", - "name": "Repeat", - "sentence": "Repeat timer _PARAM1_ every _PARAM2_ seconds", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "ResetTimer" - }, - "parameters": [ - "player", - "GetArgumentAsString(\"timerName\")" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Timer" - }, - "parameters": [ - "player", - "GetArgumentAsNumber(\"time\")", - "GetArgumentAsString(\"timerName\")" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResetTimer" - }, - "parameters": [ - "player", - "GetArgumentAsString(\"timerName\")" - ] - }, - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "The name of the timer to loop", - "name": "timerName", - "type": "string" - }, - { - "description": "The time in seconds between each trigger", - "name": "time", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Triggers every X seconds X amount of times.", - "fullName": "Repeat every X seconds in X number", - "functionType": "Condition", - "name": "RepeatXTimes", - "sentence": "Repeat timer _PARAM1_ every _PARAM2_ seconds _PARAM3_ times", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "ResetTimer" - }, - "parameters": [ - "player", - "GetArgumentAsString(\"timerName\")" - ] - }, - { - "type": { - "value": "ModVarScene" - }, - "parameters": [ - "__RepeatEveryXSeconds_.Counter[GetArgumentAsString(\"timerName\")]", - "=", - "0" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Timer" - }, - "parameters": [ - "player", - "GetArgumentAsNumber(\"time\")", - "GetArgumentAsString(\"timerName\")" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "GetArgumentAsNumber(\"limit\")", - "=", - "-1" - ] - }, - { - "type": { - "value": "VarScene" - }, - "parameters": [ - "__RepeatEveryXSeconds_.Counter[GetArgumentAsString(\"timerName\")]", - "<", - "GetArgumentAsNumber(\"limit\")" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "ResetTimer" - }, - "parameters": [ - "player", - "GetArgumentAsString(\"timerName\")" - ] - }, - { - "type": { - "value": "ModVarScene" - }, - "parameters": [ - "__RepeatEveryXSeconds_.Counter[GetArgumentAsString(\"timerName\")]", - "+", - "1" - ] - }, - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "The name of the timer to loop", - "name": "timerName", - "type": "string" - }, - { - "description": "The time in seconds between each trigger", - "name": "time", - "type": "expression" - }, - { - "description": "The limit of loops", - "longDescription": "The condition will trigger at most this amount of times. Make it -1 for looping forever.", - "name": "limit", - "type": "expression" - } - ], - "objectGroups": [] - } - ], - "eventsBasedBehaviors": [ - { - "description": "Allows to repeat an object timer every X seconds.", - "fullName": "Repeat every X seconds", - "name": "RepeatTimer", - "objectType": "", - "eventsFunctions": [ - { - "fullName": "", - "functionType": "Action", - "name": "onCreated", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyTimerName()" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Triggers every X seconds, where X is defined in the behavior properties.", - "fullName": "Repeat every X seconds", - "functionType": "Condition", - "name": "Repeat", - "sentence": "Recurring timer _PARAM1_ of _PARAM0_ has triggered", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ObjectTimer" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyTimerName()", - "Object.Behavior::PropertyTimerLength()" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "RepeatEveryXSeconds::RepeatTimer::PropertyLimit" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "-1" - ] - }, - { - "type": { - "value": "RepeatEveryXSeconds::RepeatTimer::PropertyCounter" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyLimit()" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyTimerName()" - ] - }, - { - "type": { - "value": "RepeatEveryXSeconds::RepeatTimer::SetPropertyCounter" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "1" - ] - }, - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Pauses a recurring timer.", - "fullName": "Pause a recurring timer", - "functionType": "Action", - "name": "Pause", - "sentence": "Pause recurring timer _PARAM1_ of _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PauseObjectTimer" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyTimerName()" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Resumes a paused recurring timer.", - "fullName": "Resume a recurring timer", - "functionType": "Action", - "name": "Resume", - "sentence": "Resume recurring timer _PARAM1_ of _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "UnPauseObjectTimer" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyTimerName()" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Allows to trigger the recurring timer X times again.", - "fullName": "Reset the limit", - "functionType": "Action", - "name": "ResetLimit", - "sentence": "Allow to trigger the recurring timer _PARAM1_ of _PARAM0_ X times again", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "RepeatEveryXSeconds::RepeatTimer::SetPropertyCounter" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", - "type": "behavior" - } - ], - "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "MyTimer", - "type": "String", - "label": "The name of the timer to repeat", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "TimerName" - }, - { - "value": "1", - "type": "Number", - "label": "The time between each trigger (in seconds)", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "TimerLength" - }, - { - "value": "-1", - "type": "Number", - "label": "How many times should the timer trigger? -1 for forever.", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "Limit" - }, - { - "value": "0", - "type": "Number", - "label": "An internal counter", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "Counter" - } - ], - "sharedPropertyDescriptors": [] - } - ], - "eventsBasedObjects": [] - }, - { - "author": "@4ian", - "category": "General", - "extensionNamespace": "", - "fullName": "Health (life) points and shield", - "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWhlYXJ0LWhhbGYtZnVsbCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNi41LDVDMTUsNSAxMy41OCw1LjkxIDEzLDcuMlYxNy43NEMxNy4yNSwxMy44NyAyMCwxMS4yIDIwLDguNUMyMCw2LjUgMTguNSw1IDE2LjUsNU0xNi41LDNDMTkuNTgsMyAyMiw1LjQxIDIyLDguNUMyMiwxMi4yNyAxOC42LDE1LjM2IDEzLjQ1LDIwLjAzTDEyLDIxLjM1TDEwLjU1LDIwLjAzQzUuNCwxNS4zNiAyLDEyLjI3IDIsOC41QzIsNS40MSA0LjQyLDMgNy41LDNDOS4yNCwzIDEwLjkxLDMuODEgMTIsNS4wOEMxMy4wOSwzLjgxIDE0Ljc2LDMgMTYuNSwzWiIgLz48L3N2Zz4=", - "name": "Health", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/heart-half-full.svg", - "shortDescription": "Manage life points and a protective shield.", - "version": "0.1.0", - "description": "Manage health (life) and shield points of an object. Health can be assigned to players, enemies, NPCs, or even inanimate objects such as breaking doors and mining rocks.\n\nHow to use:\n\n- Set desired values in \"Health\" and \"Shield\" behavior properties\n- To apply damage use “Damage an object” or “Damage an object protected by a shield”\n- To heal health, use “Heal object” action \n- To activate the shield, use “Activate Shield” action\n- Health and shield regeneration will happen automatically based on properties\n \nTips:\n\n- While damage cooldown is active, no damage will be applied to health or shield\n- Try using the “Blink” extension while damage cooldown is active\n- Use the “Is just damaged” condition to trigger audio and visual effects\n\nHealth properties:\n\n- Health (life points) Used for starting health\n- Maximum health (0 for no maximum)\n- Damage cooldown (seconds) Use \"0\" for no cooldown\n- Rate of health regeneration (points per second) Will not exceed max health, even with overhealing enabled\n- Delay (seconds) before health regeneration starts after being hit\n- Allow heal to increase health above max health (will not exceed max health)\n\nShield properties:\n\n- Max shield points (Shield will start with this many points when activated)\n- Duration of shield (seconds) Use \"0\" to disable shield timer\n- Rate of shield regeneration (points per second)\n- Shield will block all excess damage when shield is destroyed\n- Delay (seconds) before shield regeneration starts after being hit\n- Regenerate shield when it has zero points\n", - "origin": { - "identifier": "Health", - "name": "gdevelop-extension-store" - }, - "tags": [ - "health", - "life", - "damage", - "hit", - "heal", - "shield", - "regeneration" - ], - "authorIds": [ - "wWP8BSlAW0UP4NeaHa2LcmmDzmH2", - "xpwUwByyImTDcHEqDUqfyg0oRBt1", - "gqDaZjCfevOOxBYkK6zlhtZnXCg1" - ], - "dependencies": [], - "eventsFunctions": [], - "eventsBasedBehaviors": [ - { - "description": "Manage life points by damaging and healing the object.", - "fullName": "Health", - "name": "Health", - "objectType": "", - "eventsFunctions": [ - { - "fullName": "", - "functionType": "Action", - "name": "doStepPreEvents", - "sentence": "", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Regeneration", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Health", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Health::PropertyHealthRegenRate" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "0" - ] - }, - { - "type": { - "value": "Health::Health::PropertyHealth" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::MaxHealth()" - ] - }, - { - "type": { - "value": "CompareObjectTimer" - }, - "parameters": [ - "Object", - "\"__Health.TimeSinceLastHit\"", - ">", - "Object.Behavior::PropertyHealthRegenDelay()" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyHealth" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "Object.Behavior::PropertyHealthRegenRate() * TimeDelta()" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Correct any values above maximum limits", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Health::PropertyHealth" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "Object.Behavior::MaxHealth()" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyHealth" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyMaxHealth()" - ] - } - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Reset damage trigger", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyIsJustDamaged" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Apply damage directly to the object. Damage will not be affected by shield. Triggers damage cooldown.", - "fullName": "Damage an object", - "functionType": "Action", - "group": "Health", - "name": "Hit", - "sentence": "Damage _PARAM0_, removing _PARAM2_ points from its health", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Only consider damage if damage cooldown is NOT active", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "Health::Health::IsDamageCooldownActive" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Mark object was hit at least once (used for initial state of damage cooldown)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "Health::Health::PropertyHitAtLeastOnce" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyHitAtLeastOnce" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Restart time since last hit timer", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__Health.TimeSinceLastHit\"" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Apply damage", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyHealth" - }, - "parameters": [ - "Object", - "Behavior", - "-", - "GetArgumentAsNumber(\"DamageValue\")" - ] - }, - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__Health.DamageCooldown\"" - ] - }, - { - "type": { - "value": "Health::Health::SetPropertyIsJustDamaged" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - }, - { - "description": "Value of the damage to do (will be removed from object health)", - "name": "DamageValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change health points. This is not considered damage.", - "fullName": "Change health points", - "functionType": "Action", - "group": "Health", - "name": "SetHealth", - "sentence": "Set health of _PARAM0_ to _PARAM2_ points", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyHealth" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Health::PropertyMaxHealth" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyHealth" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::PropertyHealth(), Object.Behavior::PropertyMaxHealth())" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - }, - { - "description": "New health value", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Heal the object by increasing its life points.", - "fullName": "Heal object", - "functionType": "Action", - "group": "Health", - "name": "Heal", - "sentence": "Heal _PARAM0_ with _PARAM2_ health points", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Change health points", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyHealth" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "GetArgumentAsNumber(\"HealValue\")" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Prevent exceeding max health (unless overhealing is enabled)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Health::PropertyMaxHealth" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - }, - { - "type": { - "inverted": true, - "value": "Health::Health::PropertyAllowOverHealing" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyHealth" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::PropertyHealth(), Object.Behavior::PropertyMaxHealth())" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - }, - { - "description": "Points to heal (will be added to object health)", - "name": "HealValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the object maximum health points.", - "fullName": "Change maximum health points", - "functionType": "Action", - "group": "Health", - "name": "SetMaxHealth", - "sentence": "Set maximum health of _PARAM0_ to _PARAM2_ points", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyMaxHealth" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - }, - { - "description": "Maximum health", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change rate of health regeneration.", - "fullName": "Change rate of health regeneration", - "functionType": "Action", - "group": "Shield", - "name": "SetHealthRegenRate", - "sentence": "Set rate of health regen of _PARAM0_ to _PARAM2_ points per second", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyHealthRegenRate" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - }, - { - "description": "Rate of regen", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change duration of damage cooldown.", - "fullName": "Change duration of damage cooldown", - "functionType": "Action", - "group": "Health", - "name": "SetCooldownDuration", - "sentence": "Set duration of damage cooldown on _PARAM0_ to _PARAM2_ seconds", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyDamageCooldown" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - }, - { - "description": "Duration of damage cooldown (seconds)", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change delay before health regeneration starts after being hit.", - "fullName": "Change delay before health regeneration starts", - "functionType": "Action", - "group": "Health", - "name": "SetHealthRegenDelay", - "sentence": "Set delay before health regeneration starts on _PARAM0_ to _PARAM2_ seconds", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyHealthRegenDelay" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - }, - { - "description": "Delay (seconds)", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Allow over-healing.", - "fullName": "Allow over-healing", - "functionType": "Action", - "group": "Health", - "name": "AllowOverHealing", - "sentence": "Allow over-healing on _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyAllowOverHealing" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"Value\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyAllowOverHealing" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - }, - { - "description": "Allow over-healing", - "name": "Value", - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Mark object as hit at least once.", - "fullName": "Mark object as hit at least once", - "functionType": "Action", - "group": "Health", - "name": "SetHitAtLeastOnce", - "sentence": "Mark _PARAM0_ as hit at least once: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyHitAtLeastOnce" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"Value\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyHitAtLeastOnce" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - }, - { - "description": "Hit at least once", - "name": "Value", - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Mark object as just damaged.", - "fullName": "Mark object as just damaged", - "functionType": "Action", - "group": "Health", - "name": "SetJustDamaged", - "sentence": "Mark _PARAM0_ as just damaged: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyIsJustDamaged" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"Value\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyIsJustDamaged" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - }, - { - "description": "Just damaged", - "name": "Value", - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the object has been hit at least once.", - "fullName": "Object hit at least once", - "functionType": "Condition", - "group": "Health", - "name": "HitAtLeastOnce", - "sentence": "_PARAM0_ has just been hit at least once", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Health::PropertyHitAtLeastOnce" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the object was just damaged previously in the events.", - "fullName": "Is just damaged", - "functionType": "Condition", - "group": "Health", - "name": "IsJustDamaged", - "sentence": "_PARAM0_ has just been damaged", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Health::PropertyIsJustDamaged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if damage cooldown is active. Object (and shield) cannot be damaged while this is active.", - "fullName": "Is damage cooldown active", - "functionType": "Condition", - "group": "Health", - "name": "IsDamageCooldownActive", - "sentence": "Damage cooldown on _PARAM0_ is active", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Health::PropertyHitAtLeastOnce" - }, - "parameters": [ - "Object", - "Behavior" - ] - }, - { - "type": { - "value": "Health::Health::PropertyDamageCooldown" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - }, - { - "type": { - "value": "CompareObjectTimer" - }, - "parameters": [ - "Object", - "\"__Health.DamageCooldown\"", - "<", - "Object.Behavior::PropertyDamageCooldown()" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the object is considered dead (no health points).", - "fullName": "Is dead", - "functionType": "Condition", - "group": "Health", - "name": "IsDead", - "sentence": "_PARAM0_ is dead", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Health::PropertyHealth" - }, - "parameters": [ - "Object", - "Behavior", - "<=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Maximum health points of the object.", - "fullName": "Maximum health points", - "functionType": "Expression", - "group": "Health", - "name": "MaxHealth", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyMaxHealth()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Duration of damage cooldown (seconds).", - "fullName": "Duration of damage cooldown", - "functionType": "Expression", - "group": "Health", - "name": "DamageCooldownDuration", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyDamageCooldown()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Health points of the object.", - "fullName": "Health points", - "functionType": "Expression", - "group": "Health", - "name": "Health", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyHealth()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Delay before health regeneration starts after last hit (seconds).", - "fullName": "Delay before health regeneration starts", - "functionType": "Expression", - "group": "Health", - "name": "HealthRegenDelay", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyHealthRegenDelay()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Rate of health regeneration (points per second).", - "fullName": "Rate of health regeneration", - "functionType": "Expression", - "group": "Health", - "name": "HealthRegenRate", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyHealthRegenRate()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Time before damage cooldown ends (seconds).", - "fullName": "Time before damage cooldown ends", - "functionType": "Expression", - "group": "Health", - "name": "DamageCooldownRemaining", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "0" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Health::IsDamageCooldownActive" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "max(0,Object.Behavior::PropertyDamageCooldown() - Object.ObjectTimerElapsedTime(\"__Health.DamageCooldown\"))" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Time since last hit (seconds).", - "fullName": "Time since last hit", - "functionType": "Expression", - "group": "Health", - "name": "TimeSinceLastHit", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.ObjectTimerElapsedTime(\"__Health.TimeSinceLastHit\")" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "fullName": "", - "functionType": "Action", - "name": "onCreated", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__Health.DamageCooldown\"" - ] - }, - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__Health.TimeSinceLastHit\"" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "100", - "type": "Number", - "label": "Health (life points) Used for starting health", - "description": "", - "group": "Health", - "extraInformation": [], - "hidden": false, - "name": "Health" - }, - { - "value": "0", - "type": "Number", - "label": "Damage cooldown (seconds) Use \"0\" for no cooldown", - "description": "", - "group": "Health", - "extraInformation": [], - "hidden": false, - "name": "DamageCooldown" - }, - { - "value": "100", - "type": "Number", - "label": "Maximum health (0 for no maximum)", - "description": "", - "group": "Health", - "extraInformation": [], - "hidden": false, - "name": "MaxHealth" - }, - { - "value": "", - "type": "Boolean", - "label": "", - "description": "", - "group": "Health", - "extraInformation": [], - "hidden": true, - "name": "IsJustDamaged" - }, - { - "value": "0", - "type": "Number", - "label": "Rate of health regeneration (points per second) Will not exceed max health, even with overhealing enabled", - "description": "", - "group": "Health", - "extraInformation": [], - "hidden": false, - "name": "HealthRegenRate" - }, - { - "value": "0", - "type": "Number", - "label": "Delay (seconds) before health regen starts after being hit", - "description": "", - "group": "Health", - "extraInformation": [], - "hidden": false, - "name": "HealthRegenDelay" - }, - { - "value": "", - "type": "Boolean", - "label": "Allow heal to increase health above max health (regen will never exceed max health)", - "description": "", - "group": "Health", - "extraInformation": [], - "hidden": false, - "name": "AllowOverHealing" - }, - { - "value": "", - "type": "Boolean", - "label": "", - "description": "", - "group": "Health", - "extraInformation": [], - "hidden": true, - "name": "HitAtLeastOnce" - } - ], - "sharedPropertyDescriptors": [] - }, - { - "description": "Protective shield that prevents damage to health points.", - "fullName": "Shield", - "name": "Shield", - "objectType": "", - "eventsFunctions": [ - { - "fullName": "", - "functionType": "Action", - "name": "doStepPreEvents", - "sentence": "", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Regeneration", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Shield", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Shield::PropertyShieldRegenRate" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "0" - ] - }, - { - "type": { - "value": "Health::Shield::PropertyShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyMaxShieldPoints()" - ] - }, - { - "type": { - "value": "CompareObjectTimer" - }, - "parameters": [ - "Object", - "\"__Health.TimeSinceLastHit\"", - ">", - "Object.Behavior::PropertyShieldRegenDelay()" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Only regen when shield is active or when \"RegenShieldWhenZeroPoints\" is enabled", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "Health::Shield::IsShieldActive" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "Health::Shield::PropertyRegenShieldWhenZeroPoints" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "Object.Behavior::PropertyShieldRegenRate() * TimeDelta()" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Correct any values above maximum limits", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Shield::PropertyShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "Object.Behavior::PropertyMaxShieldPoints()" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyMaxShieldPoints()" - ] - } - ] - } - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Remove shield points if shield expired", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "Health::Shield::IsShieldActive" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Reset damage trigger", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyIsShieldJustDamaged" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Apply damage to the shield and object. If the shield is active, it will be damaged first and any excess damage will reduce health and trigger damage cooldown.", - "fullName": "Damage an object protected by a shield", - "functionType": "Action", - "group": "Health", - "name": "ShieldHit", - "sentence": "Damage shield and health of _PARAM0_ for _PARAM2_ points of damage", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Only consider damage if damage cooldown is NOT active", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "Health::Health::IsDamageCooldownActive" - }, - "parameters": [ - "Object", - "RequireHealth", - "" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Mark object was hit at least once (used for initial state of damage cooldown)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "Health::Health::HitAtLeastOnce" - }, - "parameters": [ - "Object", - "RequireHealth", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::SetHitAtLeastOnce" - }, - "parameters": [ - "Object", - "RequireHealth", - "yes", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Restart time since last hit timer", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__Health.TimeSinceLastHit\"" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "If shield is NOT active, perform normal damage", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "Health::Shield::IsShieldActive" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::SetHealth" - }, - "parameters": [ - "Object", - "RequireHealth", - "Object.RequireHealth::Health() - GetArgumentAsNumber(\"DamageValue\")", - "" - ] - }, - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__Health.DamageCooldown\"" - ] - }, - { - "type": { - "value": "Health::Health::SetJustDamaged" - }, - "parameters": [ - "Object", - "RequireHealth", - "yes", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "If shield is active, damage shield first", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Shield::IsShieldActive" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - "-", - "GetArgumentAsNumber(\"DamageValue\")" - ] - }, - { - "type": { - "value": "Health::Shield::SetPropertyIsShieldJustDamaged" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Excess damage is based on negative shield points", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Shield::PropertyShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "0" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Apply excess damage only if shield does NOT block excess damage", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "Health::Shield::PropertyShieldBlocksExcessDamage" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::SetHealth" - }, - "parameters": [ - "Object", - "RequireHealth", - "Object.RequireHealth::Health() + Object.Behavior::PropertyShieldPoints()", - "" - ] - }, - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__Health.DamageCooldown\"" - ] - }, - { - "type": { - "value": "Health::Health::SetJustDamaged" - }, - "parameters": [ - "Object", - "RequireHealth", - "yes", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] - } - ] - } - ] - } - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - }, - { - "description": "Value of the damage to do (will be removed from object health)", - "name": "DamageValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the object maximum shield points.", - "fullName": "Change maximum shield points", - "functionType": "Action", - "group": "Shield", - "name": "SetMaxShield", - "sentence": "Set maximum shield of _PARAM0_ to _PARAM2_ points", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyMaxShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - }, - { - "description": "Maximum shield", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change shield points. This is not considered damage.", - "fullName": "Change shield points", - "functionType": "Action", - "group": "Shield", - "name": "SeShieldPoints", - "sentence": "Set shield on _PARAM0_ to _PARAM2_ points", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - }, - { - "description": "Shield points", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change rate of shield regeneration.", - "fullName": "Change rate of shield regeneration", - "functionType": "Action", - "group": "Shield", - "name": "SetShieldRegenRate", - "sentence": "Set rate of shield regeneration of _PARAM0_ to _PARAM2_ points per second", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyShieldRegenRate" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - }, - { - "description": "Rate of regen", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change delay before shield regeneration starts after being hit.", - "fullName": "Change delay before shield regeneration starts", - "functionType": "Action", - "group": "Shield", - "name": "SetShieldRegenDelay", - "sentence": "Set delay before shield regeneration starts on _PARAM0_ to _PARAM2_ seconds", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyShieldRegenDelay" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - }, - { - "description": "Delay (seconds)", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change duration of shield.", - "fullName": "Change duration of shield", - "functionType": "Action", - "group": "Shield", - "name": "SetShieldDuration", - "sentence": "Set duration of shield on _PARAM0_ to _PARAM2_ seconds", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyShieldDuration" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - }, - { - "description": "Duration of shield (seconds)", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Activate shield. If the shield was already active, this will reset it's points and timer.", - "fullName": "Activate shield", - "functionType": "Action", - "group": "Shield", - "name": "ActivateShield", - "sentence": "Activate (or renew) shield on _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__Health.ShieldDuration\"" - ] - }, - { - "type": { - "value": "Health::Shield::SetPropertyShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyMaxShieldPoints()" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change max shield points. This value is used when the shield is activated or renewed.", - "fullName": "Change max shield points ", - "functionType": "Action", - "group": "Shield", - "name": "SetMaxShieldPoints", - "sentence": "Set max shield of _PARAM0_ to _PARAM2_ points", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyMaxShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - }, - { - "description": "Shield points", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Shield blocks excess damage when it breaks.", - "fullName": "Shield blocks excess damage when it breaks", - "functionType": "Action", - "group": "Shield", - "name": "ShieldBlockExcessDamage", - "sentence": "Shield on _PARAM0_ blocks excess damage when it breaks: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyShieldBlocksExcessDamage" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"Value\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyShieldBlocksExcessDamage" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - }, - { - "description": "Shield blocks excess damage", - "name": "Value", - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Regenerate shield when it has zero points.", - "fullName": "Regenerate shield when it has zero points", - "functionType": "Action", - "group": "Shield", - "name": "RegenShieldWhenZero", - "sentence": "Regenerate shield on _PARAM0_ when it has zero points: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyRegenShieldWhenZeroPoints" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"Value\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyRegenShieldWhenZeroPoints" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - }, - { - "description": "Regen shield when it has zero points", - "name": "Value", - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the shield was just damaged previously in the events.", - "fullName": "Is shield just damaged", - "functionType": "Condition", - "group": "Shield", - "name": "IsShieldJustDamaged", - "sentence": "Shield on _PARAM0_ has just been damaged", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Shield::PropertyIsShieldJustDamaged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the shield is active (based on shield points and duration).", - "fullName": "Is shield active", - "functionType": "Condition", - "group": "Shield", - "name": "IsShieldActive", - "sentence": "Shield on _PARAM0_ is active", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "To be considered \"active\", a shield must have positive points AND not exceed duration", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Shield::PropertyShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Don't check the timer when duration is zero (or negative)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Shield::PropertyShieldDuration" - }, - "parameters": [ - "Object", - "Behavior", - "<=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Shield::PropertyShieldDuration" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - }, - { - "type": { - "value": "CompareObjectTimer" - }, - "parameters": [ - "Object", - "\"__Health.ShieldDuration\"", - "<", - "Object.Behavior::PropertyShieldDuration()" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Maximum shield points of the object.", - "fullName": "Maximum shield points", - "functionType": "Expression", - "group": "Shield", - "name": "MaxShield", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyMaxShieldPoints()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Duration of shield (seconds).", - "fullName": "Duration of shield", - "functionType": "Expression", - "group": "Shield", - "name": "ShieldDuration", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyShieldDuration()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Delay before shield regeneration starts after last hit (seconds).", - "fullName": "Delay before shield regeneration starts", - "functionType": "Expression", - "group": "Shield", - "name": "ShieldRegenDelay", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyShieldRegenDelay()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Rate of shield regeneration (points per second).", - "fullName": "Rate of shield regeneration", - "functionType": "Expression", - "group": "Shield", - "name": "ShieldRegenRate", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyShieldRegenRate()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Time before shield ends (seconds).", - "fullName": "Time before shield ends", - "functionType": "Expression", - "group": "Shield", - "name": "ShieldTimeRemaining", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "0" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Shield::PropertyShieldDuration" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "max(0,Object.Behavior::PropertyShieldDuration() - Object.ObjectTimerElapsedTime(\"__Health.ShieldDuration\"))" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Shield points of the object.", - "fullName": "Shield points", - "functionType": "Expression", - "group": "Shield", - "name": "ShieldPoints", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyShieldPoints()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - } - ], - "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "", - "type": "Behavior", - "label": "", - "description": "", - "group": "", - "extraInformation": [ - "Health::Health" - ], - "hidden": false, - "name": "RequireHealth" - }, - { - "value": "100", - "type": "Number", - "label": "Max shield points (Shield will start with this many points when activated)", - "description": "", - "group": "Shield", - "extraInformation": [], - "hidden": false, - "name": "MaxShieldPoints" - }, - { - "value": "5", - "type": "Number", - "label": "Duration of shield (seconds) Use \"0\" to disable shield timer", - "description": "", - "group": "Shield", - "extraInformation": [], - "hidden": false, - "name": "ShieldDuration" - }, - { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "Shield", - "extraInformation": [], - "hidden": true, - "name": "ShieldPoints" - }, - { - "value": "0", - "type": "Number", - "label": "Rate of shield regeneration (points per second)", - "description": "", - "group": "Shield", - "extraInformation": [], - "hidden": false, - "name": "ShieldRegenRate" - }, - { - "value": "", - "type": "Boolean", - "label": "Shield will block all excess damage when shield is destroyed", - "description": "", - "group": "Shield", - "extraInformation": [], - "hidden": false, - "name": "ShieldBlocksExcessDamage" - }, - { - "value": "", - "type": "Number", - "label": "Delay (seconds) before shield regeneration starts after being hit", - "description": "", - "group": "Shield", - "extraInformation": [], - "hidden": false, - "name": "ShieldRegenDelay" - }, - { - "value": "", - "type": "Boolean", - "label": "Regenerate shield when it has zero points", - "description": "", - "group": "Shield", - "extraInformation": [], - "hidden": false, - "name": "RegenShieldWhenZeroPoints" - }, - { - "value": "", - "type": "Boolean", - "label": "", - "description": "", - "group": "Shield", - "extraInformation": [], - "hidden": true, - "name": "IsShieldJustDamaged" - } - ], - "sharedPropertyDescriptors": [] - } - ], - "eventsBasedObjects": [] - }, - { - "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", - "category": "General", - "extensionNamespace": "", - "fullName": "Draw resource bar (NEW)", - "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8cGF0aCBkPSJNMjgsMTJIMTRINGMtMi4yLDAtNCwxLjgtNCw0czEuOCw0LDQsNGgxMGgxNGMyLjIsMCw0LTEuOCw0LTRTMzAuMiwxMiwyOCwxMnogTTQsMThjLTEuMSwwLTItMC45LTItMnMwLjktMiwyLTJoMTANCgljMS4xLDAsMiwwLjksMiwycy0wLjksMi0yLDJINHoiLz4NCjwvc3ZnPg0K", - "name": "DrawResourceBar", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Glyphster Pack/Master/SVG/Interface Elements/Interface Elements_interface_ui_loading_progress_bar.svg", - "shortDescription": "Draw a resource bar that represents health, shield, or any value.", - "version": "0.0.1", - "description": "How to use:\n- \n\nTips:\n- ", - "origin": { - "identifier": "DraggableSliderControl", - "name": "gdevelop-extension-store" - }, - "tags": [ - "health", - "shield", - "resource", - "shape painter", - "ui", - "widget" - ], - "authorIds": [ - "gqDaZjCfevOOxBYkK6zlhtZnXCg1", - "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" - ], - "dependencies": [], - "eventsFunctions": [], - "eventsBasedBehaviors": [ - { - "description": "Draw a resource bar that represents health, shield, or any value.", - "fullName": "Draw resource bar", - "name": "DrawResourceBar", - "objectType": "PrimitiveDrawing::Drawer", - "eventsFunctions": [ - { - "fullName": "", - "functionType": "Action", - "name": "onCreated", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make sure object doesn't get re-drawn every frame", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::ClearBetweenFrames" - }, - "parameters": [ - "Object", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Use correct min value (instead of always starting at 0)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMin()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "fullName": "", - "functionType": "Action", - "name": "doStepPostEvents", - "sentence": "", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Slider drawing", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior" - ] - }, - { - "type": { - "value": "Visible" - }, - "parameters": [ - "Object" - ] - }, - { - "type": { - "value": "LayerVisible" - }, - "parameters": [ - "", - "Object.Layer()" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::Drawer::ClearShapes" - }, - "parameters": [ - "Object" - ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Inactive bar", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set inactive track parameters (by default, use the active bar color)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DrawResourceBar::DrawResourceBar::PropertyInactiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyActiveBarColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DrawResourceBar::DrawResourceBar::PropertyInactiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyInactiveBarColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyInactiveBarOpacity()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::OutlineOpacity" - }, - "parameters": [ - "Object", - "=", - "0" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw inactive track", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset()", - "-Object.Behavior::PropertyBarThickness() / 2", - "Object.Behavior::PropertyBarLength()", - "Object.Behavior::PropertyBarThickness() / 2" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw half circle at end of track (inactive side)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DrawResourceBar::DrawResourceBar::PropertyRoundedBar" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Arc" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyBarLength()", - "0", - "Object.Behavior::PropertyBarThickness() / 2", - "270", - "90", - "", - "yes" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Active bar", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set active track parameters", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DrawResourceBar::DrawResourceBar::PropertyActiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyActiveBarColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyActiveBarOpacity()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw active bar", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "0", - "-(Object.Behavior::PropertyBarThickness() / 2)", - "Object.Behavior::PropertyThumbOffset()", - "Object.Behavior::PropertyBarThickness() / 2" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw half circle at end of bar (active side)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DrawResourceBar::DrawResourceBar::PropertyRoundedBar" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Arc" - }, - "parameters": [ - "Object", - "0", - "0", - "Object.Behavior::PropertyBarThickness() / 2", - "90", - "270", - "", - "yes" - ] - } - ] - } - ], - "parameters": [] - } + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyMaxQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "type": "behavior" + }, + { + "description": "Maximum units", + "name": "Value", + "supplementaryInformation": "Sprite", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the current quantity of units.", + "fullName": "Unit quantity", + "functionType": "ActionWithOperator", + "getterName": "CurrentQuantity", + "name": "SetCurrentQuantity", + "sentence": "Change the unit quantity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyCurrentQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyMaxQuantity())" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "type": "behavior" + }, + { + "description": "Current units", + "name": "Value", + "supplementaryInformation": "Sprite", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Increase the current quantity of units.", + "fullName": "Increase quantity", + "functionType": "Action", + "name": "IncreaseQuantity", + "sentence": "Increase the quantity of _PARAM0_ by _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyCurrentQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::PropertyMaxQuantity(), Object.Behavior::PropertyCurrentQuantity() + GetArgumentAsNumber(\"Value\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "supplementaryInformation": "Sprite", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Decrease the current quantity of units.", + "fullName": "Decrease quantity", + "functionType": "Action", + "name": "DecreaseQuantity", + "sentence": "Decrease the quantity of _PARAM0_ by _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyCurrentQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0,Object.Behavior::PropertyCurrentQuantity() - GetArgumentAsNumber(\"Value\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "supplementaryInformation": "Sprite", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "quantity", + "fullName": "Current quantity", + "functionType": "ExpressionAndCondition", + "name": "CurrentQuantity", + "sentence": "quantity", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyCurrentQuantity()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "max quantity", + "fullName": "Max quantity", + "functionType": "ExpressionAndCondition", + "name": "MaxQuantity", + "sentence": "max quantity", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyMaxQuantity()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0", + "type": "Number", + "label": "Starting quantity", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "StartingQuantity" + }, + { + "value": "", + "type": "Number", + "label": "Quantity", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "CurrentQuantity" + }, + { + "value": "10", + "type": "Number", + "label": "Maximum quantity (Use \"0\" for unlimited)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "MaxQuantity" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "NextUnitToCreate" + }, + { + "value": "", + "type": "Color", + "label": "Empty color tint", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "EmptyUnitColorTint" + }, + { + "value": "64", + "type": "Number", + "label": "Opacity of empty units (Range: 0 to 255)", + "description": "Empty units exist between the current and maximum value.", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "EmptyUnitOpacity" + }, + { + "value": "0", + "type": "Number", + "label": "Animation number for empty units", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "EmptyUnitAnimationNumber" + }, + { + "value": "255", + "type": "Number", + "label": "Opacity of active units", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ActiveUnitOpacity" + }, + { + "value": "255;255;255", + "type": "Color", + "label": "Color tint of active units", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ActiveUnitColorTint" + }, + { + "value": "0", + "type": "Number", + "label": "Animation number for active units", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ActiveUnitAnimationNumber" + } + ], + "sharedPropertyDescriptors": [] + }, + { + "description": "Use a tiled sprite to display repeated objects to represent a resource in the game (hearts, lives, ammo, etc). ", + "fullName": "Resource bar (tiled sprite)", + "name": "ResourceBar_TiledSprite", + "objectType": "TiledSpriteObject::TiledSprite", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyCurrentQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyStartingQuantity()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledSpriteObject::TiledSprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Display a tiled resource bar.", + "fullName": "Draw a resource bar (tiled sprite)", + "functionType": "Action", + "name": "DrawResourceBar", + "sentence": "Display resource bar using _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TiledSpriteObject::Width" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyUnitWidth() * Object.Behavior::PropertyCurrentQuantity()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledSpriteObject::TiledSprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the quantity of a tiled resource bar.", + "fullName": "Quantity", + "functionType": "Action", + "name": "SetQuantity", + "sentence": "Change the quantity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyCurrentQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0,GetArgumentAsNumber(\"Value\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledSpriteObject::TiledSprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the quantity of a tiled resource bar.", + "fullName": "Quantity", + "functionType": "ActionWithOperator", + "getterName": "Quantity", + "name": "SetQuantityOp", + "sentence": "Change the quantity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "If max quantity has NOT been set, do not enforce it.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::PropertyMaxQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyCurrentQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0,GetArgumentAsNumber(\"Value\"))" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "If max quantity has been set, make sure quantity does not exceed it.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::PropertyMaxQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyCurrentQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "clamp(GetArgumentAsNumber(\"Value\"), 0, Object.Behavior::PropertyMaxQuantity())" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledSpriteObject::TiledSprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the maximum quantity of a tiled resource bar.", + "fullName": "Maximum quantity", + "functionType": "Action", + "name": "SetMaxQuantity", + "sentence": "Change the maximum quantity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyMaxQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0,GetArgumentAsNumber(\"Value\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledSpriteObject::TiledSprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the maximum quantity of a tiled resource bar.", + "fullName": "Maximum quantity", + "functionType": "ActionWithOperator", + "getterName": "MaxQuantity", + "name": "SetMaxQuantityOp", + "sentence": "Change the maximum quantity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyMaxQuantity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0,GetArgumentAsNumber(\"Value\"))" ] } - ], - "parameters": [] + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledSpriteObject::TiledSprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the quantity", + "fullName": "Quantity", + "functionType": "ExpressionAndCondition", + "name": "Quantity", + "sentence": "the quantity", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyCurrentQuantity()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledSpriteObject::TiledSprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the max quantity", + "fullName": "Max quantity", + "functionType": "ExpressionAndCondition", + "name": "MaxQuantity", + "sentence": "the max quantity", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyMaxQuantity()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledSpriteObject::TiledSprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0", + "type": "Number", + "label": "Starting quantity", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "StartingQuantity" + }, + { + "value": "", + "type": "Number", + "label": "Quantity", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "CurrentQuantity" + }, + { + "value": "16", + "type": "Number", + "label": "Unit width (pixels)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "UnitWidth" + }, + { + "value": "0", + "type": "Number", + "label": "Maximum quantity", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "MaxQuantity" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [] + }, + { + "author": "@Bouh, D8H", + "category": "General", + "extensionNamespace": "", + "fullName": "Extended variables support", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXZhcmlhYmxlLWJveCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xOSAzSDVDMy45IDMgMyAzLjkgMyA1VjE5QzMgMjAuMSAzLjkgMjEgNSAyMUgxOUMyMC4xIDIxIDIxIDIwLjEgMjEgMTlWNUMyMSAzLjkgMjAuMSAzIDE5IDNNNy40IDE4QzUuOSAxNi41IDUgMTQuMyA1IDEyUzUuOSA3LjUgNy40IDZMOSA2LjdDNy43IDcuOSA3IDkuOSA3IDEyUzcuNyAxNi4xIDkgMTcuM0w3LjQgMThNMTIuNyAxNUwxMS45IDEzTDEwLjUgMTVIOUwxMS4zIDExLjlMMTAgOUgxMS4zTDEyLjEgMTFMMTMuNSA5SDE1TDEyLjggMTJMMTQuMSAxNUgxMi43TTE2LjYgMThMMTUgMTcuM0MxNi4zIDE2IDE3IDE0LjEgMTcgMTJTMTYuMyA3LjkgMTUgNi43TDE2LjYgNkMxOC4xIDcuNSAxOSA5LjcgMTkgMTJTMTguMSAxNi41IDE2LjYgMThaIiAvPjwvc3ZnPg==", + "name": "ExtendedVariables", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/variable-box.svg", + "shortDescription": "Add conditions, actions and expressions to check for the existence of a variable, copy variables, delete existing ones from memory, and create dynamic variables.", + "version": "1.0.0", + "description": "This extension provides: \n- Conditions to check if a global/scene/object variable exists.\n- Actions to copy object variables, global and scene variables.\n- Actions to delete an existing global/scene variable from memory.\n- Actions to create a global/scene variable using a text expression, rather than a variable name input.\n- Expressions to get the value or text from a global/scene variable using a text expression, rather than a variable name.\n\nText expressions allows to enter the name of the variable with an expression like `\"MyVar\"+ ToString(Variable(Health))`", + "origin": { + "identifier": "ExtendedVariables", + "name": "gdevelop-extension-store" + }, + "tags": [ + "variable", + "scene", + "global", + "object", + "remove", + "expression", + "copy", + "structure", + "array", + "boolean", + "duplication" + ], + "authorIds": [ + "2OwwM8ToR9dx9RJ2sAKTcrLmCB92", + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" + ], + "dependencies": [], + "eventsFunctions": [ + { + "description": "Check if a global variable exists.", + "fullName": "Global variable exists", + "functionType": "Condition", + "group": "Deprecated", + "name": "C_global_variable_exist", + "private": true, + "sentence": "If the global variable _PARAM1_ exist", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ExtendedVariables::GlobalVariableExist" + }, + "parameters": [ + "", + "GetArgumentAsString(\"GlobalVariableName\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Name of the global variable", + "name": "GlobalVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the global variable exists.", + "fullName": "Global variable exists", + "functionType": "Condition", + "group": "Global variables", + "name": "GlobalVariableExist", + "sentence": "If the global variable _PARAM1_ exist", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const globalVariables = runtimeScene.getGame().getVariables();\r\neventsFunctionContext.returnValue = globalVariables.has(eventsFunctionContext.getArgument(\"GlobalVariableName\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Name of the global variable", + "name": "GlobalVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Check if a scene variable exists.", + "fullName": "Scene variable exists", + "functionType": "Condition", + "group": "Deprecated", + "name": "C_scene_variable_exist", + "private": true, + "sentence": "If the scene variable _PARAM1_ exist", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ExtendedVariables::SceneVariableExist" + }, + "parameters": [ + "", + "GetArgumentAsString(\"SceneVariableName\")", + "" + ] } ], - "parameters": [ + "actions": [ { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Name of the scene variable", + "name": "SceneVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the scene variable exists.", + "fullName": "Scene variable exists", + "functionType": "Condition", + "group": "Scene variables", + "name": "SceneVariableExist", + "sentence": "If the scene variable _PARAM1_ exist", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const sceneVariables = runtimeScene.getVariables();\r\neventsFunctionContext.returnValue = sceneVariables.has(eventsFunctionContext.getArgument(\"SceneVariableName\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Name of the scene variable", + "name": "SceneVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Check if an object variable exists.", + "fullName": "Object variable exists", + "functionType": "Condition", + "group": "Deprecated", + "name": "C_object_variable_exist", + "private": true, + "sentence": "Object _PARAM1_ has object variable _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ExtendedVariables::ObjectVariableExist" + }, + "parameters": [ + "", + "ObjectToCheck", + "GetArgumentAsString(\"ObjectVariableName\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "ObjectToCheck", + "type": "objectList" + }, + { + "description": "Name of object variable", + "name": "ObjectVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Check if an object variable exists.", + "fullName": "Object variable exists", + "functionType": "Condition", + "group": "Object variables", + "name": "ObjectVariableExist", + "sentence": "Object _PARAM1_ has object variable _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "let returnValue = true;\r\nif (!objects.length) {\r\n returnValue = false;\r\n} else {\r\n const objectVariableName = eventsFunctionContext.getArgument(\"ObjectVariableName\");\r\n for (let i = 0; i < objects.length; i++) {\r\n if (!objects[i].hasVariable(objectVariableName)) {\r\n // If any object does NOT have the variable, return false.\r\n returnValue = false;\r\n break;\r\n }\r\n }\r\n}\r\n\r\neventsFunctionContext.returnValue = returnValue;", + "parameterObjects": "ObjectToCheck", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Object", + "name": "ObjectToCheck", + "type": "objectList" + }, + { + "description": "Name of object variable", + "name": "ObjectVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Delete a global variable, removing it from memory.", + "fullName": "Delete global variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_Delete_global_variable", + "private": true, + "sentence": "Delete global variable _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ExtendedVariables::DeleteGlobalVariable" + }, + "parameters": [ + "", + "GetArgumentAsString(\"GlobalVariableName\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Name of the global variable to delete", + "name": "GlobalVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Delete the global variable, removing it from memory.", + "fullName": "Delete global variable", + "functionType": "Action", + "group": "Global variables", + "name": "DeleteGlobalVariable", + "sentence": "Delete the global variable _PARAM1_ from memory", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "runtimeScene.getGame().getVariables().remove(eventsFunctionContext.getArgument(\"GlobalVariableName\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Name of the global variable to delete", + "name": "GlobalVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the text of a scene variable.", + "fullName": "String of a scene variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_Modify_scene_variable_string", + "private": true, + "sentence": "Change the text of scene variable _PARAM1_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", - "type": "behavior" + "type": { + "value": "ExtendedVariables::ModifySceneVariableString" + }, + "parameters": [ + "", + "GetArgumentAsString(\"SceneVariableName\")", + "GetArgumentAsNumber(\"SceneVariableValue\")", + "" + ] } - ], - "objectGroups": [] + ] + } + ], + "parameters": [ + { + "description": "Name of the scene variable", + "name": "SceneVariableName", + "type": "string" }, { - "description": "The value of the resource bar.", - "fullName": "Value", - "functionType": "Expression", - "group": "Bar", - "name": "Value", - "sentence": "", - "events": [ + "description": "Value", + "name": "SceneVariableValue", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the text of a scene variable.", + "fullName": "String of a scene variable", + "functionType": "Action", + "group": "Scene variables", + "name": "ModifySceneVariableString", + "sentence": "Change the text of scene variable _PARAM1_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const variable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r\nvariable.setString(eventsFunctionContext.getArgument(\"SceneVariableValue\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Name of the scene variable", + "name": "SceneVariableName", + "type": "string" + }, + { + "description": "Value", + "name": "SceneVariableValue", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the text of a global variable.", + "fullName": "String of a global variable", + "functionType": "Action", + "group": "Global variables", + "name": "ModifyGlobalVariableString", + "sentence": "Change the text of global variable _PARAM1_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const variable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r\nvariable.setString(eventsFunctionContext.getArgument(\"GlobalVariableValue\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Name of the global variable", + "name": "GlobalVariableName", + "type": "string" + }, + { + "description": "Value", + "name": "GlobalVariableValue", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the value of a global variable.", + "fullName": "Value of a global variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_Modify_global_variable", + "private": true, + "sentence": "Change the global variable _PARAM1_ with value: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyValue()" - ] - } + "type": { + "value": "ExtendedVariables::ModifyGlobalVariable" + }, + "parameters": [ + "", + "GetArgumentAsString(\"SceneVariableName\")", + "GetArgumentAsNumber(\"SceneVariableValue\")", + "" ] } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ + ] + } + ], + "parameters": [ + { + "description": "Name of the global variable", + "name": "SceneVariableName", + "type": "string" + }, + { + "description": "Value", + "name": "SceneVariableValue", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the text of a global variable.", + "fullName": "String of a global variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_Modify_global_variable_string", + "private": true, + "sentence": "Change the text of global variable _PARAM1_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, + "type": { + "value": "ExtendedVariables::ModifyGlobalVariableString" + }, + "parameters": [ + "", + "GetArgumentAsString(\"SceneVariableName\")", + "GetArgumentAsNumber(\"SceneVariableValue\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Name of the global variable", + "name": "SceneVariableName", + "type": "string" + }, + { + "description": "Value", + "name": "SceneVariableValue", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the value of a global variable.", + "fullName": "Value of a global variable", + "functionType": "Action", + "group": "Global variables", + "name": "ModifyGlobalVariable", + "sentence": "Change the global variable _PARAM1_ with value: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const variable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r\nvariable.setNumber(eventsFunctionContext.getArgument(\"GlobalVariableValue\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Name of the global variable", + "name": "GlobalVariableName", + "type": "string" + }, + { + "description": "Value", + "name": "GlobalVariableValue", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the value of a scene variable.", + "fullName": "Value of a scene variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_Modify_scene_variable", + "private": true, + "sentence": "Change the scene variable _PARAM1_ with value: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", - "type": "behavior" + "type": { + "value": "ExtendedVariables::ModifySceneVariable" + }, + "parameters": [ + "", + "GetArgumentAsString(\"SceneVariableName\")", + "GetArgumentAsNumber(\"SceneVariableValue\")", + "" + ] } - ], - "objectGroups": [] + ] + } + ], + "parameters": [ + { + "description": "Name of the scene variable", + "name": "SceneVariableName", + "type": "string" }, { - "description": "Change the value of the resource bar.", - "fullName": "Value", - "functionType": "Action", - "group": "Resource Bar", - "name": "SetValue", - "sentence": "Change the value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - "<=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "round(GetArgumentAsNumber(\"Value\") / Object.Behavior::PropertyTickSpacing()) * Object.Behavior::PropertyTickSpacing()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyValueMin()" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMin()" - ] - } - ] - }, + "description": "Value", + "name": "SceneVariableValue", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the value of a scene variable.", + "fullName": "Value of a scene variable", + "functionType": "Action", + "group": "Scene variables", + "name": "ModifySceneVariable", + "sentence": "Change the scene variable _PARAM1_ with value: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const variable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r\nvariable.setNumber(eventsFunctionContext.getArgument(\"SceneVariableValue\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Name of the scene variable", + "name": "SceneVariableName", + "type": "string" + }, + { + "description": "Value", + "name": "SceneVariableValue", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Delete scene variable, the variable will be deleted from the memory.", + "fullName": "Delete scene variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_Delete_scene_variable", + "private": true, + "sentence": "Delete the scene variable _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "Object.Behavior::PropertyValueMax()" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMax()" - ] - } + "type": { + "value": "ExtendedVariables::DeleteSceneVariable" + }, + "parameters": [ + "", + "GetArgumentAsString(\"SceneVariableName\")", + "" ] - }, + } + ] + } + ], + "parameters": [ + { + "description": "Name of the scene variable to delete", + "name": "SceneVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Delete the scene variable, the variable will be deleted from the memory.", + "fullName": "Delete scene variable", + "functionType": "Action", + "group": "Scene variables", + "name": "DeleteSceneVariable", + "sentence": "Delete the scene variable _PARAM1_ from memory", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "runtimeScene.getVariables().remove(eventsFunctionContext.getArgument(\"SceneVariableName\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Name of the scene variable to delete", + "name": "SceneVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Copy an object variable from one object to another.", + "fullName": "Copy an object variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_CopyObjectVariable", + "private": true, + "sentence": "Copy the variable _PARAM1_ of _PARAM2_ to the variable _PARAM3_ of _PARAM4_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "ExtendedVariables::CopyObjectVariable" }, - "comment": "Set the proper offset", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbOffset" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyBarLength() * (Object.Behavior::PropertyValue() - Object.Behavior::PropertyValueMin()) / (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin())" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } + "parameters": [ + "", + "SourceObject", + "GetArgumentAsString(\"SourceVariableName\")", + "TargetObject", + "GetArgumentAsString(\"TargetVariableName\")", + "no", + "" ] } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", - "type": "behavior" - }, + ] + } + ], + "parameters": [ + { + "description": "Source object", + "name": "SourceObject", + "type": "objectList" + }, + { + "description": "Variable to copy", + "name": "SourceVariableName", + "type": "string" + }, + { + "description": "Destination object", + "longDescription": "To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.", + "name": "TargetObject", + "type": "objectList" + }, + { + "description": "Destination variable", + "name": "TargetVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Copy the object variable from one object to another.", + "fullName": "Copy an object variable", + "functionType": "Action", + "group": "Object variables", + "name": "CopyObjectVariable", + "sentence": "Copy the variable _PARAM2_ of _PARAM1_ to the variable _PARAM4_ of _PARAM3_ (clear destination first: _PARAM5_)", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const sourceObject = eventsFunctionContext.getObjects(\"SourceObject\")[0];\nconst targetObject = eventsFunctionContext.getObjects(\"TargetObject\")[0];\nconst sourceVariableName = eventsFunctionContext.getArgument(\"SourceVariableName\");\nconst targetVariableName = eventsFunctionContext.getArgument(\"TargetVariableName\");\nconst isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");\n\nconst sourceVariables = sourceObject.getVariables();\nconst targetVariables = targetObject.getVariables();\n\nif (sourceVariables.has(sourceVariableName))\n{\n gdjs.Variable.copy\n (\n sourceVariables.get(sourceVariableName),\n targetVariables.get(targetVariableName),\n isExactCopy\n );\n}", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Source object", + "name": "SourceObject", + "type": "objectList" + }, + { + "description": "Variable to copy", + "name": "SourceVariableName", + "type": "string" + }, + { + "description": "Destination object", + "longDescription": "To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.", + "name": "TargetObject", + "type": "objectList" + }, + { + "description": "Destination variable", + "name": "TargetVariableName", + "type": "string" + }, + { + "defaultValue": "yes", + "description": "Clear destination first", + "name": "isExactCopy", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Copy all object variables from one object to another.", + "fullName": "Copy all object variables", + "functionType": "Action", + "group": "Deprecated", + "name": "A_CopyAllObjectVariables", + "private": true, + "sentence": "Copy all variables from _PARAM1_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "description": "Resource bar value", - "name": "Value", - "type": "expression" + "type": { + "value": "ExtendedVariables::CopyAllObjectVariables" + }, + "parameters": [ + "", + "SourceObject", + "TargetObject", + "no", + "" + ] } - ], - "objectGroups": [] + ] + } + ], + "parameters": [ + { + "description": "Source object", + "name": "SourceObject", + "type": "objectList" + }, + { + "description": "Destination object", + "name": "TargetObject", + "type": "objectList" + } + ], + "objectGroups": [] + }, + { + "description": "Copy all object variables from one object to another.", + "fullName": "Copy all object variables", + "functionType": "Action", + "group": "Object variables", + "name": "CopyAllObjectVariables", + "sentence": "Copy all variables from object _PARAM1_ to object _PARAM2_ (clear destination first: _PARAM3_)", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "// This JS event use private scope from the API, this can be borken at anytime.\n\nconst sourceObject = eventsFunctionContext.getObjects(\"SourceObject\")[0];\nconst targetObject = eventsFunctionContext.getObjects(\"TargetObject\")[0];\nconst isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");\n\nconst targetVariables = targetObject.getVariables();\nconst sourceVariables = sourceObject.getVariables()._variables.items;\nfor (const variableName in sourceVariables)\n{\n if (sourceVariables.hasOwnProperty(variableName))\n {\n gdjs.Variable.copy(sourceVariables[variableName], targetVariables.get(variableName), isExactCopy);\n }\n}", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Source object", + "name": "SourceObject", + "type": "objectList" + }, + { + "description": "Destination object", + "name": "TargetObject", + "type": "objectList" + }, + { + "defaultValue": "yes", + "description": "Clear destination first", + "name": "isExactCopy", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Delete an object variable, removing it from memory.", + "fullName": "Delete object variable", + "functionType": "Action", + "group": "Object variables", + "name": "DeleteObjectVariable", + "sentence": "Delete for the object _PARAM1_ the object variable _PARAM2_ from the memory", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const object = eventsFunctionContext.getObjects(\"Object\")[0];\r\nconst objectVariables = object.getVariables();\r\n\r\nobjectVariables.remove(eventsFunctionContext.getArgument(\"VariableName\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "objectList" }, { - "description": "The minimum value of the resource bar.", - "fullName": "Minimum value", - "functionType": "Expression", - "group": "Value configuration", - "name": "ValueMin", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyValueMin()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] + "description": "Name of object variable", + "name": "VariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Return the text of a global variable.", + "fullName": "Text of a global variable", + "functionType": "StringExpression", + "group": "Global variables", + "name": "GlobalVariableString", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const globalVariables = runtimeScene.getGame().getVariables();\r\nconst variableExist = globalVariables.has(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r\n\r\nif (variableExist) {\r\n eventsFunctionContext.returnValue = globalVariables.get(eventsFunctionContext.getArgument(\"GlobalVariableName\")).getAsString();\r\n}", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Name of the global variable", + "name": "GlobalVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Return the text of a scene variable.", + "fullName": "Text of a scene variable", + "functionType": "StringExpression", + "group": "Scene variables", + "name": "VariableString", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const sceneVariables = runtimeScene.getVariables();\r\nconst variableExist = sceneVariables.has(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r\n\r\nif (variableExist) {\r\n eventsFunctionContext.returnValue = sceneVariables.get(eventsFunctionContext.getArgument(\"SceneVariableName\")).getAsString();\r\n}", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Name of the scene variable", + "name": "SceneVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Return the value of a global variable.", + "fullName": "Value of a global variable", + "functionType": "Expression", + "group": "Global variables", + "name": "GlobalVariable", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const globalVariables = runtimeScene.getGame().getVariables();\r\nconst variableExist = globalVariables.has(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r\n\r\nif (variableExist) {\r\n eventsFunctionContext.returnValue = globalVariables.get(eventsFunctionContext.getArgument(\"GlobalVariableName\")).getAsNumber();\r\n}", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Name of the global variable", + "name": "GlobalVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Return the value of a scene variable.", + "fullName": "Value of a scene variable", + "functionType": "Expression", + "group": "Scene variables", + "name": "Variable", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const sceneVariables = runtimeScene.getVariables();\r\nconst variableExist = sceneVariables.has(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r\n\r\nif (variableExist) {\r\n eventsFunctionContext.returnValue = sceneVariables.get(eventsFunctionContext.getArgument(\"SceneVariableName\")).getAsNumber();\r\n}", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Name of the scene variable", + "name": "SceneVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Copy the global variable to scene. This copy everything from the types to the values.", + "fullName": "Copy a global variable to scene", + "functionType": "Action", + "group": "Convert", + "name": "CopyGlobalVariableToScene", + "sentence": "Copy the global variable:_PARAM1_ to a scene variable:_PARAM2_ (clear destination first: _PARAM3_)", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const globalVariable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"globalVariableName\"));\nconst sceneVariable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"sceneVariableName\"));\nconst isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");\n\ngdjs.Variable.copy(globalVariable, sceneVariable, isExactCopy);\n", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Global variable to copy", + "name": "globalVariableName", + "type": "string" }, { - "description": "Change the minimum value of the resource bar.", - "fullName": "Minimum value", - "functionType": "Action", - "group": "Value configuration", - "name": "SetValueMin", - "sentence": "Change the minimum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValueMin" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"ValueMin\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", - "type": "behavior" - }, - { - "description": "Minimum value", - "name": "ValueMin", - "type": "expression" - } - ], - "objectGroups": [] + "description": "Scene variable destination", + "name": "sceneVariableName", + "type": "string" }, { - "description": "The maximum value of the resource bar.", - "fullName": "Maximum value", - "functionType": "Expression", - "group": "Value configuration", - "name": "ValueMax", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyValueMax()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] + "defaultValue": "yes", + "description": "Clear destination first", + "name": "isExactCopy", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Copy the scene variable to global. This copy everything from the types to the values.", + "fullName": "Copy a scene variable to global ", + "functionType": "Action", + "group": "Copy variables", + "name": "CopySceneVariableToGlobal", + "sentence": "Copy the scene variable:_PARAM1_ to a global variable:_PARAM2_ (clear destination first: _PARAM3_)", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const sceneVariable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"sceneVariableName\"));\nconst globalVariable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"globalVariableName\"));\nconst isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");\n\ngdjs.Variable.copy(sceneVariable, globalVariable, isExactCopy);", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Scene variable to copy", + "name": "sceneVariableName", + "type": "string" }, { - "description": "Thickness of the resource bar.", - "fullName": "Bar thickness", - "functionType": "Expression", - "group": "Bar configuration", - "name": "BarThickness", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyBarThickness()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] + "description": "Global variable destination", + "name": "globalVariableName", + "type": "string" }, { - "description": "Length of the resource bar.", - "fullName": "Bar length", - "functionType": "Expression", - "group": "Bar configuration", - "name": "BarLength", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyBarLength()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] + "defaultValue": "yes", + "description": "Clear destination first", + "name": "isExactCopy", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + } + ], + "eventsBasedBehaviors": [], + "eventsBasedObjects": [] + }, + { + "author": "D8H", + "category": "", + "extensionNamespace": "", + "fullName": "Stick objects to others", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXN0aWNrZXItb3V0bGluZSIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik01LjUgMkMzLjYgMiAyIDMuNiAyIDUuNVYxOC41QzIgMjAuNCAzLjYgMjIgNS41IDIySDE2TDIyIDE2VjUuNUMyMiAzLjYgMjAuNCAyIDE4LjUgMkg1LjVNNS44IDRIMTguM0MxOS4zIDQgMjAuMSA0LjggMjAuMSA1LjhWMTVIMTguNkMxNi43IDE1IDE1LjEgMTYuNiAxNS4xIDE4LjVWMjBINS44QzQuOCAyMCA0IDE5LjIgNCAxOC4yVjUuOEM0IDQuOCA0LjggNCA1LjggNCIgLz48L3N2Zz4=", + "name": "Sticker", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/sticker-outline.svg", + "shortDescription": "Behavior to stick objects to other objects - so that they follow the position and rotation of the object they are stuck to.", + "version": "0.3.4", + "description": "This extension can be useful for:\n* Stick an accessory to a moving object,\n* Animate a skeleton.", + "origin": { + "identifier": "Sticker", + "name": "gdevelop-extension-store" + }, + "tags": [ + "sticker", + "stick", + "follow", + "skeleton", + "joint" + ], + "authorIds": [ + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" + ], + "dependencies": [], + "eventsFunctions": [ + { + "description": "Check if the object is stuck to another object.", + "fullName": "Is stuck to another object", + "functionType": "Condition", + "name": "IsStuck", + "sentence": "_PARAM1_ is stuck to _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const stickerBehaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\n/** @type {Hashtable} */\nconst stickerObjectsLists = eventsFunctionContext.getObjectsLists(\"Object\");\n/** @type {Hashtable} */\nconst basisObjectsLists = eventsFunctionContext.getObjectsLists(\"BasisObject\");\n\neventsFunctionContext.returnValue = gdjs.evtTools.object.twoListsTest(\n (stickerObject, basisObject, stickerBehaviorName) => {\n const behavior = stickerObject.getBehavior(stickerBehaviorName);\n return behavior.basisObject === basisObject;\n },\n stickerObjectsLists,\n basisObjectsLists,\n false,\n stickerBehaviorName\n);", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Sticker", + "name": "Object", + "type": "objectList" + }, + { + "description": "Sticker behavior", + "name": "Behavior", + "supplementaryInformation": "Sticker::Sticker", + "type": "behavior" }, { - "description": "Change the maximum value of a resource bar.", - "fullName": "Maximum value", + "description": "Basis", + "name": "BasisObject", + "type": "objectList" + } + ], + "objectGroups": [] + } + ], + "eventsBasedBehaviors": [ + { + "description": "Stick the object to another. Use the action to stick the object, or unstick it later.", + "fullName": "Sticker", + "name": "Sticker", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", "functionType": "Action", - "group": "Bar value configuration", - "name": "SetValueMax", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "name": "onCreated", + "sentence": "", "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValueMax" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"ValueMax\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" - ] - } - ] + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\nconst object = objects[0];\nconst behavior = object.getBehavior(behaviorName);\n\n// Set up the scene sticker objects list - if not done already.\nif (!runtimeScene.__allStickers)\n runtimeScene.__allStickers = new Set();\n\n// Set up the behavior extra methods - if not done already.\nconst prototype = Object.getPrototypeOf(behavior);\nif (!prototype.updateRelativeCoordinates) {\n // Unstick from deleted objects.\n gdjs.registerObjectDeletedFromSceneCallback(function (runtimeScene, deletedObject) {\n if (!runtimeScene.__allStickers) return;\n\n for (const sticker of runtimeScene.__allStickers) {\n if (sticker.basisObject === deletedObject) {\n sticker.basisObject = null;\n }\n }\n });\n\n /**\n * Update the coordinates in the basisObject basis.\n * \n * It uses the basisObject coordinates from the previous frame.\n * This way, the sticker can move relatively to it and still\n * follow basisObject.\n * \n * @param {gdjs.RuntimeObject} basisObject\n */\n prototype.updateRelativeCoordinates = function (basisObject) {\n const object = this.owner;\n\n // Update relative coordinates\n this.relativeX = object.getX() - this.basisOldX;\n this.relativeY = object.getY() - this.basisOldY;\n if (!this._getOnlyFollowPosition()) {\n this.relativeAngle = object.getAngle() - this.basisOldAngle;\n this.relativeWidth = object.getWidth() / this.basisOldWidth;\n this.relativeHeight = object.getHeight() / this.basisOldHeight;\n const deltaX = object.getCenterXInScene() - this.basisOldCenterXInScene;\n const deltaY = object.getCenterYInScene() - this.basisOldCenterYInScene;\n const angle = this.basisOldAngle * Math.PI / 180;\n this.relativeRotatedX = (deltaX * Math.cos(angle) + deltaY * Math.sin(angle)) / this.basisOldWidth;\n this.relativeRotatedY = (-deltaX * Math.sin(angle) + deltaY * Math.cos(angle)) / this.basisOldHeight;\n\n // Save initial values to avoid calculus and rounding errors\n this.basisOriginalWidth = basisObject.getWidth();\n this.basisOriginalHeight = basisObject.getHeight();\n this.basisOriginalAngle = basisObject.getAngle();\n }\n }\n\n /**\n * Copy the coordinates to use it the next frame.\n * @param basisObject {gdjs.RuntimeObject}\n */\n prototype.updateOldCoordinates = function (basisObject) {\n const object = this.owner;\n\n this.ownerOldX = object.getX();\n this.ownerOldY = object.getY();\n\n this.basisOldX = basisObject.getX();\n this.basisOldY = basisObject.getY();\n\n if (!this._getOnlyFollowPosition()) {\n this.ownerOldAngle = object.getAngle();\n this.ownerOldWidth = object.getWidth();\n this.ownerOldHeight = object.getHeight();\n\n this.basisOldAngle = basisObject.getAngle();\n this.basisOldWidth = basisObject.getWidth();\n this.basisOldHeight = basisObject.getHeight();\n this.basisOldCenterXInScene = basisObject.getCenterXInScene();\n this.basisOldCenterYInScene = basisObject.getCenterYInScene();\n }\n }\n /**\n * Follow the basisObject (called in doStepPostEvents).\n * \n * This method is also called by children to ensure\n * parents are updated first.\n */\n prototype.followBasisObject = function () {\n if (this.followingDoneThisFrame) {\n return;\n }\n this.followingDoneThisFrame = true;\n /** @type {gdjs.RuntimeObject} */\n const basisObject = this.basisObject;\n if (basisObject) {\n // If the behavior on the basis object has a different name,\n // the objects will still follow their basis objects\n // but frame delays could happen.\n if (basisObject.hasBehavior(behaviorName)) {\n const basisBehavior = basisObject.getBehavior(behaviorName);\n if (basisBehavior.type === this.type) {\n // Follow parents 1st to avoid frame delays\n basisBehavior.followBasisObject();\n }\n }\n\n const object = this.owner;\n\n if (this._getOnlyFollowPosition()) {\n if (object.getX() !== this.ownerOldX\n || object.getY() !== this.ownerOldY) {\n this.updateRelativeCoordinates(basisObject);\n }\n\n if (this.basisOldX !== basisObject.getX() ||\n this.basisOldY !== basisObject.getY()) {\n object.setPosition(\n basisObject.getX() + this.relativeX,\n basisObject.getY() + this.relativeY);\n }\n } else {\n if (object.getX() !== this.ownerOldX\n || object.getY() !== this.ownerOldY\n || object.getAngle() !== this.ownerOldAngle\n || object.getWidth() !== this.ownerOldWidth\n || object.getHeight() !== this.ownerOldHeight) {\n this.updateRelativeCoordinates(basisObject);\n }\n\n // Follow basisObject\n if (basisObject.getAngle() === this.basisOriginalAngle && this.basisOriginalAngle === 0) {\n if (basisObject.getWidth() === this.basisOriginalWidth ||\n basisObject.getHeight() === this.basisOriginalHeight) {\n if (this.basisOldX !== basisObject.getX() ||\n this.basisOldY !== basisObject.getY()) {\n object.setPosition(\n basisObject.getX() + this.relativeX,\n basisObject.getY() + this.relativeY);\n }\n } else {\n object.setPosition(\n basisObject.getX() + this.relativeRotatedX * basisObject.getWidth(),\n basisObject.getY() + this.relativeRotatedY * basisObject.getHeight());\n }\n } else {\n object.setAngle(basisObject.getAngle() + this.relativeAngle);\n\n const deltaX = this.relativeRotatedX * basisObject.getWidth();\n const deltaY = this.relativeRotatedY * basisObject.getHeight();\n const angle = -basisObject.getAngle() * Math.PI / 180;\n object.setX(basisObject.getCenterXInScene() + object.getX() - object.getCenterXInScene() + deltaX * Math.cos(angle) + deltaY * Math.sin(angle));\n object.setY(basisObject.getCenterYInScene() + object.getY() - object.getCenterYInScene() - deltaX * Math.sin(angle) + deltaY * Math.cos(angle));\n }\n // Unproportional dimensions changes won't work as expected\n // if the object angle is not null but nothing more can be done\n // because there is no full affine transformation on objects.\n if (basisObject.getWidth() !== this.basisOriginalWidth) {\n object.setWidth(this.relativeWidth * basisObject.getWidth());\n }\n if (basisObject.getHeight() !== this.basisOriginalHeight) {\n object.setHeight(this.relativeHeight * basisObject.getHeight());\n }\n }\n\n this.updateOldCoordinates(basisObject);\n }\n }\n}\n\n// Register this object as a sticker.\nruntimeScene.__allStickers.add(behavior);\n", + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true } ], "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "supplementaryInformation": "Sticker::Sticker", "type": "behavior" - }, - { - "description": "Maximum value", - "name": "ValueMax", - "type": "expression" } ], "objectGroups": [] }, { - "description": "The tick spacing of a bar.", - "fullName": "Tick spacing", - "functionType": "Expression", - "group": "Value configuration", - "name": "TickSpacing", - "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyTickSpacing()" - ] - } - ] + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\nconst object = objects[0];\nconst behavior = object.getBehavior(behaviorName);\n\nbehavior.followingDoneThisFrame = false;", + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": false } ], - "expressionType": { - "type": "expression" - }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "supplementaryInformation": "Sticker::Sticker", "type": "behavior" - }, - { - "description": "Tick spacing", - "name": "TickSpacing", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Change the tick spacing of a resource bar.", - "fullName": "Tick spacing", + "fullName": "", "functionType": "Action", - "group": "Value configuration", - "name": "SetTickSpacing", - "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", + "name": "doStepPostEvents", + "sentence": "", "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"TickSpacing\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" - ] - } - ] + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\nconst object = objects[0];\nconst behavior = object.getBehavior(behaviorName);\n\nbehavior.followBasisObject();", + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true } ], "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "supplementaryInformation": "Sticker::Sticker", "type": "behavior" - }, - { - "description": "Tick spacing", - "name": "TickSpacing", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Change length of a resource bar.", - "fullName": "Bar length", + "description": "Stick on another object.", + "fullName": "Stick", "functionType": "Action", - "group": "Bar configuration", - "name": "SetBarLength", - "sentence": "Change bar length of _PARAM0_ to _PARAM2_ px", + "name": "Stick", + "sentence": "Stick _PARAM0_ to _PARAM2_", "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTrackLength" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move thumb to correct place (based on new track size)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyValue()", - "" - ] - } - ] + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const object = objects[0];\nconst behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\nconst basisObjects = eventsFunctionContext.getObjects(\"BasisObject\");\n\nif (basisObjects.length === 0) return;\nconst basisObject = basisObjects[0];\n\nconst behavior = object.getBehavior(behaviorName);\n\nbehavior.basisObject = basisObject;\nbehavior.updateOldCoordinates(basisObject);\nbehavior.updateRelativeCoordinates(basisObject);\n", + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true } ], "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "supplementaryInformation": "Sticker::Sticker", "type": "behavior" }, { - "description": "Track width", - "name": "Value", - "type": "expression" + "description": "Object to stick to", + "name": "BasisObject", + "type": "objectList" } ], "objectGroups": [] }, { - "description": "Change thickness of a resource bar", - "fullName": "Bar thickness", + "description": "Unstick from the object it was stuck to.", + "fullName": "Unstick", "functionType": "Action", - "group": "Bar configuration", - "name": "SetBarThickness", - "sentence": "Change the bar thickness of _PARAM0_ to _PARAM2_ px", + "name": "Unstick", + "sentence": "Unstick _PARAM0_", "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTrackThickness" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make sure thumb width is not smaller than track height + 2 pixels (to prevent track ends from showing)", - "comment2": "" - }, + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const object = objects[0];\nconst behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\nconst behavior = object.getBehavior(behaviorName);\n\nbehavior.basisObject = null;", + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyBarThickness() + 2" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyBarThickness() + 2", - "" - ] - } - ] + "description": "Object", + "name": "Object", + "type": "object" }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbHeight" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyBarThickness() + 2" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetThumbHeight" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyBarThickness() + 2", - "" - ] - } - ] + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Sticker::Sticker", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "onDestroy", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\nconst object = objects[0];\nconst behavior = object.getBehavior(behaviorName);\n\nif (runtimeScene.__allStickers)\n runtimeScene.__allStickers.delete(behavior);\n", + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true } ], "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "supplementaryInformation": "Sticker::Sticker", "type": "behavior" - }, - { - "description": "Track thickness", - "name": "Value", - "type": "expression" } ], "objectGroups": [] - }, + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Boolean", + "label": "Only follow the position", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "OnlyFollowPosition" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [] + }, + { + "author": "Tristan Rhodes (https://victrisgames.itch.io/)", + "category": "", + "extensionNamespace": "", + "fullName": "Shake Object (position, angle, scale)", + "helpPath": "https://victrisgames.itch.io/gdevelop-camera-shake-example", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWFycm93LWFsbCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xMywxMUgxOEwxNi41LDkuNUwxNy45Miw4LjA4TDIxLjg0LDEyTDE3LjkyLDE1LjkyTDE2LjUsMTQuNUwxOCwxM0gxM1YxOEwxNC41LDE2LjVMMTUuOTIsMTcuOTJMMTIsMjEuODRMOC4wOCwxNy45Mkw5LjUsMTYuNUwxMSwxOFYxM0g2TDcuNSwxNC41TDYuMDgsMTUuOTJMMi4xNiwxMkw2LjA4LDguMDhMNy41LDkuNUw2LDExSDExVjZMOS41LDcuNUw4LjA4LDYuMDhMMTIsMi4xNkwxNS45Miw2LjA4TDE0LjUsNy41TDEzLDZWMTFaIiAvPjwvc3ZnPg==", + "name": "ShakeObject", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/arrow-all.svg", + "shortDescription": "Shake an object, using one or more ways to shake (position, angle, scale).", + "version": "1.5.5", + "description": "Select one or more methods of shaking:\n- Position: Shake the X and/or Y position of the object \n- Angle: Shake the angle (rotation) of the object \n- Scale: Shake the scale of the object (must be a sprite)\n\nControl how the object shakes:\n- Amplitude: How far the object moves during each shake\n- Duration: Amount of time to shake the object\n- Time between shakes: Amount of time between each movement of the object\n- Keep shaking until stopped (boolean)\n\nTips:\n- For a single-shake effect, set the \"Time between shakes\" to be equal to \"Duration\" (great for a hit or impact)\n- To make the single-shake move in the opposite direction, use negative numbers \n- To repeat a single-shake effect in a loop, add a condition \"Object is not shaking\" \n- Use a long \"Time between shakes\" to simulate a slow moving object (like a ship rocking back and forth)\n- Make sure to \"Stop shaking\" before starting a new shake if it uses different parameters. \n- Use \"Shake until stopped\" to simulate engine vibration, earthquake, or pulsing", + "origin": { + "identifier": "ShakeObject", + "name": "gdevelop-extension-store" + }, + "tags": [ + "shaking", + "object", + "effect", + "shake", + "scale", + "position", + "rotate", + "angle" + ], + "authorIds": [ + "gqDaZjCfevOOxBYkK6zlhtZnXCg1" + ], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "Shake an object, using one or more ways to shake (position, angle).\nThis behavior can be used on any type of object.", + "fullName": "Shake object (position, angle)", + "name": "ShakeObject_PositionAngle", + "objectType": "", + "eventsFunctions": [ { - "description": "Make bar use rounded ends.", - "fullName": "Rounded bar ends", + "description": "Shake an object, using one or more ways to shake (position, angle).", + "fullName": "Shake object (position, angle)", "functionType": "Action", - "group": "Bar configuration", - "name": "SetRoundedBar", - "sentence": "Draw _PARAM0_ with a rounded bar: _PARAM2_", + "name": "ShakeObject_PositionAngle", + "sentence": "Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_. Wait _PARAM6_ seconds between shakes. Keep shaking until stopped: _PARAM7_", "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Shake Object", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "Egal" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "GetArgumentAsNumber(\"Value\")", - "=", - "0" + "comment": "Start/Reset duration timer", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_DurationTimer\"" + ] + } ] - } - ], - "actions": [ + }, { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyRoundedTrack" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "Object", - "Behavior", - "no" + "comment": "Pass input parameters to global variables so that onScenePostEvents can use them", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "GetArgumentAsNumber(\"Duration\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "=", + "GetArgumentAsNumber(\"PowerX\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "=", + "GetArgumentAsNumber(\"PowerY\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerAngle", + "=", + "GetArgumentAsNumber(\"PowerAngle\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_TimeBetweenShakes", + "=", + "GetArgumentAsNumber(\"TimeBetweenShakes\")" + ] + } ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + }, { - "type": { - "value": "Egal" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "GetArgumentAsNumber(\"Value\")", - "=", - "1" + "comment": "Determine if the shake should keep going until stopped", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetObjectVariableAsBoolean" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeForever", + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"ShakeForever\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetObjectVariableAsBoolean" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeForever", + "True" + ] + } ] - } - ], - "actions": [ + }, { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyRoundedTrack" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "comment": "Add default values if none were provided", + "comment2": "" + }, { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "0.5" + ] + } ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", - "type": "behavior" - }, - { - "description": "Rounded bar", - "name": "Value", - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Change opacity of inactive bar.", - "fullName": "Inactive bar opacity", - "functionType": "Action", - "group": "Bar configuration", - "name": "SetInactiveBarOpacity", - "sentence": "Change inactive bar opacity of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + }, { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyInactiveTrackOpacity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_TimeBetweenShakes", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_TimeBetweenShakes", + "=", + "0.08" + ] + } ] }, { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "Object", - "Behavior", - "yes" + "comment": "If duration is less than a single shake, increase duration to make 1 full shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "<", + "Object.Variable(__ShakeObject_TimeBetweenShakes)" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "Object.Variable(__ShakeObject_TimeBetweenShakes)" + ] + } ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", - "type": "behavior" - }, - { - "description": "Inactive bar opacity", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change opacity of active bar.", - "fullName": "Active bar opacity", - "functionType": "Action", - "group": "Bar configuration", - "name": "SetActiveBarOpacity", - "sentence": "Change active bar opacity of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + }, { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyActiveTrackOpacity" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" + "comment": "Detect initial shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "1" + ] + } ] }, { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "Object", - "Behavior", - "yes" + "comment": "Initiate the onScenePostEvents function", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "1" + ] + } ] } - ] + ], + "parameters": [] } ], "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngle", "type": "behavior" }, { - "description": "Active bar opacity", - "name": "Value", + "description": "Duration of shake (in seconds) (Default: 0.5) ", + "name": "Duration", + "type": "expression" + }, + { + "description": "Amplitude of postion shake in X direction (in pixels) (For example: 5)", + "name": "PowerX", + "type": "expression" + }, + { + "description": "Amplitude of position shake in Y direction (in pixels) (For example: 5)", + "name": "PowerY", + "type": "expression" + }, + { + "description": "Amplitude of angle rotation shake (in degrees) (For example: 5)", + "name": "PowerAngle", "type": "expression" + }, + { + "description": "Amount of time between shakes (in seconds) (Default: 0.08)", + "name": "TimeBetweenShakes", + "type": "expression" + }, + { + "description": "Keep shaking until stopped", + "longDescription": "Duration value will be ignored", + "name": "ShakeForever", + "type": "yesorno" } ], "objectGroups": [] }, { - "description": "Change the color of the left side of the bar.", - "fullName": "Active bar color ", + "fullName": "", "functionType": "Action", - "group": "Bar configuration", - "name": "SetActiveBarColor", - "sentence": "Change active bar color of _PARAM0_ to _PARAM2_", + "name": "doStepPostEvents", + "sentence": "", "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Shake Object", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyActiveTrackColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Color\")" - ] + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Start shaking", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "1" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Keep object shaking forever (if desired)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ObjectVariableAsBoolean" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeForever", + "True" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "100" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_DurationTimer\"" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Calculate movement of the shake", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Run once before every shake movement", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "1" + ] + }, + { + "type": { + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_ShakeTimer\"", + "Object.Variable(__ShakeObject_TimeBetweenShakes)" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_ShakeTimer\"" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeCounter", + "+", + "1" + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Correct for drift and reset drift tracking variables", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move to correct any drift from previous shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_DisplacementTravelledX)" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_DisplacementTravelledY)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerAngle", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_AngleTravelled)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Reset drift detection variables", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledX", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledY", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_AngleTravelled", + "=", + "0" + ] + } + ] + } + ], + "parameters": [] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Calculate Position Shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "PositionDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude * [-1 or 1]", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make initial shake NOT random so users can set a direction for a one-shake effect", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "1" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementX", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerX)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementY", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerY)" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "After initial shake pick a random direction", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementX", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerX) * RandomWithStep(-1, 1, 2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementY", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerY) * RandomWithStep(-1, 1, 2)" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Calculate Rotation (angle) shake ", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerAngle", + "!=", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Every \"even\" shake, rotate clockwise", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "AngleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementAngle", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerAngle)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Every \"odd\" shake, rotate counter-clockwise", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "AngleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementAngle", + "=", + "-1 *(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerAngle)" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save that initial shake has been processed", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "0" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Move object", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Calculate the fraction of shake that occured during this frame", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PercentTimeElapsedThisFrame", + "=", + "min(1,TimeDelta()/Object.Variable(__ShakeObject_TimeBetweenShakes))" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Increase change for the first half of the shake (move away from original values)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_ShakeTimer\"", + "Object.Variable(__ShakeObject_TimeBetweenShakes)/2" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change position", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledX", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledY", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change angle", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Variable(__ShakeObject_PowerAngle)", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Object", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_AngleTravelled", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Decrease change the second half of the shake (return to original position)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_ShakeTimer\"", + "Object.Variable(__ShakeObject_TimeBetweenShakes)/2" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change position", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledX", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledY", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change angle", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Variable(__ShakeObject_PowerAngle)", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Object", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_AngleTravelled", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] }, { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Stop shaking", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Stop shaking when the duration has been reached (or if the stop shaking function was called)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_DurationTimer\"", + "Object.Variable(__ShakeObject_Duration)" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "-1" + ] + } + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeCounter", + "=", + "0" + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Correct for drift and reset drift tracking variables", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move to correct any drift from previous shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_DisplacementTravelledX)" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_DisplacementTravelledY)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerAngle", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_AngleTravelled)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Reset drift detection variables", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledX", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledY", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_AngleTravelled", + "=", + "0" + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] } - ] + ], + "parameters": [] } ], "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngle", "type": "behavior" - }, - { - "description": "Active bar color", - "name": "Color", - "type": "color" } ], "objectGroups": [] }, { - "description": "Change the color of the right side of the resource bar.", - "fullName": "Inactive bar color", + "description": "Stop any shaking of object that was initiated by the Shake Object extension.", + "fullName": "Stop shaking the object", "functionType": "Action", - "group": "Bar configuration", - "name": "SetInactiveBarColor", - "sentence": "Change inactive bar color of _PARAM0_ to _PARAM2_", + "name": "StopShaking", + "sentence": "Stop shaking _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyInactiveTrackColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Color\")" - ] - }, + "conditions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + "value": "ShakeObject::ShakeObject_PositionAngle::IsShaking" }, "parameters": [ "Object", "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", - "type": "behavior" - }, - { - "description": "Inactive bar color", - "name": "Color", - "type": "color" - } - ], - "objectGroups": [] - }, - { - "description": "Update the hitbox.", - "fullName": "Update hitbox", - "functionType": "Action", - "group": "Private", - "name": "UpdateHitbox", - "private": true, - "sentence": "Update the hitbox of _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::SetRotationCenter" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyBarLength() / 2", - "Object.Behavior::PropertyBarThickness() / 2" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::SetRectangularCollisionMask" - }, - "parameters": [ - "Object", - "0", - "-Object.Behavior::PropertyBarThickness() / 2", - "Object.Behavior::PropertyBarLength()", - "Object.Behavior::PropertyBarThickness() / 2" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Draw health bar.", - "fullName": "Draw health bar", - "functionType": "Action", - "name": "DrawHealthBar", - "sentence": "Draw health bar with _PARAM0_ based on health of _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set values", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" - }, - "parameters": [ - "Object", - "DraggableSliderBehavior", - "Tween::Ease(\"easeOutCirc\", Object.Behavior::Value(), ObjectWithHealth.HealthBehavior::Health(), 0.05)", - "" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValueMax" - }, - "parameters": [ - "Object", - "DraggableSliderBehavior", - "ObjectWithHealth.HealthBehavior::MaxHealth()", "" ] } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", - "type": "behavior" - }, - { - "description": "Object with health", - "name": "ObjectWithHealth", - "type": "objectList" - }, - { - "description": "Health behavior", - "name": "HealthBehavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Draw shield bar.", - "fullName": "Draw shield bar", - "functionType": "Action", - "name": "DrawShieldBar", - "sentence": "Draw shield bar with _PARAM0_ based on shield of _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set values", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + ], "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" - }, - "parameters": [ - "Object", - "DraggableSliderBehavior", - "Tween::Ease(\"easeOutCirc\", Object.Behavior::Value(), ObjectWithShield.ShieldBehavior::ShieldPoints(), 0.05)", - "" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValueMax" + "value": "ModVarObjet" }, "parameters": [ "Object", - "DraggableSliderBehavior", - "ObjectWithShield.ShieldBehavior::MaxShield()", - "" + "__ShakeObject_ShakeInProgress", + "=", + "-1" ] } ] } ], "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", - "type": "behavior" - }, - { - "description": "Object with shield", - "name": "ObjectWithShield", - "type": "objectList" + { + "description": "Object", + "name": "Object", + "type": "object" }, { - "description": "Shield behavior", - "name": "ShieldBehavior", - "supplementaryInformation": "Health::Shield", + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngle", "type": "behavior" } ], "objectGroups": [] }, { - "description": "Draw resource bar.", - "fullName": "Draw resource bar", - "functionType": "Action", - "name": "DrawResourceBar", - "sentence": "Draw resource bar with _PARAM0_ with current value _PARAM2_ and max value _PARAM3_", + "description": "Check if an object is shaking.", + "fullName": "Check if an object is shaking", + "functionType": "Condition", + "name": "IsShaking", + "sentence": "_PARAM0_ is shaking", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set values", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "conditions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + "value": "VarObjet" }, "parameters": [ "Object", - "DraggableSliderBehavior", - "Tween::Ease(\"easeOutCirc\", Object.Behavior::Value(), GetArgumentAsNumber(\"CurrentValue\"), 0.05)", - "" + "__ShakeObject_ShakeInProgress", + "=", + "1" ] - }, + } + ], + "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValueMax" + "value": "SetReturnBoolean" }, "parameters": [ - "Object", - "DraggableSliderBehavior", - "GetArgumentAsNumber(\"MaxValue\")", - "" + "True" ] } ] @@ -26215,366 +19909,447 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "DrawResourceBar::DrawResourceBar", + "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngle", "type": "behavior" - }, - { - "description": "Current value", - "name": "CurrentValue", - "type": "expression" - }, - { - "description": "Max value", - "name": "MaxValue", - "supplementaryInformation": "Health::Health", - "type": "expression" } ], "objectGroups": [] } ], - "propertyDescriptors": [ - { - "value": "0", - "type": "Number", - "label": "Minimum value", - "description": "", - "group": "Value", - "extraInformation": [], - "hidden": false, - "name": "ValueMin" - }, - { - "value": "1", - "type": "Number", - "label": "Maximum value", - "description": "", - "group": "Value", - "extraInformation": [], - "hidden": false, - "name": "ValueMax" - }, - { - "value": "0", - "type": "Number", - "label": "Tick spacing", - "description": "", - "group": "Value", - "extraInformation": [], - "hidden": false, - "name": "TickSpacing" - }, - { - "value": "200", - "type": "Number", - "label": "Bar length", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "BarLength" - }, - { - "value": "4", - "type": "Number", - "label": "Bar thickness", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "BarThickness" - }, - { - "value": "11;255;0", - "type": "Color", - "label": "Inactive bar color", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "InactiveBarColor" - }, - { - "value": "96", - "type": "Number", - "label": "Inactive bar opacity", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "InactiveBarOpacity" - }, - { - "value": "11;255;0", - "type": "Color", - "label": "Active bar color", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "ActiveBarColor" - }, - { - "value": "255", - "type": "Number", - "label": "Active bar opacity", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "ActiveBarOpacity" - }, - { - "value": "false", - "type": "Boolean", - "label": "Rounded bar ends", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "RoundedBar" - }, - { - "value": "0", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "Value" - }, - { - "value": "0", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "ThumbOffset" - }, - { - "value": "true", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "NeedRedraw" - }, - { - "value": "0", - "type": "Number", - "label": "Time to complete moving the bar when the value is changed (seconds)", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "ChangeDuration" - } - ], + "propertyDescriptors": [], "sharedPropertyDescriptors": [] - } - ], - "eventsBasedObjects": [] - }, - { - "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", - "category": "Input", - "extensionNamespace": "", - "fullName": "Draggable slider", - "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", - "name": "DraggableSliderControl", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/UI Essentials/UI Essentials_sliders_options.svg", - "shortDescription": "A draggable slider that users can move to select a numerical value.", - "version": "1.0.5", - "description": "Draws a draggable slider that users can move to select a numerical value.\nThe value range, tick spacing, and the appearance of the slider can be defined with properties.\n\nHow to use:\n- Add this behavior a **Shape Painter** object\n- Place an instance of that shape painter on the screen where you want the slider to appear\n- Use the \"Value\" expression to find the Value based on the position of the slider\n\nTips:\n- You can disable the slider to prevent a user from interacting with it\n- You can set the Value of the slider and the slider will move to the correct position\n\nFurther details can be found in [this tutorial video](https://youtu.be/iiTUwdAT_hs).\n\nBreaking changes (1.0.0)\n- Track thickness and length properties replaced track width and height. These 2 properties must be set again if they were different from the default size.\n- Hidden sliders can be dragged. The \"enable\" action must be used to disable them.\n", - "origin": { - "identifier": "DraggableSliderControl", - "name": "gdevelop-extension-store" - }, - "tags": [ - "draggable", - "slider", - "shape painter", - "ui", - "widget" - ], - "authorIds": [ - "IWykYNRvhCZBN3vEgKEbBPOR3Oc2", - "gqDaZjCfevOOxBYkK6zlhtZnXCg1" - ], - "dependencies": [], - "eventsFunctions": [], - "eventsBasedBehaviors": [ + }, { - "description": "Let users select a numerical value by dragging a slider.", - "fullName": "Draggable slider", - "name": "DraggableSliderControl", - "objectType": "PrimitiveDrawing::Drawer", + "description": "Shake an object, using one or more ways to shake (position, angle, scale)\nThis behavior can only be used on sprite objects.", + "fullName": "Shake object (position, angle, scale)", + "name": "ShakeObject_PositionAngleScale", + "objectType": "Sprite", "eventsFunctions": [ { - "fullName": "", + "description": "Shake an object, using one or more ways to shake (position, angle, scale).", + "fullName": "Shake object (position, angle, scale)", "functionType": "Action", - "name": "onCreated", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make sure object doesn't get re-drawn every frame", - "comment2": "" - }, + "name": "ShakeObject_PositionAngleScale", + "sentence": "Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_, and scale amplitude _PARAM6_. Wait _PARAM7_ seconds between shakes. Keep shaking until stopped: _PARAM8_", + "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Shake Object", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "PrimitiveDrawing::ClearBetweenFrames" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "Object", - "no" + "comment": "Start/Reset duration timer", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_DurationTimer\"" + ] + } ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Use correct min value (instead of always starting at 0)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + }, { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMin()" + "comment": "Pass input parameters to global variables so that onScenePostEvents can use them", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "GetArgumentAsNumber(\"Duration\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "=", + "GetArgumentAsNumber(\"PowerX\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "=", + "GetArgumentAsNumber(\"PowerY\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerAngle", + "=", + "GetArgumentAsNumber(\"PowerAngle\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerScale", + "=", + "GetArgumentAsNumber(\"PowerScale\")" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_TimeBetweenShakes", + "=", + "GetArgumentAsNumber(\"TimeBetweenShakes\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Determine if the shake should keep going until stopped", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetObjectVariableAsBoolean" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeForever", + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"ShakeForever\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetObjectVariableAsBoolean" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeForever", + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Add default values if none were provided", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "0.5" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_TimeBetweenShakes", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_TimeBetweenShakes", + "=", + "0.08" + ] + } ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set track height function (which enforces valid thumb sizes)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + }, { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTrackThickness" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyTrackThickness()" + "comment": "If duration is less than a single shake, increase duration to make 1 full shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "<", + "Object.Variable(__ShakeObject_TimeBetweenShakes)" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "Object.Variable(__ShakeObject_TimeBetweenShakes)" + ] + } ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Start halo at same size as thumb", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + }, { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyCurrentHaloRadius" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::PropertyThumbHeight()/2,Object.Behavior::PropertyThumbWidth()/2)" + "comment": "Detect initial shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "1" + ] + } ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + }, { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "Object", - "Behavior", - "" + "comment": "Initiate the onScenePostEvents function", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "1" + ] + } ] } - ] + ], + "parameters": [] } ], "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", + "supplementaryInformation": "Sprite", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngleScale", "type": "behavior" + }, + { + "description": "Duration of shake (in seconds) (Default: 0.5)", + "name": "Duration", + "type": "expression" + }, + { + "description": "Amplitude of postion shake in X direction (in pixels) (For example: 5)", + "name": "PowerX", + "type": "expression" + }, + { + "description": "Amplitude of position shake in Y direction (in pixels) (For example: 5)", + "name": "PowerY", + "type": "expression" + }, + { + "description": "Amplitude of angle rotation shake (in degrees) (For example: 5)", + "name": "PowerAngle", + "type": "expression" + }, + { + "description": "Amplitude of scale shake (in percent change) (For example: 5)", + "name": "PowerScale", + "type": "expression" + }, + { + "description": "Amount of time between shakes (in seconds) (Default: 0.08)", + "name": "TimeBetweenShakes", + "type": "expression" + }, + { + "description": "Keep shaking until stopped", + "longDescription": "Duration value will be ignored", + "name": "ShakeForever", + "type": "yesorno" } ], "objectGroups": [] @@ -26582,75 +20357,1579 @@ { "fullName": "", "functionType": "Action", - "name": "doStepPreEvents", + "name": "doStepPostEvents", "sentence": "", "events": [ { "colorB": 228, "colorG": 176, "colorR": 74, - "creationTime": 0, - "name": "Slider logic", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::IsEnabled" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [], + "creationTime": 0, + "name": "Shake Object", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Start shaking", + "source": "", + "type": "BuiltinCommonInstructions::Group", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Track where the mouse is (in relation to object)", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "conditions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyMouseX" + "value": "VarObjet" }, "parameters": [ "Object", - "Behavior", + "__ShakeObject_ShakeInProgress", "=", - "Object.ToDrawingX(MouseX(Object.Layer(), 0), MouseY(Object.Layer(), 0))" + "1" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Keep object shaking forever (if desired)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ObjectVariableAsBoolean" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeForever", + "True" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_Duration", + "=", + "100" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_DurationTimer\"" + ] + } ] }, { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyMouseY" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.ToDrawingY(MouseX(Object.Layer(), 0), MouseY(Object.Layer(), 0))" - ] + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Calculate movement of the shake", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Run once before every shake movement", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "1" + ] + }, + { + "type": { + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_ShakeTimer\"", + "Object.Variable(__ShakeObject_TimeBetweenShakes)" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_ShakeTimer\"" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeCounter", + "+", + "1" + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "folded": true, + "name": "Correct for drift and reset drift tracking variables", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move to correct any drift from previous shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_DisplacementTravelledX)" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_DisplacementTravelledY)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerAngle", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_AngleTravelled)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerScale", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_ScaleTravelled)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Reset drift detection variables", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledX", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledY", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_AngleTravelled", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ScaleTravelled", + "=", + "0" + ] + } + ] + } + ], + "parameters": [] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Calculate Position Shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "PositionDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude * [-1 or 1]", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make initial shake NOT random so users can set a direction for a one-shake effect", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "1" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementX", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerX)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementY", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerY)" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "After initial shake pick a random direction", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementX", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerX) * RandomWithStep(-1, 1, 2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementY", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerY) * RandomWithStep(-1, 1, 2)" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Calculate Rotation (angle) shake ", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerAngle", + "!=", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Every \"even\" shake, rotate clockwise", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "AngleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementAngle", + "=", + "-1 * (Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerAngle)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Every \"odd\" shake, rotate counter-clockwise", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "AngleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementAngle", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerAngle)" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Calculate Scale shake", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerScale", + "!=", + "0" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Calculate object scale displacement, with linear decay over time", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "ScaleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude * 1/100", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Every even shake, increase scale", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementScale", + "=", + "-1 * (Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerScale) * (1/100)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Every \"odd\" shake, decrease scale", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "ScaleDisplacement = -1 * (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude * 1/100", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementScale", + "=", + "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerScale) * (1/100)" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save that initial shake has been processed", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_InitialShake", + "=", + "0" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Move object", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Calculate the fraction of shake that occured during this frame", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PercentTimeElapsedThisFrame", + "=", + "min(1,TimeDelta()/Object.Variable(__ShakeObject_TimeBetweenShakes))" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Increase change for the first half of the shake (move away from original values)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_ShakeTimer\"", + "Object.Variable(__ShakeObject_TimeBetweenShakes)/2" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change position", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledX", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledY", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change angle", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Variable(__ShakeObject_PowerAngle)", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Object", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_AngleTravelled", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change scale", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Variable(__ShakeObject_PowerScale)", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "Object", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementScale) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ScaleTravelled", + "+", + "round(1024 * Object.Variable(__ShakeObject_DisplacementScale) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Decrease change the second half of the shake (return to original position)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "\"__ShakeObject_ShakeTimer\"", + "Object.Variable(__ShakeObject_TimeBetweenShakes)/2" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change position", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledX", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledY", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change angle", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Variable(__ShakeObject_PowerAngle)", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "Object", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_AngleTravelled", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change scale", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Variable(__ShakeObject_PowerScale)", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "Object", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementScale) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Save movement to calculate drift", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ScaleTravelled", + "-", + "round(1024 * Object.Variable(__ShakeObject_DisplacementScale) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [] } ] - }, + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Stop shaking", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { @@ -26661,7 +21940,7 @@ "textG": 0, "textR": 0 }, - "comment": "Move slider when being dragged", + "comment": "Stop shaking when the duration has been reached (or if the stop shaking function was called)", "comment2": "" }, { @@ -26669,560 +21948,2491 @@ "conditions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbOffset" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyMouseX()" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "value": "BuiltinCommonInstructions::Or" }, - "comment": "End sliding and update variables", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "MouseButtonReleased" - }, - "parameters": [ - "", - "Left" - ] - } - ], - "actions": [ + "parameters": [], + "subInstructions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsBeingDragged" + "value": "ObjectTimer" }, "parameters": [ "Object", - "Behavior", - "no" + "\"__ShakeObject_DurationTimer\"", + "Object.Variable(__ShakeObject_Duration)" ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Update \"Value\" based on the location of the thumb", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + }, { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + "value": "VarObjet" }, "parameters": [ "Object", - "Behavior", - "Object.Behavior::PropertyValueMin() + (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin()) * Object.Behavior::PropertyThumbOffset() / Object.Behavior::PropertyTrackLength()", - "" + "__ShakeObject_ShakeInProgress", + "=", + "-1" ] } ] }, { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "BuiltinCommonInstructions::Once" }, - "comment": "Grow halo even more when pressed", - "comment2": "" - }, + "parameters": [] + } + ], + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTargetHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "1.25 * Object.Behavior::PropertyHaloRadius()" - ] - } + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "0" ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Detect hover/touch/click (but only if the layer and object is visible, and the object is not already being dragged)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + }, { "type": { - "inverted": true, - "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" + "value": "ModVarObjet" }, "parameters": [ "Object", - "Behavior" + "__ShakeObject_ShakeCounter", + "=", + "0" ] } ], - "actions": [], "events": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Detect mouse clicks near track, start dragging", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SourisBouton" - }, - "parameters": [ - "", - "Left" - ] - }, + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Correct for drift and reset drift tracking variables", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "BuiltinCommonInstructions::Once" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [] - } - ], - "actions": [], - "events": [ + "comment": "Move to correct any drift from previous shake", + "comment2": "" + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "Egal" + "value": "BuiltinCommonInstructions::Or" }, - "parameters": [ - "Object.Behavior::PropertyMouseX()", - ">=", - "-Object.Behavior::PropertyHaloRadius()" + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerX", + "!=", + "0" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_PowerY", + "!=", + "0" + ] + } ] - }, + } + ], + "actions": [ { "type": { - "value": "Egal" + "value": "MettreX" }, "parameters": [ - "Object.Behavior::PropertyMouseX()", - "<=", - "Object.Behavior::PropertyTrackLength() + Object.Behavior::PropertyHaloRadius()" + "Object", + "-", + "Object.Variable(__ShakeObject_DisplacementTravelledX)" ] }, { "type": { - "value": "Egal" + "value": "MettreY" }, "parameters": [ - "Object.Behavior::PropertyMouseY()", - ">=", - "-Object.Behavior::PropertyHaloRadius()" + "Object", + "-", + "Object.Variable(__ShakeObject_DisplacementTravelledY)" ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "Egal" + "value": "VarObjet" }, "parameters": [ - "Object.Behavior::PropertyMouseY()", - "<=", - "Object.Behavior::PropertyHaloRadius()" + "Object", + "__ShakeObject_PowerAngle", + "!=", + "0" ] } ], "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsBeingDragged" + "value": "SetAngle" }, "parameters": [ "Object", - "Behavior", - "yes" + "-", + "Object.Variable(__ShakeObject_AngleTravelled)" ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + "value": "VarObjet" }, "parameters": [ "Object", - "Behavior", - "yes" + "__ShakeObject_PowerScale", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "Object", + "-", + "Object.Variable(__ShakeObject_ScaleTravelled)" ] } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Reset hover detection ", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsHovered" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Grow halo when hovered", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "SourisBouton" - }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseX()", - ">=", - "Object.Behavior::PropertyThumbOffset() - Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseX()", - "<=", - "Object.Behavior::PropertyThumbOffset() + Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseY()", - ">=", - "- Object.Behavior::PropertyHaloRadius()" ] }, { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseY()", - "<=", - "Object.Behavior::PropertyHaloRadius()" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsHovered" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] + "comment": "Reset drift detection variables", + "comment2": "" }, { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTargetHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyHaloRadius()" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledX", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_DisplacementTravelledY", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_AngleTravelled", + "=", + "0" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ScaleTravelled", + "=", + "0" + ] + } ] } - ] - }, + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngleScale", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Stop shaking an object.", + "fullName": "Stop shaking an object", + "functionType": "Action", + "name": "StopShaking", + "sentence": "Stop shaking _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ShakeObject::ShakeObject_PositionAngleScale::IsShaking" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "-1" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngleScale", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if an object is shaking.", + "fullName": "Check if an object is shaking", + "functionType": "Condition", + "name": "IsShaking", + "sentence": "_PARAM0_ is shaking", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__ShakeObject_ShakeInProgress", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngleScale", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [] + }, + { + "author": "VegeTato, arthuro555", + "category": "", + "extensionNamespace": "", + "fullName": "Repeat every X seconds", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXJlcGVhdCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNywxN0g3VjE0TDMsMThMNywyMlYxOUgxOVYxM0gxN003LDdIMTdWMTBMMjEsNkwxNywyVjVINVYxMUg3VjdaIiAvPjwvc3ZnPg==", + "name": "RepeatEveryXSeconds", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/repeat.svg", + "shortDescription": "This allows to trigger an event every X seconds.", + "version": "0.1.0", + "description": "Convenience conditions, actions and behaviors for timers to trigger a condition every X seconds.", + "origin": { + "identifier": "RepeatEveryXSeconds", + "name": "gdevelop-extension-store" + }, + "tags": [ + "repeat", + "timer", + "time", + "convenience" + ], + "authorIds": [ + "ZgrsWuRTAkXgeuPV9bo0zuEcA2w1", + "IRIhkkTTl2UHhfjrLTTH5GYwkYu1" + ], + "dependencies": [], + "eventsFunctions": [ + { + "description": "Triggers every X seconds.", + "fullName": "Repeat every X seconds", + "functionType": "Condition", + "name": "Repeat", + "sentence": "Repeat timer _PARAM1_ every _PARAM2_ seconds", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "ResetTimer" + }, + "parameters": [ + "player", + "GetArgumentAsString(\"timerName\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Timer" + }, + "parameters": [ + "player", + "GetArgumentAsNumber(\"time\")", + "GetArgumentAsString(\"timerName\")" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResetTimer" + }, + "parameters": [ + "player", + "GetArgumentAsString(\"timerName\")" + ] + }, + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "The name of the timer to loop", + "name": "timerName", + "type": "string" + }, + { + "description": "The time in seconds between each trigger", + "name": "time", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Triggers every X seconds X amount of times.", + "fullName": "Repeat every X seconds in X number", + "functionType": "Condition", + "name": "RepeatXTimes", + "sentence": "Repeat timer _PARAM1_ every _PARAM2_ seconds _PARAM3_ times", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "ResetTimer" + }, + "parameters": [ + "player", + "GetArgumentAsString(\"timerName\")" + ] + }, + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "__RepeatEveryXSeconds_.Counter[GetArgumentAsString(\"timerName\")]", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Timer" + }, + "parameters": [ + "player", + "GetArgumentAsNumber(\"time\")", + "GetArgumentAsString(\"timerName\")" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "GetArgumentAsNumber(\"limit\")", + "=", + "-1" + ] + }, + { + "type": { + "value": "VarScene" + }, + "parameters": [ + "__RepeatEveryXSeconds_.Counter[GetArgumentAsString(\"timerName\")]", + "<", + "GetArgumentAsNumber(\"limit\")" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ResetTimer" + }, + "parameters": [ + "player", + "GetArgumentAsString(\"timerName\")" + ] + }, + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "__RepeatEveryXSeconds_.Counter[GetArgumentAsString(\"timerName\")]", + "+", + "1" + ] + }, + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "The name of the timer to loop", + "name": "timerName", + "type": "string" + }, + { + "description": "The time in seconds between each trigger", + "name": "time", + "type": "expression" + }, + { + "description": "The limit of loops", + "longDescription": "The condition will trigger at most this amount of times. Make it -1 for looping forever.", + "name": "limit", + "type": "expression" + } + ], + "objectGroups": [] + } + ], + "eventsBasedBehaviors": [ + { + "description": "Allows to repeat an object timer every X seconds.", + "fullName": "Repeat every X seconds", + "name": "RepeatTimer", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyTimerName()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Triggers every X seconds, where X is defined in the behavior properties.", + "fullName": "Repeat every X seconds", + "functionType": "Condition", + "name": "Repeat", + "sentence": "Recurring timer _PARAM1_ of _PARAM0_ has triggered", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyTimerName()", + "Object.Behavior::PropertyTimerLength()" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "RepeatEveryXSeconds::RepeatTimer::PropertyLimit" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "-1" + ] + }, + { + "type": { + "value": "RepeatEveryXSeconds::RepeatTimer::PropertyCounter" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyLimit()" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyTimerName()" + ] + }, + { + "type": { + "value": "RepeatEveryXSeconds::RepeatTimer::SetPropertyCounter" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + }, + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Pauses a recurring timer.", + "fullName": "Pause a recurring timer", + "functionType": "Action", + "name": "Pause", + "sentence": "Pause recurring timer _PARAM1_ of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PauseObjectTimer" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyTimerName()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Resumes a paused recurring timer.", + "fullName": "Resume a recurring timer", + "functionType": "Action", + "name": "Resume", + "sentence": "Resume recurring timer _PARAM1_ of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "UnPauseObjectTimer" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyTimerName()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Allows to trigger the recurring timer X times again.", + "fullName": "Reset the limit", + "functionType": "Action", + "name": "ResetLimit", + "sentence": "Allow to trigger the recurring timer _PARAM1_ of _PARAM0_ X times again", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RepeatEveryXSeconds::RepeatTimer::SetPropertyCounter" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "MyTimer", + "type": "String", + "label": "The name of the timer to repeat", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "TimerName" + }, + { + "value": "1", + "type": "Number", + "label": "The time between each trigger (in seconds)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "TimerLength" + }, + { + "value": "-1", + "type": "Number", + "label": "How many times should the timer trigger? -1 for forever.", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "Limit" + }, + { + "value": "0", + "type": "Number", + "label": "An internal counter", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "Counter" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [] + }, + { + "author": "@4ian", + "category": "General", + "extensionNamespace": "", + "fullName": "Health (life) points and shield", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWhlYXJ0LWhhbGYtZnVsbCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNi41LDVDMTUsNSAxMy41OCw1LjkxIDEzLDcuMlYxNy43NEMxNy4yNSwxMy44NyAyMCwxMS4yIDIwLDguNUMyMCw2LjUgMTguNSw1IDE2LjUsNU0xNi41LDNDMTkuNTgsMyAyMiw1LjQxIDIyLDguNUMyMiwxMi4yNyAxOC42LDE1LjM2IDEzLjQ1LDIwLjAzTDEyLDIxLjM1TDEwLjU1LDIwLjAzQzUuNCwxNS4zNiAyLDEyLjI3IDIsOC41QzIsNS40MSA0LjQyLDMgNy41LDNDOS4yNCwzIDEwLjkxLDMuODEgMTIsNS4wOEMxMy4wOSwzLjgxIDE0Ljc2LDMgMTYuNSwzWiIgLz48L3N2Zz4=", + "name": "Health", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/heart-half-full.svg", + "shortDescription": "Manage life points and a protective shield.", + "version": "0.1.0", + "description": "Manage health (life) and shield points of an object. Health can be assigned to players, enemies, NPCs, or even inanimate objects such as breaking doors and mining rocks.\n\nHow to use:\n\n- Set desired values in \"Health\" and \"Shield\" behavior properties\n- To apply damage use “Damage an object” or “Damage an object protected by a shield”\n- To heal health, use “Heal object” action \n- To activate the shield, use “Activate Shield” action\n- Health and shield regeneration will happen automatically based on properties\n \nTips:\n\n- While damage cooldown is active, no damage will be applied to health or shield\n- Try using the “Blink” extension while damage cooldown is active\n- Use the “Is just damaged” condition to trigger audio and visual effects\n\nHealth properties:\n\n- Health (life points) Used for starting health\n- Maximum health (0 for no maximum)\n- Damage cooldown (seconds) Use \"0\" for no cooldown\n- Rate of health regeneration (points per second) Will not exceed max health, even with overhealing enabled\n- Delay (seconds) before health regeneration starts after being hit\n- Allow heal to increase health above max health (will not exceed max health)\n\nShield properties:\n\n- Max shield points (Shield will start with this many points when activated)\n- Duration of shield (seconds) Use \"0\" to disable shield timer\n- Rate of shield regeneration (points per second)\n- Shield will block all excess damage when shield is destroyed\n- Delay (seconds) before shield regeneration starts after being hit\n- Regenerate shield when it has zero points\n", + "origin": { + "identifier": "Health", + "name": "gdevelop-extension-store" + }, + "tags": [ + "health", + "life", + "damage", + "hit", + "heal", + "shield", + "regeneration" + ], + "authorIds": [ + "wWP8BSlAW0UP4NeaHa2LcmmDzmH2", + "xpwUwByyImTDcHEqDUqfyg0oRBt1", + "gqDaZjCfevOOxBYkK6zlhtZnXCg1" + ], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "Manage life points by damaging and healing the object.", + "fullName": "Health", + "name": "Health", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Regeneration", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Health", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyHealthRegenRate" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + }, + { + "type": { + "value": "Health::Health::PropertyHealth" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::MaxHealth()" + ] + }, + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.TimeSinceLastHit\"", + ">", + "Object.Behavior::PropertyHealthRegenDelay()" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHealth" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "Object.Behavior::PropertyHealthRegenRate() * TimeDelta()" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Correct any values above maximum limits", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "Health::Health::PropertyHealth" }, - "comment": "Shrink halo to zero when not hovered", - "comment2": "" - }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::MaxHealth()" + ] + } + ], + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsHovered" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTargetHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" - ] - } + "type": { + "value": "Health::Health::SetPropertyHealth" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyMaxHealth()" ] } ] } ] - }, + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Reset damage trigger", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyIsJustDamaged" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Apply damage directly to the object. Damage will not be affected by shield. Triggers damage cooldown.", + "fullName": "Damage an object", + "functionType": "Action", + "group": "Health", + "name": "Hit", + "sentence": "Damage _PARAM0_, removing _PARAM2_ points from its health", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Only consider damage if damage cooldown is NOT active", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Health::Health::IsDamageCooldownActive" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Mark object was hit at least once (used for initial state of damage cooldown)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Health::Health::PropertyHitAtLeastOnce" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHitAtLeastOnce" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Restart time since last hit timer", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.TimeSinceLastHit\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Apply damage", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHealth" + }, + "parameters": [ + "Object", + "Behavior", + "-", + "GetArgumentAsNumber(\"DamageValue\")" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.DamageCooldown\"" + ] + }, + { + "type": { + "value": "Health::Health::SetPropertyIsJustDamaged" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Value of the damage to do (will be removed from object health)", + "name": "DamageValue", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change health points. This is not considered damage.", + "fullName": "Change health points", + "functionType": "Action", + "group": "Health", + "name": "SetHealth", + "sentence": "Set health of _PARAM0_ to _PARAM2_ points", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHealth" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyMaxHealth" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHealth" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::PropertyHealth(), Object.Behavior::PropertyMaxHealth())" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "New health value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Heal the object by increasing its life points.", + "fullName": "Heal object", + "functionType": "Action", + "group": "Health", + "name": "Heal", + "sentence": "Heal _PARAM0_ with _PARAM2_ health points", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Change health points", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHealth" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "GetArgumentAsNumber(\"HealValue\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Prevent exceeding max health (unless overhealing is enabled)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyMaxHealth" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + }, + { + "type": { + "inverted": true, + "value": "Health::Health::PropertyAllowOverHealing" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHealth" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::PropertyHealth(), Object.Behavior::PropertyMaxHealth())" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Points to heal (will be added to object health)", + "name": "HealValue", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the object maximum health points.", + "fullName": "Change maximum health points", + "functionType": "Action", + "group": "Health", + "name": "SetMaxHealth", + "sentence": "Set maximum health of _PARAM0_ to _PARAM2_ points", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyMaxHealth" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Maximum health", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change rate of health regeneration.", + "fullName": "Change rate of health regeneration", + "functionType": "Action", + "group": "Shield", + "name": "SetHealthRegenRate", + "sentence": "Set rate of health regen of _PARAM0_ to _PARAM2_ points per second", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHealthRegenRate" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Rate of regen", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change duration of damage cooldown.", + "fullName": "Change duration of damage cooldown", + "functionType": "Action", + "group": "Health", + "name": "SetCooldownDuration", + "sentence": "Set duration of damage cooldown on _PARAM0_ to _PARAM2_ seconds", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyDamageCooldown" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Duration of damage cooldown (seconds)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change delay before health regeneration starts after being hit.", + "fullName": "Change delay before health regeneration starts", + "functionType": "Action", + "group": "Health", + "name": "SetHealthRegenDelay", + "sentence": "Set delay before health regeneration starts on _PARAM0_ to _PARAM2_ seconds", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHealthRegenDelay" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Delay (seconds)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Allow over-healing.", + "fullName": "Allow over-healing", + "functionType": "Action", + "group": "Health", + "name": "AllowOverHealing", + "sentence": "Allow over-healing on _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyAllowOverHealing" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyAllowOverHealing" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Allow over-healing", + "name": "Value", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Mark object as hit at least once.", + "fullName": "Mark object as hit at least once", + "functionType": "Action", + "group": "Health", + "name": "SetHitAtLeastOnce", + "sentence": "Mark _PARAM0_ as hit at least once: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHitAtLeastOnce" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyHitAtLeastOnce" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Hit at least once", + "name": "Value", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Mark object as just damaged.", + "fullName": "Mark object as just damaged", + "functionType": "Action", + "group": "Health", + "name": "SetJustDamaged", + "sentence": "Mark _PARAM0_ as just damaged: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyIsJustDamaged" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetPropertyIsJustDamaged" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + }, + { + "description": "Just damaged", + "name": "Value", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the object has been hit at least once.", + "fullName": "Object hit at least once", + "functionType": "Condition", + "group": "Health", + "name": "HitAtLeastOnce", + "sentence": "_PARAM0_ has just been hit at least once", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyHitAtLeastOnce" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the object was just damaged previously in the events.", + "fullName": "Is just damaged", + "functionType": "Condition", + "group": "Health", + "name": "IsJustDamaged", + "sentence": "_PARAM0_ has just been damaged", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyIsJustDamaged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if damage cooldown is active. Object (and shield) cannot be damaged while this is active.", + "fullName": "Is damage cooldown active", + "functionType": "Condition", + "group": "Health", + "name": "IsDamageCooldownActive", + "sentence": "Damage cooldown on _PARAM0_ is active", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyHitAtLeastOnce" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "Health::Health::PropertyDamageCooldown" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + }, + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.DamageCooldown\"", + "<", + "Object.Behavior::PropertyDamageCooldown()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the object is considered dead (no health points).", + "fullName": "Is dead", + "functionType": "Condition", + "group": "Health", + "name": "IsDead", + "sentence": "_PARAM0_ is dead", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::PropertyHealth" + }, + "parameters": [ + "Object", + "Behavior", + "<=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Maximum health points of the object.", + "fullName": "Maximum health points", + "functionType": "Expression", + "group": "Health", + "name": "MaxHealth", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyMaxHealth()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Duration of damage cooldown (seconds).", + "fullName": "Duration of damage cooldown", + "functionType": "Expression", + "group": "Health", + "name": "DamageCooldownDuration", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyDamageCooldown()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Health points of the object.", + "fullName": "Health points", + "functionType": "Expression", + "group": "Health", + "name": "Health", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyHealth()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Delay before health regeneration starts after last hit (seconds).", + "fullName": "Delay before health regeneration starts", + "functionType": "Expression", + "group": "Health", + "name": "HealthRegenDelay", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "Object.Behavior::PropertyTargetHaloRadius()" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Redraw slider only when halo is not at final size", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "abs(Object.Behavior::PropertyCurrentHaloRadius() - Object.Behavior::PropertyTargetHaloRadius())", - "<", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyTargetHaloRadius()" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "Object.Behavior::PropertyTargetHaloRadius()" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "lerp(Object.Behavior::PropertyCurrentHaloRadius(), Object.Behavior::PropertyTargetHaloRadius(), Object.Behavior::PropertyHaloGrowSpeed())" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyHealthRegenDelay()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Rate of health regeneration (points per second).", + "fullName": "Rate of health regeneration", + "functionType": "Expression", + "group": "Health", + "name": "HealthRegenRate", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyHealthRegenRate()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Time before damage cooldown ends (seconds).", + "fullName": "Time before damage cooldown ends", + "functionType": "Expression", + "group": "Health", + "name": "DamageCooldownRemaining", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Health::IsDamageCooldownActive" + }, + "parameters": [ + "Object", + "Behavior", + "" ] } ], - "parameters": [] + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "max(0,Object.Behavior::PropertyDamageCooldown() - Object.ObjectTimerElapsedTime(\"__Health.DamageCooldown\"))" + ] + } + ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Time since last hit (seconds).", + "fullName": "Time since last hit", + "functionType": "Expression", + "group": "Health", + "name": "TimeSinceLastHit", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.ObjectTimerElapsedTime(\"__Health.TimeSinceLastHit\")" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", "type": "behavior" } ], @@ -27231,7 +24441,144 @@ { "fullName": "", "functionType": "Action", - "name": "doStepPostEvents", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.DamageCooldown\"" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.TimeSinceLastHit\"" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Health", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "100", + "type": "Number", + "label": "Health (life points) Used for starting health", + "description": "", + "group": "Health", + "extraInformation": [], + "hidden": false, + "name": "Health" + }, + { + "value": "0", + "type": "Number", + "label": "Damage cooldown (seconds) Use \"0\" for no cooldown", + "description": "", + "group": "Health", + "extraInformation": [], + "hidden": false, + "name": "DamageCooldown" + }, + { + "value": "100", + "type": "Number", + "label": "Maximum health (0 for no maximum)", + "description": "", + "group": "Health", + "extraInformation": [], + "hidden": false, + "name": "MaxHealth" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "Health", + "extraInformation": [], + "hidden": true, + "name": "IsJustDamaged" + }, + { + "value": "0", + "type": "Number", + "label": "Rate of health regeneration (points per second) Will not exceed max health, even with overhealing enabled", + "description": "", + "group": "Health", + "extraInformation": [], + "hidden": false, + "name": "HealthRegenRate" + }, + { + "value": "0", + "type": "Number", + "label": "Delay (seconds) before health regen starts after being hit", + "description": "", + "group": "Health", + "extraInformation": [], + "hidden": false, + "name": "HealthRegenDelay" + }, + { + "value": "", + "type": "Boolean", + "label": "Allow heal to increase health above max health (regen will never exceed max health)", + "description": "", + "group": "Health", + "extraInformation": [], + "hidden": false, + "name": "AllowOverHealing" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "Health", + "extraInformation": [], + "hidden": true, + "name": "HitAtLeastOnce" + } + ], + "sharedPropertyDescriptors": [] + }, + { + "description": "Protective shield that prevents damage to health points.", + "fullName": "Shield", + "name": "Shield", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", "sentence": "", "events": [ { @@ -27239,364 +24586,120 @@ "colorG": 176, "colorR": 74, "creationTime": 0, - "name": "Slider drawing", + "name": "Regeneration", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Shield", + "comment2": "" + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyNeedRedraw" + "value": "Health::Shield::PropertyShieldRegenRate" }, "parameters": [ "Object", - "Behavior" - ] - }, - { - "type": { - "value": "Visible" - }, - "parameters": [ - "Object" + "Behavior", + "!=", + "0" ] }, { "type": { - "value": "LayerVisible" - }, - "parameters": [ - "", - "Object.Layer()" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + "value": "Health::Shield::PropertyShieldPoints" }, "parameters": [ "Object", "Behavior", - "no" + "<", + "Object.Behavior::PropertyMaxShieldPoints()" ] }, { "type": { - "value": "PrimitiveDrawing::Drawer::ClearShapes" + "value": "CompareObjectTimer" }, "parameters": [ - "Object" + "Object", + "\"__Health.TimeSinceLastHit\"", + ">", + "Object.Behavior::PropertyShieldRegenDelay()" ] } ], + "actions": [], "events": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Inactive track", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set inactive track parameters (by default, use thumb color)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyInactiveTrackColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyInactiveTrackColor" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyInactiveTrackColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyInactiveTrackOpacity()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::OutlineOpacity" - }, - "parameters": [ - "Object", - "=", - "0" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw inactive track", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset()", - "-Object.Behavior::PropertyTrackThickness() / 2", - "Object.Behavior::PropertyTrackLength()", - "Object.Behavior::PropertyTrackThickness() / 2" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw half circle at end of track (inactive side)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyRoundedTrack" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Arc" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyTrackLength()", - "0", - "Object.Behavior::PropertyTrackThickness() / 2", - "270", - "90", - "", - "yes" - ] - } - ] - } - ], - "parameters": [] + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Only regen when shield is active or when \"RegenShieldWhenZeroPoints\" is enabled", + "comment2": "" }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Active track", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "BuiltinCommonInstructions::Or" }, - "comment": "Set active track parameters (by default, use thumb color)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyActiveTrackColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyActiveTrackColor" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "\"\"" - ] - } - ], - "actions": [ + "parameters": [], + "subInstructions": [ { "type": { - "value": "PrimitiveDrawing::FillColor" + "value": "Health::Shield::IsShieldActive" }, "parameters": [ "Object", - "Object.Behavior::PropertyActiveTrackColor()" + "Behavior", + "" ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + }, { "type": { - "value": "PrimitiveDrawing::FillOpacity" + "value": "Health::Shield::PropertyRegenShieldWhenZeroPoints" }, "parameters": [ "Object", - "=", - "Object.Behavior::PropertyActiveTrackOpacity()" + "Behavior" ] } ] - }, + } + ], + "actions": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "Health::Shield::SetPropertyShieldPoints" }, - "comment": "Draw active track (2 pixels bigger than property) ", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "0", - "-(Object.Behavior::PropertyTrackThickness() / 2 + 1)", - "Object.Behavior::PropertyThumbOffset()", - "Object.Behavior::PropertyTrackThickness() / 2 + 1" - ] - } + "parameters": [ + "Object", + "Behavior", + "+", + "Object.Behavior::PropertyShieldRegenRate() * TimeDelta()" ] - }, + } + ], + "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { @@ -27607,7 +24710,7 @@ "textG": 0, "textR": 0 }, - "comment": "Draw half circle at end of track (active side)", + "comment": "Correct any values above maximum limits", "comment2": "" }, { @@ -27615,213 +24718,378 @@ "conditions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyRoundedTrack" + "value": "Health::Shield::PropertyShieldPoints" }, "parameters": [ "Object", - "Behavior" + "Behavior", + ">", + "Object.Behavior::PropertyMaxShieldPoints()" ] } ], "actions": [ { "type": { - "value": "PrimitiveDrawing::Arc" + "value": "Health::Shield::SetPropertyShieldPoints" }, "parameters": [ "Object", - "0", - "0", - "1 + Object.Behavior::PropertyTrackThickness() / 2", - "90", - "270", - "", - "yes" + "Behavior", + "=", + "Object.Behavior::PropertyMaxShieldPoints()" ] } ] } - ], + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Remove shield points if shield expired", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Health::Shield::IsShieldActive" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Reset damage trigger", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyIsShieldJustDamaged" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Shield", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Apply damage to the shield and object. If the shield is active, it will be damaged first and any excess damage will reduce health and trigger damage cooldown.", + "fullName": "Damage an object protected by a shield", + "functionType": "Action", + "group": "Health", + "name": "ShieldHit", + "sentence": "Damage shield and health of _PARAM0_ for _PARAM2_ points of damage", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Only consider damage if damage cooldown is NOT active", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Health::Health::IsDamageCooldownActive" + }, + "parameters": [ + "Object", + "RequireHealth", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Mark object was hit at least once (used for initial state of damage cooldown)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Health::Health::HitAtLeastOnce" + }, + "parameters": [ + "Object", + "RequireHealth", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetHitAtLeastOnce" + }, + "parameters": [ + "Object", + "RequireHealth", + "yes", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Restart time since last hit timer", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.TimeSinceLastHit\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "If shield is NOT active, perform normal damage", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Health::Shield::IsShieldActive" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::SetHealth" + }, + "parameters": [ + "Object", + "RequireHealth", + "Object.RequireHealth::Health() - GetArgumentAsNumber(\"DamageValue\")", + "" + ] }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Halo", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Prepare halo", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbColor()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::OutlineOpacity" - }, - "parameters": [ - "Object", - "=", - "0" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw halo (it will grow or shrink as needed)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyHaloOpacityHover()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::Circle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset()", - "0", - "Object.Behavior::PropertyCurrentHaloRadius()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Use a more opaque halo while being dragged (it will grow or shrink as needed)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyHaloOpacityClick()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::Circle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset()", - "0", - "Object.Behavior::PropertyCurrentHaloRadius()" - ] - } - ] - } + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.DamageCooldown\"" + ] + }, + { + "type": { + "value": "Health::Health::SetJustDamaged" + }, + "parameters": [ + "Object", + "RequireHealth", + "yes", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "If shield is active, damage shield first", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Shield::IsShieldActive" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "-", + "GetArgumentAsNumber(\"DamageValue\")" + ] + }, + { + "type": { + "value": "Health::Shield::SetPropertyIsShieldJustDamaged" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Excess damage is based on negative shield points", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Shield::PropertyShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "0" ] } ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Thumb", - "source": "", - "type": "BuiltinCommonInstructions::Group", + "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Comment", @@ -27833,172 +25101,542 @@ "textG": 0, "textR": 0 }, - "comment": "Prepare thumb settings", + "comment": "Apply excess damage only if shield does NOT block excess damage", "comment2": "" }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "conditions": [ { "type": { - "value": "PrimitiveDrawing::FillColor" + "inverted": true, + "value": "Health::Shield::PropertyShieldBlocksExcessDamage" }, "parameters": [ "Object", - "Object.Behavior::PropertyThumbColor()" + "Behavior" ] - }, + } + ], + "actions": [ { "type": { - "value": "PrimitiveDrawing::FillOpacity" + "value": "Health::Health::SetHealth" }, "parameters": [ "Object", - "=", - "Object.Behavior::PropertyThumbOpacity()" + "RequireHealth", + "Object.RequireHealth::Health() + Object.Behavior::PropertyShieldPoints()", + "" ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw Circle thumb", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + }, { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbShape" + "value": "ResetObjectTimer" }, "parameters": [ "Object", - "Behavior", - "=", - "\"circle\"" + "\"__Health.DamageCooldown\"" ] - } - ], - "actions": [ + }, { "type": { - "value": "PrimitiveDrawing::Circle" + "value": "Health::Health::SetJustDamaged" }, "parameters": [ "Object", - "Object.Behavior::PropertyThumbOffset()", - "0", - "ceil(max(Object.Behavior::PropertyThumbWidth(),Object.Behavior::PropertyThumbHeight())/2)" + "RequireHealth", + "yes", + "" ] } ] }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw Rectangle thumb", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "conditions": [], + "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbShape" + "value": "Health::Shield::SetPropertyShieldPoints" }, "parameters": [ "Object", "Behavior", "=", - "\"rectangle\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset() - (Object.Behavior::PropertyThumbWidth() / 2)", - "-Object.Behavior::PropertyThumbHeight() / 2", - "Object.Behavior::PropertyThumbOffset() + (Object.Behavior::PropertyThumbWidth() / 2)", - "Object.Behavior::PropertyThumbHeight() / 2" + "0" ] } ] } - ], - "parameters": [] + ] } ] } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Shield", + "type": "behavior" + }, + { + "description": "Value of the damage to do (will be removed from object health)", + "name": "DamageValue", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the object maximum shield points.", + "fullName": "Change maximum shield points", + "functionType": "Action", + "group": "Shield", + "name": "SetMaxShield", + "sentence": "Set maximum shield of _PARAM0_ to _PARAM2_ points", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyMaxShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Shield", + "type": "behavior" + }, + { + "description": "Maximum shield", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change shield points. This is not considered damage.", + "fullName": "Change shield points", + "functionType": "Action", + "group": "Shield", + "name": "SeShieldPoints", + "sentence": "Set shield on _PARAM0_ to _PARAM2_ points", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Shield", + "type": "behavior" + }, + { + "description": "Shield points", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change rate of shield regeneration.", + "fullName": "Change rate of shield regeneration", + "functionType": "Action", + "group": "Shield", + "name": "SetShieldRegenRate", + "sentence": "Set rate of shield regeneration of _PARAM0_ to _PARAM2_ points per second", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyShieldRegenRate" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Shield", + "type": "behavior" + }, + { + "description": "Rate of regen", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change delay before shield regeneration starts after being hit.", + "fullName": "Change delay before shield regeneration starts", + "functionType": "Action", + "group": "Shield", + "name": "SetShieldRegenDelay", + "sentence": "Set delay before shield regeneration starts on _PARAM0_ to _PARAM2_ seconds", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyShieldRegenDelay" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Shield", + "type": "behavior" + }, + { + "description": "Delay (seconds)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change duration of shield.", + "fullName": "Change duration of shield", + "functionType": "Action", + "group": "Shield", + "name": "SetShieldDuration", + "sentence": "Set duration of shield on _PARAM0_ to _PARAM2_ seconds", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyShieldDuration" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Shield", + "type": "behavior" + }, + { + "description": "Duration of shield (seconds)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Activate shield. If the shield was already active, this will reset it's points and timer.", + "fullName": "Activate shield", + "functionType": "Action", + "group": "Shield", + "name": "ActivateShield", + "sentence": "Activate (or renew) shield on _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.ShieldDuration\"" + ] + }, + { + "type": { + "value": "Health::Shield::SetPropertyShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyMaxShieldPoints()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Shield", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change max shield points. This value is used when the shield is activated or renewed.", + "fullName": "Change max shield points ", + "functionType": "Action", + "group": "Shield", + "name": "SetMaxShieldPoints", + "sentence": "Set max shield of _PARAM0_ to _PARAM2_ points", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyMaxShieldPoints" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Shield", + "type": "behavior" + }, + { + "description": "Shield points", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Shield blocks excess damage when it breaks.", + "fullName": "Shield blocks excess damage when it breaks", + "functionType": "Action", + "group": "Shield", + "name": "ShieldBlockExcessDamage", + "sentence": "Shield on _PARAM0_ blocks excess damage when it breaks: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyShieldBlocksExcessDamage" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } ], - "parameters": [] + "actions": [ + { + "type": { + "value": "Health::Shield::SetPropertyShieldBlocksExcessDamage" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] } ], "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "supplementaryInformation": "Health::Shield", "type": "behavior" + }, + { + "description": "Shield blocks excess damage", + "name": "Value", + "type": "yesorno" } ], "objectGroups": [] }, { - "description": "Check if the slider is being dragged.", - "fullName": "Being dragged", - "functionType": "Condition", - "group": "Slider", - "name": "IsBeingDragged", - "sentence": "_PARAM0_ is being dragged", + "description": "Regenerate shield when it has zero points.", + "fullName": "Regenerate shield when it has zero points", + "functionType": "Action", + "group": "Shield", + "name": "RegenShieldWhenZero", + "sentence": "Regenerate shield on _PARAM0_ when it has zero points: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "conditions": [], + "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" + "value": "Health::Shield::SetPropertyRegenShieldWhenZeroPoints" }, "parameters": [ "Object", - "Behavior" + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" ] } ], "actions": [ { "type": { - "value": "SetReturnBoolean" + "value": "Health::Shield::SetPropertyRegenShieldWhenZeroPoints" }, "parameters": [ - "True" + "Object", + "Behavior", + "yes" ] } ] @@ -28008,32 +25646,50 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "supplementaryInformation": "Health::Shield", "type": "behavior" + }, + { + "description": "Regen shield when it has zero points", + "name": "Value", + "type": "yesorno" } ], "objectGroups": [] }, { - "description": "Check if the slider interations are enabled.", - "fullName": "Interactions enabled", + "description": "Check if the shield was just damaged previously in the events.", + "fullName": "Is shield just damaged", "functionType": "Condition", - "group": "Slider", - "name": "IsEnabled", - "sentence": "Interactions of _PARAM0_ are enabled", + "group": "Shield", + "name": "IsShieldJustDamaged", + "sentence": "Shield on _PARAM0_ has just been damaged", "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyEnabled" + "value": "Health::Shield::PropertyIsShieldJustDamaged" }, "parameters": [ "Object", @@ -28057,51 +25713,68 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "supplementaryInformation": "Health::Shield", "type": "behavior" } ], "objectGroups": [] }, { - "description": "Enable or disable the slider. Users cannot interact while it is disabled.", - "fullName": "Enable interactions", - "functionType": "Action", - "group": "Slider", - "name": "SetEnabled", - "sentence": "Enable interactions of _PARAM0_: _PARAM2_", + "description": "Check if the shield is active (based on shield points and duration).", + "fullName": "Is shield active", + "functionType": "Condition", + "group": "Shield", + "name": "IsShieldActive", + "sentence": "Shield on _PARAM0_ is active", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "conditions": [], + "actions": [ { "type": { - "inverted": true, - "value": "GetArgumentAsBoolean" + "value": "SetReturnBoolean" }, "parameters": [ - "\"Enable\"" + "False" ] } - ], - "actions": [ + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "To be considered \"active\", a shield must have positive points AND not exceed duration", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyEnabled" + "value": "Health::Shield::PropertyShieldPoints" }, "parameters": [ "Object", "Behavior", - "no" + ">", + "0" ] } ], + "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Comment", @@ -28113,126 +25786,137 @@ "textG": 0, "textR": 0 }, - "comment": "Stop dragging (so the slider won't be dragging when it gets enabled)", + "comment": "Don't check the timer when duration is zero (or negative)", "comment2": "" }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "conditions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsBeingDragged" + "value": "Health::Shield::PropertyShieldDuration" }, "parameters": [ "Object", "Behavior", - "no" + "<=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" ] } ] }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Reset halo size (so halo won't appear when slider gets enabled)", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "value": "Health::Shield::PropertyShieldDuration" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + }, + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__Health.ShieldDuration\"", + "<", + "Object.Behavior::PropertyShieldDuration()" + ] + } + ], "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTargetHaloRadius" + "value": "SetReturnBoolean" }, "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" + "True" ] } ] } ] - }, + } + ], + "parameters": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"Enable\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyEnabled" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] + "description": "Object", + "name": "Object", + "type": "object" }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Shield", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Maximum shield points of the object.", + "fullName": "Maximum shield points", + "functionType": "Expression", + "group": "Shield", + "name": "MaxShield", + "sentence": "", + "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "yes" + "Object.Behavior::PropertyMaxShieldPoints()" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "supplementaryInformation": "Health::Shield", "type": "behavior" - }, - { - "description": "Enable", - "name": "Enable", - "type": "yesorno" } ], "objectGroups": [] }, { - "description": "The value of the slider (based on position of the thumb).", - "fullName": "Slider value", + "description": "Duration of shield (seconds).", + "fullName": "Duration of shield", "functionType": "Expression", - "group": "Slider", - "name": "Value", + "group": "Shield", + "name": "ShieldDuration", "sentence": "", "events": [ { @@ -28244,7 +25928,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyValue()" + "Object.Behavior::PropertyShieldDuration()" ] } ] @@ -28257,211 +25941,173 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "supplementaryInformation": "Health::Shield", "type": "behavior" } ], "objectGroups": [] }, { - "description": "Change the value of a slider (this will move the thumb to the correct position).", - "fullName": "Slider value", - "functionType": "Action", - "group": "Slider", - "name": "SetValue", - "sentence": "Change the value of _PARAM0_: _PARAM2_", + "description": "Delay before shield regeneration starts after last hit (seconds).", + "fullName": "Delay before shield regeneration starts", + "functionType": "Expression", + "group": "Shield", + "name": "ShieldRegenDelay", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - "<=", - "0" - ] - } - ], + "conditions": [], "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" + "Object.Behavior::PropertyShieldRegenDelay()" ] } ] - }, + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "round(GetArgumentAsNumber(\"Value\") / Object.Behavior::PropertyTickSpacing()) * Object.Behavior::PropertyTickSpacing()" - ] - } - ] + "description": "Object", + "name": "Object", + "type": "object" }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Shield", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Rate of shield regeneration (points per second).", + "fullName": "Rate of shield regeneration", + "functionType": "Expression", + "group": "Shield", + "name": "ShieldRegenRate", + "sentence": "", + "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyValueMin()" - ] - } - ], + "conditions": [], "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMin()" + "Object.Behavior::PropertyShieldRegenRate()" ] } ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Health::Shield", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Time before shield ends (seconds).", + "fullName": "Time before shield ends", + "functionType": "Expression", + "group": "Shield", + "name": "ShieldTimeRemaining", + "sentence": "", + "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "Object.Behavior::PropertyValueMax()" - ] - } - ], + "conditions": [], "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMax()" + "0" ] } ] }, { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set the proper offset (it moves the slider)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbOffset" + "value": "Health::Shield::PropertyShieldDuration" }, "parameters": [ "Object", "Behavior", - "=", - "Object.Behavior::PropertyTrackLength() * (Object.Behavior::PropertyValue() - Object.Behavior::PropertyValueMin()) / (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin())" + ">", + "0" ] - }, + } + ], + "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "yes" + "max(0,Object.Behavior::PropertyShieldDuration() - Object.ObjectTimerElapsedTime(\"__Health.ShieldDuration\"))" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "supplementaryInformation": "Health::Shield", "type": "behavior" - }, - { - "description": "Slider value", - "name": "Value", - "type": "expression" } ], "objectGroups": [] }, { - "description": "The minimum value of a slider.", - "fullName": "Slider minimum value", + "description": "Shield points of the object.", + "fullName": "Shield points", "functionType": "Expression", - "group": "Slider value configuration", - "name": "ValueMin", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "group": "Shield", + "name": "ShieldPoints", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -28472,7 +26118,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyValueMin()" + "Object.Behavior::PropertyShieldPoints()" ] } ] @@ -28485,144 +26131,294 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "supplementaryInformation": "Health::Shield", "type": "behavior" } ], "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Behavior", + "label": "", + "description": "", + "group": "", + "extraInformation": [ + "Health::Health" + ], + "hidden": false, + "name": "RequireHealth" }, { - "description": "Change the minimum value of a slider.", - "fullName": "Slider minimum value", + "value": "100", + "type": "Number", + "label": "Max shield points (Shield will start with this many points when activated)", + "description": "", + "group": "Shield", + "extraInformation": [], + "hidden": false, + "name": "MaxShieldPoints" + }, + { + "value": "5", + "type": "Number", + "label": "Duration of shield (seconds) Use \"0\" to disable shield timer", + "description": "", + "group": "Shield", + "extraInformation": [], + "hidden": false, + "name": "ShieldDuration" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "Shield", + "extraInformation": [], + "hidden": true, + "name": "ShieldPoints" + }, + { + "value": "0", + "type": "Number", + "label": "Rate of shield regeneration (points per second)", + "description": "", + "group": "Shield", + "extraInformation": [], + "hidden": false, + "name": "ShieldRegenRate" + }, + { + "value": "", + "type": "Boolean", + "label": "Shield will block all excess damage when shield is destroyed", + "description": "", + "group": "Shield", + "extraInformation": [], + "hidden": false, + "name": "ShieldBlocksExcessDamage" + }, + { + "value": "", + "type": "Number", + "label": "Delay (seconds) before shield regeneration starts after being hit", + "description": "", + "group": "Shield", + "extraInformation": [], + "hidden": false, + "name": "ShieldRegenDelay" + }, + { + "value": "", + "type": "Boolean", + "label": "Regenerate shield when it has zero points", + "description": "", + "group": "Shield", + "extraInformation": [], + "hidden": false, + "name": "RegenShieldWhenZeroPoints" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "Shield", + "extraInformation": [], + "hidden": true, + "name": "IsShieldJustDamaged" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [] + }, + { + "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", + "category": "Input", + "extensionNamespace": "", + "fullName": "Draggable slider", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", + "name": "DraggableSliderControl", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/UI Essentials/UI Essentials_sliders_options.svg", + "shortDescription": "A draggable slider that users can move to select a numerical value.", + "version": "1.0.5", + "description": "Draws a draggable slider that users can move to select a numerical value.\nThe value range, tick spacing, and the appearance of the slider can be defined with properties.\n\nHow to use:\n- Add this behavior a **Shape Painter** object\n- Place an instance of that shape painter on the screen where you want the slider to appear\n- Use the \"Value\" expression to find the Value based on the position of the slider\n\nTips:\n- You can disable the slider to prevent a user from interacting with it\n- You can set the Value of the slider and the slider will move to the correct position\n\nFurther details can be found in [this tutorial video](https://youtu.be/iiTUwdAT_hs).\n\nBreaking changes (1.0.0)\n- Track thickness and length properties replaced track width and height. These 2 properties must be set again if they were different from the default size.\n- Hidden sliders can be dragged. The \"enable\" action must be used to disable them.\n", + "origin": { + "identifier": "DraggableSliderControl", + "name": "gdevelop-extension-store" + }, + "tags": [ + "draggable", + "slider", + "shape painter", + "ui", + "widget" + ], + "authorIds": [ + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2", + "gqDaZjCfevOOxBYkK6zlhtZnXCg1" + ], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "Let users select a numerical value by dragging a slider.", + "fullName": "Draggable slider", + "name": "DraggableSliderControl", + "objectType": "PrimitiveDrawing::Drawer", + "eventsFunctions": [ + { + "fullName": "", "functionType": "Action", - "group": "Slider value configuration", - "name": "SetValueMin", - "sentence": "Change the minimum value of _PARAM0_: _PARAM2_", + "name": "onCreated", + "sentence": "", "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure object doesn't get re-drawn every frame", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::ClearBetweenFrames" + }, + "parameters": [ + "Object", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Use correct min value (instead of always starting at 0)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValueMin()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set track height function (which enforces valid thumb sizes)", + "comment2": "" + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValueMin" + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTrackThickness" }, "parameters": [ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"ValueMin\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" + "Object.Behavior::PropertyTrackThickness()" ] } ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Start halo at same size as thumb", + "comment2": "" }, - { - "description": "Minimum value", - "name": "ValueMin", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "The maximum value of a slider.", - "fullName": "Slider maximum value", - "functionType": "Expression", - "group": "Slider value configuration", - "name": "ValueMax", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyCurrentHaloRadius" }, "parameters": [ - "Object.Behavior::PropertyValueMax()" + "Object", + "Behavior", + "=", + "min(Object.Behavior::PropertyThumbHeight()/2,Object.Behavior::PropertyThumbWidth()/2)" ] } ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Thickness of track.", - "fullName": "Slider track thickness", - "functionType": "Expression", - "group": "Slider track configuration", - "name": "TrackThickness", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" }, "parameters": [ - "Object.Behavior::PropertyTrackThickness()" + "Object", + "Behavior", + "" ] } ] } ], - "expressionType": { - "type": "expression" - }, "parameters": [ { "description": "Object", @@ -28640,73 +26436,638 @@ "objectGroups": [] }, { - "description": "Length of track.", - "fullName": "Slider track length", - "functionType": "Expression", - "group": "Slider track configuration", - "name": "TrackLength", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Slider logic", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyTrackLength()" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::IsEnabled" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Track where the mouse is (in relation to object)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyMouseX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.ToDrawingX(MouseX(Object.Layer(), 0), MouseY(Object.Layer(), 0))" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyMouseY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.ToDrawingY(MouseX(Object.Layer(), 0), MouseY(Object.Layer(), 0))" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move slider when being dragged", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbOffset" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyMouseX()" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "End sliding and update variables", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "MouseButtonReleased" + }, + "parameters": [ + "", + "Left" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Update \"Value\" based on the location of the thumb", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyValueMin() + (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin()) * Object.Behavior::PropertyThumbOffset() / Object.Behavior::PropertyTrackLength()", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Grow halo even more when pressed", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTargetHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "1.25 * Object.Behavior::PropertyHaloRadius()" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Detect hover/touch/click (but only if the layer and object is visible, and the object is not already being dragged)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Detect mouse clicks near track, start dragging", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SourisBouton" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseX()", + ">=", + "-Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseX()", + "<=", + "Object.Behavior::PropertyTrackLength() + Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseY()", + ">=", + "-Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseY()", + "<=", + "Object.Behavior::PropertyHaloRadius()" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Reset hover detection ", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsHovered" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Grow halo when hovered", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SourisBouton" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseX()", + ">=", + "Object.Behavior::PropertyThumbOffset() - Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseX()", + "<=", + "Object.Behavior::PropertyThumbOffset() + Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseY()", + ">=", + "- Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseY()", + "<=", + "Object.Behavior::PropertyHaloRadius()" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsHovered" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTargetHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyHaloRadius()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Shrink halo to zero when not hovered", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsHovered" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTargetHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" + ] + } + ] + } + ] + } ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Height of thumb.", - "fullName": "Slider thumb height", - "functionType": "Expression", - "group": "Slider thumb configuration", - "name": "ThumbHeight", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + }, { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyThumbHeight()" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "Object.Behavior::PropertyTargetHaloRadius()" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Redraw slider only when halo is not at final size", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "abs(Object.Behavior::PropertyCurrentHaloRadius() - Object.Behavior::PropertyTargetHaloRadius())", + "<", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyTargetHaloRadius()" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "Object.Behavior::PropertyTargetHaloRadius()" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "lerp(Object.Behavior::PropertyCurrentHaloRadius(), Object.Behavior::PropertyTargetHaloRadius(), Object.Behavior::PropertyHaloGrowSpeed())" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } ] } - ] + ], + "parameters": [] } ], - "expressionType": { - "type": "expression" - }, "parameters": [ { "description": "Object", @@ -28724,40 +27085,730 @@ "objectGroups": [] }, { - "description": "Change the maximum value of a slider.", - "fullName": "Slider maximum value", + "fullName": "", "functionType": "Action", - "group": "Slider value configuration", - "name": "SetValueMax", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "name": "doStepPostEvents", + "sentence": "", "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValueMax" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"ValueMax\")" - ] - }, + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Slider drawing", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "Visible" + }, + "parameters": [ + "Object" + ] + }, + { + "type": { + "value": "LayerVisible" + }, + "parameters": [ + "", + "Object.Layer()" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::Drawer::ClearShapes" + }, + "parameters": [ + "Object" + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Inactive track", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set inactive track parameters (by default, use thumb color)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyInactiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyInactiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyInactiveTrackColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyInactiveTrackOpacity()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::OutlineOpacity" + }, + "parameters": [ + "Object", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw inactive track", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset()", + "-Object.Behavior::PropertyTrackThickness() / 2", + "Object.Behavior::PropertyTrackLength()", + "Object.Behavior::PropertyTrackThickness() / 2" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw half circle at end of track (inactive side)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyRoundedTrack" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Arc" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyTrackLength()", + "0", + "Object.Behavior::PropertyTrackThickness() / 2", + "270", + "90", + "", + "yes" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Active track", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set active track parameters (by default, use thumb color)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyActiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyActiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyActiveTrackColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyActiveTrackOpacity()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw active track (2 pixels bigger than property) ", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "Object", + "0", + "-(Object.Behavior::PropertyTrackThickness() / 2 + 1)", + "Object.Behavior::PropertyThumbOffset()", + "Object.Behavior::PropertyTrackThickness() / 2 + 1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw half circle at end of track (active side)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyRoundedTrack" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Arc" + }, + "parameters": [ + "Object", + "0", + "0", + "1 + Object.Behavior::PropertyTrackThickness() / 2", + "90", + "270", + "", + "yes" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Halo", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Prepare halo", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbColor()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::OutlineOpacity" + }, + "parameters": [ + "Object", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw halo (it will grow or shrink as needed)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyHaloOpacityHover()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::Circle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset()", + "0", + "Object.Behavior::PropertyCurrentHaloRadius()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Use a more opaque halo while being dragged (it will grow or shrink as needed)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyHaloOpacityClick()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::Circle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset()", + "0", + "Object.Behavior::PropertyCurrentHaloRadius()" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Thumb", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Prepare thumb settings", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbColor()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyThumbOpacity()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw Circle thumb", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbShape" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"circle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Circle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset()", + "0", + "ceil(max(Object.Behavior::PropertyThumbWidth(),Object.Behavior::PropertyThumbHeight())/2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw Rectangle thumb", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbShape" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"rectangle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset() - (Object.Behavior::PropertyThumbWidth() / 2)", + "-Object.Behavior::PropertyThumbHeight() / 2", + "Object.Behavior::PropertyThumbOffset() + (Object.Behavior::PropertyThumbWidth() / 2)", + "Object.Behavior::PropertyThumbHeight() / 2" + ] + } + ] + } + ], + "parameters": [] + } ] } - ] + ], + "parameters": [] } ], "parameters": [ @@ -28769,44 +27820,46 @@ }, { "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Maximum value", - "name": "ValueMax", - "type": "expression" + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" } ], "objectGroups": [] }, { - "description": "The tick spacing of a slider.", - "fullName": "Tick spacing", - "functionType": "Expression", - "group": "Slider value configuration", - "name": "TickSpacing", - "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", + "description": "Check if the slider is being dragged.", + "fullName": "Being dragged", + "functionType": "Condition", + "group": "Slider", + "name": "IsBeingDragged", + "sentence": "_PARAM0_ is being dragged", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "SetReturnBoolean" }, "parameters": [ - "Object.Behavior::PropertyTickSpacing()" + "True" ] } ] } ], - "expressionType": { - "type": "expression" - }, "parameters": [ { "description": "Object", @@ -28819,47 +27872,38 @@ "name": "Behavior", "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" - }, - { - "description": "Tick spacing", - "name": "TickSpacing", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Change the tick spacing of a slider.", - "fullName": "Tick spacing", - "functionType": "Action", - "group": "Slider value configuration", - "name": "SetTickSpacing", - "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", + "description": "Check if the slider interations are enabled.", + "fullName": "Interactions enabled", + "functionType": "Condition", + "group": "Slider", + "name": "IsEnabled", + "sentence": "Interactions of _PARAM0_ are enabled", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "conditions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTickSpacing" + "value": "DraggableSliderControl::DraggableSliderControl::PropertyEnabled" }, "parameters": [ "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"TickSpacing\")" + "Behavior" ] - }, + } + ], + "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + "value": "SetReturnBoolean" }, "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" + "True" ] } ] @@ -28877,48 +27921,134 @@ "name": "Behavior", "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" - }, - { - "description": "Tick spacing", - "name": "TickSpacing", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Change length of track.", - "fullName": "Track length", + "description": "Enable or disable the slider. Users cannot interact while it is disabled.", + "fullName": "Enable interactions", "functionType": "Action", - "group": "Slider track configuration", - "name": "SetTrackLength", - "sentence": "Change track length of _PARAM0_ to _PARAM2_ px", + "group": "Slider", + "name": "SetEnabled", + "sentence": "Enable interactions of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Enable\"" + ] + } + ], "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTrackLength" + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyEnabled" }, "parameters": [ "Object", "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" + "no" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Stop dragging (so the slider won't be dragging when it gets enabled)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } ] }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Reset halo size (so halo won't appear when slider gets enabled)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTargetHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Enable\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyEnabled" }, "parameters": [ "Object", "Behavior", - "" + "yes" ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { "type": { "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" @@ -28930,38 +28060,55 @@ ] } ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" }, { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move thumb to correct place (based on new track size)", - "comment2": "" + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" }, + { + "description": "Enable", + "name": "Enable", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "The value of the slider (based on position of the thumb).", + "fullName": "Slider value", + "functionType": "Expression", + "group": "Slider", + "name": "Value", + "sentence": "", + "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyValue()", - "" + "Object.Behavior::PropertyValue()" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", @@ -28974,30 +28121,37 @@ "name": "Behavior", "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" - }, - { - "description": "Track width", - "name": "Value", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Change thickness of track.", - "fullName": "Track thickness", + "description": "Change the value of a slider (this will move the thumb to the correct position).", + "fullName": "Slider value", "functionType": "Action", - "group": "Slider track configuration", - "name": "SetTrackThickness", - "sentence": "Change track thickness of _PARAM0_ to _PARAM2_ px", + "group": "Slider", + "name": "SetValue", + "sentence": "Change the value of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + "<=", + "0" + ] + } + ], "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTrackThickness" + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" }, "parameters": [ "Object", @@ -29005,57 +28159,63 @@ "=", "GetArgumentAsNumber(\"Value\")" ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + "value": "DraggableSliderControl::DraggableSliderControl::PropertyTickSpacing" }, "parameters": [ "Object", "Behavior", - "yes" + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "round(GetArgumentAsNumber(\"Value\") / Object.Behavior::PropertyTickSpacing()) * Object.Behavior::PropertyTickSpacing()" ] } ] }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make sure thumb width is not smaller than track height + 2 pixels (to prevent track ends from showing)", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbWidth" + "value": "DraggableSliderControl::DraggableSliderControl::PropertyValue" }, "parameters": [ "Object", "Behavior", "<", - "Object.Behavior::PropertyTrackThickness() + 2" + "Object.Behavior::PropertyValueMin()" ] } ], "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetThumbWidth" + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" }, "parameters": [ "Object", "Behavior", - "Object.Behavior::PropertyTrackThickness() + 2", - "" + "=", + "Object.Behavior::PropertyValueMin()" ] } ] @@ -29065,60 +28225,30 @@ "conditions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbHeight" + "value": "DraggableSliderControl::DraggableSliderControl::PropertyValue" }, "parameters": [ "Object", "Behavior", - "<", - "Object.Behavior::PropertyTrackThickness() + 2" + ">", + "Object.Behavior::PropertyValueMax()" ] } ], "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetThumbHeight" + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" }, "parameters": [ "Object", "Behavior", - "Object.Behavior::PropertyTrackThickness() + 2", - "" + "=", + "Object.Behavior::PropertyValueMax()" ] } ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" }, - { - "description": "Track thickness", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change width of thumb.", - "fullName": "Thumb width", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetThumbWidth", - "sentence": "Change thumb width of _PARAM0_ to _PARAM2_ px", - "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { @@ -29129,7 +28259,7 @@ "textG": 0, "textR": 0 }, - "comment": "Thumb cannot be less than track thickness (plus 2 pixels)", + "comment": "Set the proper offset (it moves the slider)", "comment2": "" }, { @@ -29138,29 +28268,13 @@ "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbWidth" + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbOffset" }, "parameters": [ "Object", "Behavior", "=", - "max(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyTrackThickness() + 2)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" + "Object.Behavior::PropertyTrackLength() * (Object.Behavior::PropertyValue() - Object.Behavior::PropertyValueMin()) / (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin())" ] }, { @@ -29190,7 +28304,7 @@ "type": "behavior" }, { - "description": "Thumb width", + "description": "Slider value", "name": "Value", "type": "expression" } @@ -29198,65 +28312,79 @@ "objectGroups": [] }, { - "description": "Change height of thumb.", - "fullName": "Thumb height", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetThumbHeight", - "sentence": "Change thumb height of _PARAM0_ to _PARAM2_ px", + "description": "The minimum value of a slider.", + "fullName": "Slider minimum value", + "functionType": "Expression", + "group": "Slider value configuration", + "name": "ValueMin", + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Thumb cannot be less than track thickness (plus 2 pixels)", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbHeight" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "=", - "max(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyTrackThickness() + 2)" + "Object.Behavior::PropertyValueMin()" ] } ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the minimum value of a slider.", + "fullName": "Slider minimum value", + "functionType": "Action", + "group": "Slider value configuration", + "name": "SetValueMin", + "sentence": "Change the minimum value of _PARAM0_: _PARAM2_", + "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValueMin" }, "parameters": [ "Object", "Behavior", - "" + "=", + "GetArgumentAsNumber(\"ValueMin\")" ] }, { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" }, "parameters": [ "Object", "Behavior", - "yes" + "Object.Behavior::Value()", + "" ] } ] @@ -29276,20 +28404,62 @@ "type": "behavior" }, { - "description": "Thumb height", - "name": "Value", + "description": "Minimum value", + "name": "ValueMin", "type": "expression" } ], "objectGroups": [] }, { - "description": "Change radius of the halo around the thumb. This size is also used to detect interaction with the slider.", - "fullName": "Halo radius", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetHaloRadius", - "sentence": "Change halo radius of _PARAM0_ to _PARAM2_ px", + "description": "The maximum value of a slider.", + "fullName": "Slider maximum value", + "functionType": "Expression", + "group": "Slider value configuration", + "name": "ValueMax", + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValueMax()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Thickness of track.", + "fullName": "Slider track thickness", + "functionType": "Expression", + "group": "Slider track configuration", + "name": "TrackThickness", + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -29297,28 +28467,18 @@ "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "yes" + "Object.Behavior::PropertyTrackThickness()" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", @@ -29331,22 +28491,17 @@ "name": "Behavior", "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" - }, - { - "description": "Halo radius", - "name": "Value", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Change opacity of halo when hovered.", - "fullName": "Halo opacity (hover)", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetHaloOpacityHover", - "sentence": "Change halo opacity when hovered of _PARAM0_ to _PARAM2_ px", + "description": "Length of track.", + "fullName": "Slider track length", + "functionType": "Expression", + "group": "Slider track configuration", + "name": "TrackLength", + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -29354,28 +28509,18 @@ "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyHaloOpacityHover" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "yes" + "Object.Behavior::PropertyTrackLength()" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", @@ -29388,22 +28533,17 @@ "name": "Behavior", "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" - }, - { - "description": "Halo opacity (hover)", - "name": "Value", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Change opacity of halo when pressed.", - "fullName": "Halo opacity (pressed)", - "functionType": "Action", + "description": "Height of thumb.", + "fullName": "Slider thumb height", + "functionType": "Expression", "group": "Slider thumb configuration", - "name": "SetHaloOpacityPressed", - "sentence": "Change halo opacity when pressed of _PARAM0_ to _PARAM2_ px", + "name": "ThumbHeight", + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -29411,28 +28551,18 @@ "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyHaloOpacityClick" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "yes" + "Object.Behavior::PropertyThumbHeight()" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", @@ -29445,22 +28575,17 @@ "name": "Behavior", "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" - }, - { - "description": "Halo opacity (pressed)", - "name": "Value", - "type": "expression" } ], "objectGroups": [] }, { - "description": "Change shape of thumb (circle or rectangle).", - "fullName": "Thumb shape", + "description": "Change the maximum value of a slider.", + "fullName": "Slider maximum value", "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetThumbShape", - "sentence": "Change shape of _PARAM0_ to _PARAM2_", + "group": "Slider value configuration", + "name": "SetValueMax", + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -29468,75 +28593,23 @@ "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbShape" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Shape\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make sure thumb width is not smaller than track height (to prevent track ends from showing)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbShape" + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValueMax" }, "parameters": [ "Object", "Behavior", "=", - "\"rectangle\"" + "GetArgumentAsNumber(\"ValueMax\")" ] }, { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyTrackThickness()" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetThumbWidth" + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" }, "parameters": [ "Object", "Behavior", - "Object.Behavior::PropertyTrackThickness()", + "Object.Behavior::Value()", "" ] } @@ -29557,93 +28630,39 @@ "type": "behavior" }, { - "description": "New thumb shape", - "name": "Shape", - "supplementaryInformation": "[\"circle\",\"rectangle\"]", - "type": "stringWithSelector" + "description": "Maximum value", + "name": "ValueMax", + "type": "expression" } ], "objectGroups": [] }, { - "description": "Make track use rounded ends.", - "fullName": "Rounded track ends", - "functionType": "Action", - "group": "Slider track configuration", - "name": "SetRoundedTrack", - "sentence": "Draw _PARAM0_ with a rounded track: _PARAM2_", + "description": "The tick spacing of a slider.", + "fullName": "Tick spacing", + "functionType": "Expression", + "group": "Slider value configuration", + "name": "TickSpacing", + "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "GetArgumentAsNumber(\"Value\")", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyRoundedTrack" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "GetArgumentAsNumber(\"Value\")", - "=", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyRoundedTrack" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "yes" + "Object.Behavior::PropertyTickSpacing()" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", @@ -29658,20 +28677,20 @@ "type": "behavior" }, { - "description": "Rounded track", - "name": "Value", - "type": "yesorno" + "description": "Tick spacing", + "name": "TickSpacing", + "type": "expression" } ], "objectGroups": [] }, { - "description": "Change opacity of thumb.", - "fullName": "Thumb opacity", + "description": "Change the tick spacing of a slider.", + "fullName": "Tick spacing", "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetThumbOpacity", - "sentence": "Change thumb opacity of _PARAM0_ to _PARAM2_", + "group": "Slider value configuration", + "name": "SetTickSpacing", + "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -29679,23 +28698,24 @@ "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbOpacity" + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTickSpacing" }, "parameters": [ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")" + "GetArgumentAsNumber(\"TickSpacing\")" ] }, { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" }, "parameters": [ "Object", "Behavior", - "yes" + "Object.Behavior::Value()", + "" ] } ] @@ -29715,20 +28735,20 @@ "type": "behavior" }, { - "description": "Thumb opacity", - "name": "Value", + "description": "Tick spacing", + "name": "TickSpacing", "type": "expression" } ], "objectGroups": [] }, { - "description": "Change opacity of inactive track.", - "fullName": "Inactive track opacity", + "description": "Change length of track.", + "fullName": "Track length", "functionType": "Action", "group": "Slider track configuration", - "name": "SetInactiveTrackOpacity", - "sentence": "Change inactive track opacity of _PARAM0_ to _PARAM2_", + "name": "SetTrackLength", + "sentence": "Change track length of _PARAM0_ to _PARAM2_ px", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -29736,7 +28756,7 @@ "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyInactiveTrackOpacity" + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTrackLength" }, "parameters": [ "Object", @@ -29745,6 +28765,16 @@ "GetArgumentAsNumber(\"Value\")" ] }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, { "type": { "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" @@ -29756,6 +28786,36 @@ ] } ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move thumb to correct place (based on new track size)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyValue()", + "" + ] + } + ] } ], "parameters": [ @@ -29772,7 +28832,7 @@ "type": "behavior" }, { - "description": "Inactive track opacity", + "description": "Track width", "name": "Value", "type": "expression" } @@ -29780,12 +28840,12 @@ "objectGroups": [] }, { - "description": "Change opacity of active track.", - "fullName": "Active track opacity", + "description": "Change thickness of track.", + "fullName": "Track thickness", "functionType": "Action", "group": "Slider track configuration", - "name": "SetActiveTrackOpacity", - "sentence": "Change active track opacity of _PARAM0_ to _PARAM2_", + "name": "SetTrackThickness", + "sentence": "Change track thickness of _PARAM0_ to _PARAM2_ px", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -29793,7 +28853,7 @@ "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyActiveTrackOpacity" + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTrackThickness" }, "parameters": [ "Object", @@ -29813,60 +28873,74 @@ ] } ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure thumb width is not smaller than track height + 2 pixels (to prevent track ends from showing)", + "comment2": "" }, - { - "description": "Active track opacity", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the color of the track that is LEFT of the thumb.", - "fullName": "Active track color ", - "functionType": "Action", - "group": "Slider track configuration", - "name": "SetActiveTrackColor", - "sentence": "Change active track color of _PARAM0_ to _PARAM2_", - "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyTrackThickness() + 2" + ] + } + ], "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyActiveTrackColor" + "value": "DraggableSliderControl::DraggableSliderControl::SetThumbWidth" }, "parameters": [ "Object", "Behavior", - "=", - "GetArgumentAsString(\"Color\")" + "Object.Behavior::PropertyTrackThickness() + 2", + "" ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbHeight" }, "parameters": [ "Object", "Behavior", - "yes" + "<", + "Object.Behavior::PropertyTrackThickness() + 2" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetThumbHeight" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyTrackThickness() + 2", + "" ] } ] @@ -29886,34 +28960,63 @@ "type": "behavior" }, { - "description": "Active track color", - "name": "Color", - "type": "color" + "description": "Track thickness", + "name": "Value", + "type": "expression" } ], "objectGroups": [] }, { - "description": "Change the color of the track that is RIGHT of the thumb.", - "fullName": "Inactive track color", + "description": "Change width of thumb.", + "fullName": "Thumb width", "functionType": "Action", - "group": "Slider track configuration", - "name": "SetInactiveTrackColor", - "sentence": "Change inactive track color of _PARAM0_ to _PARAM2_", + "group": "Slider thumb configuration", + "name": "SetThumbWidth", + "sentence": "Change thumb width of _PARAM0_ to _PARAM2_ px", "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Thumb cannot be less than track thickness (plus 2 pixels)", + "comment2": "" + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyInactiveTrackColor" + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbWidth" }, "parameters": [ "Object", "Behavior", "=", - "GetArgumentAsString(\"Color\")" + "max(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyTrackThickness() + 2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" ] }, { @@ -29943,102 +29046,73 @@ "type": "behavior" }, { - "description": "Inactive track color", - "name": "Color", - "type": "color" + "description": "Thumb width", + "name": "Value", + "type": "expression" } ], "objectGroups": [] }, { - "description": "Change the thumb color to a specific value.", - "fullName": "Thumb color", + "description": "Change height of thumb.", + "fullName": "Thumb height", "functionType": "Action", "group": "Slider thumb configuration", - "name": "SetThumbColor", - "sentence": "Change thumb color of _PARAM0_ to _PARAM2_", + "name": "SetThumbHeight", + "sentence": "Change thumb height of _PARAM0_ to _PARAM2_ px", "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbColor" - }, - "parameters": [ - "Object", - "Behavior", - "GetArgumentAsString(\"Color\")" - ] - }, + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Thumb cannot be less than track thickness (plus 2 pixels)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbHeight" }, "parameters": [ "Object", "Behavior", - "yes" + "=", + "max(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyTrackThickness() + 2)" ] } ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" }, - { - "description": "Thumb color", - "name": "Color", - "type": "color" - } - ], - "objectGroups": [] - }, - { - "description": "Update the hitbox.", - "fullName": "Update hitbox", - "functionType": "Action", - "group": "Private", - "name": "UpdateHitbox", - "private": true, - "sentence": "Update the hitbox of _PARAM0_", - "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "PrimitiveDrawing::SetRotationCenter" + "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" }, "parameters": [ "Object", - "Object.Behavior::PropertyTrackLength() / 2", - "Object.Behavior::PropertyTrackThickness() / 2" + "Behavior", + "" ] }, { "type": { - "value": "PrimitiveDrawing::SetRectangularCollisionMask" + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" }, "parameters": [ "Object", - "-Object.Behavior::PropertyThumbWidth() / 2", - "-Object.Behavior::PropertyThumbHeight() / 2", - "Object.Behavior::PropertyTrackLength() + Object.Behavior::PropertyThumbWidth() / 2", - "Object.Behavior::PropertyThumbHeight() / 2" + "Behavior", + "yes" ] } ] @@ -30053,383 +29127,715 @@ }, { "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "0", - "type": "Number", - "label": "Minimum value", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "ValueMin" - }, - { - "value": "1", - "type": "Number", - "label": "Maximum value", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "ValueMax" - }, - { - "value": "0", - "type": "Number", - "label": "Tick spacing", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "TickSpacing" - }, - { - "value": "circle", - "type": "Choice", - "label": "Thumb shape", - "description": "", - "group": "Thumb", - "extraInformation": [ - "circle", - "rectangle" - ], - "hidden": false, - "name": "ThumbShape" - }, - { - "value": "20", - "type": "Number", - "label": "Thumb width", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "ThumbWidth" - }, - { - "value": "20", - "type": "Number", - "label": "Thumb height", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "ThumbHeight" - }, - { - "value": " 24;119;211", - "type": "Color", - "label": "Thumb Color", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "ThumbColor" - }, - { - "value": "255", - "type": "Number", - "label": "Thumb opacity", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "ThumbOpacity" - }, - { - "value": "200", - "type": "Number", - "label": "Track length", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "TrackLength" - }, - { - "value": "4", - "type": "Number", - "label": "Track thickness", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "TrackThickness" - }, - { - "value": "", - "type": "String", - "label": "Inactive track color (thumb color by default)", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "InactiveTrackColor" - }, - { - "value": "96", - "type": "Number", - "label": "Inactive track opacity", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "InactiveTrackOpacity" - }, - { - "value": " ", - "type": "String", - "label": "Active track color (thumb color by default)", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "ActiveTrackColor" - }, - { - "value": "255", - "type": "Number", - "label": "Active track opacity", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "ActiveTrackOpacity" - }, - { - "value": "24", - "type": "Number", - "label": "Halo size (hover)", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "HaloRadius" - }, - { - "value": "32", - "type": "Number", - "label": "Halo opacity (hover)", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "HaloOpacityHover" - }, - { - "value": "64", - "type": "Number", - "label": "Halo opacity (pressed)", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "HaloOpacityClick" - }, - { - "value": "true", - "type": "Boolean", - "label": "Rounded track ends", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "RoundedTrack" - }, - { - "value": "true", - "type": "Boolean", - "label": "Enable interactions", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "Enabled" + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Thumb height", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] }, { - "value": "", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "IsBeingDragged" + "description": "Change radius of the halo around the thumb. This size is also used to detect interaction with the slider.", + "fullName": "Halo radius", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetHaloRadius", + "sentence": "Change halo radius of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Halo radius", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] }, { - "value": "0", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "Value" + "description": "Change opacity of halo when hovered.", + "fullName": "Halo opacity (hover)", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetHaloOpacityHover", + "sentence": "Change halo opacity when hovered of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyHaloOpacityHover" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Halo opacity (hover)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] }, { - "value": "0", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "ThumbOffset" + "description": "Change opacity of halo when pressed.", + "fullName": "Halo opacity (pressed)", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetHaloOpacityPressed", + "sentence": "Change halo opacity when pressed of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyHaloOpacityClick" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Halo opacity (pressed)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] }, { - "value": "true", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "NeedRedraw" + "description": "Change shape of thumb (circle or rectangle).", + "fullName": "Thumb shape", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetThumbShape", + "sentence": "Change shape of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbShape" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Shape\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure thumb width is not smaller than track height (to prevent track ends from showing)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbShape" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"rectangle\"" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyTrackThickness()" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyTrackThickness()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "New thumb shape", + "name": "Shape", + "supplementaryInformation": "[\"circle\",\"rectangle\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] }, { - "value": "", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "IsHovered" + "description": "Make track use rounded ends.", + "fullName": "Rounded track ends", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetRoundedTrack", + "sentence": "Draw _PARAM0_ with a rounded track: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "GetArgumentAsNumber(\"Value\")", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyRoundedTrack" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "GetArgumentAsNumber(\"Value\")", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyRoundedTrack" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Rounded track", + "name": "Value", + "type": "yesorno" + } + ], + "objectGroups": [] }, { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "MouseX" + "description": "Change opacity of thumb.", + "fullName": "Thumb opacity", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetThumbOpacity", + "sentence": "Change thumb opacity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Thumb opacity", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] }, { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "MouseY" + "description": "Change opacity of inactive track.", + "fullName": "Inactive track opacity", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetInactiveTrackOpacity", + "sentence": "Change inactive track opacity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyInactiveTrackOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Inactive track opacity", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] }, { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "CurrentHaloRadius" + "description": "Change opacity of active track.", + "fullName": "Active track opacity", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetActiveTrackOpacity", + "sentence": "Change active track opacity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyActiveTrackOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Active track opacity", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] }, { - "value": "0.2", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "HaloGrowSpeed" + "description": "Change the color of the track that is LEFT of the thumb.", + "fullName": "Active track color ", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetActiveTrackColor", + "sentence": "Change active track color of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyActiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Color\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Active track color", + "name": "Color", + "type": "color" + } + ], + "objectGroups": [] }, { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "TargetHaloRadius" - } - ], - "sharedPropertyDescriptors": [] - } - ], - "eventsBasedObjects": [] - }, - { - "author": "", - "category": "General", - "extensionNamespace": "", - "fullName": "Draw resource bar (health, shield, etc) OLD", - "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8cGF0aCBkPSJNMjgsMTJIMTRINGMtMi4yLDAtNCwxLjgtNCw0czEuOCw0LDQsNGgxMGgxNGMyLjIsMCw0LTEuOCw0LTRTMzAuMiwxMiwyOCwxMnogTTQsMThjLTEuMSwwLTItMC45LTItMnMwLjktMiwyLTJoMTANCgljMS4xLDAsMiwwLjksMiwycy0wLjksMi0yLDJINHoiLz4NCjwvc3ZnPg0K", - "name": "DrawResourceBarOLD", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Glyphster Pack/Master/SVG/Interface Elements/Interface Elements_interface_ui_loading_progress_bar.svg", - "shortDescription": "Draw a bar that displays a resource like health, shield, or any value.", - "version": "0.0.1", - "description": "\nTo adjust the appearance of the resource bar, edit the Draggable Slider properties. The shape painter appearance settings will be overwritten by the Draggable Slider.", - "tags": [], - "authorIds": [ - "gqDaZjCfevOOxBYkK6zlhtZnXCg1" - ], - "dependencies": [], - "eventsFunctions": [], - "eventsBasedBehaviors": [ - { - "description": "", - "fullName": "Draw resource bar (OLD)", - "name": "DrawResourceBarOLD", - "objectType": "PrimitiveDrawing::Drawer", - "eventsFunctions": [ - { - "description": "Draw health bar.", - "fullName": "Draw health bar", + "description": "Change the color of the track that is RIGHT of the thumb.", + "fullName": "Inactive track color", "functionType": "Action", - "name": "DrawHealthBar", - "sentence": "Draw health bar with _PARAM0_ based on health of _PARAM2_", + "group": "Slider track configuration", + "name": "SetInactiveTrackColor", + "sentence": "Change inactive track color of _PARAM0_ to _PARAM2_", "events": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set values", - "comment2": "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyInactiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Color\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" }, + { + "description": "Inactive track color", + "name": "Color", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "Change the thumb color to a specific value.", + "fullName": "Thumb color", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetThumbColor", + "sentence": "Change thumb color of _PARAM0_ to _PARAM2_", + "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbColor" }, "parameters": [ "Object", - "DraggableSliderBehavior", - "Tween::Ease(\"easeOutCirc\", Object.DraggableSliderBehavior::Value(), ObjectWithHealth.HealthBehavior::Health(), 0.05)", - "" + "Behavior", + "GetArgumentAsString(\"Color\")" ] }, { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValueMax" + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" }, "parameters": [ "Object", - "DraggableSliderBehavior", - "ObjectWithHealth.HealthBehavior::MaxHealth()", - "" + "Behavior", + "yes" ] } ] @@ -30445,67 +29851,50 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "DrawResourceBarOLD::DrawResourceBarOLD", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" }, { - "description": "Object with health", - "name": "ObjectWithHealth", - "type": "objectList" - }, - { - "description": "Health behavior", - "name": "HealthBehavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" + "description": "Thumb color", + "name": "Color", + "type": "color" } ], "objectGroups": [] }, { - "description": "Draw shield bar.", - "fullName": "Draw shield bar", + "description": "Update the hitbox.", + "fullName": "Update hitbox", "functionType": "Action", - "name": "DrawShieldBar", - "sentence": "Draw shield bar with _PARAM0_ based on shield of _PARAM2_", + "group": "Private", + "name": "UpdateHitbox", + "private": true, + "sentence": "Update the hitbox of _PARAM0_", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set values", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + "value": "PrimitiveDrawing::SetRotationCenter" }, "parameters": [ "Object", - "DraggableSliderBehavior", - "Tween::Ease(\"easeOutCirc\", Object.DraggableSliderBehavior::Value(), ObjectWithShield.ShieldBehavior::ShieldPoints(), 0.05)", - "" + "Object.Behavior::PropertyTrackLength() / 2", + "Object.Behavior::PropertyTrackThickness() / 2" ] }, { "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValueMax" + "value": "PrimitiveDrawing::SetRectangularCollisionMask" }, "parameters": [ "Object", - "DraggableSliderBehavior", - "ObjectWithShield.ShieldBehavior::MaxShield()", - "" + "-Object.Behavior::PropertyThumbWidth() / 2", + "-Object.Behavior::PropertyThumbHeight() / 2", + "Object.Behavior::PropertyTrackLength() + Object.Behavior::PropertyThumbWidth() / 2", + "Object.Behavior::PropertyThumbHeight() / 2" ] } ] @@ -30521,219 +29910,306 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "DrawResourceBarOLD::DrawResourceBarOLD", - "type": "behavior" - }, - { - "description": "Object with shield", - "name": "ObjectWithShield", - "type": "objectList" - }, - { - "description": "Shield behavior", - "name": "ShieldBehavior", - "supplementaryInformation": "Health::Shield", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", "type": "behavior" } ], "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0", + "type": "Number", + "label": "Minimum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ValueMin" + }, + { + "value": "1", + "type": "Number", + "label": "Maximum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ValueMax" + }, + { + "value": "0", + "type": "Number", + "label": "Tick spacing", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "TickSpacing" + }, + { + "value": "circle", + "type": "Choice", + "label": "Thumb shape", + "description": "", + "group": "Thumb", + "extraInformation": [ + "circle", + "rectangle" + ], + "hidden": false, + "name": "ThumbShape" + }, + { + "value": "20", + "type": "Number", + "label": "Thumb width", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "ThumbWidth" + }, + { + "value": "20", + "type": "Number", + "label": "Thumb height", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "ThumbHeight" + }, + { + "value": " 24;119;211", + "type": "Color", + "label": "Thumb Color", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "ThumbColor" + }, + { + "value": "255", + "type": "Number", + "label": "Thumb opacity", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "ThumbOpacity" + }, + { + "value": "200", + "type": "Number", + "label": "Track length", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "TrackLength" + }, + { + "value": "4", + "type": "Number", + "label": "Track thickness", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "TrackThickness" + }, + { + "value": "", + "type": "String", + "label": "Inactive track color (thumb color by default)", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "InactiveTrackColor" + }, + { + "value": "96", + "type": "Number", + "label": "Inactive track opacity", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "InactiveTrackOpacity" + }, + { + "value": " ", + "type": "String", + "label": "Active track color (thumb color by default)", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "ActiveTrackColor" + }, + { + "value": "255", + "type": "Number", + "label": "Active track opacity", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "ActiveTrackOpacity" + }, + { + "value": "24", + "type": "Number", + "label": "Halo size (hover)", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "HaloRadius" + }, + { + "value": "32", + "type": "Number", + "label": "Halo opacity (hover)", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "HaloOpacityHover" + }, + { + "value": "64", + "type": "Number", + "label": "Halo opacity (pressed)", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "HaloOpacityClick" + }, + { + "value": "true", + "type": "Boolean", + "label": "Rounded track ends", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "RoundedTrack" }, { - "description": "Draw resource bar.", - "fullName": "Draw resource bar", - "functionType": "Action", - "name": "DrawResourceBar", - "sentence": "Draw resource bar with _PARAM0_ with current value _PARAM2_ and max value _PARAM3_", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set values", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" - }, - "parameters": [ - "Object", - "DraggableSliderBehavior", - "Tween::Ease(\"easeOutCirc\", Object.DraggableSliderBehavior::Value(), GetArgumentAsNumber(\"CurrentValue\"), 0.05)", - "" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValueMax" - }, - "parameters": [ - "Object", - "DraggableSliderBehavior", - "GetArgumentAsNumber(\"MaxValue\")", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DrawResourceBarOLD::DrawResourceBarOLD", - "type": "behavior" - }, - { - "description": "Current value", - "name": "CurrentValue", - "type": "expression" - }, - { - "description": "Max value", - "name": "MaxValue", - "supplementaryInformation": "Health::Health", - "type": "expression" - } - ], - "objectGroups": [] + "value": "true", + "type": "Boolean", + "label": "Enable interactions", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "Enabled" }, - { - "fullName": "", - "functionType": "Action", - "name": "onCreated", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set slider properties", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetEnabled" - }, - "parameters": [ - "Object", - "DraggableSliderBehavior", - "no", - "" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValueMin" - }, - "parameters": [ - "Object", - "DraggableSliderBehavior", - "0", - "" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetHaloOpacityHover" - }, - "parameters": [ - "Object", - "DraggableSliderBehavior", - "0", - "" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetThumbOpacity" - }, - "parameters": [ - "Object", - "DraggableSliderBehavior", - "0", - "" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetRoundedTrack" - }, - "parameters": [ - "Object", - "DraggableSliderBehavior", - "no", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DrawResourceBarOLD::DrawResourceBarOLD", - "type": "behavior" - } - ], - "objectGroups": [] - } - ], - "propertyDescriptors": [ { "value": "", - "type": "Behavior", + "type": "Boolean", "label": "", "description": "", "group": "", - "extraInformation": [ - "DraggableSliderControl::DraggableSliderControl" - ], - "hidden": false, - "name": "DraggableSliderBehavior" + "extraInformation": [], + "hidden": true, + "name": "IsBeingDragged" }, { "value": "0", "type": "Number", - "label": "Time to complete moving the bar when the value is changed (seconds)", + "label": "", "description": "", "group": "", "extraInformation": [], - "hidden": false, - "name": "ChangeDuration" + "hidden": true, + "name": "Value" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ThumbOffset" + }, + { + "value": "true", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "NeedRedraw" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "IsHovered" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "MouseX" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "MouseY" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "CurrentHaloRadius" + }, + { + "value": "0.2", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "HaloGrowSpeed" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TargetHaloRadius" } ], "sharedPropertyDescriptors": [] From b5f46850fc335f420cb5809bcc9798b34975e084 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 27 Nov 2022 06:11:22 +0000 Subject: [PATCH 20/98] Optimised images with calibre/image-actions --- examples/resource-bar/assets/Arrow.png | Bin 3049 -> 271 bytes examples/resource-bar/assets/Arrow2.png | Bin 3056 -> 277 bytes .../resource-bar/assets/Bomb_No Shadow.png | Bin 3145 -> 354 bytes examples/resource-bar/assets/Bomb_Shadow.png | Bin 3164 -> 371 bytes examples/resource-bar/assets/Heart-1-1.png | Bin 375 -> 259 bytes examples/resource-bar/assets/Heart-1.png | Bin 369 -> 258 bytes examples/resource-bar/assets/Minus Key.png | Bin 1225 -> 893 bytes .../assets/Playing Card_Back Blue 1.png | Bin 25862 -> 14269 bytes .../assets/Playing Card_Back Blue 2.png | Bin 27646 -> 13615 bytes .../assets/Playing Card_Back Brown 1.png | Bin 27300 -> 13704 bytes .../assets/Playing Card_Back Brown 2.png | Bin 28338 -> 13438 bytes .../assets/Playing Card_Back Red 1.png | Bin 24606 -> 14106 bytes .../assets/Playing Card_Back Red 2.png | Bin 25981 -> 14338 bytes .../assets/Playing Card_Clubs 02.png | Bin 3650 -> 2565 bytes .../assets/Playing Card_Clubs 03.png | Bin 4294 -> 2987 bytes .../assets/Playing Card_Clubs 04.png | Bin 4198 -> 3002 bytes .../assets/Playing Card_Clubs 05.png | Bin 5059 -> 3489 bytes .../assets/Playing Card_Clubs 06.png | Bin 5266 -> 3744 bytes .../assets/Playing Card_Clubs 07.png | Bin 5574 -> 3998 bytes .../assets/Playing Card_Clubs 08.png | Bin 6176 -> 4257 bytes .../assets/Playing Card_Clubs 09.png | Bin 6423 -> 4351 bytes .../assets/Playing Card_Clubs 10.png | Bin 6689 -> 4501 bytes .../assets/Playing Card_Clubs A.png | Bin 3668 -> 2692 bytes .../assets/Playing Card_Clubs J.png | Bin 4645 -> 3208 bytes .../assets/Playing Card_Clubs K.png | Bin 6073 -> 4109 bytes .../assets/Playing Card_Clubs Q.png | Bin 4798 -> 3339 bytes .../assets/Playing Card_Diamond 02.png | Bin 3231 -> 2206 bytes .../assets/Playing Card_Diamond 03.png | Bin 3707 -> 2538 bytes .../assets/Playing Card_Diamond 04.png | Bin 3639 -> 2458 bytes .../assets/Playing Card_Diamond 05.png | Bin 4366 -> 2871 bytes .../assets/Playing Card_Diamond 06.png | Bin 4921 -> 3303 bytes .../assets/Playing Card_Diamond 07.png | Bin 5057 -> 3499 bytes .../assets/Playing Card_Diamond 08.png | Bin 5630 -> 3705 bytes .../assets/Playing Card_Diamond 09.png | Bin 5825 -> 3486 bytes .../assets/Playing Card_Diamond 10.png | Bin 5960 -> 3488 bytes .../assets/Playing Card_Diamond A.png | Bin 3175 -> 2383 bytes .../assets/Playing Card_Diamond J.png | Bin 4540 -> 3105 bytes .../assets/Playing Card_Diamond K.png | Bin 6132 -> 4261 bytes .../assets/Playing Card_Diamond Q.png | Bin 4869 -> 3308 bytes .../assets/Playing Card_Hearts 02.png | Bin 3366 -> 2273 bytes .../assets/Playing Card_Hearts 03.png | Bin 3991 -> 2651 bytes .../assets/Playing Card_Hearts 04.png | Bin 3869 -> 2648 bytes .../assets/Playing Card_Hearts 05.png | Bin 4643 -> 3070 bytes .../assets/Playing Card_Hearts 06.png | Bin 5063 -> 3358 bytes .../assets/Playing Card_Hearts 07.png | Bin 5265 -> 3655 bytes .../assets/Playing Card_Hearts 08.png | Bin 5826 -> 3835 bytes .../assets/Playing Card_Hearts 09.png | Bin 6094 -> 3990 bytes .../assets/Playing Card_Hearts 10.png | Bin 6327 -> 4130 bytes .../assets/Playing Card_Hearts A.png | Bin 3479 -> 2514 bytes .../assets/Playing Card_Hearts J.png | Bin 4565 -> 3150 bytes .../assets/Playing Card_Hearts K.png | Bin 6159 -> 4275 bytes .../assets/Playing Card_Hearts Q.png | Bin 4901 -> 3335 bytes .../assets/Playing Card_Joker Black.png | Bin 5617 -> 3673 bytes .../assets/Playing Card_Joker Red.png | Bin 5623 -> 3733 bytes .../assets/Playing Card_Spades 02.png | Bin 3473 -> 2351 bytes .../assets/Playing Card_Spades 03.png | Bin 4060 -> 2707 bytes .../assets/Playing Card_Spades 04.png | Bin 3785 -> 2793 bytes .../assets/Playing Card_Spades 05.png | Bin 4702 -> 3230 bytes .../assets/Playing Card_Spades 06.png | Bin 5219 -> 3494 bytes .../assets/Playing Card_Spades 07.png | Bin 5428 -> 3776 bytes .../assets/Playing Card_Spades 08.png | Bin 5907 -> 4048 bytes .../assets/Playing Card_Spades 09.png | Bin 6234 -> 4226 bytes .../assets/Playing Card_Spades 10.png | Bin 6614 -> 4423 bytes .../assets/Playing Card_Spades A.png | Bin 3576 -> 2544 bytes .../assets/Playing Card_Spades J.png | Bin 4530 -> 3127 bytes .../assets/Playing Card_Spades K.png | Bin 5933 -> 4045 bytes .../assets/Playing Card_Spades Q.png | Bin 4768 -> 3310 bytes examples/resource-bar/assets/Plus Key.png | Bin 1337 -> 943 bytes 68 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/resource-bar/assets/Arrow.png b/examples/resource-bar/assets/Arrow.png index aebf650552cb5eb4d3613b533f7235b007e38f23..c46f57c852afc83f3d405398953e9c152d7f0689 100644 GIT binary patch delta 223 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 diff --git a/examples/resource-bar/assets/Bomb_Shadow.png b/examples/resource-bar/assets/Bomb_Shadow.png index a784165a1e3396559b3967369a2dba9beb8933c7..8b55cf5d78101c24ddb42fa4837f66dd62978b31 100644 GIT binary patch delta 345 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 delta 348 zcmV-i0i*td0`~%tB!2;OQb$4nuFf3k0003oNklr(sycTpSyWls$|-eTN-`?2*9#c%W4MubFPLT>;(h?K!2KzCyX{ij03o!1Gp!E;>hmcn&yB4mRGsfMU)#7%nU)q-8q7 z3B2Lu?&OtO-&I8QTL)KOW`M~|crN@vDu@?Y&NL9NNy{?|vNF@0SZ>s=v$~7_@9-Kc u6RG1mLf2@S$vKI&fAs340H9tT8uS6QD8CdO!gd`10000<4xLisX z3y>`$Dwv3|0A?7v>uKr(q9dA63Zlq@Taz08gD|Nn35L=03t!AUss^9U41eSknCmI_0n9M;-~ky- z^&rBPyortjeBqDFaGXJOYf=L^Q$;K~4AzUB2k@mNm_?ve1_H4BvLenF%vZ~6V8ojb zV20y!F|sA-84@IiVgVtaAX^A?H7=Kf%);;i%r*Ej9kOrGg9clfg;5s4e1R`cV3weV zIV{|f9f7r!Bv0fMY!-lm16y3-wE$O~U~@S(*JDI7uGE5D?jx(gRZkEVM6gtVEl!Zr oIiVzsH;B+R!z{xU-q9NaMF0Q* diff --git a/examples/resource-bar/assets/Minus Key.png b/examples/resource-bar/assets/Minus Key.png index 1e6dcf7224dfda73c32b082acc5ea6b547bf115a..2639ac86b301ddb0bf03752f09bb404d4f4b90ff 100644 GIT binary patch delta 871 zcmV-t1DO2D3H=6;BYyx1a7bBm000XT000XT0n*)m`~Uz0FG)l}RCwC$olR;YK^TU; z!QfK-nT4PzilPXDV89Ew5)}NyKXf%GP`BQ}MUIdo%+i(Q2suKI(Bmf&Oj(^|W=wTg z_w&L_mi@i;*i~(r`Z^Lp2qAyLTSma8xv1~gcXLk zTCI8qBpQwWP=7C+N~J;#L@Z;Vj*E;HcZf%}YRYQ0T280aar*uK*{jv+TRor8?{b|> zy;8em@H3E`?;w>*MO$dM+x>O`rYvA|86~@?-$itfz49oi7TRvN0|Vn?$)x6#?4CaM zeievJ9YF&knXCjNbFLa@G#WXB!NBSDdRAC!9goL1Ie*mk#7ZFY$+886YV}SJ1d!Qm z1`zI$@Bn#I3n&(gp#>t@H9($B0@wgORes5vFO2FMm5009U<00Izz z00bbR0HXdTVbea=^?sK68wo%F0uX=z#Q#91)9HC1>D~s&KLXioHqPO2xU2X3JwW~k z$nki*tA7C!0wCFJRtMylNgxku0qJx)v_K@g2FL?I00Izz0OV^YsN~>ESb^vc?U+76 z#ZwlKy#VnX$a=kYcDvo(4G=aL0Rj+!00bcXlLP;C0uX=z1Rwwb2tWW59w53ti_$;p zy2xg;`7Xp_v9K11)P9{svR!AD?7IGo9Qx!GE`LC*1rnqw%Ss@PM&o8N91e%p!H{+! zYL0rnZfEnE$zmHU5l^YBzdoI!h6CeO_Yl0aDyEMUcJYCdvn~Pzw%jTldMP2(6 z7howY=uP-l>tGn)Ts&Q@%_}KBbvt5Gx@il0FkM|8N#K=7etPB61qye{`#Zxk7@9RD x@UP1I=oNa#*9?RZLI@#*5JCtcgb+eL)*r^b)^H6i19JcX002ovPDHLkV1mcsh+Y5y delta 1206 zcmV;n1WEh-2FVGKBYy;tNkl?EyI zfDl3mA%qY@2qAVI|>W2`NNXaj%{q8-Qa z<F(9@yfaW3Djz0&qeUx_X0!PfKudS08=y7mqow&e8!^UCRpr~;+bESvZ(l_g zMbX>Wa5zl-e1FnM-SZ?(XVTmwUeNqu=k(m8tqD4edEZwy9wNzefgB zmJXy^t^OgGF=pg)CbvA#Q}%(XuimX|*$sNV-oJ905MtSC3P;rks=j)U)*P~|APBIx zw}-8*t+(%O;+$hR9Im{d>AWx+jnM6O6Z3=(x`DJIoqzU5QKUSxIyyQ+wOZBOjUM0k zjf6g}BM1W2YBfARKcn4lCw?!ABGu-}Ura%3QlH+#nWbt}qtVDb44Z1T8XAp8qFies^dFY)XDD zIQB#zrJ)zVA#4!|zV<-^EP#})6 z8b}dNecwCfHI4p597BOPh5~Vn(}ViX&JH}!{D0rf>+7rWI!$ppkY=-qlamvpbzWaz zzXpcP_T%vZ620 z`9G>-*Ik9I707h?^DGKvo~n=1pdrgKPG1-bA#i?vzV2pZ%IQFEZ*SM#gv`;9KpaDXIEDgo3ojJ8LSH zN@7SF33_yMCsy<31lh@S4Fhm%JS?ntJ=sLtP#sbOnt&vrkJa*k%Cx3~z z+AkVkH-YNdReh9(?z7*o0L)EV({+2Bw&H0#9xK-@PWotRx|8}D6rZZ&@?y$0(E1D! z?VB_Q2M7P?p4t_i5aR0b@$oO6ZM7$LA;c*(*U=T+%cO6#Xa~~ibbiKhe5^Zp6_F6) zYL(BQ0t|g@-r?clX8>P{{!w|0FfYd10L~sB9)7I5Erbw42qAGc6q=1 zV`fgzoS8mTUG-G;Q&llq@0D<{D6tR_5O7qK-|Djl$I+1T^- z`NDq(qC9&J7y*GELFKKS9(egQ&!;18uIbi#XiS8ViBeI!j%|uOhKG}2dbVQ0-pa#z z`Ro2W7#b2OKG&igYAE~f+jYP5X@aDmpYcmPiL422yB^x@ULr*%e8(v~HnJ6-#SX4~ z$47w;A7$DrJLkIdo>n!6-{0HcgI9QZLt-b3#HHB4r)Z7e}(z-)se6UP&TT>1n>AE^W>Bg z-D!2#^OuD(ZKj20mzCHGsNqik*R`*2)(;b;ZWbF+zn#?-8)uoOS{PIqjE!Xr4d_3T zytqC;-k+^{PH31GSk#HtuyK5xuQVoUFh~fx+8^^Ap!QVvaG%@`%}Dxf-0*QMc1Z#$ z=*@<|r-%ExrTfit&h_y^O;$M*JPKQtd)%T6|7+pNSO$-&!RRc(oq~#TvSd_?Sbo4w zc22ET*h5XrK&z|t+KRr@qLg3WrJJ44>YB@k62FzURNAA%ga>O=pZXxF^`QO0^e-Pg zHZ`j5F3qqS;w|4mT>mGGpv0(}nLjURF9jhrIe;J&!u772ldUeD z_JF(7g(L6bke7eDzgJIP-nDD1Nn>0YO~S;%@B$~%FP)OVZdT69{5HJp-W(C|u4j6E zSa4Q0&#JJX-F-fN_O|WGy>nwT{O$14;WFneD$F+uo4D~}TR1mk9VI(=I;ak?gfc#gyVtxK4*VqH{3&Z9lxKXnN^&jp5e0JfR`YhW*7pqW18Y>=?ZH34AzTrf zHfTWCJ^yX#(8wxJl~UWwnQ$G-C=SoN)(!96LvxDu#W^_9)W_jVLVk-c1$llm8|XJf z4Ck%OQa{=%%&Co#&I;FsRuebK&z3cUCY}zjx2nxIvROc#J7g`N@+r=y5F6I2Tob%` zSb4qDkJHV*XAo_8ZTNXbJ4t_vd9ZE2KorHiI>seh)m({puVS?YS>_l3w`ig}KZ7G9 zH;~iMCZ9aMft(SM9z@mPdA4+k%&)Dvs2auZZu1v%+(010lOHH53o#Jb4|^Y@L`W8 z;2HJ1tDiQD^IMe92+)sRyT)T+^qR$3Sq|((SoMhI)!(px*=EV zxctp!OVaCSLjEWlFvINOa(s-=+?TaZYH{FNtMZ16j~*E1M1Ztx@7Cpc@R0M=7wLN z?sz|NpUizRnpkdtng7oN9n_+||B%$~m)$y;bO+#);3$c)+pk~c%sHFMeo6~U#LN6av0zFK@$ zuD&Z?|DQfbMT>y@ha4sry*>F z=q&FKnd{`^+*aVoMck@@J7PiP_)MnlmS!Tn<1+if^}X2%8F#P8B;kstG3D9JdNu*a zdzVSrb@r8c>&D0FZRkh|+Ew<00$Jt7?7Ebd#{oC+G=SshIWX$LJ?O4T#Jtmn^>X)L zp4o&kSI-l#P)1u&5PdO_KY?_IEb@Vgw94y1alAX!Coh>|0Y-~B{H=zI_RojFIM4Kf zdRwZNcGz)CTLaZc)}6<1P+E`15YPuPmzM=ch*)Py-a&N?>jeE)6Y;eEjzFv=baaNHI<`?&ucgo z;N_A4NbiAuj?8DS#|A!MQK9)6VE=@10|!9H@nRWaV~&Y5-_Uia@#XYD5MBzl$!_x~ zHa*&^@$-Twn^G&MtL1lHJLd;ycY*!Xq4H;5S^ugZ5=ncJ6!|%@?XQ&Dd$_{Tu3VpH zlo!@}5nqLt0?&T%cip;|I-N9+!kF*`uMe3sWY;-b;{xMwSAIWV7gn#t$3M+lt;+jE zMb(@L_%9Eefk}g5&s$CkA8MA)6}@~qA6y>XLl{|WjPjB3kn(nn^)Uw6$^7~=1+-d74)=u*TamBI=LrpH6Ggf!#<)e+C`3flS!>fl7AV*Li+(& zPdsVsYe3lyjeO%~a5wrSojiBAecPzuXAFL!h75SNPnbcFWt_K`K`Z=!K*I3E+x$P( z;Le~Vl@E+g(;{DnBzztfXjV}nww=O)#l9l&=CwIKT#R9?S;wsb-T)ab4CP7Z(NF}7 znpA||dJanS_WA zyLN6vqtd5djFThY8`m+^Do}rehOtBO%xfj$QFlnvpQvaH$8R}>9q<1(tsr?2M|ixy zJVD5#p^AvRT~%P8-ohM_#vlhcvn0lBpALqn9@)+=2z789QM2V@-g|s5gbyFoCRMya zrC=p3#VnOt-jhy4=?Bn;aCeW|t;sNaA)0J%gg3Iy4|}3a1e7mn!6(Z)YLil^1}p!# zn?Vf|;OY{WQ4j3OjlGW`;En_IMu!gYOHAeqYw-k=g*o+aexp9KjsgCvGt>fB>Z-^P z_35{Mv53dK@sOnvsmPFS`;SE!r0T>sOUKEXEs$DvsA-it++G{RZZe=OLJx#)S*%ee&K;s|P+nn#c7o)X2>4W-|2H!bc|wdFZ^z1?6mlVimwxn_y$ja% z+$P7um^v?`|NGVF@?C<%B@A9h*@d_6;ou>B2aV~J$uGeN`oN%)WXwz@9%b&-^N3i2-Q^D8^We!=^t)|JI zOFx^0YXBq-zPjN5D`=}pB%B&zDU8R9%^hkqJrB*Td0UAXCM*XJbkL~%hN|6K9PmfF zrU+;gMoI^%iTEy6r&>lrQGz-XV1D{m?Kn)Zv7oW^0jN}uJrQceVp2*P{cPa-UCp3V zHG|>Ni_S$0@VR7R-UuJb#|->E2Ew_jO|1VdM3`Ebt#z~wtO-P)OU4beTtqLz=hs8F z+g8CQh`7i;kFb5jjh{sd$%Z;v+M|OlYfrE=hykH{(lce}THz<$5;QS!kpU8P-bI;6QPV3xPR2zT@R@|aal)fi2=lykSCe7Nt}31qE=UL)r} zykCB}Vw8O~ZyxHJ03&T)PvB;!?(NMzp_r_9`Mf;Cu_8l;;Lit9U9Wfjn>#GvDLjpA z#(n=SV|oAs*cc9`W;TUT3v-cI&m%K{Z2{=LAP@mkZ%}qM zm}D5q{SinC&$tHP2C0q=mx>sJ{cXvljhkz*Gn@jP?)}|c-42Ds0Zrdn;4b;89{nL0hk=Sfq zkb}V6eoVXc?=Nz^t;4wAqU|uBiFw*$SaZq9BlZ??zc-L{T9#o;#Ln(TsA7`^nqJ^@ ze_~aa&qgG~3rUQ#yE5(+-sXX-jTGhWy*pM==+PYTyr)e>1h7va!VQiUdUqf|oJO^W zShA_+YZQF>0+-`#g!TS7`UjaJbp2bief&x4W1HPB)%r)p002yJ0KcmLa^>RaN- zr{y-ofNrzjMUAG^yWL+sjqojcU&Yzl>6jnY=~iR&<8)U*GgghrT$x&v+7Rs-E`r4HHyGz|A07GwzC>F4TM1n8^()GavNs)nVJ@D!DT+ z69Ff-d>!1W{wc`_sOHn=#xM!s_V>1uTbQi=X+>W?u)(K!(Tdt`cjd2CCXu(^+5UYU zC18JS+OWYEHDB?c7I%lJ2YDbN?!9xN&H+ZJVU)DyKI!RiGB2 zO-yyd-nJ1gWRx}K5(%D!nu541*~D@IrV`IVm^?BAPWo-Q_0%kRbc*f&-**GWkT{pmDAQuJ^znmntr7@m^6{ zQmi*g-E_#jk%Vbo{c@p0zh_dEGZtOVoR8vnB{RnVFJ_JX^@;&|e)VC&N-#3uQ+g5f zKP=aI#PVw2YmL|vx(Z$>K3Em8tmc;)|I(oZ-U#Y`2w5}VA*l>?a$?SJpx;IJypX-j zHKz8`!wj_-sb?e4HNv`-B?{T&1Do%u7!e3$JdpciIKcdD;5}C^%d@`jmtYdqoo_?? zIlf@uWCzVi<_Tj0jx1=l4aZ4^>sx+O6HegGSNT(|1ja726!+Gww6dUUwXk~6^d`^P zLRD+G`hRb4`Q;zREDq3@B<)F&O+N59w94`E@m%qbIr)hY;#u@1M;d+39n4Or18 z&L9qTha=ZS^ogN7`At6FEhj<2ilsE zhszNEmH8mJqVERdr{%z`tmQh|<#gsP;mMdh>|N!xiThw}Z( z>-ENN*N&-F<;R)sYCrz&cK&>ps^A8QCyARx1t8GQdswun2uO%=`0sZbh4Ti|nK5=s zEu;RY4x1PG#$Z-r)jsbpWd~^pFHz$}4M?=d8$GEjXzkta{8|m)buvcTXr*>rZ^_ZK zldoXrn=CfWd~(kCm1g_%yU!&o4$@+@(b^Hv0B2P ze<+&h8`-2i^Z(;}N@7Bs7V-H zPj439eI!~;kAuPdD$PmJt>2sAoG1~)FUx!xa=EH7Z_$Yvv7;0bCb;r*{IE>z8-Jj8 zAmMMaaS!XD!0RiNJA#WGl@voZF4`2oN1vK|yK9=zoldSJqd^Xm4Y;xgrRuilE&T@j zD<5Lq`Dy#pF_})T-|h8PW()#BCc%w0nnsj8Gi9^RR`b$%rsgyTMz=Uwy}ZJIuNyi< z8JQZdcWpzQyZaV)5WKn@ShPw6g~aMQ_c8BEi(astK5z<|ByFaeWE54`{<3HqgT73^ zysu0==jpgCa7gqnxg2qswTF&U-|Y)<#-hI+go*WWQshV2J&yKvt!;>&46|Mkrc+KJ zoW}%pe~H^RwT`2q`XEr-x)?M>`upU44cWhgyLsnuZQfhee#~gCrp~4~$k_*0p!|ws zfK}oD<1?>_i2)_Ba>6kn^9>IbesI5xIS+n$|4cmJp4Oj-gG_4_buj1Uo_h#I;kA7Hu9^^#$q}PI)Cz}!(CowG9Qum zRu(%p`Q@H-t~&uriX}X=mz-Z){-W2~1@4`v1`p9Mr)CU#f+6X?M|l6mxrQF8{|TC9 zo(`G%Sc5NnP6-ZRQotIhl(Ed zMsm~^5P{KrXlYRdrzr-cwt+vbRk{CBx;dS4Pqx)t0l*OvJ6)cAlwb;n$?q+I^3Fpk>qb7T~5{NmnP$$k!Z}_?!W%DR$ zG`L4g8#BS-iXgv@j}#F|6xO9W6nlbWB`HBhm71b2R=GD$>dUi=s{On*6)9o=YOb+$ z7H%D#?0o z1{D_)J87ZXGcT)|itpol0Q7cPE`#qYIcBOl4Wf=&9mQe?Yn^Bsf`} z#K(w(7<*E3EG(ZIK&p$i+8S0TMdT+)wk{@O?V4%lg~B}4>#H|28vvpa6v3gOmy@f> zmLUIUUy!ReoZLU?VW9B5?#-d(pn_v&y=CWyfAmV7ldI?p^aeeA=6gyvlP$`|w@W;3 zAb^nqLvT_PU-2FLa+OYeT)o)gtzH$htfzlV>b}b+2Wn?Y77N-w3sy{$tz+ViPm$oq zcCSlS`w`7t88@+d;8*nZr%M>(0Myc&%A02J4;6{@v=KUq%*n?7+6xtm5YhW4F0=dk zVvun-aRI$N;&N4R9C`*1g+hm_eEuOjccNe6r-V1E6heZSyP@^%W5zTm@=Iczr}}A9 zg&4-9Xll2|>#W^svg{dBg-KE-@sG*_ur$`Q-Ubp%P;r%xsf#L6*N)I_x`&!d+JO?! zs1*~jyjS@fAWPD+Y9ZYa^`rSN>#@*jorTw@|PKO+@R6w3sxfqs4% ztg?tNsT+!3h||vmb_jr`%Ju|^p|Tie<#VnhJeh=zGyFhKA#u@U&r;J7m3TD9X^*;v z2kccb*epHNfU>~9ZjR!vhg#4om_||`IxZ>FGchA0w1d#p4ac&ku@*{r61+xP`Id|6 zX2W{F9JGiDSQ`7hoj?(MJB;+yBxt|@-V7o-t*H1)^SW8lMW%}SE^qX$YRzC0c0ZPr zjVqf0Dn2UL-i|{r##A}%WpqoWAN>O~!83*|BPEi7H#_F!B#{Fb)&meBhSE+R_|G;E z1@2N(pUq>q$!(E&)*FRN2@9J4jhVh^zmMSHN?R(zGwn@|1L`mv5aYz9{L++>tIlx0 zBHjT38>k@|Q@>j6m04ZFAzil~Zcq7)Oz2O@}T7%8ixSNGO zj-^90Ckf?7)WZuQX(llrr`B1Tl#usGlHFp-b;Oxv^8U=RTdzh=NoPAnULOgK>^MkU4} zjg&!o<4tgS;dgB@SbUm13;3G&KhVS(+ z#OU^&_$Ni}lBqy6UVj-7{{m>DJsTyQc{e_m!-B}6qLzytnY3Fm1r^!WjXbCp-9fHJ zX-_VcN|K=}kezbkvZ}oyKmniwGZC(#)E?jJncDb9JNr!hw*62sCw&Sl zyh&KwpYTlbp-0N`HfH|^pyC_ehW0E<@ih1Q)qV@O1%FBw_h?HUKph&%2=QngV05?a zvy9)?9AQUlbH>@osueT-t4B#0RGTnra|4JC#VXYqF$p^MIn(6Hk7v3}Z)N{-Ru?JapEmc0mesk)2lRvMH9Upct|Lr@$3u>) zmh>f-AxbAHTuD5b5Hsxp%NE{pp4yd;Vf06yr~z$n-99|mP_nW|=7IEuc5;0sqRE^(;F>J;;7q|DQ(rdLM@G8jYv zlVRL*NO+-C6b+%#t!`C&O)-6w+AVfJ^pGJI|`gkCnXrJzwEaX+xO zxX%}h9R+23oV$b@(2P5b_>PwYwrV{P%pP1DEa-8__M~5;_@6+@b`-|>y1w}Kp2>WPp%YSb0y*c5E3 z%jp90Rhn9w+Nw(3>hQ0iH=rv4U)rcAz8T@Ev<`GYH!&fA;mNyBi^KGu-ks`9|DJ$9rIt54=R*+}WaGkk%lx#7 zSs)43svg|s@c_x~{4HSV!0AO_da_}{*KTCSnv5Uf3~86pz^Kf6OZ;fft<0|~6eET4wU^k_rw@xjcMY)3n3nT?Xdwyslb|gaV6)0oCWTt<5>4_FK^dV2OLHIAm`OtG zxao&cFd_`l)FRVWeh1bLq;ZcBQYivb*$|qH0!71vmJRUyT?HW*)b@tCV@qoLQq;+x z%{Xy;8uo~7bdtsI#`}iJzk4hy7tt>mwP&6u=6rADP=RYvR%()CIVr+-KFJL(U#*OU-Bh0PDn`!J9`HN$K9{at@HMw@7$;T1-9C^Z7V zpb##l#{9XgDufN1e#K7N5(OsTRi6eiUpTm8V=|OA?XoLqTL>(bpv-GE%n&XW)>2+< zqH_=r5-&He0AAlT7}3>0sfaMCa(<6wE`sZrX2q=7PaCb02#GQB15VhZk@6l*DH>NWFPAFyWKKJvQ+za z^F@cZr$$P0`$`asIV1Wmy2j&aIEg4OE{;TF(q)P0d4@Wt%lcH*A~y!D`z1oUQ~7e#857zOnLD8 zwJ?cc+$9>Q0^+M>JxzN52?}#yuZpZ9tBp>=l?>Fz?Fi>GNn924fn6FqP=z)jlARt_ zXWflgG?wh5SvVLsvVkE?JY41a(=wZX&gpi}KJ_!OvA<3kZy_y`+tSxzL_TZ3zB9;k z7rD0b4QGND@Gh{9v9M#{1`5}yrYxx*4A;XE#1=OVjvi!RxzmG3<$d(GYbokY*cG;I zL4==bgwSv5>mpQPR;fCFHI#0Nx%S4txf|2d4feLzY$yM2i>WQD1g@*ZB`{yg2j*Nf z^21o7_sTdiu7b4_h7;`M6?0{+?h#zSIM~1D%w`Sh&GgFgZ_#g}{GCoXnMOuD zb8b6a%?B?$YkF|%`6qUWG%9p#|I{1Y=d~pwnH#s1HHhdNw`6pll4Qr)NKHdQ;fO3& z^=ELN3T<>yRows142nbG^U8Sr3lRi88be}L1niriS^{vba3lQo*~Kf4|4Jy*T`h~; z16AKc$TdX>fKO=VB((+nq?%sqS{GB>S`w9cy;iIZ`Xh4~if%nEDjf}-B3N%0FH?S= zm3k!9(wDULe7bWUQN%Leqj1nvQoE#v*u9Qus{mM$QXDndzQGwkhQmqCBNE{T_~~4DowgrNc`Q4bxvW*5j#qvIKU#SV4I16hBbw$(Ki9^+aI&7?5tW zcB|@T+?)gXnbb+tn#zgYbi>7~!fRvarXccoz=NW!*1M1LYJHJ%*7Bc(;{$KEl zYI-qNN%9ZTS_p$5kRcr*jf60*^tB6CUoVINrm|k0160wJdRBhgj6`r#O2u=Kx_Pxq z7}n@+(*x0S`gUuxA18wUQ1Jd6aDwx!N|yAI4$Ohss6fT38xw`#UAhzJi`QYqE>8t! z;U^?42vYSa`mm}02lFPJl$8YXyS$MF{12x?3O76Soz9T^`J{C8cfl0v3|FjviGB2O zV;2Z#>}a98AO+uTMzt`(Svdk%f~>7pXiVzpl8^)+&e3EzvMbk9d0BXsUnDd=L($J; zNmk_&#v_7iUXhJdzKb$wucw+CyR4G568e*!8EYM}rfB!oY^fzS5WsCE1t6AAi>GO5 zEi$zv{@09K=4Ucn_s$o+AD;zQxRedb{u$jCG+aS>pVw_Kz$)4()j=B6Ss&E^scJaQ zSiOZ9k7h-+{^&_Fyr&fsex1mJ#%{tQ+On4j9-CwX3Vh!`BJ&yKo+Ef5xeYScS?z~Z zQg3UHl3ehOQ&|-Y-22eaHGRc0`gPY0(QP>5a;P8f+>+XI%#8vS_#1m*y^kC4B4C;d z`HW3zXQOXThGDKGvo9HJ29NSXXxqfQMeyjRJ44(JU6|rY-^uoVYpqWjEG4fh#$i9@ zdOy!!G}zCa7aeyi;c9G>eO;B8TOYyH#x(wK{*va)-x_}eakxPRGgQfl`iP+g(IO`S zmFoziwHsDtI@FEz7S&59N=Lu_t&fC3BOzK$(+-X-sWKV{t-`q*E`SXm>OvIc;gBq^7Kv% zRPrQXn%pQZTU%fx3)m;ePM8z*%$^KPv#BA#u-w35;BVmN6E4L|O_Qr6*;tA^l8T;m zMFaN`n9^L(wymqlRNj5um&<)hJk#hTQ*>5X?n_xF#px@@3?8jQ>v*Tc_ z|I&YT=z&DI1MH1TA6W4)T3!cSI@togg{kO)4g8!Y3F=l#RB0@vtYCa3+pvgCQYBS^ zrTjs%RXOJITS$wjO`jE2JyS>&Z4W|8n6iUBRz?`PblKP4A~e$?s&;Y?z%|- zkW~6f_L6*ElMHNJx zWuF+U2g$-Ujv##NpoRO&=|XtHfts%?7$E(cR1aAyLg^mqWZY=;YRoLir9;0{Fe%!! zwUEQ)R6*N=Vou{?M9qcB)*9_eY+Cnr%B$H(mk}cQBohpG)G5~6N3{~JS!a@~EbqqG z`C&_Pu~t94>}Cc-hHh!vBZ6RPb&-Y-fWRdFh);O z8+p4VyU+fht7N^rlYAPoHz>S3Gml?}SA!TGGRnZO(!+Gs2g}Idgh@Obtw0M&^*MK? z@Y0$;;=!d^&?cCzziTi6K0lJehc9>ai9Wole`6`7=pZZ4+e?H?hy6Y;il3`ws4KJV z5T@+tq)hK9?iu;XjZ_U9nxVIwdl{jjCEQ7r5#7~m`)}pt?7K-nyMMA5Y<=sFn&V)+ zwjzF`t`RR=K9!q-7&(-e5YTO>!Oe|yC%!+b*+{>nC^4@?q}C3NL&{=jS5^sq#06{6 zn~)C{qZZ`t^(P=f4r0;;x1h(qe^Z}_d8b46B);f+CkIXdjU>@URoOSjH*WJOv;tRf zyD7Q2Qb=Wp7Q|?uqAQc)rx8$VTCwUCNrCm-D|M{0)5r{QbOvky2sWj3sV}ij_Y6cZ z;FZ@`yJDY|`KJ=ZqDFzfV`+xf1~9J|_Wf(q<}5ktV{AdOthE;mm+LjBEn)tm+Yp-A7>tH>Oo;2=Z#g7gqsqFXP|bFreKsw!A(u_vDAZ~pj^9^ z$USP3@Eq?DLqdrjx-m6z^hKpcKCBNETTMyygtO(s*137Z4p4(4UVKRbF}vt+ymehb zslA_kG7n0E^5p)ulp~{&Vg{Duk8wfz#Hs_DM2Gz6E zA`PZ|b6O@E_QU2f&1K_B1c-z11SEDY>aXVS)*X!v01~+!BF9{kujlrMO}ESW%e}Vb zmdG~|_H{>d@X6Z-(N0s`|GUc{8)j-Wx zTmizV9JhQWo;Z9Fd^=x7gW$U`DF25|nZ7Df<=rb|`qYe`p`aqlg^uH45RIk{3WeU&~`-xD5NT;y-|DJ*z*FN?k3~aMg_uucuHb$xBR%H_s65+!ehc zG{>2sNZEUI^>xsPaW4v}TE6h56D_8W$79*jD?PiTM z;2Uz4^&5B>VH~xkGxvAl{Dnmvxtqr7d}t|20)mnZ#p6bUM7ru1A3d zBdANq{M!`|YFFt>5u9hj;3vh9n%ZK>0`_awN31&$+89B1k z-IA$w&x3_cnMY;$CISGTEwVE*qCF*QA}b%-5)<}UrTU(J?bq%rmH zV^UTQx9uKCcYQJThJ8I+DeNc-zYjtD`D@)Anza@xiua@Lxfi!>RP6%JK31-u1TI+m zD-T19=JlHb$qfITHJ|k@pRSdANkrY2&YhmTZ*9p7+8EEfR&Jrb6QcTz!*B7s<#&b7 z8|2r53g3xaad@K5re-bN3%5I8TZRmBfcY#8uxRJL^DgWvmC6l~X?kDEPrEK84X`+! z!U&pRxYG^ps!;$3efe#6rsf%vmVp2QrD*R1vs z%wcSMHO(xSQ~zh{P%4|@sEPRFSe8JqewB%c#`@zU;MtGV-sn=z;PTgTwdeKG96(hb zroUJr7lu}CP-SvUYGD`UwPj&eki$uO7;W+Jc-?UF z?NGz4;O8@?{%eccF6DVmgU5VtAb;HFxGwXrGIwH>KS>NNYd$=GBW~JTnV#QzL8R;# WFubf@6?pB(Lr_tC|F&8l6#9RdsGzn0 literal 25862 zcmXt91y~nPv_(Pb?iP^lZuk?@-QC^YA=2H_EdtWr-Hn8Fmvnc%@xAZ)sXthj-PzeY z_nv#snQ#R;aYQ&gI0y&`L`exzCGcqu{zbri1phZ?s1$+^C}&|w6&Ucx2gW1}d=Kj& zq3I0Hpa1vooiJ5~2RMl9@-O$Mt!rk4S!P3s!+1Sv*l)>J~JmZuP4+7#7 zgrumDibv*gySs;~>C)}Xa(l|Po}}=nAe8rcL3n7Q2ko$7*I^@Le>Dco2OJ5!{eOhP zaU>z-Nr-zfPLsg?xLb2yKO?rTB`FTO;+lLST<4v4gogNRs$`$FpzD{9e~hTS^L!nwt78 zCheK{>4UVKoZ0zC_Z`tG#YePLfrO-_>rOYtw`$%$h0-bB$mC(o=7G3aSht;SLf{}4 z9-h}3N#V7S|Ds)E?VA_LD6;OhlO#R;cV2{oIg^5t#c!f?!VD=>OI9M~2}U&wj$E04 z>)|lq!tw1{mMv^*K4C>FjF8vWEh&`zNY(YoQj1Y?+@BsZ<3*I+%h{mE;&lr}FBgkB ztf(|IxH9fG2n;nvoP3*kN7OgWgFSyHrcs$$C)NHj<; z%LcCh-cv*-CsFyw>?IjmF$<0IQ@U>Qe(-ee$c@m7obz3oH44G1#kW!z4u`$jF;Zlw zch6dnwr3Y9O%qUjM=(rn>->sUTZq^p5(mADNRRP{0r1d7G1fqTy${DVzL+~lYT`a>luKZ;7tQwEer zcxxt`$qv}<&Q1u;D%rgPl0nom^uKHYK*_VIl^>Cg)5Kh5o!6Lw7u?^&XN zv(6~CV|nRgCPmeuFX@)AG+Ip~n03Nk#JmyY-apZ7e3E+S=f%DcPZKZg@5QZYS`R@m z!O*|wprGY{h7nYD$rEMuL7%8KMu_}vagx^FqTj~Zp&}P8a$HDHm5joAc|1pkbPv4K zcOTi;^+&|%zODQk$jPK_Z6gX+>3OW>gk>sj*3k*P&rX}Ns#a867d9;j&y4Uo)TW

(G|=pE_JVrZ%v;^&6L9%(E*mE=U>L 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 diff --git a/examples/resource-bar/assets/Playing Card_Back Blue 2.png b/examples/resource-bar/assets/Playing Card_Back Blue 2.png index 76fea3c2f2ad04faed80702ef911b7c59096c8e4..16d6f9b318aa10fa2fe3fe863cf1d7c35515a3ce 100644 GIT binary patch literal 13615 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 literal 27646 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 literal 27300 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 IH`-qR15%dt8~^|S diff --git a/examples/resource-bar/assets/Playing Card_Back Red 1.png b/examples/resource-bar/assets/Playing Card_Back Red 1.png index 4c904df93d92bfa28528832b465741f1f11667f8..a1afd182c37b0c64217822020c9c0ed3a97fa746 100644 GIT binary patch literal 14106 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 Yf1`(gkP$*3EC2ui07*qoM6N<$g5!VH!~g&Q literal 24606 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 literal 25981 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 diff --git a/examples/resource-bar/assets/Playing Card_Clubs 02.png b/examples/resource-bar/assets/Playing Card_Clubs 02.png index 0be3cf9af8751ac7fc5dba4a7ec9c8ac3955d513..e3ee65c3846b582cd0af88ecb450ecf07cbca6d7 100644 GIT binary patch delta 2538 zcmVgj<4S z|ER*rds;HdNnW)q$^MnWkrXOfHaW*93>-r9xY&a79x106cIeQ7O`A52tzNyF%wU6G zJ9X;Bf`WovHF4l#>#zJ}jT$xBxpU_j$$TXyCUSqP00I|Vtm6+s^5VsdC%O~f8_eeT{{9K3eK7} zYjlr#M~)mx-WLI9$&w|q*GEJ|u(M~+%52uGS+dteMMaVKf4u<*L4i`ccI_fK1c%_r zbmhtwwqnJKd^>;sJi+m`aSrtU{d;!n)-5Mnwrm-}@g|%{j~=mFwQ6aK)`krmM&1_% zM-P}bZQ8KR%uMpW2sn=)Kh_K;EG&$D{`{Fd@2zO9T)A?rcJ10u*0Ezp_UY3n^182u z(xQbarMq|Uf3m%M_p-FKH1_@bcY@;z4#I1!kK1j*f(530pud0r^68}V<;%ecm~gb1(Qq*Ht>^l4f9K96IHKUJT)9%$^?UW|MQ}vH z*}QqPuImpTJUB4mBqt~H&{&ThJb2L14|4nVZC!BuVMmeSv(nzu@87@qoShahn8A4U z>Q&&v!C()a^r1tC*t>V{Ou6|VKYp+qH*T=4TetFk+}OgZC1OMWl$x5#jvYJZ(~wMo zlaZ0Ze+PT^_m?eOmK{EP*w7nazkWR{Q>Kj5&AZs4U!aAChO(naj|K)DwdMtYjCz6w z4jgF8IT%duSQ-ungRVY2nmA9jefxG(4=U~3x6it8(AN|#T2%FeKX~xK<4(U)rAns4 zsamxvpV77~9JOW#C*pqo{OQrn-nnx}$T7crfA{WL3l5qa`)a6iy58RB6e&`Kza}m& z&L^8RyY1Mq!#Z$IpFXYI0UI}N)P1uEmqoxibLNb7;PmU)PqzbFwQ8mNX0gOA0uF*2 z%fRW}xwCEupm}pgef#z`6%3X(EETOSUc6Yh6NU^K;?@mgtW>#jC&YvDJhBXqsAc5 zh@CLGxw&lZ+O<4vZ``;s-#dWWZp=#M@S9|`_&0v3)pg%B8j1cgP3o=zhX9GyCHC@QaortKS^**7EWekVGkpF7-lSBr%s*XcJky&cH+bdZpV)w=jQ7RZI)}+tR{j( za7YA);E)IoiQo_%62T!jB!WXCI0T18a0m{G;E)Io!66YGf_$7Fkk?iK7BenaNq#X8il;jj_LaCPYn_mAz(nky+MNp@xp$S zCr{=%;Ec{Cef8>94kacgh6g7|$!|{th@5c9@iuejOrCzsQgDz;5_Q*HCGAF1zEPt_ z$$pMJq+7OZVWmr#R(&7xe_q3hMrir+<+6;3s5;WHVMG2k>ZK|J7rfpQaFA`VZr!>C zcKXQY*{D$?r~I8-lEQjgmKou?mVBbhry4^6zlWpD-D$LWTF@LtW8JwfQj+;K9E?l! z{#EKVG)G7g=B|*-)Sc^IyLQdL;UEpAh@{^Ib<%|i#W2Fd!*yK`f0>2V67%^L9CYX+ z;GmL~C&IMQ@ZrN*wQALP)Tj&q@bn}1DRPlcnl#Dflj>J+5T1&FbN%{t!|oZG64kDO z&tj=@4suDCC{e;xFbK6#3(hE^F-BKXvLf;tPH3^Zvy$BlIyJx$q$4I50m7tDC;ZCdd(e_Iv~nm0Yp7(IG4!4W0w zA<*Lt)XgC{g5)Y>b!9VV%pf?T^!oK{U7@uRrI@wCL4_M@RETKD%N0o#6Ng zoPZwZ5FC;wIM`T-U7(Iuvt~_#;|*c?!oHzHi{S)>f8Xzw_P4Q)7C-=#mX=1*nrPvq zT|tAISwK-^eIWr^Yj1VcO{Ge0QF1%h3<1lr2qf`07*qoM6N<$f~3yz AiU0rr literal 3650 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 KMNUMnLSTaHVYBW4 delta 4279 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 H*+=~k4t7#~ diff --git a/examples/resource-bar/assets/Playing Card_Clubs 04.png b/examples/resource-bar/assets/Playing Card_Clubs 04.png index 990ce0705f5e233b95c53c09a6c5dc8d3d582383..178f85bb06246d6a3df2ab8707fd4916a9534cb5 100644 GIT binary patch delta 2979 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 Ph{s6ZT(9bubJYI;+ts;H literal 4198 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 literal 5059 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

Y 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 diff --git a/examples/resource-bar/assets/Playing Card_Clubs 07.png b/examples/resource-bar/assets/Playing Card_Clubs 07.png index d0105853bdc2fd9257c1a2df0c4fbb2beefdc8dc..5e6b414f3e5f11c35b2ab1918cf4d64d65e39780 100644 GIT binary patch delta 3983 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±4cMLcY6IB^|^ym>-XVicbBhg?MP-wu1d&91qKt*|qljFD} zHImk52AmiPFRs%MRkdo>(m+P4HB#2!e<@!+Z@`IxaD9huoI%EfTa>B+M>CBZH%?n= zm&7{Th%F;{!>)YjtbPcSvO%{FUCuU6PmJd^CgZ`BJ@#|9QRlQQ;JA5p6FYMVoAnFT z1sJ&+d%i@Nli!jAfI)Et{GI5WFuRIO3GitG_Cf2B&K zwGb#mY74Or@&SMsfEh^%ONvhrj+M#-!ELwQmLn)%6!L~M z8`0*ME?p|_zWeU1G07pK91GDmf7Cf(Hj}zStL7l`>PZ?@O(ZekP;AJpy^9?Ri=JTr zpYq6Fdl8$tYCB@?>s8x;9&FCv5m_oPO{&YC7dR9|N<27p-_Vf{>Wr5TBC1g7%rfvR zA})s$+f3+h;=%EHgQHAjqL+d0mdk!bDKfkE8%^hl&A{YzOXQsXk927qos5xwa}6qbkroG8j37aSaw#t>oojW^!#9FLf2olRry zJRLvZ3>F2seH#525)Y2tYBFD@;j3J(OD4ImPre*<@}hO6^YffORjR)i92|5Lx2(1( znua?~Ltz^MdNFOt(2e|vf9!7AT$37S+matmbnq3~8S9?D|Jjval$Xxg-? zRp*n>(XWT%dMYGWPYmi;nt0n9{Wyc(Tr3N^NTuZqW}dLgQ#jw`fBVSoGgAi+_O&>x zsFSX)vXn7n!Vo%F7=<Y^u~d{Svls=$XKtN~@M5t>MFh*nV%6w6H1 zew=(8z#enVFC2L8E`=l~=4Px^XDP z`1k>Yy~ry7BZ%bMrG5t4RDzRMTDELi&Wu;JC>U@eChA=0e_Pt$fD;kPEz7Xo8E_Ip zlrxs=#1RQ9GZo$qI5Co&^66LA-GCD#sahKhI0YcpMo9*o0?^{ci^Zf#la!by8)3oO zVr53K^c}RvMlXzF1e;tPJaA_I9=q54Qy;hs;m>Q&Lhp!|S4mD>fXO zISAA&1!o&TEN>f(a0<#ykd~#G*gtFos7{7w8X*;g*;;C6;o py%Ag_j9h1Dxc|0QtAdQh|3~U60sjvun*aa+07*qo1w^hwV1kmw$MFCF literal 5574 zcmaKwg;!Kv7sdx9h6WWF21yYK1&KjgNdf5)K>_LR5(K0}W=H{L=x(GtC5Mt4I+SJ* zX%Q5@^Zo-LYh7l|ox9e#d!N0Z=eJLkrus7qQaC9D0-;b=lGg^G*5LX8B?A8&(7O5H zgTP%@Sr-ca{Gb+*;5&(nl7TyTe&)XmPnHY)7Tjd;P$Lxk}?VG1tXDR;Eip-rrj4%NepD=c?7 zGYm2;H%DbhaA{k2Hl=?DNT>W6cF%0_m)4hu%Dj_jkB4>+K{ALR!8)HpyuLg|6G7MR11C@_NSbQrWYqWt;f!@U+{9D#nR<;%SsS16t=fB z`}p{@9>4SPA*qN9dr!@%;xbcV^c{z@=Q_M5A-769IB=;Q%{Kf-D>IU+%hT)J@vq=; z8I#28x`CnHuzv3S`aJgvkH&27TK*wXUe?(XhMc`_?zXoxLk2vw3u#?vR}y?93VcHggbCFoyRw=}kt)QcoJYkyJ!5uBW&BRYUCv(Jf+PVz(bX zB)j5sO3KPw<^4KsC>;ZXVv$_mpYsSA!FtDqzGhjlH_A><6|A3MBblXA^{iLg{gsW3 znDo*eYy@MLM+}XPna!&PdV2{20s?|9{Qe&Hm;I(CC6vD06H4DLj3T4wTb->kFY{4R zQ91ZZ^+a>Bn9P^)*{T0sj{^fOt!ymCjJ&C7_Gc2jKKy$!snNO|6)w9~akALt&S1GUg6=mc$j%OWU{Ebz zIpXbqc}80+QPkM@NnT!lJ6}jdBzdvpeP)AtwkFHg`Q@b$rl7FUJvk~mI=5P40)zRG zCh3!)vl2o~rSyA$sd)S3=!jh-L-PB-f6$;^(Zc3tIM`$JJOz3AFUfNq@1IaIOBR)? z5V2|mS_7*rKRGi z0Sm!8<(adA4Yyr)_Z7cm3OyeOsNtAxY+~ZAo40NyWnP}_d=)!yb@?7#vHQ|eQ9;4B z)%)Ltr?9ZF=Cr<^URXlH&D=fhi8)ak8k)3`Pdr{;Crf^1Wo5{c*ys1vPIgrui-@ob z3Eg`4d%t(7#aryyepa;bv4dc~Hg~hfj;x*u2ynbmgQY~UF1yBcf3Yd#+c!-l96?&y zb_Q>4Yl}}#?lZLd-W^6Az4Mcsgq(c+&Iu<6hvpZtpC^_qy?MgCKSmE{=e0W( z1>(WF@#FH@}J4?1EPNe~1T_TJ?ut`Xu>-GxN&c%W>dAVjzG15<5n?VJUTMCysfMO9KVGG$lSDnZAdNE-5V{?-G0w$Qk~ zKE;HTlxON`qB12VB_7y8dOIP4y1F_GkW9O95>irjH8nMHy^8AU1f_g!#Anc5^4XdP z32cdj13)z2;)VwY*S}f= z-xJos!9jVxl;e_@j*br*#N6_*^#MS63@N5&XO))ye;ZAdzk1x)@;${Qz;xONXl41N zxQK`d2S~F1l5KX1>u8!-?xB94m*Zk%e2q3p_r2xi<+N%uGqV9;8!$^oI9y3dDH1El z;(rpKDjg;(Q}48-vbVSQ@)X!dd|n>M#Kc6-Lc>F9wZ89CP&Ew=`qoNb1cLTg>oKK0 zv$M1F`uciNpWL_e2Knx?{fkqamacA|-r41^j@T4qUy`7pAdGO+>zMQNx2mba%B2}+ zndsD1m5L&GmV$5vR$k&%(vYD=>A^B-iEsq*Zm zC$~o!mW_6{w{5z*b8~YkHf>#iuuA%0d=z3?NVMEP5K)(v#W(iZpjDg)8kwYq+Fi!u z=jYGM%hN2%u{xI?ELhIVrfNkaczJn&`m@Z<%{BU-^5Em+f18@h^B{>rB6~JR(1+l? zbM-5YKRq(V7x&(G`0{}YE(~RlSJDY2BntmDCd3)sFBVGew$?}S1BV;h4#*Jq{NQyz zJW0U3&*ki>{c>L-7ptsaq_(oy>`4Y>BLan@z`t>WhMGDs;NOMmT(zaB+j?Y12dx*M zNjoxK!khixJwi~iI=HU7`&?Ym`uckC{=}rDq~8`79lkX);HPKYF$Z3v{9|p65LKhg z4^m!(Qa6iho9KJWmtsCuq;(GJ_%y-&cvFp>QG}e3knp3O)l2bE*LsIJS;xxS*L?kG z=XMgXwF((*JJfxH0|Qw+zkowD2K*D(`y8Gn2iuB$a+Sq5NsU&snPfxe#=b8WQAL<= zhEkfQt**Y=6_n^+t(AjW?@Z+DZlIVX>gDA7cd7e)4twdVY{uEkfA=F9zQT}11Ozrq z8dt>Ba>5ACFi(F0!%SHE{>XmlQXBR zj2yDMzaQgsyvZgm4u2NQtcL-O(*GkLie9Jqu-&m7}mrl90&CN`9Y%PR6vD4&l0I!LroQI0Zso7dhO0cdd-q0HR~M+o60BfUR8(Yi zw9fI^;K<0v>rfr8+oAz~MXlS&qXs1i1V1BF(BXEff#1JI@S0Ci$Dr7LdOO=C2@CneFos5DknGttzf=2ZREnc6=#Mg@`&_#s#s>Hd4)h=YTJRa6uPWLeZ@ z6|(p9XWiznxtjaf@>da{I#koe_3n2J4-c!hUhI}0oScMqbUfL`;S7#j8XMoN55&U+ zEueG{4doGMG1SQUBx&ChF6+n1W2Z+${Ku3{byg#AHDWPnb6I)0vWm)wu6FvwSa%*C zp2*VD(&cd5mSldD(cnak6YVEH=_mu}J4}Iu9j3#54&xy8N7` z!)GJleNmRh8B3N6k9cSm$j5b?6npSbPfu@Z&C|HqBkI^+0sOQD-h9e(xz%T~=;Agh zq0>scno$KO(k|`l-=$8S`JV_07UJ88h6wnqwpgf5l0H&gErh z1_lN=nq5LdVsEi2@v!vHlK{zZ3dRC0EFd0Om3OUx$F^o(e!eYv{npl2gvOJ9ALHx& z{}U8aEG@qSRfYlE{_*1nfm-=+h7{x2lWWPdy}6L?ZrR4hMpi+=n>vN+y(N03 zFdrQ5KLrm3%Jk!8XR@fgT;c6oQJ{?037;}KO&sjkP>+{28PES+;3|nGXJ%)M=#rL3 zMo_vhUcglgMO3Asmgd)2|7L5fV-3NuFiA0SkI2yc@MB7f(8T^qN9VLasL5i8b{&TO|BGvUaS=&KMwj(Gg%3Fd;M{(uVw!tD zX0Xut>fy^*uK*-5xwyN3C1&xoV36GABT!6WWN=TSv%M8vzzO)Pt zNm*D}dU|?Txw%O^Jv}2)sNP7Ly99$G=-&DmB{w%g^U_LSZ-SKRDJk?jQ^mK|F4ff4 zv0VLS^b6wbf}hF3;+AD{(^FGij|G=)A;AU_853%)1YK~qz@JkgH0naX|u@WQ*c*J5Dzxw*Lw=@;hvg{Xt$ zj=fc{M#bJ=Ngf^?d~0rb!o#ET5Z=I}3 z(TjwkC{U4R&d!x*W9NVV#P`RtFv@QgW(JfTlD%$pVRL4nrKPn1Ro4Ti27pF&lz~7K z@$m3^78cNe=tFh&_3b~JWBUMP0n9G)*P`b))?Id%z=Uy@xRU$%`N8gghKdcX0@fL~ z*;`zEJz8xw`KrbLQp9R3gTlnb1oR1;wDf;nW*3n9-*o8h{R~jS-@kv~*xN?~sVXyS zNj~<|)T3mPMjo#90~}-CUg>y3_uyq9<720yoitHbb^v_>rriXM&CT6|gCts7TC)w# zEQK*3$HwLtz%vM^>!cL@-6)yF^A6wAXHDyjjE`&m@i{;EZn&ZVl)N?eu5r6xlOn_D z=%~eXi5{{Rlzb^d&5>T;z0g*NJApj6~r zMaA$wK?$$D)w04tRPImuvawUp_SL(7o1d+Vc8?DaO{c*eD-MtZ`fXP(H7>3bxBeip z!~N*^xOm9IU8b_AC~H5AGjUMU$f*4E3belK^_72`v_E`fV?#+zZF(+fs3_#y#Dw;) z;2dQvB2*f}#mgH~Q&WSzG-~luu&~Hm_C;Q-Z%Z`K5TIWvf@UsehLhD^?3|yU+q9Xy zdPNo`j~}m;*9ripERhdLW6F($+3m$9p;Dp5wl=BKS2=u0m;gQ&i#7ZObWBL{_8lfB zhW-SSuA)AJW)JStkaEq0#Kh?w<>G2j+zUHm|AqN^Ga%z-J|MsS=XdDn3XUi3b=PKR zXIB9k`@V|=D9R=vKm*u+a~Kfo2cR8aLE8D#ot&Ho1_lCwOWR9Nza+b8>3W@49<>(s~&3vy~UR7GrEB+CP&4L#vHXO;x!^WdgQIOwL2f?_Bf1 zN2=r(BhUj699GTc-#m~h36p)3bu-4f1^n#n z!9v5)ZEbC=CVJCdg&`p!%W_0Dk47U{0-)f4t^9XxPR=9uO;x*#`Itfrbll<>(~vCl z*Saf@O-)UGsRBm2ML{tSjE(gV#NVCXA3;B+ilAaCU{19M@HsF%tb3^?Dk{nz#{O& z->yKcuw|aQx+wRfb!F5@YF!<|&CTuYP#x@<1~?R&dLcf9!F=4p)I~VPtKUktQqurv zO-_d%F}ov`%{0&|_1`UU;1eMeLUf4X^=L8-#-@j1;%fccDjw9{gu#lAiDJ%dX8WdD ziCn7uNk?2zbmzIIsGS@b7r?vm{4E7JX$WiVYoU5CNWJ-%|HOkc7nqKvI8(0 zHUjqefm@xKkduW)%OIjyJc66Dm>$SeC^z9F#;57ZrIy)5oeyM{a3}bt&E8LLurhx1 zw|PKci4%p4ot;q^*L&w+@Ad2B$>T%u9zg?bbBwQBiV0otp3(%~fjpt1HUIlWf6dra Uio1^*oVh}j71ZS`WZwk;4^qVFX#fBK diff --git a/examples/resource-bar/assets/Playing Card_Clubs 08.png b/examples/resource-bar/assets/Playing Card_Clubs 08.png index 4b113cf35cdad581baf146add363195cdb755fb7..14b9b41f8941494d6b7fe171abaf840b98088684 100644 GIT binary patch delta 4244 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 literal 6176 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 J)$*2a{|Crl1nd9+ diff --git a/examples/resource-bar/assets/Playing Card_Clubs 09.png b/examples/resource-bar/assets/Playing Card_Clubs 09.png index 30ae1db2b730f30fec600913b3b969874fa7cd38..ec1ce3feb14b31cc81e845cc71e91da7ab3d7358 100644 GIT binary patch delta 4338 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 F{{S%Di;(~T diff --git a/examples/resource-bar/assets/Playing Card_Clubs 10.png b/examples/resource-bar/assets/Playing Card_Clubs 10.png index 0b8e005a5c33666ad46d024fd3fe377b77335be2..d2c845b541936a99ed097f905050616edb552cfb 100644 GIT binary patch delta 4489 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 SA&-~<0000%I5fV`E{AS%hkp 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 diff --git a/examples/resource-bar/assets/Playing Card_Clubs K.png b/examples/resource-bar/assets/Playing Card_Clubs K.png index 5c17db37cbae39cb181e448d1c568e7b6a9deff2..607eb0eb824959189b480fe82387bf0326d9d08c 100644 GIT binary patch delta 4094 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 w2~e%dRWv@qOWkV98*i_*;iE_yj)iy%p6A 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 AuK)l5 literal 4798 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 diff --git a/examples/resource-bar/assets/Playing Card_Diamond 02.png b/examples/resource-bar/assets/Playing Card_Diamond 02.png index b5c65a0b9a9abdfa8030ad09808eccacd333f489..30bc42adc061f3b5589c3bd025122e4a1e6044a4 100644 GIT binary patch delta 2176 zcmV-`2!HpV8J-c4B#|@}e+W=XL_t(|+U=c*ZxmG=$G7Fb5L+x-@QQa36eGn7rCgPp z0x=L!E{RnRD=8I3j&f-bY6&PoQ9v;vG&G>0&;weqPy{(eutGplXm@sYW{;Vl?+x2! zXLh>GZs*#a-#7UZ*zU43zt6n)e(%ln{agUxQktlMcnxt4aVs&8f7actq4?4`4_D=& zfYOcl05PCV_kQ9GRX9YWh}{?@OHEtT2pJrr?!+Dpjx9_%bPsWHr4d&v-;|b?27UYX zg`%P&ShsE+T4&R^()iLis{pDFad8zYf0&t>3AMGgfHGb+H8oPaRRB>gt}h~AOixdT zy1F`ynu)5fub1Mke}F@|xEdp0%*)HeXjvc{cLf~E#l=OwSW;4gk+MKE?g}`Ri@dKZ zFE7VPSs)sBm2oFQI6(op`D=h3JYCh^sU;vXEJodQI0TG$`eJZD@M=u6LuVo&Q{iX? zgMci6<162x8BDvm_scN)X29WBY?cMyJFNr)2ODMPOV=yjf3paqZv`BF$;PPn__tRg z9E5{#*gg1&-+Ufak@rs+poE=S={PcQza?HVTe+M(q1a-2BxD#|k+9 zT~(UCJ5YHD;g|_WxN;4c>^x21%{)37gq9o5fD^21f09z;cpTVUt>0M$0>I|K9oNM{ zZh`Z%VS>^Ig4u&HLhMxevcjSIBCm}fWbHUms=fMe{I1An>3k^MZ z@pc<9&y7qBO#Arr%o`y7d&fC&=wnZwKI5g6_ig&#u!E=YI|C-1oJ^QU4q9{u9PXW^ z_fEcBe=Y=ny`X=0Mv@Rcz_i|kh!f1Ig)^0WDYy<(=5p!a9trHj6a>8laBs6%WIlSIQALcM)jV*j}T>l%G zf5(P&uv9a`wo5gpuC4JaHv{v;P!Mn2GX10im50?AIqRArnPl9mG@17VPoA~x#JIU- z^4kL|Hbb&0CGO{_c5hw|Jg-c=+qDjxW&0azj)EiQ2d6Ir^K^mqX;^2jQR)4#Ghpe;gFTK{zOcgK$s?2ZeAD4hrEQ92CMqAsmE* zLO2Kqg>X;^2jQR)4#Ghp92CMqI4FdJa8L*bg>Vp#<)XV8A{-lv?!hB%6M69}!m*Pg zcdzpFpA5kJ5RP4>-1m+9V68nanwz(r4M$n!DqNanUyZfLwPT;OACJg#&V(cUf8NsJ zUZZp$Hmml*5&rlKm`4W2Rb4o>;Q0O02Hr7CvkadlRYEjXw1iCFH2IdvyAL=E4*$^x zZKYXOn!EQJ|8aSAEABB!D#+vrIDtdQz}>Z<_R=i%C(KFbYkukQxM*vNRRK69;LvTm zXsMOBw#k2Xq#+xS%Z`iu|8!r`f0(Vf^z+n)}-(X3G)IT?Y3_%8U`O{sXSG|nviH1$^qXjeqLq)v5dea1@zw<&Y6z185!ouat}S<+`~!RGVe z&U`H~IOKD|ljqF6pyDV~lM?eB--d4!OQXwo*!sLuWBEoDfgMv6-vqR9u3@EGyfYTZ zUyAvYiqu_Oqc^dbCx>aTf2w=yws9*K2uEeW-CuYAKy>XVEk+u;oP=;XNUw|6#SX%< z3gg%M5KjCn2kej;rj%+?!tqt?1hI{gnXX1V4^I1K{$3z2zrkLcJOqW>Epl% z$BI0f1RBtJ$#68%mP$-SQ8)#Ov5S6*6ao-78rzMf`l`dAaJlz)$~^+ z6Pf4mkuQ{%mSU7G5RJP64CUfF9{FN^em+LZ0@1iD;7~5EipUqcbm;;O4GkDA6V=$* zD8*d?hjMXEQucLOSy|EtP{xZk1R8IZ@rH77r4!dGe@IE@cIM_nadELUSfTYbjVq0> zN{fLIk8~G-M*(FMdsW_qHs6#(w#0@05du_5%wljXwTF0om`VFzLVzA2K8!)K#D|Ep zWIQ7O5dxG(JdSt+@iFB*2(6p>P<&~e$I`efS^N*#LKMz>1@4Rh0000WIDWOXUC@4)pxZi zEM9^!VxTs`w2w%&*Ey z$2zEVoZI{dVLmewpt=1u@5|RQ?O?0DpY5H;y4%FO{ZSd5&E*6xlu}F%@PH1^OiHQj z`-Bnb;sELaMTOEW)2UZDO=Tb)IJgQ7;^S3TfEKd@FmEt(jIAuZ?uv>5sOe2NOCb); zHNjgbiD!b*|Zb@5`aFP>g6^jNd_k;r-9+&__<9hV{C<`v$Lp=udlVUbE@F+ zpHv`#DW=v-z3pqj)%o|{yzYWG-Q8s#w$9gT1|dMCL#i>B>}79nUl$x;Z|C4(izR0d z{+mz#NhK2M?&&G5q%;&0JM4uuier-0)ot|-GTQE0kHt=)_A2|GDy?MfJs2So!V@UC!=(1D}r3 zhIy)p9>?^$%#CLjS|2VgCwZ5*JQRQ;wvEOntB7x=iXE|!KPWo632`<4L~o4^;U4wI zU`B-W{*_hlN|Jn=27y@1-k$90T-sWl%f? zU466J2(I1G@3E&;MDoL4Ga(cG$~|q1J}Sh)C@Z6?Eax_D2a69)-|jI?biAotzN3q| z>Khw6ZI&dtIbo=CttN7UY}53QqE&U4A@FvNce_a+AFR5-oPDY1ngU2JRK2COkBJ?n9vzYCu4b+g6T!r{uW zSI(oO?OdThr=$fwgo!&dP;#WzIx{+;;H`~Pq;jNIw-e=wJI!f(U+zei)2Pxe-?M8- zOH;J^g!uKr=Nw|_8f0yC%QuM32v+%B@k!+lDLN+AVKT9E4OKdS`KBs(3)lS0Q?IV_ zv#lp7PhG(On^Te2)&rVm$nD2er$4C!rsq4-UvL>L6qlzqJrsz%Srf0itshsX&h$sq zH+>Q%nwlgY7}vRBY487M=v$2A?#odKBv~2N=ij>6Tmw(LHDdf2$~ZQ8xOT>JfhE6U z+c52{B+!ki$caPGmXmfmnD7P@R&Em5rjbvl_dBjkaA$@k?6nHub}~7U;)N$G$tUdW zE`D0rc2Ql0=Ejk9BOf%yfhmn_J!A)nT|@!=?o8(rtF!dyczz0D_Q? zDcjX_(~VaTgb7nJ`0;YQbX1gJ2YTYiZ~BFv{TYqybWG33-ey1i_x^D6Y&OD*X-u!s ze&i&P1ydND>LK>-T=hRsx+?4M{KlZy$Itbkp_Xd#ho8H5Hwd<{kHr>$-$l~gqy9H! zrF-n*OC^;h*}c)n$eBQ4LdRxaaIjMV!6!fW(!o8#FUN(f^H|F+TY5!G zO~OT*$z2Os+>O}H@4|~&Ax{>Y1ruboOH6c|@O*Ul9G{@L-T4=Ee^setC7z8 zSbPWDVhNztw;d2k=2G1bIW08D$jFgdg?cdjWZG2H3UoP@kyPiF1%KaiRVN+o!Df##FLf5M$jQL0 z=qoNT!PT@Ym@*J%UOc5{e7z1vWY}BwHw%{uBaRA|G%XyT>57!VcbsAeL1PX z&+HF1LUQw1=S#&8n8iS$+|6DMfBhd$oKVhTP~_=@*ClKUlKnX@bm0L@j^1O@VV3I2 zP`%1cy%~HaZ&=hhw6CJ{(CLvFT0FqQ2DXX{TkrjZ%iH~DO6}q$v!gZP15AGMVc!1Y zYY9=EY*LCboVg=m>(__E6V?KI(f$?`9ViTiG199&)1VMPQ>|VK>$zu*GsIE9^IgSe zb|bpz%1+8cA)8t&lWDKz zA<=sK7;p{5tRiY`P7{44p_i?#Z}<-UIwBDjm`(;Cm0Js5?z~BVvKuA2Y?-7eCpy>5 zZ+0)((HMJhC^r8+8_yBR=KUl{gHE?BH7y%TZ2s}Q{Oa^jHxKGSSmS=@`gBWQ-NKO) zm7d(`;lc}LUY+PSnr&nRv`!CnX96JAia42NAVxJ*s7XorGhf_aNXX!%;H-0_mD>eJ z(;=jz9rP_+u|5{74PiA8&dbR*U75rCYibQ)3};IzIgY{esUjH7DvK+YMjjAtpv&_f ziQ&=M zsGUHm!IQBzspIozT6j@y0C){JIB`p8Nny-eFVoygSGQ*i(xwF|)ls5cH@Bfd1o%3o zCkZ_@y!LXN5{aBwF}Hyoxl%^%&|@P4;+kriXqRka`v5DF{k9{ajRlz^K6UVNy<$@l zrllas4CIz-ED{wG--Y=YAFqV(1GEk#vF43Kn4CMPbVI6(F#ppa{pWJW1@i8izC+m_Nl}v{U_u3eF0_1Mw=a5Y-}&7x zEvqza7}dGG8_9~O&$1608CHL?5*$L^)j$UT_#C4dR%ARKQI**G-2ypX?kkLFKh^?td#}@~%qde( zFR72=3q(*-7*O5TCUUpI&)m_5{Z&~R)5^+cXL(^MD3%1H#2|`* z+?0YMN0c(&NX5t@A_^!7F;qMX1p$>RG)jq8KrSRGhk~G@q6p%}wb#t<&TKpVvb*j~ zW@l%^+|ymv6l`|MOn>{{^y}B%F8}}mrAjhP(#4WCOL|69p44zXf0ME=+WBr(4hkq2 zNV-K*AhldSm$Zi}97#q>8YCmxsyLd4%iu`TQ_?UQ#}SGgdZxGpiX`2pd{a?T5eyhG z0II92Vd>JPqy{V6743_5Rspmv#U(IK`NNWu5@=~@0TT12xw)CyTLlnu3A~a0VsUXX zw6?aA)hv{@wl-#We+3-m5@^qUv7(}atYw3s-4$?fAOB@$oh7`;peXG^q%;d zMuJ0d2#(wz*!c~_maoaE(6)!*IBuPjEr|q(2M%YHfB7wf;}kf_KmOMC)~e=_^_>VO zeB(Gs{`n7C--&QS7gvI?Yd=}vHaLHsgz)vFG8(#ks6Ee|c%0zmwUG_pnt1F_2$xTW z;xWJ-Y~vEqO=w`{M6zA~;TfBYd?Vf<4OQ zj!4hjLHzy*!HEo>0{nB!Wf~d%m?dzM!7zkx7_IKYm)!@z@&1C7Xl#OD_kjg%8N`;o zXUYvlr)%#kaZkPCKW{Dm-Y2>NsZD!^c+DF&>-znPf5z?pbEWkFG7F4&I>c`XQTMVRX&Cz zil*NH?i~fsFY6K<{G8CT+kbF`JqIB=dA6w+pFDLILf4My8kqF+=jwYP`R{4}z`?Yq zaR0F#e=hT?4@|pwgnuqzGHb5!Pf8b^^amX7k@^4M`~~G8eEWm((^>0oL%^ifiPM|m zaN-|s>AW((X*?vuQG-1+fu;Bw0VaI=g8;F(x8aDt9*0n$JJeU^(r7Y#ZKLt~bU$;X zwUPMqQI9`!bbOO>1#fs%KxL#BqGnu^B|?y7bN*p_<{24b@m0TjO79V7Y3^6V_*T zvYlDAAZP1taFdvr$S#1e_n>Vz#yzn}zCEz80o*2@*w0a&-l80YZ=TRGwcb_b_>DDR z!D0Tv{vRQ9)i9R%=|=H195#YnP47J7Q{m?qFNm1jh-pS%hOrC9?F}%Bd`Em*CheT=hcr^xHWr367nT z_;_pX{haOtSqCeEV}oD}4a++;lT5B0#>(&sj-?*J|JBoZ%RfdxX6Xi?@8Kw`f2Zv# zdn7o@L8DeZoli>!f$;SKf@7-NtWiCkH+N0?oRhnIxE@Zv>gl}Y9}m?M95Y03^>p5R zX@|z&Tnk71?GN46(|HxUdpIz><6bzw{GK;ATen_V4&qNo367!DnnrGRL2mV18);fI z#UW73%`U_tFsbr^;6N%jyYI-Ze^s@aT=_tYP>|sE^@A1HhSo!g4#eaR#!d{9MD%?ZCB-k@8K}_I!|?VVoRHA?!}wi)H$lF`I=>}x({zAcwnSD)q5us zfxhhlM|SD(9USIfXH{2+dJT4Dc*eJIP}0@aPVUm-TR7-0#~MBaw+bb)e-j)Mfg zcNMGUu~hH~nTjd$6yT4xfA|Xy|NIJlN3*~= zI^QSr%+aV<#p-V@&(XbbIG&xDYsmRIW}NSnXL<`=Hk9?i_N2Eae7Voqlc#p+9zdRoN+&*V%@3#hKo*R2 z0+@V&Jh$1#&04A*E?H1-{xww1GvtJM?`>0SL=GZ%PPgQ!e->r4q*(oW)}1O_F&Zs{ z^FqB3;G|=2rMJnSGZ$Bac=UudQE~;G`07oa-h(69mvGdg)wlq(N(hb~Bc=9vxF=t> z_V?<5gI%wL9eXpXmYM2lIOqZ4`UjswcEaIiE`a#@%^B4j0r!3)yA5Z8^7G%&^vv`= z`>4vm6puuNe@Nvtg5yNV*9VT^*y)HUo;kQpfPLN4syB2*aBT9{2#$l{VAc&wPD!cS z3BUx07NG=(;5gMG=r@Kn>dRJ42PQZ+2&O%yn3!VU#P9EB`ez?e`t3F7~~T8D*MIC%1W}74T5%8 zz(Fp7`s^3Gb?XK@ckU!>St#x8?ab~9ILIY1Q90L@mX@*)keDwx5YXN#&l}_tD3-KE z`9maGUS1BfX3b&`D^g<>?TYqQ88MLJQ5=xqA)wxpMpfQKYP}+d-i!4g9Q delta 3687 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 FV1iokPImwR diff --git a/examples/resource-bar/assets/Playing Card_Diamond 04.png b/examples/resource-bar/assets/Playing Card_Diamond 04.png index 210b18a04d180cb281699b1776a163c94b9ad9f2..bea1b5c3e1128ef23e00977915387632b3e6c693 100644 GIT binary patch delta 2430 zcmX|@XE+-O7{^16Sdo}@Vrz|_I=zG#Rg^A!Qzul1t@a9HmNrJs+N5cj=@RBz0C$vlo?C5BEIxe*C@v_v7#Rzpc<>;m3;EFcCD5*>z(>yT}h4WjrAw_TYFe zx?37YQsSeVNH1@RGX_L(8kEi(JeW}+i&g$|TG`t8T|7J8%EAO>0y-m<{CHAvPSz1C ztCfB3PQ&c(w}ZRF;b)t4Bf>o=UCAQrin<*?y5bt#y0IUPfCOOvjr-M@mtwYc*dZ*V z9?r%}EJLFn27?W}&0FGC4gG^ZnYQFBLsfsgoPL@uUrjTQjS76(jP<#^V4T99s>yb~ z08yPnl6i!|C|tjOUGdyG%->5(PZ_oDj<3`y&Ky>^;xTt$ZFv|Ov8$-4$SL=m1_fy} zwE|^n9?p>O9x*X`Dr#ybHE?WRe!fNr9}OUGdKbNg!Q=5>bwD7+6~Nu*RQgW+o~I}7 zxxB1<1RIn_s#x3E*%`NifM0bCw&S3nCqLi>=4oo>e2zlrTDcS}YR1)6v+`>RZ>B;B zFFy9!?WE{%DVl3U-G`x$FYgbaby|~wZcwUvdFrTCTixq|CX^lAu4VKU%gh`S2^|_+) ztMvWz$TQQg@p20KU7+5>$u!u_H@BCT9}B#?GnsS=*^kPjN0b^y^}W+?oojhze%gx1)4Lh8PBb` z2T*(brYVC*KxFg)7%|GTD;<|TtD;r+g&Ax05Y}5xmr@_? zC0*v0xg%!AIq<{Qa6x^izoYklNOA?2W$6pLkNC)ykn|E^bR2Em+wynlfp*uxXrb@T zBv?m_Ys7X-e01*L>jkaOAHCxI!NcyUWx*R3noiAg11;aL=5lgKtD_7qu7@_k-8=|8 z!YtySjH|oWQMg&u_fjAAF#d9q{tG;f=#_Ke@wj)7TE{c?;s8X@XJzh8bo%8sruY3N zBSJl8bMf#an)$wU45BOO4P&fu**aWktTdbT8nx3XUX|t-DsJ4IyigR05iHS)T{w)3 zSg~dXU;5nr(;%)_D}+GD&7yZT39l`mgvkUPs_rW3OWkhlvt@}YiAXmREexY<))&Ej23vFBagL@TMdV}VPc%l6_mFb zG2x0(C&_qY^5M^Zbo>0}+L%HJlF=Qe8%}G}`XZ#hO7>(gTMK1)3s-HGdp5)&d3~!k zM&xRZ8dmAo$Y_DZw}0RSOPsN$4vfX;wU}w)FlwK+_uD_|$qbxWEzBU^zz`F8`1m}w zVb&CjabTQ|lUT0cd(W3T?5x@VSTmK#S$uqX^d~vO*;3P)(+M7_!n}@L82ePOyY1S3 zPajc!Dt}1FQlO+hF}*@`tH8CrFlseu(Ix(Kk6brjB-*wu4rtBIJp^{C*sSYZX)O&< zcz3I*(!9t|y-TV4`-RBRz!VeftY^O`d(#jP%#~Q-S1^1A=)0sE(T03t!X4`cS1quzWj{VgHwXE_m zK*37E4jqCK<3#dG3BA)bo++J|d62=5I|T|Yzad@kwv7Lj@;QO)lNDonE-m2fVtBbw z$vow7HM)i8DV%~`<54p9zU@jM$6JTH{Kk-?o#`Aabn_^W%?y|4IDzQ)W1 z5Ih$B%8FVjF%s+}Y;4U>^M+hj!C-?^PWCJn8}?s)6bIQ7z*cnc)L zKo_=e_Eu?E%{$ibZxjna#gKe5TjO|~=$L7r^w$2qr2QtjmIjN4`P>)Q`-SY^%;=|$ z@PbS&i&n6td)%pYm(E5(9f1QHnyGEAf2Z16-pc<*FEk;2l@b*QI50Ol5ulI<1XVOT zY(Q>!FF-7siI6M4qN--5^-DJ2cPqI!D0L_wfB)~OMs)fZen3vZ{(i%FCT!Gv;Y7A literal 3639 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 delta 4351 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

MNpQ;8|?`U)g zYJ@TH_;jo||7(A6cXvZl%VtnD&h}waQw)bE;{cojP!n|d$Pwq9S@ypMbM57(yT1{> z_frgjkXf&ik`j~VU91q{d;fv~u(NJTad9y|`NW=W5ia`Jym>Q4LPhG^D1co|~Hf zjwmfHMM+5sii?XQ39}JEcS0!zAtV*RSE$o5a7h@a0JNr*mNEc9DJ=!?$e9~1iK7C* zfHQgkl+v0DKq`O_0Z{ik=hp@R&Fktx=vmwC2q6SO9{}k9t^?2pKw=M)`E4Qs*ahHI h0L1`S(z6%D_zfe^T@XI(N^Cg9?

$3wQt`Z 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 diff --git a/examples/resource-bar/assets/Playing Card_Diamond 08.png b/examples/resource-bar/assets/Playing Card_Diamond 08.png index 29e69034a893578d86d00f5e855820bde91f6393..6e3a6bdc652bb0325e742447d0ba60cf1e75a6ec 100644 GIT binary patch delta 3687 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 TFLzcS00000NkvXXu0mjfwk6w` diff --git a/examples/resource-bar/assets/Playing Card_Diamond 09.png b/examples/resource-bar/assets/Playing Card_Diamond 09.png index e5e3fe67978dc1cbdb2240c656f092b0c3dbc0db..9586c0b8dfd87348c9707719249cb6d27a7848cc 100644 GIT binary patch delta 3467 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 delta 5822 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 o;}{}e4x+=P%4ko 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 Z{0lv(v|F~luNVLT002ovPDHLkV1i7Qa5w+} delta 3151 zcmV-V46yUh66Y9@Bn<>}LP=Bz2nYy#2xN$nAs2rD8FWQhbW?9;ba!ELWdL_~cP?pe zYja~^aAhuUa%Y?FJQ@H13*<>eK~#90?VW#c6xAKTKW}%FyT}itC|E2JK@dU14~ak` z^1~53BejlWEr_;`Qb&F$ii1Bupg>_P{y=`JgF3eA*p@nuowfs|BN&K4P6>j7f>=qF zqG*3XkmN4e-Pb=ZB-y(o-0kjN?#TPh>Wx|&cZL`6jf z37-2KfzbfB5p#JJ6&1-%n>I;B`YA6jmqkTIiEeSX0X*NlP}4NIdGqGh&bdudQBff^ zO^cQDyao(xem#vDGlsIVvNT-Cic?WqTFRI)V`7U3YDD`njg*v>WGpE~6AAwA#TtJx z9n7v>yJjpQMH31B?m@#-MBAq3*69$AG!_MB-h*B`u!VyZ$>K?lwR11lmK}~VbNv=2 z$0sx|2V3Ru$Ca7yRe1@iXoe>_=B5wg%Iw|yk>4Np5?0ZGYdNwuj1~GQeur&iZQbc5 zCq)CU!L=N-1v&Pf&yh!txecvoz?B?%_z3nV zpEnf*^3exh-mHR*Yho)>$CVs&lk=)EhW5u8J;YI_N8n zG0&Z?ANrDHTP0;Vv2O+Rem${2{tWx$&kz?m->jMys!8pIl%F}V{Tp*bCFX|8#C27F z#}lbtIi{IXE6m<^0D1UGsyQhdNJ)w_f5xC?7+Bjw1*ViE-8P>v0@qn!4;2VjJnEMXU8Yh+;DHxXLaScCh6OnJbnUe z$DXEwygc-w#c}oYD|#b3Gz}cJ_x}g^&3E3iY@;MC$Ev6T%WnLv5ANsabT;kK&`Yjx z6sab)JCeSwiH_~apMGcKXGe!KhWvYPMH|qk>DW$%?y_s+BrQiT9hiUgzzw}@5PI1l z*GVa&cp5|Cz_w3cN0Ab~$g!&SQ2XmSeuPpq!?PUuLk;063ozGirf&6L{K!esfM+?8 znM<$_9E|>Z;R{&1_IgfA5yg|7`Zw28|K|E;1@(j{%}@Cik0LRy<=6)f5}COqzWm=` z5_#+yPf01FxRYaAgr|QjK>kpZaCiNi>#1L})=ORrT*|3iy#}jlPm6UTvz9tufGSeQ zl^o-`(!{TBnxS7k2yyP&u98wjaV1B)q=>-0si)j8esn&;XC85#lp>1j20`A0u^2a8 z6Td^(C|EfgQP|N-UJ5)mrGrn-Ky>ZwC<{FJEA%1pUnM9~$CG~?adrm^mdye!8b%-1 zpZsZe_>!2yhc^WJu>R!VHvw@@M+#QVZWN{Pj<*TB4Fsm&i7}=Walv_hgmaDk)z@ej zc4^fd{KTLC=7x?w;4)uAxy5>~ikj;tVpspSRrBzZGvXd3j~=7;zJu@L>9l)${G1X&daHP?XQ??H#^GeR=v^U%)4A6r{&oD4iKKZ zGJc1YgzsO7{5H3T0_U!rx_W9S&37#A(j0mC2;pgqAi)B&xkAp$i7b2pd(ZwB>zEru z)II;F3}xg$IVs0{XDf9tCO2Lo^2CeIk*YaF&dHI7j}U);@OQ}{V48#{FF+nYk-ntT zL~hBElJEnIQhw0e2M!W`WZ`jy2zYhx$MM!{?0BOU}r#KiWrR z(P~dIB9AY_{;b-kjM7g|$dR>SYNsqXR&U_7k4B z%9mK_ChLFYn13&){`J548ngbDx8h#;WFuKEM;`o!@Qf$Z52e)K2}aW42zlk+pK_mcO3%_IshzqYD_2&`Iyrxl*~>FN4nQ9ImPi&hud_}LrrEa6 z+X7i9C$Q*&j1O-TozErkn<*JRXEJ1+9MQ2o!R50+&roVYP_S$k;=FS*bG{VFIynIP zkYe)h&&;si{3+wnhhLeIbEQgF%7KOf@qvlm}V*5o_%K^x{>00uB{u6&= zP8f?ZcBHQ{(?QnD0SGLdhSvQ;Ut(#!yAzy$pD(e}O-{%W?FtC4oDGJ@87qN&3Z9z_ z!Q5CYJ}2Y==mYu?c=#?)F@p1^qV>7hr;LBnPtM2z$e%RM^*V0G4cCx&$BjN`lwNX5 z4w^>6@|lQpQk$u*{kRLkryfpIQt2bN_U0}tJq_BRdbA}8el1m{jh>)pM@I(pe4@~2M7OhRcOXXOwKQ1ILw$j^UE zxLb58q+mtU8VR{b?q&{XeR>d>Jt=;N5Corn6w$d;=9BV~oR$NSf7i_z*A8`-O}qtT z^w3irkvrtP9Dv}GM-iRR1wb$EO<>kNt(=iRoDp(Fr$U0yJ{J8N;JLYwm-so9YxuIf zN;Y7ODB-MitI=Y9nk<(&Bd(m2oJoIT;0%+KEz~W2)t5OyN{-LeuUSiE@k_qU0a9{& z#Qx$dBD0nP{>%YVa{R(H2~T#eM(=eFkdosQk;N}#efX)POddTJoy+QS4v>=L1J>s4 z)UA3W@xIDkuBWpoIUbQmj!}Dm%L^dYEql$?93UmfE4B^xY3341dHOmDP;!4fB03ck zT=EzQamqURlgGOn`=I3bfHCSS@+aPsaGyS?FM)^MjmK7Ud?GOG9<+X!ILf?^$5wLu zA}^1ERdXD_j^cGZwvyu`&3_#w@AjX19*=#-d}WX=(<`!sH1NETmMSx97>K$^lJt?KAW39NLq|Tw_xI`Z|z|lmu-v1a`6OOBA?b_>D{8j7G4bdgJUrSNX9G8gpXQ22oMK9x$#M+$4wSN>`^nrYyNz8mNEUnkQnPJ4qcg zEcq)($?G`CiF>^9FG{W{hjjnqhGF>rn7$|MBG(&+Sq<1*p|_Hc0+XS z+&Icc9zKG-dq1)!?C5{@XqR?JbSg|Owy&ACQH+>Xr_6UlSX-R^8zaT529z9Mh zP5>pxH)30Dj(ugR-_k(I@r{<2qI7dh10}~dj3LE|r`>BB`mlfgu3{=Vei00yUv))X zvDUXI;_MEtLMk~vlIXePrhju1CC5h+eTAUAYz%CBL?f5Evs%TpgO=?;g$42m$55pJj}U{{#QvuY#H5zAFF#002ovPDHLkV1itz61xBZ diff --git a/examples/resource-bar/assets/Playing Card_Diamond J.png b/examples/resource-bar/assets/Playing Card_Diamond J.png index 99dbd1c53385fc16e2ff9be05f2cc2d80da41e23..45027abb55c6bf9f702b049b84164f72c47b6c07 100644 GIT binary patch delta 3083 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�pxYk;6wq*EDLkQd19q@*TyXSo)8v#Uf@ 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 diff --git a/examples/resource-bar/assets/Playing Card_Diamond K.png b/examples/resource-bar/assets/Playing Card_Diamond K.png index 38176310a741cb9016c6dd5bb5c9873ed0faa2bf..a741a984e358c080f6748c4d858ab7febe4bd56f 100644 GIT binary patch delta 4248 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 V!?Joh`n3Q6002ovPDHLkV1ma3cX$8* delta 4858 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

%NDk#(o|3m-)02y>eSad^gZEa<4bO1wgWnpw> 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Bar Frame_Shadow.png b/examples/resource-bar/assets/Bar Frame_Shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..c32155d0505e6d525eef0e5b8bf95c24caa7f4e2 GIT binary patch literal 4289 zcmV;y5I*mTP)EX>4Tx04R}tkv&MmKpe$iTg4)k4hEFskfAzR5EXHhDi*;)X)CnqU~=gfG-*gu zTpR`0f`cE6RR%KKJJsPzojkd?N82(+!JwgLr1s z(mC%F3#=?D#OK8023?T&k?XR{Z=6dG`+25dWYhD+0jVfq16NwdUuy!hpQJZB zTJ#7AZvz+C9ZlW?E_Z<8CtWfmM+(sN7mL9A8GTb87`z4g*WBLP`#607veeb`4RCM> zjFl*R-Q(TC?%w`A)9&vFa_MrX6#Z@F00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru

%NDFP&&Wl;bC02y>eSad^gZEa<4bO1wgWnpw> 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Blue bar.png b/examples/resource-bar/assets/Blue bar.png new file mode 100644 index 0000000000000000000000000000000000000000..37162d39d9857d19ee191a96571dd1bbd58b3ad0 GIT binary patch literal 2910 zcmV-k3!(IhP)EX>4Tx04R}tkv&MmKpe$iTg4)k4hEFskfAzR5EXHhDi*;)X)CnqU~=gfG-*gu zTpR`0f`cE6RR%KKJJsPzojkd?N82(+!JwgLr1s z(mC%F3#=?D#OK8023?T&k?XR{Z=6dG`+25dWYhD+0jVfq16NwdUuy!hpQJZB zTJ#7AZvz+C9ZlW?E_Z<8CtWfmM+(sN7mL9A8GTb87`z4g*WBLP`#607veeb`4RCM> zjFl*R-Q(TC?%w`A)9&vFa_MrX6#Z@F00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru

%NDIy>9MVSBq02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{00}lpL_t(|+U;H2a@;l&J+0x~Jc=W2vRlcA?Eh?4em_;3 zDB|z}lD!Wkfo@zloY;vqGEn6zn*#!kzMMYY7|HbC|NX|81`%O*I$^WhV^b8keJ}t* z9(jCZk6XYNej=&ZdlFja->k2AK10|1~pzn~x@9G{=?>8GFZ`0xMV z`239h=`jKF8ENjx-LJ3iW<=+HKyzmg{+c@Z*8cksigX8#(;I`Pe8Xn90|1!1Mtwe` z*qu%|{O}paAD?i1e#WQge_{XlXeZ{7dxzr3_Pr-neki0(9pD$)g zcHg#WUSF|$JfYa^_9zYqY>!9mPbcgjAF(?Q=XzK(aRyFH3cQDC#(PJedT>~<*j`y`Y98fVNLAdj5ga)jjZl{`Z{ z>`W{0e2Yy{pcr~!=zzWh`WEOLpx@3f5+J^cV+XjPw`7TrW@4*I2!6B4;2bFmVWq zSdf`mqv?`9tvjv5j&*oO(>@$`SvyC6KD5Bl0KFOi3>{(UfnqSg&=UG;1o*B79tr|? z026~a0j3l=^&H&OGsdVd`7C-WX02EjQ9r*Ylx{^x^`>Qz5thA501|^IQH7yX05%K6 z?50bR7aY%>#RI~5UH0_LLfFXjdH*08%%~}359ZDRb1iA7beBvtERNwhq<=0VFthM) z0x^fkPeR{t_O<))df;W6_wcfI#8sKb5Ds)`>?(Z~x?yn^s$O}k2 zLpqdyw$wa-O)OCMm{)4u={4lKYvoJR)wn(6i5S=EuC^sZfMH-uL}Zpyr1oO5K6^b} z-xvJ-m$Onlf5qhBg|ZPzJI>6Gk{7e745=*~^SiX(wC_3pN762Fz36qdZd3DpTp;De zq;SAre_ex$;UzBRA1OJmmA)|<5@mM8PXfPF32UiTik+MmaYbUOFK=%MUCA&Ppsz>5 zKD0nFOf4F7A#^37-4bX3hAnJ188bP1@{0{;CPt*0xhgwp%7`qENRIK%i8Np^LV;?I zE80j@H{&|&$QfuffnY$h{0yBn-K}aMliLyxbaa?spBq76<@yBnrlTq(SiJ9p?1iMHlTfm;XhM*v0vzjP%jQ|= zk>ImjQK-wR-hVd7pZV zZHjU6)dq9Or)Yr*uIUTtAac8gY*_ckq%vtGU!aA`g^>DD2Q7hLyDaS;u1f+wIQf30 z5>R~$x^fm@kJs6YlZPYk_*^o@HYvh-efyH@fKY7zCEsDCTUj}u}PaI?w0NSw|`E-#+;~grRXKD;3u~y za-`H0y+qM%0aep@_XHl!Ic6K?a+MHlERm~@WfPpm!@#k`n%@1P2=Fj2$YF|Yb$R!5 zPwx8m4Ms>IOyElxVA0G?z0Tik+SO zu-RrO%K?_pdyhKIN&UMVLvKcqFJI7H&S^2p=P zK)!D)G?z2#KYvG4z5vYQuNrRO#@{>Kn;NEi#b$fRAfHDbdE{|#AaCliGgH1;T(|#e zNc;AJwmhTQpRn2P@$gV&t>uwN9(mjg$PXQQ)1Yfg^{u`C1D#X^We1h>JOBUy07*qo IM6N<$g7sR6M*si- literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Energy Bar.png b/examples/resource-bar/assets/Energy Bar.png new file mode 100644 index 0000000000000000000000000000000000000000..a98f6a81e49ff9afafacfdd661b55e85b36aa7ab GIT binary patch literal 3086 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Health Bar Box2.png b/examples/resource-bar/assets/Health Bar Box2.png new file mode 100644 index 0000000000000000000000000000000000000000..e02e8033917d6f3c47c281eff86506bb9d0ecda3 GIT binary patch literal 2983 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Health Bar2.png b/examples/resource-bar/assets/Health Bar2.png new file mode 100644 index 0000000000000000000000000000000000000000..18a7e8e70b4097ff91b53014cef538470fd7d94a GIT binary patch literal 2845 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", + "0" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "UnitObject.Variable(__ResourceBar.UnitID)", + ">", + "Object.Behavior::PropertyMaxQuantity()" + ] + } + ], + "actions": [ + { + "type": { + "value": "Delete" + }, + "parameters": [ + "UnitObject", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "If no max value, delete objects greater than current value", + "comment2": "" + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ @@ -15150,7 +17988,7 @@ }, "parameters": [ "Object.Behavior::PropertyMaxQuantity()", - "!=", + "=", "0" ] }, @@ -15161,7 +17999,7 @@ "parameters": [ "UnitObject.Variable(__ResourceBar.UnitID)", ">", - "Object.Behavior::PropertyMaxQuantity()" + "Object.Behavior::PropertyCurrentQuantity()" ] } ], @@ -15185,7 +18023,7 @@ "colorG": 176, "colorR": 74, "creationTime": 0, - "name": "Update non-empty units", + "name": "Update actives units", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ @@ -15204,15 +18042,6 @@ } ], "actions": [ - { - "type": { - "value": "ChangeColor" - }, - "parameters": [ - "UnitObject", - "Object.Behavior::PropertyActiveUnitColorTint()" - ] - }, { "type": { "value": "Opacity" @@ -15233,6 +18062,59 @@ "Object.Behavior::PropertyActiveUnitAnimationNumber()" ] } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Color tint", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Only apply color if it has changed from default value", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareStrings" + }, + "parameters": [ + "Object.Behavior::PropertyActiveUnitColorTint()", + "!=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeColor" + }, + "parameters": [ + "UnitObject", + "Object.Behavior::PropertyActiveUnitColorTint()" + ] + } + ] + } + ], + "parameters": [] + } ] } ], @@ -15452,8 +18334,8 @@ "parameters": [ "Object", "Behavior", - "GetArgumentAsString(\"ColorTint\")", - "" + "=", + "GetArgumentAsString(\"ColorTint\")" ] } ] @@ -15473,7 +18355,7 @@ }, { "description": "Color tint", - "longDescription": "Use \"white\" to remove all color tint", + "longDescription": "Use white (\"255;255;255\") to remove all color tint", "name": "ColorTint", "type": "color" } @@ -15498,8 +18380,8 @@ "parameters": [ "Object", "Behavior", - "GetArgumentAsString(\"ColorTint\")", - "" + "=", + "GetArgumentAsString(\"ColorTint\")" ] } ] @@ -15519,7 +18401,7 @@ }, { "description": "Color tint", - "longDescription": "Use \"white\" to remove all color tint", + "longDescription": "Use white (\"255;255;255\") to remove all color tint", "name": "ColorTint", "type": "color" } @@ -15666,7 +18548,8 @@ { "description": "Change maximum units that can be displayed.", "fullName": "Maximum units", - "functionType": "Action", + "functionType": "ActionWithOperator", + "getterName": "MaxQuantity", "name": "SetMaxQuantity", "sentence": "Change maximum units of _PARAM0_ to _PARAM2_", "events": [ @@ -15717,6 +18600,19 @@ "name": "SetCurrentQuantity", "sentence": "Change the unit quantity of _PARAM0_ to _PARAM2_", "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Prevent values less than 0", + "comment2": "" + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], @@ -15729,89 +18625,40 @@ "Object", "Behavior", "=", - "min(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyMaxQuantity())" + "max(0,GetArgumentAsNumber(\"Value\"))" ] } ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", - "type": "behavior" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Prevent values more than max (when max is non-zero)", + "comment2": "" }, - { - "description": "Current units", - "name": "Value", - "supplementaryInformation": "Sprite", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Increase the current quantity of units.", - "fullName": "Increase quantity", - "functionType": "Action", - "name": "IncreaseQuantity", - "sentence": "Increase the quantity of _PARAM0_ by _PARAM2_", - "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "conditions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::MaxQuantity" }, "parameters": [ "Object", "Behavior", - "=", - "min(Object.Behavior::PropertyMaxQuantity(), Object.Behavior::PropertyCurrentQuantity() + GetArgumentAsNumber(\"Value\"))" + ">", + "0", + "" ] } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", - "type": "behavior" - }, - { - "description": "Value", - "name": "Value", - "supplementaryInformation": "Sprite", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Decrease the current quantity of units.", - "fullName": "Decrease quantity", - "functionType": "Action", - "name": "DecreaseQuantity", - "sentence": "Decrease the quantity of _PARAM0_ by _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + ], "actions": [ { "type": { @@ -15821,7 +18668,7 @@ "Object", "Behavior", "=", - "max(0,Object.Behavior::PropertyCurrentQuantity() - GetArgumentAsNumber(\"Value\"))" + "clamp(GetArgumentAsNumber(\"Value\"), 0, Object.Behavior::PropertyMaxQuantity())" ] } ] @@ -15840,7 +18687,7 @@ "type": "behavior" }, { - "description": "Value", + "description": "Current units", "name": "Value", "supplementaryInformation": "Sprite", "type": "expression" @@ -16011,7 +18858,7 @@ "name": "ActiveUnitOpacity" }, { - "value": "255;255;255", + "value": "", "type": "Color", "label": "Color tint of active units", "description": "", @@ -16080,11 +18927,11 @@ "objectGroups": [] }, { - "description": "Display a tiled resource bar.", - "fullName": "Draw a resource bar (tiled sprite)", + "description": "Draw a resource bar using a tiled sprite.", + "fullName": "Draw resource bar (tiled sprite)", "functionType": "Action", "name": "DrawResourceBar", - "sentence": "Display resource bar using _PARAM0_", + "sentence": "Draw a tiled resource bar using _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -16119,58 +18966,12 @@ ], "objectGroups": [] }, - { - "description": "Change the quantity of a tiled resource bar.", - "fullName": "Quantity", - "functionType": "Action", - "name": "SetQuantity", - "sentence": "Change the quantity of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyCurrentQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "max(0,GetArgumentAsNumber(\"Value\"))" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "TiledSpriteObject::TiledSprite", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", - "type": "behavior" - }, - { - "description": "Value", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, { "description": "Change the quantity of a tiled resource bar.", "fullName": "Quantity", "functionType": "ActionWithOperator", "getterName": "Quantity", - "name": "SetQuantityOp", + "name": "SetQuantity", "sentence": "Change the quantity of _PARAM0_ to _PARAM2_", "events": [ { @@ -16279,58 +19080,12 @@ ], "objectGroups": [] }, - { - "description": "Change the maximum quantity of a tiled resource bar.", - "fullName": "Maximum quantity", - "functionType": "Action", - "name": "SetMaxQuantity", - "sentence": "Change the maximum quantity of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyMaxQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "max(0,GetArgumentAsNumber(\"Value\"))" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "TiledSpriteObject::TiledSprite", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", - "type": "behavior" - }, - { - "description": "Value", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, { "description": "Change the maximum quantity of a tiled resource bar.", "fullName": "Maximum quantity", "functionType": "ActionWithOperator", "getterName": "MaxQuantity", - "name": "SetMaxQuantityOp", + "name": "SetMaxQuantity", "sentence": "Change the maximum quantity of _PARAM0_ to _PARAM2_", "events": [ { From bf61d83dc6f825f053ddfedf47be00ab5615cc87 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 28 Nov 2022 01:28:11 +0000 Subject: [PATCH 23/98] Optimised images with calibre/image-actions --- .../assets/Bar Frame_No Shadow.png | Bin 3993 -> 3164 bytes .../resource-bar/assets/Bar Frame_Shadow.png | Bin 4289 -> 3489 bytes examples/resource-bar/assets/Blue bar.png | Bin 2910 -> 2508 bytes examples/resource-bar/assets/Energy Bar.png | Bin 3086 -> 263 bytes .../resource-bar/assets/Health Bar Box2.png | Bin 2983 -> 246 bytes examples/resource-bar/assets/Health Bar2.png | Bin 2845 -> 134 bytes examples/resource-bar/assets/Heart-1-0.png | Bin 375 -> 259 bytes examples/resource-bar/assets/Heart-1-2.png | Bin 375 -> 259 bytes 8 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/resource-bar/assets/Bar Frame_No Shadow.png b/examples/resource-bar/assets/Bar Frame_No Shadow.png index dde997f1389a52276328c6e919697df147d7b37f..cae05f6e7806ec777409d4e7c147563576719baa 100644 GIT binary patch delta 3160 zcmXw*c{J4h7sq+XsH{;KTT-bk51QYxoOhhMH6KKwxb@`&Ar&zjtl(` zcDD3PQ8qRnz8i)xGhfP57TM=yk6`z?*|U#*Ueq+HJ)_#)L9%pB~J!v3zaRcQDyH zGNW^>Gp-H&;hmUST`c05Jj)2C^)M^@!DDl*3qO04r5-`iQk()Vml}V8qXw(O)Xc;) z@FO=IZ;0Hnp!S&-WBQs<4kq_* ziBVPVya2`f;p>WRE>l1Kw z7qp5q8#CFhJ`DsO(LNfTN5~SsNFCOkXR8AE5X9+4u`q{{a>-bXz>9sB83Ll_yRwNqj%oXcwglX`Dz`VvQw*58F6G6~R83A+|rK4Gl=Qfyx{& zdZ3uY%e)KcIYitf%Y+;}#J69`ZDUXc9H+l+N=j;6ajzX^JFJ|os$?z-Sv zW1X)yzRp(x&o_VWZZ7Vx&@6$Q?0%R$m&(^k-FyNvk`9fAumD#sVuVnOY4?xg98rXc<;o*B3hgLbOM0|L(ZO4 z)Ctl4p~9qm&6n}i*2y$>~cRcY|vZP0~jLzhh zR(GsMgO8iWM9ulwWoyaqM!onRCqCE69prIty`9iZX-0exgrc5w1By+t97AZYlm?zp z+&L!+UrhVMk7A`7IWGhdUM}L7Z-q%OXQJ93bTI7EK|Xk5HgPIWvD9r5dx^}QVaKu2 zIYNuZMh8BasX0R>*Gh?fBzT5sd=Y@$z8;N=U7cT98Mrq!8vja=>5F6;qx}kO9lp_@ z`CqIrQmx$XBvH3vqX+Y>zp34uR~gTIWWB$qynZQ7sa6D{e zOyk*NpS&1f^*jlyf%GM4;RjCmT}9+$aY5e|e81#6-G(}L#KMAWZp4gb<~(PPve zdXYSBld51&gH}vh%AKm5s9AO?gz4NSorXgeA)^ytf@xP}2}YUi!`V}4)S=Rwguexh zU`K#yw$Qb4+KFei8Xh{Xx8r=-bAU8IJlrsh3aWaV(%g zS5y?RCrzch*Z%#rB_}t*gmU2RR~`T^rp*9{l^{O2Zm;nnBy-~>h*wTduJFks7e&dn zjk(s*vSatdLOx4B+aKWX*hf(LS!%5!{_4%*xj$MJUI%(_(v?T{JT)2sA2&`d84f7U zBBe(wV5Ch5Q-RgSe6stNUS|iT4e0BxUQ^OYooAQ!4wY+^MPT*bIhqeg5p)-lf6~-+ zmfTCUgY~fC2@c%Vf_s9caY&AY*7RFPDY!ah52l}l0ZtagmamOpRwx}c*BIJy{E>O=TTS*_avC%!1Z3zXp zHfxAVWi2GAZZvA4$fs_Y-jUkOlgOs6{1{(N4f1l+0CZZF69JL%49IWelzhylyrS`# zq(Va+nl7~j7H^#pp|0b*AQ*&Dl8oBPE!nx1&BM*_d(?@g-mMezHg=hYlW1XdFyj|O z8%ozf`MilnHkApkv5OVuJVp(}NpY3ohv&{6n_+&}ORb||>lLLntLMb%z|EnSsPD@N zIiTl^JJjw?NSNe9hu~UuLW6I8&A`vCzlc~1i;v6=ZHnyB7#11;J(wCO>SE+CZywtk zFaJex9<9GE0*NGDGF0Kw@9{*5Df3C@@WQJ|>ZOw$lTk9kTX#WH(~hw08JC{BkQLD` zHjWoBjK$oFOvHQV((J`k`}8%@A(9@0K%6}mZ$eb*Olij@X%bM7kS_HycTo65SI?V| zRh4QNt3`^I+@H9wCc7(~MKmiw*rl?U%Wj1_;qKXOPp0prEPtIV6<5J;KHM1_y{IVAbh4e8Ofz&gv zpL1isM^?K;F%>qd%Jc6VnyiVxn|&n^Ec4;p$a7h@jA~W!)Kc~#W|5Sm6NlQ`Sk&z| zb>ktgdaH0UUoVb-cs1|pR`Np?csEVdYPj)4&QR+jtM_{GxKq+;GR+BZGTT^`DJabBY^2Vzj?9KjOI5@1>&^#s!75 zUKd;di+;9sEKIy9{yHWP^JUtRczV$m&bnP-T(a|utT0PGmM~{j!mNclbGeAnZA!>% z9l5ur25p^MKcBCyG-fURjoF8$R u=J31EX>4Tx04R}tkv&MmKpe$iTg4)k4hEFs zkfAzR5EXHhDi*;)X)CnqU~=gfG-*guTpR`0f`cE6RR+H7*Gl(1AHR!9McVpc!PLm)6zNb6AP>?Da7Z*;|5)j_>t?f%Ws@Z4*Pkg zU}V$t!~(Hc>SDQzS=msDr-`GAs!_f_=d!|ii?dp-v-Umt3qu8MCBt=^BS>HgNu(e` zMjaJYVIfAVMt_QlH0{Sd{1L~WB9~0A3K%&SP=gA|@q_=t?{3ZF)TEmfiUYkbw*4^* z^z8zzhHZZz+ji>&2s{H2jwO{cYp` z000JJOGiWi{{a60|De66laV18e*gz`Nliru

%NDk#(o|3m-)02y>eSad^gZEa<4 zbO1wgWnpw>WFU8GbZ8()Nlj2!fese{01a_TL_t(|+U;G-k|j40J<3$wN4LiwV;eKz za1aC#YzTrq!IqVOfDNBue~N#B4L`t&JwHIO0<*yoc#O@&;9c1mfcTYVAFQf4cM_I&-n zy?;sxF{M)O@pbL>{Jo|gD*@7L3>#cUH46V`2?>{#yH`g~G%kAtG zyeT`DI@O1d2+0*Cbkhr%76_dbAywJM#_Ma9FeM;})Osdze+V*{zm`91GaY+0t+MFv z7*q8+MIt1|+$QAuc;?JUjPRa;ln`QsXNCiC2(sv<81F9+?^;%n2ni8~F(4(tGa;tz z7{r*sOp7l*Q)nDbvL^G#N7V54d(st{0OOfbOw9&us2hSjK7(>>X&3c%O zMtg%X2%K{`f7`6CwNCT!Y<|oqI#Q@U#3tu3cwV$_Z6jK%-+KeGD1j2ALRJqIR^ldiL4;G0cV>PUVG#1S-3SPG*%(>A*6HEg*XC~ms5;cIVFq; z;~rxWe;meuAoJX-a}KM)W4-biJY!gGz`iIy`$~jJ$oDIsQ36B)qJ(-siLpjfu~Dw< zJWKVkTjdx$WAKc7=Nr6s|8=al=lQ%aB7_l02_gX!Mnnna-f8mWBw`n&mf0$`lD1h7 zINPkSU9YfN4;a>4Y|meXA66jtMX97d%=%pMnM!Y-tRc?>$5eOxym+-2jl!XasKGDhq%}sN)$My)zk@C4OvF( z&9=&jh(N@EbNRF5ZizGHbg2&`rGzgYeTv*o+r_WLcPPOPwnAL|-YO%R^2pR%vDn%8bFJl&xH^8D#a`>uaCQ^InG%v&Tqw~`7sJ*rZHw~t!f1^i` zZtO@}9w9iD=KB9!U(Qs9w(+RElyKA73D-5uHSKn#;H7qJ9cFD#z$n>)Fy2p#ckg+Y zeK5{X<5}PBN4)pTpW~IY4c>m^)tRAg?SyYFH`Pv~{CmCfINz@Em%l$mO37WqaEdVA z4Th6II^V9bUin#{5_Me^v@{~4e+_H2Bh+9p7z}qCOC#s{G#F{X6uXfN*Nqr37z_r( z-9`WYZ~JX(7@;{X?VO1zJ>R7S3^F@4nB9J@3$7YzC!C){LPRnQjn9b3cEr~Lnh}rDFf2G-o27|$1 zxZ7xF^$(s))(J~SqfFXi-(75m!(cENPRC$0EAg_g6AhP*Mx17S=Ji>~Qd95P~2zGSN1tB6nBhLCvT4oHzX{a%ttSycy@W&-rFGz%v=|C&oKD zhru)Mop0*Ye~Y%Rwas&Dli)o=Bx3N4H@^K{Jow(bi!c6^BAg?nG#75RPShC)0a8MY zl4qI62ni#?xW^a-hcO@&l46`1wHiFuE01rz^&Jp#UU5+Z!g#=8e~EE_iQRt0<^F(+ z-2uD(ScRg5<{NOn&4O12R;PZXi4`B9ybMSrufBPXvTbEDqz;xcN*eAxeNqs4^N4x!nCB;4n^0ytEJ3YVf(NVGZ^J zTxl~A1J32oj=Lq!l+#%#I;@&{N#<;SiQR68i`@ZFp6+lML)U()vek!D<-ms{o}=k6wQ5U4do?Ud36K~u2C3G(RlMp|G{!4R7Iu)y zVy7;exo-dSRyp!^hg_|@TI?Dn#i^Y-_1@S0e@IgG9$KaD&u^7NAGW25mHPkEJ|`-} zF~|`o?Y+2oN&UTBPOduUh~ON7nL(VDwdO&?m=`vSF&h?<>I8(w8*JO$m(dQypw2rr z&TofvsE zZGWHko63zO>}k0H_2l$FrtA%^hDqVI4sFVEse?`G zT4(uO?fbBEUHWk@{i{lASkAM`;9MyubX}^* zc1lRagUU<8^P;lqxs|v^Sz3j0&cT=VB%0?0OZs#6AhjNa%D(L*>La|RdgNTEJ8EOk z+r-n&9b|PU#}byV%BOl?F(w>hIBJW^qFu|T^?uqqv^uFCnsI)+oTmhYm~vl$BZQcM z6pIs>a?C+gLM`0l+8`4#4g(g2}in%oad1;*$Z~LHy69zzIye>``zXJx_Vyh4qzfYc=LYk(|F$jAL0du iEoNdc7z{52KKMU?iP;4-SdLx*0000202&p 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

%NDFP&&Wl;bC02y>eSad^gZEa<4 zbO1wgWnpw>WFU8GbZ8()Nlj2!fese{01lZ+L_t(|+U;GDq z24rg(1~OeRj624alU{%e51`9F%3kyUTzCOa+<5_v3rJkF!q{0Pjg}pzf4izOJc2`n zM|oytb@%>t?{xWR)>d7WKM~=dXZlb41so%s_}}4hI2`ATa>sW7KwK~&0RXkn;D*KF za5x;zi0EHFWn7{$Bx+2!{m$)=+^{$tXNz#kBXyjeLCF9FKx&_2j7wRHR0zP&0`T!$ zq2|k9j0nD?&p~*L?ek;Hf7E$@9EVEfVE{Vo3d z!w-=&!QVMb@t=!}5?DZ4^ zLJ0jD`@4SEbM!JjEd(5{&4=r?Og$DtKx9HGfaKiIpL46{Yh5<$e-+SV$4s3|=lzND zjsnRAo7I24WhgDX|d0I|8e}7u10BQwVvb2u#2UL}cXUDi5)4HkbY#nkg2mv4p2&KJDh-T+x z>?GH7TAi2!m;#AZDpNyeC@H*QQa zv3RGvRsC)or=+Ndq?M*dycMDtFF>!$IZr$>0R2T6LVYRDt-e(jYZUAIF-*#>^{vNh zJ7*7oDLc11^@o!PB{U@shZi(05PndU(q)&8*Jzcr6d;N8dKL;uGL^rUKWQ@^dqh^5 z^n1>wd#xfFf0A=;6KZ`TbLAsv#K=G?NI4@iBLLVZS@d$8_qT_4Eh|Zeq>TNTPzn&4 zkV|zOaxP$|#TTP<{_S&qz1>ghuX1FfiBl&FbypE-yY;%INOmb&nZNIc$RG+BQ`MQx zdayQRw0uO9{^I$IVoZV%0xmbJTdmtP{F@$&g^m<%e;&e92pA$ST1VSR>ov^1iQJS# ziBl5PgOjGPlJi7S0U$L4N<>}oL_lN)4O7L*xgd%3a+2i!04+hwv5HM0fSC}P5Mlsv zZ0#hJVjfIMz0M-Jm7gK4yb&@{AS)NEgg|{+XeuN!V>Jv2MBq4pU+9?G)>*E znH!UN+Rt)wTS_nl;AS_Xl!77h{4mc0TN|km0EisOOi~+oxmn@+?|m={=ca_`E~I&g z8UoEiC;{5bE9a`bl18L)hcOBEV?vT??l**hf7KANUPTO%F|0P=*d7j!ohXr1@7F%F zB#0zrN&SA3bC1NbQNHSYOZU*N@(htNM8>nL4Zi>UU92yz>Un8IN+VDTL=q&8$dcN< z%fStFZoWJ_b zOI&aFEs8v(?bJzF4OK?#%|(|H5rK$-5bEcQyCu$))1^L?QVPC!^%=Ii5zN$$im?-R z`pKkE<#?P$2uLkb8I$1UfBzbv{^s*4e=L*Rv!R>{&E`z!ol;93Ox+_eVca}SQ;W~d z!_W{@Q#Gm}^D-tOzd5GfKx(NR4RdYSYh}SqSPv1K)&F3KTs?U?C{1Z8A{Dj`d2`Nv zyq!%AbW`8jwO&OG%+0f5L_W0BK76)J$*modks3GJHjzWSmGMd5wM896WL$1me^?I@ zLyU+_V5Ui~Hc7^IKRWMc#{2)>?40vQ;{5gXw%2{0YV0YoQ2WD{I`y?(^F9~lOl5D+ zv+wpHGG4s@yc?2~1Yxtfb$s63s2mAcS{{9fj935r2LJY-|Ak+E@)Ey#`8y2E_aBXM z^eueti7&<8xlGFl^QM+#5!f2se>E7SkA6Y9v!iQy1mvN#F#j#g%Q=*xZ9FQklshL5 zgjvIaX?JJ^FST3iFlloEMyU>l^L}2u$H!x$&-!*Z;-`P}SNPuL1|Pil&cu-4 zHG(dl8mdOUQ>%VouOhB4*7%QKy+kP`+`w^;aNZq`vp~7JSYy44lRhmvf6)ap>07$3 z)5(UU8oD_g4u|9EV`=2yZF6T%8kK^>a5}|pBOV+Mhr{u7F@OKtexrLwDjL~n=TR=@ zahGavI2;bggQHJYr8?rw+J{q!r*2dVuwD&)>46Y@O-YBt;W#H~_XkrQrM5I*=3Yic z4aj;GF`8j`4u`|xI4`3De_%34EULw%J4YZtz>QBgx8 zY3x1!4u`|xI6vqJU`b;)FkjxNG$XRxCm;Fca5x-i9L_i?1xkDLAI+o;f~n^6eJk|x&5 zBNm6l;W(cN#lG{iq~0}hSERCFRM3~auQ&I3Dh`Lkah`^y{;!)h-j%F68L0rZPsQ#T z;BYt`j`M-tlScbgf4)+rqSk4*AN!7FZd4o&hvWQ=if$3T+mH9kTAf&?rG6&K_u9kQ z;cz${PY->E&s=vIwf5oOkxBqSH2vAz1yeZ|A9enQcWK z4u`|>_Ck7OV)nPc$KF~IKmzc40ROHx0MOQWIeg#k6W-kHe>D6l0RdlY^XYG*i{_gO zpvnW5S5Dloe2eY-Mnv5d%Q-(A&UFuSf7Z{B_jlj9!ke32@0{0u_S}q%=??h?fY;5A z6g4Wd8y;HBEe$p%!LzFk{^HMmgrEG$i+*Ej3s2gJMt{?({A%Uwc}r1I55=$$8!9=i}i$0k&Gl6V@lYKe+k#yJ;o$RNl=VTw9Tc-Jv4cc z`HYe4rf^LzR{qMHbN=w0Z&m{$lkaol#CDvrA&oitsBh@hybM^XQ{LFbB3f5Y20BAaRA4mMr${3@cN6-@%qgcW0J|tQoaA7?daudnUQJoune-)e}ptYHm~e*;2mGZ6zJ)Xy1rOPndE6J;4zre0Dx z+udNh-Qs$?$Llv+?8h`~KXuvaL#uLNBM+4YLg;cJ;#!~fzjOZZoD(yMcv81C?w$81 z&bu0#QVPC!^;tKX3&x}@1zoyS%N2lEfB)0J#$W#ULtLzfKH24BJ={9sMLih1_P#x) ze?!vryPl)zHMNRMLzgw|Dg}_7F(&EWfK|-yl^ElerIL~4VDZZ=8oDhbKAtbAyvE^QF|el(?fA6Dt-=Ub)GhjD2LpZ>nI&yC7(Omf7Dy%#qxYkqIb$*E(3 z2q6%d8N^kYdmc88b>X?3tKkvpPC_!?f23{mybL=~gl68YbN(=#E2knEk=qLf1a97V zAnq@Jgy6hCv1fgL-py|8du-k8M*Qn9KEXfy)4u?~4*VcF$oh15v1zt2fgL8)T!5GThqe+sgx zx@@8&OOoUaNx6Gtw(i{%Y0pDdkfE1l6TgWdn_3Nr2SV#$Q=&^9fYR5RtLHlB z563wGtRkbdl#CDoAs~tL7jKg4f81%hOCu2H{q29&=kNItaNDkrGLKfG31I{Pw!0Cr zZ5_GYjXhMHTgSWRLTcHi@X_zq>e^hbT~b+dgcRbWA^LA6tbi9@emyr>3M5aDStXz3 zerHNb%>%1T|MQ|U>$#m+qfAzzLI{YhJ%y$@$(DYdJZRPFy4^z7uE*aaZkAy|{J7z_V_RafO-;kD$?5LZVqmb-a$va}1P(TfH)W_3eH;B7eH{H< zGI@Nk?f41U^?&{hJo)Fp!O-b5@bsCvUypyzU70whm{<6W{F!ygd82Y^VQ~$#mLE{w z@=R@4vsUzN^l$WW^z*>zbNJOBogZI3^~R^x5rK4h^$|zK#BkK8}8lzK;H$!yoJM zw;cScKXT#g&cg9aZFr^aSy*(jGKe`{-ef#qzREF^&wF{J_oH8Cp$GJB^l$t|kA9B6 zj{cs*|9{HjkM{VR4u0jwzX-VD_+`Q3Rn7A(xDqieEY=_Y+hpfjY;>^R`QPppefya2 z-{|A$=jiL`@42nT5i-nt@dsWe7HgaHmH3=aB*kv`*0zO= zm4uwz8Z8)Vomi`XvHAm+yNTEu`Ta}2Z=-*YTv+hG$#L}Bsygp!tRnFR zd>$<|XNYSh;3DJ`B3@dQN058nQuHj%4at$|XT=4L&Oxe+pE*@8AZwE8WkvCvikmcV zibj}OuDAw0yIjwsJ#>~TEmgaG580Zi#@wifs;5<4Vf3^Ye)4?(UWVb17JNUS_kVqT z8nz7kCV$7XCHVdEY1ngW4i27OfYC3O;OIpUp8vPd0D4GzE`Khw>vj9$_htXS%s!9a z2hXE>=-tzEK*=TeEZ0;v=BQhz#^kurUE}LH&dQnc18ol}N9vhnV{ZDMl^Gt)oXUOS zwL#+xV~u5PzB&$s;Y^WHnf+7UsZQ%@AUf8*9c^G)gGGS z>$xf$xKGbDufOD(O`|*i{`)ku2%7nYn4j@{i&(y;i>n>~MjzjEYQE#^cl!RGyM2EN z9vGj7$0p|?|JOw*%rC>?&pdD%0>+xqfz$A>_}Pbp&l&+lxQ?#xtZkCd!GFEK$7zZV z=vt?@-f48-IgQ|+o(;;HU~ezSU~O;BSg;M)8~=p9Vzv1@(kE3wdudIzRXv zoE7d5>le{^VSExJ*wdu@K#5KG4Dx71oQ5@$xHP8Iq_Jn=@xxvQ zJPA2=gYZtcbf|8^eL(6GQh!fEG--{E!C*3_mIc1x3msLD-zeF zM4{%eAC$sxdq}EQBTH*rX}4-^CLf}GwCQAiS>leSARp{R`L(ZwVb!A z`LS?@LGmvegXT5XpgQR0bNF-5_wOY*;QKiG`2*uKfc~Dl^@$SPTbhQQZ_UHLKP|$+ z(@QY?uT>a14?cu)4eo{JUH5ZQ`V6u6*`CKyWcLYjc9dT+mOEEZntX(DO)-|AX}@52 zjMrC8eSR;_IekoSUw<*NM?$k+B=kpU>Nn|#>F+sH-%Z@gS}aPM6iS}D+;#6v{g3Y} zvh}Cedbg)Ken`x7s`j}#6p4B-a=J>LFR#(!uXtZPpH0&v+L}d*86x>;wUhczU_x*(*fn;tE}-6J!wW`F&!`+r}BLp9+8px^_q zhw8yqbRoU#ewNT#2NDXM81%WkuTW>=Nijq(FA=^g)X6=$7NlGVYC#Ul8UC~I{F<`1 zM)Q`>KU7!irh7DNr03Dv0=<{^^m40%Tx&0<0?D(W;a{#zC|6Bxbe~#RjgMETY3i-< zd=`Q{RsQNiI)A$m)0vQYsYlNa)eSlfxK*`TQ?$v}q10E`@epY-oRzvVLor>F*mb5) zOwO`yL|nVEb1^|M~KJs~_Mo)>>t)tzg2ug%v>xsT*gO~+Y&HX+Yh zy3UL9T}{Zb%EzPo^Ra!Nxkmr2e07ceswVJAa?4j!?lIKL@tcpu^y2+Xd#>rc>Z*n( zkDmu6W`92G`8qwRdaN?Jn0jB;^rmXkil@Buj6Koo)61aElzCM3bs1~d^ddiN;+E$# zU-g)pJf?(1`hPe2IQlvII{JI=y1Rz_ukwfsnwo$n4@z*;q z@GrpqN6*5x^1OwGg@r|*0DT+%8+{!89DN=Ay<_r$(WCR@SNtspreNzcGZq#W78ZR1 z^gM0!Z}joN;3bpq!2fEGzv0}l{RrInV9CP5!os3YfWD3XjXq9&{r}T`O}@}(ebN8` N002ovPDHLkV1i7%J)8gl delta 2885 zcmV-L3%c~o6W$h(BYy#eX+uL$Nkc;*aB^>EX>4Tx04R}tkv&MmKpe$iTg4)k4hEFs zkfAzR5EXHhDi*;)X)CnqU~=gfG-*guTpR`0f`cE6RR+H7*Gl(1AHR!9McVpc!PLm)6zNb6AP>?Da7Z*;|5)j_>t?f%Ws@Z4*Pkg zU}V$t!~(Hc>SDQzS=msDr-`GAs!_f_=d!|ii?dp-v-Umt3qu8MCBt=^BS>HgNu(e` zMjaJYVIfAVMt_QlH0{Sd{1L~WB9~0A3K%&SP=gA|@q_=t?{3ZF)TEmfiUYkbw*4^* z^z8zzhHZZz+ji>&2s{H2jwO{cYp` z000JJOGiWi{{a60|De66laV18e*gz`Nliru

%NDIy>9MVSBq02y>eSad^gZEa<4 zbO1wgWnpw>WFU8GbZ8()Nlj2!fese{00}lpL_t(|+U;H2a@;l&J+0x~Jc=W2vRlcA z?Eh?4em_;3DB|z}lD!Wkfo@zloY;vqGEn6zn*#!kzMMYY7|HbC|NX|8e+Cg@cRFFS z+hbD{xP34HLLPa1WRGAl=)3aszr%{($}>JLM)h5XzHQK!C73O&!y@_d=^4l8CmeqG zjN)*>X1mRpox?SctjqVQgYQN8H=MIK23=jF{__>p%Nf=A#ew|s=^3AY{RN+X`WeR` zpRhe1N07e<0`Qghc(=Zje-R~*58`Vd)s<)NOyB6Ny)iIVh3bzpwub`%pgO;xAR-)} zpYZ9YpYizb|KRxijQ!~`0rDAX?#bP+ukL0<=YBwQXAl0GI{DWA`wxnA2aeMlgQk4L zX14Y&Ae zN&pgrCsBo=e^UT93&iZEOOY2G&z;2s!g*cx^vgon$n$ysAQ{Z4DP#}k&H-~RX{U6T zOf)Qx;W?y#E+R0q@NWV!hsaMt-*EP|`|x_;Wt#W!vUbE(nZ^(fbZF)C0@8wzw5RY# z0Vd4S?BuS&rT@*JlcyJO;A`W0G#-;Co!Y>OumJL%e^vU-_*{yu%}1ahZpHb1u#C}B z7Wx-pWBozG#02mbUs#7?Ope*67K^-Cw&84Jk)u8&#k1xV803XVZGDY?_#HdPNacKI zR~I1efA2JX?yn^s$O}k2Lpqdyw$wa-O)OCMm{)4u={4lKYvoJR)wn(6i5S=EuC^sZ zfMH-uL}Zpyr1oO5K6^b}-xvJ-m$Onlf5qhBg|ZPzJI>6Gk{7e745=*~^SiX(wC_3p zN762Fz36qdZd3DpTp;Deq;SAre_ex$;UzBRe;+A1u9dzq84_i7#7_dhQweLSREnLP z7I8&lsV{GD2wllA7oe|4!alS>F-$EQb0Kskq1_T_0ER7WHW@QHd-977XC_9ZnYk)E zY08K!j!2I2&51N%FhYT9jw{+oR5#-~?8q5tG=X41v-}LP*7U-hMXfWjP%DX|Y@+RB zfA*c(yaQoZbxfI^Xj*?}0St&N4$EW-nyhJ7Ze5%>TGfo|q3Jbt)u&>v0tOTT)j!M0 zf-2Euc*&Z1{>-v+7B(V~O3tK<3SvP>BrJ)tNcC}Cbwwm0!gtA-gF*NcTmMpta?-se@3w&Oe>5`Nbe?aI$yP`6`K*rYGY(j$qbej=yzhhT zg`}jDP_nUTLXfBe9P4Du=2_^G;Imv&sLQI}e>TVE9Jegud(ywd8V0kh^jzX{6h+23 zG)=T7W!)i}3`pdq6qZFYsfvssjm(q(2mn@97Qjp)4HWCncxzoXp(|IFkNXXVf6pZVZHjU6)dq9Or)Yr*uIUTtAac8gY*_ckq%vtGU!aA` zg^>DD2Q7hLyDaS;u1f+wIQf305>R~$x^fm@kJs6YlZPYk_*^o@HYvh-efyH@fKY7z zCEsDCTUj}~hQVmRhWzD7C0mgDxIm5dlSuzA+X9-fDFf4@y7a&mof zCJkleHNhbFaEsVprcU+ZOi+x&Isq>nQuWET?5MA2;lRnvI)1Rl;gW*g>ml@M$!k*khn z6P(4vz_G-d-uGEv*r7MTL($%hvv)tf^i1znC;4mFd3@A({7Anb^9#q&wJ`M? znzuK!ml~#OVCn`%*OX|hS2UM19*Uiv{IJ<(C(8kr&wGzLf6Ph!yBtGrMvyOG&|J=F zt5bZr{e=JKUQZ zrh3I@d&nT4M;>|Pac>}R>ajCZzF1th|7l43_JX!Nqu8IY+3xZ1P-Ly;kw+eR+zZGL j9eUHCYfAO47rp-jom2#62bJ?Y00000NkvXXu0mjf4wjB+ diff --git a/examples/resource-bar/assets/Energy Bar.png b/examples/resource-bar/assets/Energy Bar.png index a98f6a81e49ff9afafacfdd661b55e85b36aa7ab..cce76fe2cc14ced792ce29ee69be8f800a7dc7eb 100644 GIT binary patch delta 215 zcmV;|04V>C7>5FoIDY`SNkl;NKGAZI`FoaSLcF%y=f_WXn3G?;(^wQHy^YQ?x%~% z8t`;Dt7v<8U*SG47!OBN?co6j9B{yyf|CPWN)B-Uf^$!w1yEc{x&Q|paKM>{lXw=Z znKZ#!#;aMJZ;ui#KGg82KnvNgbMV^G<~=wq!{Ggbw!uj}s<&EYaNxD0#U@_v^^w$+ RV%z`#002ovPDHLkV1hCCVuSzy delta 3060 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 A&Hw-a delta 2957 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 delta 2817 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 delta 348 zcmV-i0i*td0`~%tB!2;OQb$4nuFf3k0003oNklr(sycTpSyWls$|-eTN-`?2*9#c%W4MubFPLT>;(h?K!2KzCyX{ij03o!1Gp!E;>hmcn&yB4mRGsfMU)#7%nU)q-8q7 z3B2Lu?&OtO-&I8QTL)KOW`M~|crN@vDu@?Y&NL9NNy{?|vNF@0SZ>s=v$~7_@9-Kc u6RG1mLf2@S$vKI&fAs340H9tT8uS6QD8CdO!gd`10000@MEQagpJB6zff9hrXV`o~v1RD>4n=hkF5lpa hGphN3P*9Sp4**_ZpKM!~;<^9;002ovPDHLkV1lMuVdww= delta 348 zcmV-i0i*td0`~%tB!2;OQb$4nuFf3k0003oNklr(sycTpSyWls$|-eTN-`?2*9#c%W4MubFPLT>;(h?K!2KzCyX{ij03o!1Gp!E;>hmcn&yB4mRGsfMU)#7%nU)q-8q7 z3B2Lu?&OtO-&I8QTL)KOW`M~|crN@vDu@?Y&NL9NNy{?|vNF@0SZ>s=v$~7_@9-Kc u6RG1mLf2@S$vKI&fAs340H9tT8uS6QD8CdO!gd`10000 Date: Sun, 27 Nov 2022 22:01:59 -0700 Subject: [PATCH 24/98] Added missing functions to get/set properties Done for tonight --- examples/resource-bar/game.json | 533 +++++++++++++++++++++++--------- 1 file changed, 382 insertions(+), 151 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 5d5571db9..d116087a6 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -3264,7 +3264,8 @@ "EmptyColorTint": "255;255;255", "ActiveUnitOpacity": 255, "MaxQuantity": 5, - "StartingQuantity": 1 + "StartingQuantity": 1, + "Quantity": 1 } ], "animations": [ @@ -3369,7 +3370,8 @@ "StartingQuantity": 1, "CurrentQuantity": 0, "UnitWidth": 16, - "MaxQuantity": 10 + "MaxQuantity": 10, + "Quantity": 1 } ] }, @@ -3431,7 +3433,8 @@ "StartingQuantity": 10, "CurrentQuantity": 0, "UnitWidth": 8, - "MaxQuantity": 20 + "MaxQuantity": 20, + "Quantity": 10 } ] }, @@ -3452,7 +3455,8 @@ "StartingQuantity": 10, "CurrentQuantity": 0, "UnitWidth": 8, - "MaxQuantity": 20 + "MaxQuantity": 20, + "Quantity": 10 } ] }, @@ -3494,7 +3498,8 @@ "EmptyUnitAnimationNumber": 0, "ActiveUnitOpacity": 255, "ActiveUnitColorTint": "255;255;255", - "ActiveUnitAnimationNumber": 0 + "ActiveUnitAnimationNumber": 0, + "Quantity": 1 } ], "animations": [ @@ -3604,7 +3609,8 @@ "StartingQuantity": 1, "CurrentQuantity": 0, "UnitWidth": 26, - "MaxQuantity": 5 + "MaxQuantity": 5, + "Quantity": 1 } ] }, @@ -3629,7 +3635,8 @@ "EmptyUnitAnimationNumber": 0, "ActiveUnitOpacity": 255, "ActiveUnitColorTint": "255;255;255", - "ActiveUnitAnimationNumber": 0 + "ActiveUnitAnimationNumber": 0, + "Quantity": 1 } ], "animations": [ @@ -3892,7 +3899,8 @@ "EmptyUnitAnimationNumber": 0, "ActiveUnitOpacity": 255, "ActiveUnitColorTint": "255;255;255", - "ActiveUnitAnimationNumber": 0 + "ActiveUnitAnimationNumber": 0, + "Quantity": 1 } ], "animations": [ @@ -3989,7 +3997,8 @@ "EmptyUnitAnimationNumber": 1, "ActiveUnitOpacity": 255, "ActiveUnitColorTint": "255;255;255", - "ActiveUnitAnimationNumber": 0 + "ActiveUnitAnimationNumber": 0, + "Quantity": 1 } ], "animations": [ @@ -4144,7 +4153,8 @@ "EmptyUnitAnimationNumber": 0, "ActiveUnitOpacity": 255, "ActiveUnitColorTint": "74;144;226", - "ActiveUnitAnimationNumber": 0 + "ActiveUnitAnimationNumber": 0, + "Quantity": 1 } ], "animations": [ @@ -7784,7 +7794,8 @@ "EmptyUnitAnimationNumber": 0, "ActiveUnitOpacity": 255, "ActiveUnitColorTint": "255;255;255", - "ActiveUnitAnimationNumber": 0 + "ActiveUnitAnimationNumber": 0, + "Quantity": 12 } ], "animations": [ @@ -8142,7 +8153,7 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "Sprites", @@ -8161,7 +8172,7 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "Heart", @@ -8173,7 +8184,7 @@ }, { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "Key", @@ -8185,7 +8196,7 @@ }, { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "Arrow", @@ -8197,7 +8208,7 @@ }, { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "Bomb", @@ -8209,7 +8220,7 @@ }, { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "Heart_Pixel", @@ -8221,7 +8232,7 @@ }, { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "BlueBar", @@ -8233,7 +8244,7 @@ }, { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "PlayingCard", @@ -8263,7 +8274,7 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "Sprites", @@ -8282,7 +8293,7 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "Heart", @@ -8294,7 +8305,7 @@ }, { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "Key", @@ -8306,7 +8317,7 @@ }, { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "Arrow", @@ -8318,7 +8329,7 @@ }, { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "Bomb", @@ -8330,7 +8341,7 @@ }, { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "Heart_Pixel", @@ -8342,7 +8353,7 @@ }, { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "BlueBar", @@ -8354,7 +8365,7 @@ }, { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "PlayingCard", @@ -8603,7 +8614,7 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "Heart", @@ -8615,7 +8626,7 @@ }, { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "Key", @@ -8627,7 +8638,7 @@ }, { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "Arrow", @@ -8639,7 +8650,7 @@ }, { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "Bomb", @@ -8651,7 +8662,7 @@ }, { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "Heart_Pixel", @@ -8663,7 +8674,7 @@ }, { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "BlueBar", @@ -8675,7 +8686,7 @@ }, { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "PlayingCard", @@ -8693,7 +8704,7 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "Sprites", @@ -8773,7 +8784,7 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "Heart", @@ -8785,7 +8796,7 @@ }, { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "Key", @@ -8797,7 +8808,7 @@ }, { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "Arrow", @@ -8809,7 +8820,7 @@ }, { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "Bomb", @@ -8821,7 +8832,7 @@ }, { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "Heart_Pixel", @@ -8833,7 +8844,7 @@ }, { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "BlueBar", @@ -8845,7 +8856,7 @@ }, { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "PlayingCard", @@ -8863,7 +8874,7 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, "parameters": [ "Sprites", @@ -15844,7 +15855,7 @@ "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", "name": "ResourceBar", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/UI Essentials/UI Essentials_sliders_options.svg", - "shortDescription": "Display a bar that represents a resource in the game (health, shield, mana, ammo, etc)", + "shortDescription": "Display a bar that represents a resource in the game (health, mana, ammo, etc)", "version": "0.0.1", "description": "The resource bar can be displayed using these objects:\n\n- Shape painter\n- Tiled sprite\n- Sprite\n", "origin": { @@ -15863,8 +15874,8 @@ "ammo" ], "authorIds": [ - "IWykYNRvhCZBN3vEgKEbBPOR3Oc2", - "gqDaZjCfevOOxBYkK6zlhtZnXCg1" + "gqDaZjCfevOOxBYkK6zlhtZnXCg1", + "q8ubdigLvIRXLxsJDDTaokO41mc2" ], "dependencies": [], "eventsFunctions": [], @@ -17739,17 +17750,6 @@ "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyCurrentQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyStartingQuantity()" - ] - }, { "type": { "value": "Cache" @@ -17804,7 +17804,7 @@ "Object", "Behavior", "<", - "max(Object.Behavior::PropertyCurrentQuantity(),Object.Behavior::PropertyMaxQuantity())" + "max(Object.Behavior::PropertyQuantity(), Object.Behavior::PropertyMaxQuantity())" ] } ], @@ -17949,7 +17949,7 @@ }, "parameters": [ "UnitObject.Variable(__ResourceBar.UnitID)", - ">", + ">=", "Object.Behavior::PropertyMaxQuantity()" ] } @@ -17998,8 +17998,8 @@ }, "parameters": [ "UnitObject.Variable(__ResourceBar.UnitID)", - ">", - "Object.Behavior::PropertyCurrentQuantity()" + ">=", + "Object.Behavior::PropertyQuantity()" ] } ], @@ -18023,7 +18023,7 @@ "colorG": 176, "colorR": 74, "creationTime": 0, - "name": "Update actives units", + "name": "Update active units", "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ @@ -18037,7 +18037,7 @@ "parameters": [ "UnitObject.Variable(__ResourceBar.UnitID)", "<", - "Object.Behavior::PropertyCurrentQuantity()" + "Object.Behavior::PropertyQuantity()" ] } ], @@ -18139,7 +18139,7 @@ "parameters": [ "UnitObject.Variable(__ResourceBar.UnitID)", ">=", - "Object.Behavior::PropertyCurrentQuantity()" + "Object.Behavior::PropertyQuantity()" ] } ], @@ -18319,7 +18319,8 @@ { "description": "Apply color tint to empty units. Empty units exist between the current and maximum value.", "fullName": "Color tint of empty units", - "functionType": "Action", + "functionType": "ActionWithOperator", + "getterName": "EmptyUnitColor", "name": "SetEmptyUnitColor", "sentence": "Apply color tint _PARAM2_ to empty units of _PARAM0_", "events": [ @@ -18335,7 +18336,7 @@ "Object", "Behavior", "=", - "GetArgumentAsString(\"ColorTint\")" + "GetArgumentAsString(\"Value\")" ] } ] @@ -18365,7 +18366,8 @@ { "description": "Apply color tint to active units.", "fullName": "Color tint of active units", - "functionType": "Action", + "functionType": "ActionWithOperator", + "getterName": "ActiveUnitColor", "name": "SetActiveUnitColor", "sentence": "Apply color tint _PARAM2_ to active units of _PARAM0_", "events": [ @@ -18381,7 +18383,7 @@ "Object", "Behavior", "=", - "GetArgumentAsString(\"ColorTint\")" + "GetArgumentAsString(\"Value\")" ] } ] @@ -18411,7 +18413,8 @@ { "description": "Change the opacity of empty units. Empty units exist between the current and maximum value.", "fullName": "Opacity of empty units", - "functionType": "Action", + "functionType": "ActionWithOperator", + "getterName": "EmptyUnitOpacity", "name": "SetEmptyUnitOpacity", "sentence": "Change the opacity of empty units of _PARAM0_ to _PARAM2_", "events": [ @@ -18427,7 +18430,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Opacity\")" + "GetArgumentAsNumber(\"Value\")" ] } ] @@ -18457,7 +18460,8 @@ { "description": "Change the opacity of active units. ", "fullName": "Opacity of active units", - "functionType": "Action", + "functionType": "ActionWithOperator", + "getterName": "ActiveUnitOpacity", "name": "SetActiveUnitOpacity", "sentence": "Change the opacity of active units of _PARAM0_ to _PARAM2_", "events": [ @@ -18473,7 +18477,7 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Opacity\")" + "GetArgumentAsNumber(\"Value\")" ] } ] @@ -18503,7 +18507,8 @@ { "description": "Change the animation of empty units. Empty units exist between the current and maximum value.", "fullName": "Animation of empty units", - "functionType": "Action", + "functionType": "ActionWithOperator", + "getterName": "EmptyUnitAnimation", "name": "SetEmptyUnitAnimation", "sentence": "Change the animation of empty units of _PARAM0_ to _PARAM2_", "events": [ @@ -18519,7 +18524,53 @@ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"AnimationNumber\")" + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "type": "behavior" + }, + { + "description": "Animation number", + "name": "AnimationNumber", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the animation of empty units. Empty units exist between the current and maximum value.", + "fullName": "Animation of empty units", + "functionType": "ActionWithOperator", + "getterName": "ActiveUnitAnimation", + "name": "SetActiveUnitAnimation", + "sentence": "Change the animation of empty units of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyActiveUnitAnimationNumber" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" ] } ] @@ -18596,8 +18647,8 @@ "description": "Change the current quantity of units.", "fullName": "Unit quantity", "functionType": "ActionWithOperator", - "getterName": "CurrentQuantity", - "name": "SetCurrentQuantity", + "getterName": "Quantity", + "name": "SetQuantity", "sentence": "Change the unit quantity of _PARAM0_ to _PARAM2_", "events": [ { @@ -18619,7 +18670,7 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyQuantity" }, "parameters": [ "Object", @@ -18662,7 +18713,7 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyCurrentQuantity" + "value": "ResourceBar::ResourceBar_Sprite::SetPropertyQuantity" }, "parameters": [ "Object", @@ -18697,9 +18748,9 @@ }, { "description": "quantity", - "fullName": "Current quantity", + "fullName": "Quantity", "functionType": "ExpressionAndCondition", - "name": "CurrentQuantity", + "name": "Quantity", "sentence": "quantity", "events": [ { @@ -18711,7 +18762,247 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyCurrentQuantity()" + "Object.Behavior::PropertyQuantity()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "active unit color", + "fullName": "Active unit color", + "functionType": "ExpressionAndCondition", + "name": "ActiveUnitColor", + "sentence": "active unit color", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "Object.Behavior::PropertyActiveUnitColorTint()" + ] + } + ] + } + ], + "expressionType": { + "type": "color" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "empty unit color", + "fullName": "Empty unit color", + "functionType": "ExpressionAndCondition", + "name": "EmptyUnitColor", + "sentence": "empty unit color", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "Object.Behavior::PropertyEmptyUnitColorTint()" + ] + } + ] + } + ], + "expressionType": { + "type": "color" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "empty unit opacity", + "fullName": "Empty unit opacity", + "functionType": "ExpressionAndCondition", + "name": "EmptyUnitOpacity", + "sentence": "empty unit opacity", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "ToString(Object.Behavior::PropertyEmptyUnitOpacity())" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "empty unit animation", + "fullName": "Empty unit animation", + "functionType": "ExpressionAndCondition", + "name": "EmptyUnitAnimation", + "sentence": "empty unit animation", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "ToString(Object.Behavior::PropertyEmptyUnitAnimationNumber())" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "active unit animation", + "fullName": "Active unit animation", + "functionType": "ExpressionAndCondition", + "name": "ActiveUnitAnimation", + "sentence": "active unit animation", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "ToString(Object.Behavior::PropertyActiveUnitAnimationNumber())" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "active unit opacity", + "fullName": "Active unit opacity", + "functionType": "ExpressionAndCondition", + "name": "ActiveUnitOpacity", + "sentence": "active unit opacity", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "ToString(Object.Behavior::PropertyActiveUnitOpacity())" ] } ] @@ -18777,16 +19068,6 @@ } ], "propertyDescriptors": [ - { - "value": "0", - "type": "Number", - "label": "Starting quantity", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "StartingQuantity" - }, { "value": "", "type": "Number", @@ -18794,8 +19075,8 @@ "description": "", "group": "", "extraInformation": [], - "hidden": true, - "name": "CurrentQuantity" + "hidden": false, + "name": "Quantity" }, { "value": "10", @@ -18886,46 +19167,6 @@ "name": "ResourceBar_TiledSprite", "objectType": "TiledSpriteObject::TiledSprite", "eventsFunctions": [ - { - "fullName": "", - "functionType": "Action", - "name": "onCreated", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyCurrentQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyStartingQuantity()" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "TiledSpriteObject::TiledSprite", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", - "type": "behavior" - } - ], - "objectGroups": [] - }, { "description": "Draw a resource bar using a tiled sprite.", "fullName": "Draw resource bar (tiled sprite)", @@ -18944,7 +19185,7 @@ "parameters": [ "Object", "=", - "Object.Behavior::PropertyUnitWidth() * Object.Behavior::PropertyCurrentQuantity()" + "Object.Behavior::PropertyUnitWidth() * Object.Behavior::PropertyQuantity()" ] } ] @@ -19005,7 +19246,7 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyCurrentQuantity" + "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyQuantity" }, "parameters": [ "Object", @@ -19047,7 +19288,7 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyCurrentQuantity" + "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyQuantity" }, "parameters": [ "Object", @@ -19143,7 +19384,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyCurrentQuantity()" + "Object.Behavior::PropertyQuantity()" ] } ] @@ -19212,30 +19453,20 @@ ], "propertyDescriptors": [ { - "value": "0", - "type": "Number", - "label": "Starting quantity", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "StartingQuantity" - }, - { - "value": "", + "value": "1", "type": "Number", "label": "Quantity", "description": "", "group": "", "extraInformation": [], - "hidden": true, - "name": "CurrentQuantity" + "hidden": false, + "name": "Quantity" }, { "value": "16", "type": "Number", "label": "Unit width (pixels)", - "description": "", + "description": "Width of one individual unit", "group": "", "extraInformation": [], "hidden": false, From a275c0e54b26b561758a1631918799b9eaaea23b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Mon, 28 Nov 2022 20:07:39 +0100 Subject: [PATCH 25/98] Children positioning. --- examples/resource-bar/assets/Empty Heart.png | Bin 0 -> 8179 bytes examples/resource-bar/assets/Full Heart.png | Bin 0 -> 11556 bytes examples/resource-bar/assets/Scroll.png | Bin 0 -> 10210 bytes examples/resource-bar/game.json | 29652 ++++------------- 4 files changed, 5947 insertions(+), 23705 deletions(-) create mode 100644 examples/resource-bar/assets/Empty Heart.png create mode 100644 examples/resource-bar/assets/Full Heart.png create mode 100644 examples/resource-bar/assets/Scroll.png diff --git a/examples/resource-bar/assets/Empty Heart.png b/examples/resource-bar/assets/Empty Heart.png new file mode 100644 index 0000000000000000000000000000000000000000..9a3f5e362763383c8ed0410abb29a8b0e1dcb1c1 GIT binary patch literal 8179 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ϧdp15U*n@eXPzHiR zLBCK21ph1+e6VBuQLPgAfAOJoXzH0?u{3GLkyX*grE{4AjQ&<4eEfytm9itrd&-&p(DM@D{jPGC;nrCEyT zmcEv{x!&^y^G;@fFdav1m6F@-NKmiSM0yNVA}V7t>akH94=s;I!^&pJFxIcKp43J6 zDo0G6^>UB36t7_M4K*qv!}EY;S87WpLg%@H-Np_o1AX3xM_wQGvl0YwzdZu>eDjEZ zpfmg>xJ~QSed_z*u4{Ftip}w2fh!Ds_e3Gwt=|aj2}I dSi_3-V;70w-)%IzvMHGY^tDa2$~7*B{SQ#_pc?=H literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Full Heart.png b/examples/resource-bar/assets/Full Heart.png new file mode 100644 index 0000000000000000000000000000000000000000..c37403b197be0fc8f25ce15449d690d47ab287eb GIT binary patch literal 11556 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Scroll.png b/examples/resource-bar/assets/Scroll.png new file mode 100644 index 0000000000000000000000000000000000000000..002b569d9fe87f4e132e37927ba57c4104f3e9e5 GIT binary patch literal 10210 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index d116087a6..caa709fbe 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -1448,6 +1448,51 @@ "name": "assets\\Heart-1-2.png", "smoothed": true, "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Health Bar.png", + "kind": "image", + "metadata": "", + "name": "assets\\Health Bar.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Bomb_No Shadow.png", + "kind": "image", + "metadata": "", + "name": "assets\\Bomb_No Shadow.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Full Heart.png", + "kind": "image", + "metadata": "", + "name": "assets\\Full Heart.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Empty Heart.png", + "kind": "image", + "metadata": "", + "name": "assets\\Empty Heart.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Scroll.png", + "kind": "image", + "metadata": "", + "name": "assets\\Scroll.png", + "smoothed": true, + "userAdded": true } ], "resourceFolders": [] @@ -1457,15 +1502,15 @@ "variables": [], "layouts": [ { - "b": 0, + "b": 68, "disableInputWhenNotFocused": true, "mangledName": "Sprite_32and_32Tiled_32Sprite", "name": "Sprite and Tiled Sprite", - "r": 0, + "r": 68, "standardSortMethod": true, "stopSoundsOnStartup": true, "title": "", - "v": 0, + "v": 68, "uiSettings": { "grid": true, "gridType": "rectangular", @@ -1476,7 +1521,7 @@ "gridColor": 10401023, "gridAlpha": 0.2, "snap": true, - "zoomFactor": 1.240000000000002, + "zoomFactor": 1.9066665649414112, "windowMask": false }, "objectsGroups": [ @@ -1494,26 +1539,8 @@ { "name": "Sprites", "objects": [ - { - "name": "Heart" - }, - { - "name": "Heart_Pixel" - }, - { - "name": "Key" - }, - { - "name": "Arrow" - }, - { - "name": "Bomb" - }, { "name": "BlueBar" - }, - { - "name": "PlayingCard" } ] }, @@ -1537,36 +1564,6 @@ ], "variables": [], "instances": [ - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "Title_Text", - "persistentUuid": "29ae792c-1331-430c-aadf-70fa8d9e36d6", - "width": 0, - "x": 208, - "y": 8, - "zOrder": 12, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "Heart", - "persistentUuid": "0c4d4e97-0b53-4f05-8468-7d8b7a7fa8dd", - "width": 0, - "x": 128, - "y": 392, - "zOrder": 13, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, { "angle": 0, "customSize": true, @@ -1575,8 +1572,8 @@ "name": "TiledEmptyUiHeart", "persistentUuid": "a1be0010-4eb7-4e54-a651-7d77ae646149", "width": 161, - "x": 504, - "y": 312, + "x": 305, + "y": 192, "zOrder": 0, "numberProperties": [], "stringProperties": [], @@ -1590,8 +1587,8 @@ "name": "Tiled_ResourceBar", "persistentUuid": "be98771a-978f-443c-80e8-197098aef457", "width": 15, - "x": 505, - "y": 312, + "x": 306, + "y": 192, "zOrder": 15, "numberProperties": [], "stringProperties": [], @@ -1605,8 +1602,8 @@ "name": "HealthBarFill", "persistentUuid": "1e7ce7cc-5104-4c95-95a0-343f3d97e140", "width": 8, - "x": 504, - "y": 356, + "x": 305, + "y": 236, "zOrder": 17, "numberProperties": [], "stringProperties": [], @@ -1620,8 +1617,8 @@ "name": "HeartPixel_9patch", "persistentUuid": "d0461165-f597-4574-b3e8-8e78014d1c61", "width": 208, - "x": 503, - "y": 450, + "x": 304, + "y": 330, "zOrder": 0, "numberProperties": [], "stringProperties": [], @@ -1635,8 +1632,8 @@ "name": "Heart_Pixel_Tiled", "persistentUuid": "63560c9a-582e-4a76-9560-e929ab4a1fdf", "width": 80, - "x": 543, - "y": 472, + "x": 344, + "y": 352, "zOrder": 21, "numberProperties": [], "stringProperties": [], @@ -1650,73 +1647,13 @@ "name": "Heart_Pixel", "persistentUuid": "19dc3b0f-137e-428c-ae37-9a64934186c6", "width": 0, - "x": 176, - "y": 462, + "x": 344, + "y": 405, "zOrder": 19, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "SpriteResourceBar_Text", - "persistentUuid": "fc5e8093-d3c3-4114-9b18-685091e1055e", - "width": 0, - "x": 136, - "y": 561, - "zOrder": 22, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "TiledSpriteResourceBar_Text", - "persistentUuid": "6337ed4e-77e0-4cf5-b4cd-b4770b6396e5", - "width": 0, - "x": 488, - "y": 561, - "zOrder": 23, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 62, - "layer": "", - "name": "HeartPixel_9patch", - "persistentUuid": "4598dbb6-59cf-4253-9998-1c3b796491f3", - "width": 208, - "x": 136, - "y": 440, - "zOrder": 0, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "Bomb", - "persistentUuid": "70dc048d-f1b7-4ed5-8d6b-f8a54eb65201", - "width": 0, - "x": 128, - "y": 360, - "zOrder": 24, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, { "angle": 0, "customSize": false, @@ -1747,111 +1684,6 @@ "stringProperties": [], "initialVariables": [] }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "Arrow", - "persistentUuid": "7d2f81fb-834d-4237-8dbb-9fa7cceb316c", - "width": 0, - "x": 131, - "y": 152, - "zOrder": 28, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "ChangeAnimation_Text", - "persistentUuid": "9f9d682b-8f01-4be1-8309-47306157a1b4", - "width": 0, - "x": 37.05882263183594, - "y": 296, - "zOrder": 31, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "PartialOpacity_Text", - "persistentUuid": "6b1134a9-2476-4e8d-a028-928ceb707c67", - "width": 0, - "x": 48, - "y": 366, - "zOrder": 32, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "HideSprite_Text", - "persistentUuid": "9ddf0239-b395-4c47-97be-1c1c609e58d9", - "width": 0, - "x": 40, - "y": 476, - "zOrder": 33, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "TintColor_Text", - "persistentUuid": "18cc456d-0b24-48da-9237-60dce916d4ae", - "width": 0, - "x": 48, - "y": 230, - "zOrder": 34, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "NoMaximum_Text", - "persistentUuid": "8b35a177-ffc1-455f-a122-c2b3ffde519f", - "width": 0, - "x": 40, - "y": 161, - "zOrder": 35, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 40, - "layer": "", - "name": "Key", - "persistentUuid": "9fb75cfe-d5b8-4db6-94b5-c78e95ca858a", - "width": 42.94117736816406, - "x": 141.05882263183594, - "y": 296, - "zOrder": 36, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, { "angle": 0, "customSize": true, @@ -1860,8 +1692,8 @@ "name": "EnergyBarFill", "persistentUuid": "8cba0615-b7ce-4abe-9f1c-1d1b439f1408", "width": 7, - "x": 505, - "y": 407, + "x": 306, + "y": 287, "zOrder": 37, "numberProperties": [], "stringProperties": [], @@ -1875,8 +1707,8 @@ "name": "HealthBarBox", "persistentUuid": "5bc7c3f2-900c-4e32-b8cb-a6f2179f9638", "width": 176, - "x": 496, - "y": 352, + "x": 297, + "y": 232, "zOrder": 0, "numberProperties": [], "stringProperties": [], @@ -1890,8 +1722,8 @@ "name": "EnergyBar", "persistentUuid": "2513f81b-326c-4c90-9245-ca056617c153", "width": 176, - "x": 496, - "y": 400, + "x": 297, + "y": 280, "zOrder": 0, "numberProperties": [], "stringProperties": [], @@ -1900,14 +1732,14 @@ { "angle": 0, "customSize": true, - "height": 19, + "height": 35, "layer": "", - "name": "BlueBar", - "persistentUuid": "a8584a67-d8eb-4dfa-b80a-349641a14679", - "width": 8, - "x": 140, - "y": 518, - "zOrder": 39, + "name": "BarFrame", + "persistentUuid": "c43eca46-b733-4930-802a-6187c1c5f0df", + "width": 200, + "x": 304, + "y": 453, + "zOrder": 0, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -1915,29 +1747,29 @@ { "angle": 0, "customSize": true, - "height": 35, + "height": 19, "layer": "", - "name": "BarFrame", - "persistentUuid": "c43eca46-b733-4930-802a-6187c1c5f0df", - "width": 200, - "x": 136, - "y": 510, - "zOrder": 0, + "name": "BlueBar", + "persistentUuid": "b4c1e490-8579-4224-8124-3640eb8901dc", + "width": 72, + "x": 309, + "y": 461, + "zOrder": 38, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, - "customSize": true, - "height": 50.873779296875, + "customSize": false, + "height": 112, "layer": "", - "name": "PlayingCard", - "persistentUuid": "ab3c143c-0030-4f96-8432-3831a30d26a6", - "width": 37.97100830078125, - "x": 128, - "y": 221.126220703125, - "zOrder": 40, + "name": "NewResourceBar", + "persistentUuid": "cd7ae08a-3045-436b-bda9-beda9d2b55db", + "width": 240, + "x": 536, + "y": 336, + "zOrder": 39, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -1945,248 +1777,89 @@ ], "objects": [ { - "assetStoreId": "", - "name": "Health_Bar", + "assetStoreId": "8d524a624fbc72a1fd6c3975369a7cd55b8a52035887ef664bcd93bf8e273881", + "name": "Heart_Unit", "tags": "", - "type": "PrimitiveDrawing::Drawer", + "type": "Sprite", + "updateIfNotVisible": false, "variables": [], "effects": [], - "behaviors": [ + "behaviors": [], + "animations": [ { - "name": "ResourceBar_ShapePainter", - "type": "ResourceBar::ResourceBar_ShapePainter", - "ValueMin": 0, - "ValueMax": 1, - "TickSpacing": 0, - "BarLength": 200, - "BarThickness": 16, - "InactiveBarColor": "11;255;0", - "InactiveBarOpacity": 96, - "ActiveBarColor": " 11;255;0", - "ActiveBarOpacity": 255, - "RoundedBar": true, - "Value": 0, - "ThumbOffset": 0, - "NeedRedraw": true - } - ], - "fillOpacity": 255, - "outlineSize": 1, - "outlineOpacity": 255, - "fillColor": { - "b": 255, - "g": 255, - "r": 255 - }, - "outlineColor": { - "b": 0, - "g": 0, - "r": 0 - }, - "absoluteCoordinates": false, - "clearBetweenFrames": true - }, - { - "assetStoreId": "", - "name": "MiniHealth_Bar", - "tags": "", - "type": "PrimitiveDrawing::Drawer", - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_ShapePainter", - "type": "ResourceBar::ResourceBar_ShapePainter", - "ValueMin": 0, - "ValueMax": 1, - "TickSpacing": 0, - "BarLength": 50, - "BarThickness": 4, - "InactiveBarColor": "11;255;0", - "InactiveBarOpacity": 96, - "ActiveBarColor": " 11;255;0", - "ActiveBarOpacity": 255, - "Value": 0, - "ThumbOffset": 0, - "NeedRedraw": true - }, - { - "name": "Sticker", - "type": "Sticker::Sticker", - "OnlyFollowPosition": true + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Emote Heart.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] } - ], - "fillOpacity": 255, - "outlineSize": 1, - "outlineOpacity": 255, - "fillColor": { - "b": 255, - "g": 255, - "r": 255 - }, - "outlineColor": { - "b": 0, - "g": 0, - "r": 0 - }, - "absoluteCoordinates": false, - "clearBetweenFrames": true + ] }, { - "assetStoreId": "", - "name": "Shield_Bar", + "assetStoreId": "752e405ef67d9f9d1bd36f9763f1b6fc05633d64700982c0f3118a25a32e39b2", + "height": 16, + "name": "TiledEmptyUiHeart", "tags": "", - "type": "PrimitiveDrawing::Drawer", + "texture": "tiled_Tiled Empty UI Heart.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 16, "variables": [], "effects": [], - "behaviors": [ - { - "name": "ResourceBar_ShapePainter", - "type": "ResourceBar::ResourceBar_ShapePainter", - "ValueMin": 0, - "ValueMax": 1, - "TickSpacing": 0, - "ThumbShape": "circle", - "ThumbWidth": 20, - "ThumbHeight": 20, - "ThumbColor": " 24;119;211", - "ThumbOpacity": 255, - "BarLength": 200, - "BarThickness": 16, - "InactiveBarColor": "144;19;254", - "InactiveBarOpacity": 96, - "ActiveBarColor": " 144;19;254", - "ActiveBarOpacity": 255, - "HaloRadius": 24, - "HaloOpacityHover": 32, - "HaloOpacityClick": 64, - "RoundedBar": true, - "Enabled": true, - "IsBeingDragged": false, - "Value": 0, - "ThumbOffset": 0, - "NeedRedraw": true, - "IsHovered": false, - "MouseX": 0, - "MouseY": 0, - "CurrentHaloRadius": 0, - "HaloGrowSpeed": 0.2, - "TargetHaloRadius": 0.19999992847442627 - } - ], - "fillOpacity": 255, - "outlineSize": 1, - "outlineOpacity": 255, - "fillColor": { - "b": 255, - "g": 255, - "r": 255 - }, - "outlineColor": { - "b": 0, - "g": 0, - "r": 0 - }, - "absoluteCoordinates": false, - "clearBetweenFrames": true + "behaviors": [] }, { - "assetStoreId": "", - "name": "ResourceMouseX_Bar", + "assetStoreId": "abf51d082db5a117d9ee2e65299660f6787d47664e4571bad6db3075b3393c5f", + "height": 16, + "name": "Tiled_ResourceBar", "tags": "", - "type": "PrimitiveDrawing::Drawer", + "texture": "tiled_Tiled Filler UI Heart.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 16, "variables": [], "effects": [], "behaviors": [ { - "name": "ResourceBar_ShapePainter", - "type": "ResourceBar::ResourceBar_ShapePainter", - "ValueMin": 0, - "ValueMax": 1, - "TickSpacing": 0, - "ThumbShape": "circle", - "ThumbWidth": 20, - "ThumbHeight": 20, - "ThumbColor": "248;231;28", - "ThumbOpacity": 255, - "BarLength": 200, - "BarThickness": 16, - "InactiveBarColor": "248;231;28", - "InactiveBarOpacity": 96, - "ActiveBarColor": "248;231;28", - "ActiveBarOpacity": 255, - "HaloRadius": 24, - "HaloOpacityHover": 32, - "HaloOpacityClick": 64, - "RoundedBar": false, - "Enabled": true, - "IsBeingDragged": false, - "Value": 0, - "ThumbOffset": 0, - "NeedRedraw": true, - "IsHovered": false, - "MouseX": 0, - "MouseY": 0, - "CurrentHaloRadius": 0, - "HaloGrowSpeed": 0.2, - "TargetHaloRadius": 0.19999992847442627 + "name": "ResourceBar_TiledSprite", + "type": "ResourceBar::ResourceBar", + "StartingQuantity": 1, + "CurrentQuantity": 0, + "UnitWidth": 16, + "MaxQuantity": 10, + "Quantity": 1 } - ], - "fillOpacity": 255, - "outlineSize": 1, - "outlineOpacity": 255, - "fillColor": { - "b": 255, - "g": 255, - "r": 255 - }, - "outlineColor": { - "b": 0, - "g": 0, - "r": 0 - }, - "absoluteCoordinates": false, - "clearBetweenFrames": true + ] }, { - "assetStoreId": "48a2d179a1921276abe3f99ce3cf195fa7c310bc511fa215d9647c3fb9027921", - "name": "Fly", + "assetStoreId": "45107bbfbc2b5cbc83e3785f802b99664a23d59e74414e332c9afafac63e1ca3", + "name": "HealthBar", "tags": "", "type": "Sprite", "updateIfNotVisible": false, "variables": [], "effects": [], - "behaviors": [ - { - "name": "Health", - "type": "Health::Health", - "Health": 100, - "DamageCooldown": 0, - "MaxHealth": 100, - "IsJustDamaged": false, - "HealthRegenRate": 0, - "HealthRegenDelay": 0, - "AllowOverHealing": false, - "HitAtLeastOnce": false - }, - { - "name": "ShakeObject_PositionAngleScale", - "type": "ShakeObject::ShakeObject_PositionAngleScale" - }, - { - "name": "Shield", - "type": "Health::Shield", - "RequireHealth": "Health", - "MaxShieldPoints": 30, - "ShieldDuration": 5, - "ShieldPoints": 0, - "ShieldRegenRate": 0, - "ShieldBlocksExcessDamage": false, - "ShieldRegenDelay": 0, - "RegenShieldWhenZeroPoints": false, - "IsShieldJustDamaged": false - } - ], + "behaviors": [], "animations": [ { "name": "", @@ -2194,11 +1867,11 @@ "directions": [ { "looping": true, - "timeBetweenFrames": 0.05000000074505806, + "timeBetweenFrames": 0.02500000037252903, "sprites": [ { - "hasCustomCollisionMask": true, - "image": "Fly_1.png", + "hasCustomCollisionMask": false, + "image": "Health Bar.png", "points": [], "originPoint": { "name": "origine", @@ -2206,143 +1879,299 @@ "y": 0 }, "centerPoint": { - "automatic": false, + "automatic": true, "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 + "x": 0, + "y": 0 }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "1f3dba67c868b7320572a6591d1d0418f23b7c132df0963cf77286a9149971d9", + "height": 16, + "name": "HealthBarFill", + "tags": "", + "texture": "tiled_Health Bar Fill.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 128, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "ResourceBar_TiledSprite", + "type": "ResourceBar::ResourceBar", + "StartingQuantity": 10, + "CurrentQuantity": 0, + "UnitWidth": 8, + "MaxQuantity": 20, + "Quantity": 10 + } + ] + }, + { + "assetStoreId": "3bd9517a10ad3d98341eea33f0c139f08a1b04f26500e85ac49bb7f9e157a303", + "height": 12, + "name": "EnergyBarFill", + "tags": "", + "texture": "tiled_Energy Bar Fill.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 128, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "ResourceBar_TiledSprite", + "type": "ResourceBar::ResourceBar", + "StartingQuantity": 10, + "CurrentQuantity": 0, + "UnitWidth": 8, + "MaxQuantity": 20, + "Quantity": 10 + } + ] + }, + { + "assetStoreId": "138ee716846635e3e0e5ab7b63752d1a36754f1ac874c70e1b5fa372d5a05474", + "bottomMargin": 6, + "height": 15, + "leftMargin": 11, + "name": "HealthBarBox", + "rightMargin": 9, + "tags": "", + "texture": "Health Bar Box.png", + "tiled": true, + "topMargin": 6, + "type": "PanelSpriteObject::PanelSprite", + "width": 96, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "", + "bottomMargin": 0, + "height": 62, + "leftMargin": 64, + "name": "HeartPixel_9patch", + "rightMargin": 64, + "tags": "", + "texture": "Health Bar.png", + "tiled": true, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", + "width": 154, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "", + "height": 19, + "name": "Heart_Pixel_Tiled", + "tags": "", + "texture": "assets\\Heart-1-1.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 26, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "ResourceBar_TiledSprite", + "type": "ResourceBar::ResourceBar", + "StartingQuantity": 1, + "CurrentQuantity": 0, + "UnitWidth": 26, + "MaxQuantity": 5, + "Quantity": 1 + } + ] + }, + { + "assetStoreId": "996e07c73069934a868dc8212a0d7d959dfdd245af964998aad12cf57d252ac3", + "name": "PlusKey", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [ + { + "effectType": "Outline", + "name": "Effect", + "doubleParameters": { + "padding": 2, + "thickness": 2 + }, + "stringParameters": { + "color": "255;255;255" + }, + "booleanParameters": {} + } + ], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "hasCustomCollisionMask": true, - "image": "Fly_2.png", + "hasCustomCollisionMask": false, + "image": "Plus Key.png", "points": [], "originPoint": { "name": "origine", - "x": 0, - "y": 0 + "x": 50, + "y": 50 }, "centerPoint": { - "automatic": false, + "automatic": true, "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 + "x": 0, + "y": 0 }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "90731de0069b2f3684767c392c6e4c48255a2647bc849497f25b672771290626", + "name": "MinusKey", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [ + { + "effectType": "Outline", + "name": "Effect", + "doubleParameters": { + "padding": 2, + "thickness": 2 + }, + "stringParameters": { + "color": "255;255;255" + }, + "booleanParameters": {} + } + ], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "hasCustomCollisionMask": true, - "image": "Fly_3.png", + "hasCustomCollisionMask": false, + "image": "Minus Key.png", "points": [], "originPoint": { "name": "origine", - "x": 0, - "y": 0 + "x": 50, + "y": 50 }, "centerPoint": { - "automatic": false, + "automatic": true, "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_4.png", - "points": [], - "originPoint": { - "name": "origine", "x": 0, "y": 0 }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "603d81772c22a6401f0bb19588cb7bb6f384ae840c9e03391874c15a049ade25", + "bottomMargin": 12, + "height": 26, + "leftMargin": 10, + "name": "EnergyBar", + "rightMargin": 10, + "tags": "", + "texture": "Energy Bar.png", + "tiled": true, + "topMargin": 13, + "type": "PanelSpriteObject::PanelSprite", + "width": 78, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "0ad03c70a5c5284cc85170b3852e425db0f4deed8225b1b10722ef26902186d8", + "bottomMargin": 2, + "height": 9, + "leftMargin": 3, + "name": "HealthBar2", + "rightMargin": 3, + "tags": "", + "texture": "Health Bar.png2", + "tiled": true, + "topMargin": 4, + "type": "PanelSpriteObject::PanelSprite", + "width": 78, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "138ee716846635e3e0e5ab7b63752d1a36754f1ac874c70e1b5fa372d5a05474", + "bottomMargin": 6, + "height": 15, + "leftMargin": 11, + "name": "HealthBarBox2", + "rightMargin": 9, + "tags": "", + "texture": "Health Bar Box.png2", + "tiled": true, + "topMargin": 6, + "type": "PanelSpriteObject::PanelSprite", + "width": 96, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "f353e7a7fcbe2d520d0901f187986570a9413978641b27454f285a705a2aba34", + "name": "BarFrame", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "No Shadow", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "hasCustomCollisionMask": true, - "image": "Fly_5.png", + "hasCustomCollisionMask": false, + "image": "Bar Frame_No Shadow.png", "points": [], "originPoint": { "name": "origine", @@ -2350,35 +2179,28 @@ "y": 0 }, "centerPoint": { - "automatic": false, + "automatic": true, "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 + "x": 0, + "y": 0 }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Shadow", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "hasCustomCollisionMask": true, - "image": "Fly_6.png", + "hasCustomCollisionMask": false, + "image": "Bar Frame_Shadow.png", "points": [], "originPoint": { "name": "origine", @@ -2386,35 +2208,56 @@ "y": 0 }, "centerPoint": { - "automatic": false, + "automatic": true, "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 + "x": 0, + "y": 0 }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "7cd73b60b8f9a67bc5405a8dd03008c0fb7931dbcf2bc28312089161e77a3b74", + "name": "BlueBar", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "ResourceBar_Sprite", + "type": "ResourceBar::ResourceBar_Sprite", + "StartingQuantity": 12, + "CurrentQuantity": 0, + "MaxQuantity": 24, + "NextUnitToCreate": 0, + "EmptyUnitColorTint": "", + "EmptyUnitOpacity": 0, + "EmptyUnitAnimationNumber": 0, + "ActiveUnitOpacity": 255, + "ActiveUnitColorTint": "255;255;255", + "ActiveUnitAnimationNumber": 0, + "Quantity": 12 + } + ], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "hasCustomCollisionMask": true, - "image": "Fly_7.png", + "hasCustomCollisionMask": false, + "image": "Blue bar.png", "points": [], "originPoint": { "name": "origine", @@ -2422,139 +2265,12 @@ "y": 0 }, "centerPoint": { - "automatic": false, + "automatic": true, "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 + "x": 0, + "y": 0 }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_8.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_9.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_10.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] + "customCollisionMask": [] } ] } @@ -2563,23314 +2279,5840 @@ ] }, { - "assetStoreId": "574655a4565bd983af8f5dd98e0fd8cda3bd67cf929c00d3db317e898322e06b", - "name": "Star", + "assetStoreId": "", + "name": "NewResourceBar", "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, + "type": "ResourceBar::TiledResourceBar", "variables": [], "effects": [], "behaviors": [], - "animations": [ + "content": { + "UnitWidth": 26 + }, + "childrenContent": { + "Background": { + "bottomMargin": 30, + "height": 64, + "leftMargin": 64, + "rightMargin": 64, + "texture": "assets\\Scroll.png", + "tiled": false, + "topMargin": 30, + "width": 154 + }, + "Bar": { + "height": 26, + "texture": "assets\\Empty Heart.png", + "width": 26 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "Text", + "font": "", + "characterSize": 20, + "color": { + "b": 0, + "g": 0, + "r": 0 + } + }, + "Resource": { + "height": 26, + "texture": "assets\\Full Heart.png", + "width": 26 + } + } + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Initialize game", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "name": "LargeNarrow", - "useMultipleDirections": false, - "directions": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Star_LargeNarrow.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } + "type": { + "value": "DepartScene" + }, + "parameters": [ + "" ] } - ] - }, - { - "name": "LargeWide", - "useMultipleDirections": false, - "directions": [ + ], + "actions": [ { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Star_LargeWide.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "MaxResource", + "=", + "CameraBorderRight()" ] } - ] - }, - { - "name": "Medium", - "useMultipleDirections": false, - "directions": [ + ], + "events": [ { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "hasCustomCollisionMask": false, - "image": "Star_Medium.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 + "type": { + "value": "DebuggerTools::EnableDebugDraw" }, - "customCollisionMask": [] + "parameters": [ + "", + "", + "", + "", + "" + ] } ] } ] - }, + } + ], + "parameters": [] + }, + { + "colorB": 224, + "colorG": 16, + "colorR": 189, + "creationTime": 0, + "name": "Draw Resource bars", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "name": "Small", - "useMultipleDirections": false, - "directions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Tiled resource bar", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "hasCustomCollisionMask": false, - "image": "Star_Small.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 + "type": { + "value": "DepartScene" }, - "customCollisionMask": [] + "parameters": [ + "" + ] + } + ], + "actions": [], + "events": [ + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantity" + }, + "parameters": [ + "TiledEmptyUiHeart", + "ResourceBar_TiledSprite", + "=", + "5", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetMaxQuantity" + }, + "parameters": [ + "Tiled_ResourceBar", + "ResourceBar_TiledSprite", + "=", + "5", + "" + ] + } + ] } ] - } - ] - } - ] - }, - { - "assetStoreId": "8d92592738465177b86ec18299ef6e6394ae24eeb7a7d6dfdcbbdb55fab902aa", - "name": "BlueLaser01", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ + }, { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "hasCustomCollisionMask": false, - "image": "Blue laser (01).png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 + "type": { + "value": "KeyReleased" }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 + "parameters": [ + "", + "Left" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantity" }, - "customCollisionMask": [] + "parameters": [ + "TiledSprites", + "ResourceBar_TiledSprite", + "-", + "1", + "" + ] } ] - } - ] - } - ] - }, - { - "assetStoreId": "794ab341df538c9b3bdad418dfdcccc7be5d90f3d0b5929d6d528a542c6ed3ae", - "name": "SilverShield", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [ - { - "effectType": "Outline", - "name": "Effect", - "doubleParameters": { - "padding": 2, - "thickness": 2 - }, - "stringParameters": { - "color": "255;255;255" - }, - "booleanParameters": {} - } - ], - "behaviors": [], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ + }, { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "hasCustomCollisionMask": false, - "image": "Silver shield.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 14.592423439025879, - "y": 15.103429794311523 + "type": { + "value": "KeyReleased" }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 + "parameters": [ + "", + "Right" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantity" }, - "customCollisionMask": [] + "parameters": [ + "TiledSprites", + "ResourceBar_TiledSprite", + "+", + "1", + "" + ] } ] - } - ] - } - ] - }, - { - "assetStoreId": "d2bc2d266f5bb666ef68023abc14f51bc8fe8b5222af931efa378ac10c50f98a", - "name": "MeteorDetailed", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "Large", - "useMultipleDirections": false, - "directions": [ + }, { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "hasCustomCollisionMask": true, - "image": "Meteor Detailed_Large.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 65.07723999023438, - "y": 63.82252502441406 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::DrawResourceBar" }, - "customCollisionMask": [ - [ - { - "x": 20, - "y": 20 - }, - { - "x": 110, - "y": 20 - }, - { - "x": 110, - "y": 110 - }, - { - "x": 20, - "y": 110 - } - ] + "parameters": [ + "TiledSprites", + "ResourceBar_TiledSprite", + "" ] } ] } - ] + ], + "parameters": [] }, { - "name": "Small", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": true, - "image": "Meteor Detailed_Small.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 65.07723999023438, - "y": 63.82252502441406 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Sprite resource bar", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DepartScene" }, - "customCollisionMask": [ - [ - { - "x": 20, - "y": 20 + "parameters": [ + "" + ] + } + ], + "actions": [], + "events": [ + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetMaxQuantity" }, - { - "x": 110, - "y": 20 + "parameters": [ + "Sprites", + "ResourceBar_Sprite", + "=", + "5", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetEmptyUnitColor" }, - { - "x": 110, - "y": 110 + "parameters": [ + "Heart", + "ResourceBar_Sprite", + "\"74;144;226\"", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetEmptyUnitOpacity" }, - { - "x": 20, - "y": 110 - } - ] + "parameters": [ + "Heart", + "ResourceBar_Sprite", + "64", + "" + ] + } ] } ] - } - ] - } - ] - }, - { - "assetStoreId": "a1e62f5a19d1fe476e2ad0b8977768d020cc1dc55423427f79a486664cebb631", - "name": "UpgradedPotionBlue", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "No Shadow", - "useMultipleDirections": false, - "directions": [ + }, { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "hasCustomCollisionMask": false, - "image": "Upgraded Potion Blue_No Shadow.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 15.793042182922363, - "y": 15.89681625366211 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 + "type": { + "value": "KeyReleased" }, - "customCollisionMask": [] + "parameters": [ + "", + "Left" + ] } - ] - } - ] - }, - { - "name": "Shadow", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ + ], + "actions": [ { - "hasCustomCollisionMask": false, - "image": "Upgraded Potion Blue_Shadow.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 15.793042182922363, - "y": 15.89681625366211 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" }, - "customCollisionMask": [] + "parameters": [ + "Sprites", + "ResourceBar_Sprite", + "-", + "1", + "" + ] } - ] - } - ] - } - ] - }, - { - "assetStoreId": "c2ce913ddbcd055c4e49a1c01b63aff1a3d59e4e1c1845db4c38aedda3712d3a", - "name": "Moon", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "Sticker", - "type": "Sticker::Sticker", - "OnlyFollowPosition": false - } - ], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ + ], + "events": [ { - "hasCustomCollisionMask": false, - "image": "Moon.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "", - "bold": true, - "italic": false, - "name": "SpriteResourceBar_Text", - "smoothed": true, - "tags": "", - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [], - "string": "Sprite Resource Bars", - "font": "", - "characterSize": 20, - "color": { - "b": 255, - "g": 255, - "r": 255 - } - }, - { - "assetStoreId": "", - "bold": true, - "italic": false, - "name": "ChangeAnimation_Text", - "smoothed": true, - "tags": "", - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [], - "string": " Change\nAnimation", - "font": "", - "characterSize": 15, - "color": { - "b": 255, - "g": 255, - "r": 255 - } - }, - { - "assetStoreId": "", - "bold": true, - "italic": false, - "name": "HideSprite_Text", - "smoothed": true, - "tags": "", - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [], - "string": " Zero\nOpacity", - "font": "", - "characterSize": 15, - "color": { - "b": 255, - "g": 255, - "r": 255 - } - }, - { - "assetStoreId": "", - "bold": true, - "italic": false, - "name": "PartialOpacity_Text", - "smoothed": true, - "tags": "", - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [], - "string": " Partial\nOpacity", - "font": "", - "characterSize": 15, - "color": { - "b": 255, - "g": 255, - "r": 255 - } - }, - { - "assetStoreId": "", - "bold": true, - "italic": false, - "name": "TintColor_Text", - "smoothed": true, - "tags": "", - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [], - "string": " Tint\nColor", - "font": "", - "characterSize": 15, - "color": { - "b": 255, - "g": 255, - "r": 255 - } - }, - { - "assetStoreId": "", - "bold": true, - "italic": false, - "name": "NoMaximum_Text", - "smoothed": true, - "tags": "", - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [], - "string": " No\nMaximum", - "font": "", - "characterSize": 15, - "color": { - "b": 255, - "g": 255, - "r": 255 - } - }, - { - "assetStoreId": "", - "bold": true, - "italic": false, - "name": "TiledSpriteResourceBar_Text", - "smoothed": true, - "tags": "", - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [], - "string": "Tiled Sprite Resource Bars", - "font": "", - "characterSize": 20, - "color": { - "b": 255, - "g": 255, - "r": 255 - } - }, - { - "assetStoreId": "", - "bold": true, - "italic": false, - "name": "ResourceMouseX_Text", - "smoothed": true, - "tags": "", - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [], - "string": "Resource \n(Mouse X)", - "font": "", - "characterSize": 30, - "color": { - "b": 255, - "g": 255, - "r": 255 - } - }, - { - "assetStoreId": "", - "bold": true, - "italic": false, - "name": "Title_Text", - "smoothed": true, - "tags": "", - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [], - "string": "Extension: Resource Bar", - "font": "", - "characterSize": 30, - "color": { - "b": 255, - "g": 255, - "r": 255 - } - }, - { - "assetStoreId": "", - "name": "ResourceBarNew", - "tags": "", - "type": "PrimitiveDrawing::Drawer", - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_ShapePainter", - "type": "ResourceBar_ShapePainter::ResourceBar_ShapePainter", - "ValueMin": 0, - "ValueMax": 1, - "TickSpacing": 0, - "BarLength": 200, - "BarThickness": 4, - "InactiveBarColor": "11;255;0", - "InactiveBarOpacity": 96, - "ActiveBarColor": "11;255;0", - "ActiveBarOpacity": 255, - "RoundedBar": false, - "Value": 0, - "ThumbOffset": 0, - "NeedRedraw": true - } - ], - "fillOpacity": 255, - "outlineSize": 1, - "outlineOpacity": 255, - "fillColor": { - "b": 255, - "g": 255, - "r": 255 - }, - "outlineColor": { - "b": 0, - "g": 0, - "r": 0 - }, - "absoluteCoordinates": false, - "clearBetweenFrames": true - }, - { - "assetStoreId": "8d524a624fbc72a1fd6c3975369a7cd55b8a52035887ef664bcd93bf8e273881", - "name": "Heart", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_Sprite", - "type": "ResourceBar::ResourceBar_Sprite", - "StartingUnits": 3, - "CurrentUnits": 3, - "MaxUnits": 3, - "UnitSpacing": 0, - "NextUnitToCreate": 0, - "HideEmptyUnits": false, - "EmptyUnitOpacity": 64, - "EmptyUnitAnimation": 0, - "EmptyColorTint": "255;255;255", - "ActiveUnitOpacity": 255, - "MaxQuantity": 5, - "StartingQuantity": 1, - "Quantity": 1 - } - ], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Emote Heart.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "8d524a624fbc72a1fd6c3975369a7cd55b8a52035887ef664bcd93bf8e273881", - "name": "Heart_Unit", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Emote Heart.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "752e405ef67d9f9d1bd36f9763f1b6fc05633d64700982c0f3118a25a32e39b2", - "height": 16, - "name": "TiledEmptyUiHeart", - "tags": "", - "texture": "tiled_Tiled Empty UI Heart.png", - "type": "TiledSpriteObject::TiledSprite", - "width": 16, - "variables": [], - "effects": [], - "behaviors": [] - }, - { - "assetStoreId": "abf51d082db5a117d9ee2e65299660f6787d47664e4571bad6db3075b3393c5f", - "height": 16, - "name": "Tiled_ResourceBar", - "tags": "", - "texture": "tiled_Tiled Filler UI Heart.png", - "type": "TiledSpriteObject::TiledSprite", - "width": 16, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_TiledSprite", - "type": "ResourceBar::ResourceBar_TiledSprite", - "StartingQuantity": 1, - "CurrentQuantity": 0, - "UnitWidth": 16, - "MaxQuantity": 10, - "Quantity": 1 - } - ] - }, - { - "assetStoreId": "45107bbfbc2b5cbc83e3785f802b99664a23d59e74414e332c9afafac63e1ca3", - "name": "HealthBar", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Health Bar.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "1f3dba67c868b7320572a6591d1d0418f23b7c132df0963cf77286a9149971d9", - "height": 16, - "name": "HealthBarFill", - "tags": "", - "texture": "tiled_Health Bar Fill.png", - "type": "TiledSpriteObject::TiledSprite", - "width": 128, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_TiledSprite", - "type": "ResourceBar::ResourceBar_TiledSprite", - "StartingQuantity": 10, - "CurrentQuantity": 0, - "UnitWidth": 8, - "MaxQuantity": 20, - "Quantity": 10 - } - ] - }, - { - "assetStoreId": "3bd9517a10ad3d98341eea33f0c139f08a1b04f26500e85ac49bb7f9e157a303", - "height": 12, - "name": "EnergyBarFill", - "tags": "", - "texture": "tiled_Energy Bar Fill.png", - "type": "TiledSpriteObject::TiledSprite", - "width": 128, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_TiledSprite", - "type": "ResourceBar::ResourceBar_TiledSprite", - "StartingQuantity": 10, - "CurrentQuantity": 0, - "UnitWidth": 8, - "MaxQuantity": 20, - "Quantity": 10 - } - ] - }, - { - "assetStoreId": "138ee716846635e3e0e5ab7b63752d1a36754f1ac874c70e1b5fa372d5a05474", - "bottomMargin": 6, - "height": 15, - "leftMargin": 11, - "name": "HealthBarBox", - "rightMargin": 9, - "tags": "", - "texture": "Health Bar Box.png", - "tiled": true, - "topMargin": 6, - "type": "PanelSpriteObject::PanelSprite", - "width": 96, - "variables": [], - "effects": [], - "behaviors": [] - }, - { - "assetStoreId": "0714257da345b4ec7de558ac0e42290362b85a79c97160c0e09636cd2fc31e3c", - "name": "Heart_Pixel", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_Sprite", - "type": "ResourceBar::ResourceBar_Sprite", - "StartingQuantity": 0, - "CurrentQuantity": 0, - "MaxQuantity": 5, - "NextUnitToCreate": 0, - "EmptyUnitColorTint": "", - "EmptyUnitOpacity": 0, - "EmptyUnitAnimationNumber": 0, - "ActiveUnitOpacity": 255, - "ActiveUnitColorTint": "255;255;255", - "ActiveUnitAnimationNumber": 0, - "Quantity": 1 - } - ], - "animations": [ - { - "name": "Heart", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "assets\\Heart-1-0.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "0714257da345b4ec7de558ac0e42290362b85a79c97160c0e09636cd2fc31e3c", - "name": "Heart_Pixel_Unit", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "Heart", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "assets\\Heart-1-2.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "", - "bottomMargin": 0, - "height": 62, - "leftMargin": 64, - "name": "HeartPixel_9patch", - "rightMargin": 64, - "tags": "", - "texture": "Health Bar.png", - "tiled": true, - "topMargin": 0, - "type": "PanelSpriteObject::PanelSprite", - "width": 154, - "variables": [], - "effects": [], - "behaviors": [] - }, - { - "assetStoreId": "", - "height": 19, - "name": "Heart_Pixel_Tiled", - "tags": "", - "texture": "assets\\Heart-1-1.png", - "type": "TiledSpriteObject::TiledSprite", - "width": 26, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_TiledSprite", - "type": "ResourceBar::ResourceBar_TiledSprite", - "StartingQuantity": 1, - "CurrentQuantity": 0, - "UnitWidth": 26, - "MaxQuantity": 5, - "Quantity": 1 - } - ] - }, - { - "assetStoreId": "902b8968115fd8572e4f7f6e83ad67a28c447b24e162ffc028333e716c54eb2f", - "name": "Bomb", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_Sprite", - "type": "ResourceBar::ResourceBar_Sprite", - "StartingQuantity": 0, - "CurrentQuantity": 0, - "MaxQuantity": 5, - "NextUnitToCreate": 0, - "EmptyUnitColorTint": "255;255;255", - "EmptyUnitOpacity": 64, - "EmptyUnitAnimationNumber": 0, - "ActiveUnitOpacity": 255, - "ActiveUnitColorTint": "255;255;255", - "ActiveUnitAnimationNumber": 0, - "Quantity": 1 - } - ], - "animations": [ - { - "name": "No Shadow", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Bomb_No Shadow.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Shadow", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Bomb_Shadow.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "902b8968115fd8572e4f7f6e83ad67a28c447b24e162ffc028333e716c54eb2f", - "name": "Bomb_Unit", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "No Shadow", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Bomb_No Shadow.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Shadow", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Bomb_Shadow.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "996e07c73069934a868dc8212a0d7d959dfdd245af964998aad12cf57d252ac3", - "name": "PlusKey", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [ - { - "effectType": "Outline", - "name": "Effect", - "doubleParameters": { - "padding": 2, - "thickness": 2 - }, - "stringParameters": { - "color": "255;255;255" - }, - "booleanParameters": {} - } - ], - "behaviors": [], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Plus Key.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 50, - "y": 50 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "90731de0069b2f3684767c392c6e4c48255a2647bc849497f25b672771290626", - "name": "MinusKey", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [ - { - "effectType": "Outline", - "name": "Effect", - "doubleParameters": { - "padding": 2, - "thickness": 2 - }, - "stringParameters": { - "color": "255;255;255" - }, - "booleanParameters": {} - } - ], - "behaviors": [], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Minus Key.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 50, - "y": 50 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "34375c20ea59e09d2ee67954a88f957e3e54b1b6b11709c90358582201efd2fa", - "name": "Arrow", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_Sprite", - "type": "ResourceBar::ResourceBar_Sprite", - "StartingQuantity": 1, - "CurrentQuantity": 0, - "MaxQuantity": 0, - "NextUnitToCreate": 0, - "EmptyUnitColorTint": "255;255;255", - "EmptyUnitOpacity": 64, - "EmptyUnitAnimationNumber": 0, - "ActiveUnitOpacity": 255, - "ActiveUnitColorTint": "255;255;255", - "ActiveUnitAnimationNumber": 0, - "Quantity": 1 - } - ], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Arrow.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "34375c20ea59e09d2ee67954a88f957e3e54b1b6b11709c90358582201efd2fa", - "name": "Arrow_Unit", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Arrow.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "fc2056e93d67c0f9c0bbc0b5fd35264bce619b4ea8d1896ba95cc8e91da5df7e", - "name": "Key", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_Sprite", - "type": "ResourceBar::ResourceBar_Sprite", - "StartingQuantity": 1, - "CurrentQuantity": 0, - "MaxQuantity": 5, - "NextUnitToCreate": 0, - "EmptyUnitColorTint": "", - "EmptyUnitOpacity": 255, - "EmptyUnitAnimationNumber": 1, - "ActiveUnitOpacity": 255, - "ActiveUnitColorTint": "255;255;255", - "ActiveUnitAnimationNumber": 0, - "Quantity": 1 - } - ], - "animations": [ - { - "name": "Filled", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Key_Filled.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Outline", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Key_Outline.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "fc2056e93d67c0f9c0bbc0b5fd35264bce619b4ea8d1896ba95cc8e91da5df7e", - "name": "Key_Unit", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "Filled", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Key_Filled.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Outline", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Key_Outline.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "aa070e1502e7340c6d3e71f79a2ae05f56f9ad9f7cbb9d6cc587118ed28504aa", - "name": "PlayingCard", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_Sprite", - "type": "ResourceBar::ResourceBar_Sprite", - "StartingQuantity": 1, - "CurrentQuantity": 0, - "MaxQuantity": 5, - "NextUnitToCreate": 0, - "EmptyUnitColorTint": "255;255;255", - "EmptyUnitOpacity": 255, - "EmptyUnitAnimationNumber": 0, - "ActiveUnitOpacity": 255, - "ActiveUnitColorTint": "74;144;226", - "ActiveUnitAnimationNumber": 0, - "Quantity": 1 - } - ], - "animations": [ - { - "name": "Clubs A", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs A.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts A", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts A.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Back Blue 1", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Back Blue 1.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Clubs 02", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs 02.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Back Blue 2", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Back Blue 2.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Back Brown 1", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Back Brown 1.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Back Brown 2", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Back Brown 2.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Back Red 1", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Back Red 1.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Back Red 2", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Back Red 2.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Clubs 03", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs 03.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Clubs 04", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs 04.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Clubs 05", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs 05.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Clubs 06", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs 06.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Clubs 07", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs 07.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Clubs 08", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs 08.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Clubs 09", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs 09.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Clubs 10", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs 10.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Clubs J", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs J.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Clubs K", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs K.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Clubs Q", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs Q.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond 02", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond 02.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond 03", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond 03.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond 04", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond 04.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond 05", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond 05.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond 06", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond 06.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond 07", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond 07.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond 08", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond 08.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond 09", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond 09.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond 10", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond 10.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond A", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond A.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond J", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond J.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond K", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond K.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond Q", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond Q.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts 02", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts 02.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts 03", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts 03.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts 04", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts 04.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts 05", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts 05.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts 06", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts 06.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts 07", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts 07.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts 08", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts 08.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts 09", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts 09.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts 10", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts 10.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts J", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts J.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts K", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts K.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts Q", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts Q.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Joker Black", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Joker Black.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Joker Red", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Joker Red.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades 02", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades 02.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades 03", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades 03.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades 04", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades 04.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades 05", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades 05.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades 06", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades 06.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades 07", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades 07.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades 08", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades 08.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades 09", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades 09.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades 10", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades 10.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades A", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades A.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades J", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades J.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades K", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades K.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades Q", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades Q.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "aa070e1502e7340c6d3e71f79a2ae05f56f9ad9f7cbb9d6cc587118ed28504aa", - "name": "PlayingCard_Unit", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "Clubs A", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs A.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts A", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts A.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Back Blue 1", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Back Blue 1.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Clubs 02", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs 02.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Back Blue 2", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Back Blue 2.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Back Brown 1", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Back Brown 1.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Back Brown 2", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Back Brown 2.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Back Red 1", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Back Red 1.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Back Red 2", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Back Red 2.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Clubs 03", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs 03.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Clubs 04", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs 04.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Clubs 05", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs 05.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Clubs 06", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs 06.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Clubs 07", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs 07.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Clubs 08", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs 08.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Clubs 09", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs 09.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Clubs 10", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs 10.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Clubs J", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs J.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Clubs K", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs K.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Clubs Q", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Clubs Q.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond 02", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond 02.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond 03", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond 03.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond 04", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond 04.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond 05", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond 05.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond 06", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond 06.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond 07", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond 07.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond 08", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond 08.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond 09", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond 09.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond 10", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond 10.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond A", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond A.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond J", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond J.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond K", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond K.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Diamond Q", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Diamond Q.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts 02", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts 02.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts 03", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts 03.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts 04", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts 04.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts 05", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts 05.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts 06", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts 06.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts 07", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts 07.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts 08", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts 08.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts 09", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts 09.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts 10", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts 10.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts J", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts J.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts K", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts K.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Hearts Q", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Hearts Q.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Joker Black", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Joker Black.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Joker Red", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Joker Red.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades 02", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades 02.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades 03", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades 03.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades 04", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades 04.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades 05", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades 05.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades 06", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades 06.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades 07", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades 07.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades 08", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades 08.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades 09", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades 09.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades 10", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades 10.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades A", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades A.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades J", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades J.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades K", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades K.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Spades Q", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Playing Card_Spades Q.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "603d81772c22a6401f0bb19588cb7bb6f384ae840c9e03391874c15a049ade25", - "bottomMargin": 12, - "height": 26, - "leftMargin": 10, - "name": "EnergyBar", - "rightMargin": 10, - "tags": "", - "texture": "Energy Bar.png", - "tiled": true, - "topMargin": 13, - "type": "PanelSpriteObject::PanelSprite", - "width": 78, - "variables": [], - "effects": [], - "behaviors": [] - }, - { - "assetStoreId": "0ad03c70a5c5284cc85170b3852e425db0f4deed8225b1b10722ef26902186d8", - "bottomMargin": 2, - "height": 9, - "leftMargin": 3, - "name": "HealthBar2", - "rightMargin": 3, - "tags": "", - "texture": "Health Bar.png2", - "tiled": true, - "topMargin": 4, - "type": "PanelSpriteObject::PanelSprite", - "width": 78, - "variables": [], - "effects": [], - "behaviors": [] - }, - { - "assetStoreId": "138ee716846635e3e0e5ab7b63752d1a36754f1ac874c70e1b5fa372d5a05474", - "bottomMargin": 6, - "height": 15, - "leftMargin": 11, - "name": "HealthBarBox2", - "rightMargin": 9, - "tags": "", - "texture": "Health Bar Box.png2", - "tiled": true, - "topMargin": 6, - "type": "PanelSpriteObject::PanelSprite", - "width": 96, - "variables": [], - "effects": [], - "behaviors": [] - }, - { - "assetStoreId": "f353e7a7fcbe2d520d0901f187986570a9413978641b27454f285a705a2aba34", - "name": "BarFrame", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "No Shadow", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Bar Frame_No Shadow.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Shadow", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Bar Frame_Shadow.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "7cd73b60b8f9a67bc5405a8dd03008c0fb7931dbcf2bc28312089161e77a3b74", - "name": "BlueBar", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_Sprite", - "type": "ResourceBar::ResourceBar_Sprite", - "StartingQuantity": 12, - "CurrentQuantity": 0, - "MaxQuantity": 24, - "NextUnitToCreate": 0, - "EmptyUnitColorTint": "", - "EmptyUnitOpacity": 0, - "EmptyUnitAnimationNumber": 0, - "ActiveUnitOpacity": 255, - "ActiveUnitColorTint": "255;255;255", - "ActiveUnitAnimationNumber": 0, - "Quantity": 12 - } - ], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Blue bar.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "7cd73b60b8f9a67bc5405a8dd03008c0fb7931dbcf2bc28312089161e77a3b74", - "name": "BlueBar_Unit", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Blue bar.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Initialize game", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DepartScene" - }, - "parameters": [ - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarScene" - }, - "parameters": [ - "MaxResource", - "=", - "CameraBorderRight()" - ] - } - ], - "events": [ - { - "disabled": true, - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DebuggerTools::EnableDebugDraw" - }, - "parameters": [ - "", - "", - "", - "", - "" - ] - } - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 224, - "colorG": 16, - "colorR": 189, - "creationTime": 0, - "name": "Draw Resource bars", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Tiled resource bar", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DepartScene" - }, - "parameters": [ - "" - ] - } - ], - "actions": [], - "events": [ - { - "disabled": true, - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantity" - }, - "parameters": [ - "TiledEmptyUiHeart", - "ResourceBar_TiledSprite", - "=", - "5", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetMaxQuantity" - }, - "parameters": [ - "Tiled_ResourceBar", - "ResourceBar_TiledSprite", - "=", - "5", - "" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "KeyReleased" - }, - "parameters": [ - "", - "Left" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantity" - }, - "parameters": [ - "TiledSprites", - "ResourceBar_TiledSprite", - "-", - "1", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "KeyReleased" - }, - "parameters": [ - "", - "Right" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantity" - }, - "parameters": [ - "TiledSprites", - "ResourceBar_TiledSprite", - "+", - "1", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::DrawResourceBar" - }, - "parameters": [ - "TiledSprites", - "ResourceBar_TiledSprite", - "" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Sprite resource bar", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DepartScene" - }, - "parameters": [ - "" - ] - } - ], - "actions": [], - "events": [ - { - "disabled": true, - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetMaxQuantity" - }, - "parameters": [ - "Sprites", - "ResourceBar_Sprite", - "=", - "5", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetEmptyUnitColor" - }, - "parameters": [ - "Heart", - "ResourceBar_Sprite", - "\"74;144;226\"", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetEmptyUnitOpacity" - }, - "parameters": [ - "Heart", - "ResourceBar_Sprite", - "64", - "" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "KeyReleased" - }, - "parameters": [ - "", - "Left" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "Sprites", - "ResourceBar_Sprite", - "-", - "1", - "" - ] - } - ], - "events": [ - { - "disabled": true, - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "Heart", - "ResourceBar_Sprite", - "-", - "1", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "Key", - "ResourceBar_Sprite", - "-", - "1", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "Arrow", - "ResourceBar_Sprite", - "-", - "1", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "Bomb", - "ResourceBar_Sprite", - "-", - "1", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "Heart_Pixel", - "ResourceBar_Sprite", - "-", - "1", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "BlueBar", - "ResourceBar_Sprite", - "-", - "1", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "PlayingCard", - "ResourceBar_Sprite", - "-", - "1", - "" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "KeyReleased" - }, - "parameters": [ - "", - "Right" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "Sprites", - "ResourceBar_Sprite", - "+", - "1", - "" - ] - } - ], - "events": [ - { - "disabled": true, - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "Heart", - "ResourceBar_Sprite", - "+", - "1", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "Key", - "ResourceBar_Sprite", - "+", - "1", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "Arrow", - "ResourceBar_Sprite", - "+", - "1", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "Bomb", - "ResourceBar_Sprite", - "+", - "1", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "Heart_Pixel", - "ResourceBar_Sprite", - "+", - "1", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "BlueBar", - "ResourceBar_Sprite", - "+", - "1", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "PlayingCard", - "ResourceBar_Sprite", - "+", - "1", - "" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::DrawResourceBar" - }, - "parameters": [ - "Heart", - "ResourceBar_Sprite", - "Heart_Unit", - "5", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::DrawResourceBar" - }, - "parameters": [ - "Key", - "ResourceBar_Sprite", - "Key_Unit", - "5" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::DrawResourceBar" - }, - "parameters": [ - "Arrow", - "ResourceBar_Sprite", - "Arrow_Unit", - "5" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::DrawResourceBar" - }, - "parameters": [ - "Bomb", - "ResourceBar_Sprite", - "Bomb_Unit", - "5" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::DrawResourceBar" - }, - "parameters": [ - "Heart_Pixel", - "ResourceBar_Sprite", - "Heart_Pixel_Unit", - "5" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::DrawResourceBar" - }, - "parameters": [ - "BlueBar", - "ResourceBar_Sprite", - "BlueBar_Unit", - "5" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::DrawResourceBar" - }, - "parameters": [ - "PlayingCard", - "ResourceBar_Sprite", - "PlayingCard_Unit", - "5" - ] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [] - }, - { - "colorB": 224, - "colorG": 16, - "colorR": 189, - "creationTime": 0, - "name": "Buttons", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Hover", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "SourisSurObjet" - }, - "parameters": [ - "Buttons", - "", - "", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "EnableEffect" - }, - "parameters": [ - "Buttons", - "\"Effect\"", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SourisSurObjet" - }, - "parameters": [ - "Buttons", - "", - "", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "EnableEffect" - }, - "parameters": [ - "Buttons", - "\"Effect\"", - "yes" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Clicked", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "MouseButtonReleased" - }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "value": "ScaleWidth" - }, - "parameters": [ - "Buttons", - "=", - "0.9" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SourisSurObjet" - }, - "parameters": [ - "PlusKey", - "", - "", - "" - ] - } - ], - "actions": [], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Sprite", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "disabled": true, - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "Heart", - "ResourceBar_Sprite", - "+", - "1", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "Key", - "ResourceBar_Sprite", - "+", - "1", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "Arrow", - "ResourceBar_Sprite", - "+", - "1", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "Bomb", - "ResourceBar_Sprite", - "+", - "1", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "Heart_Pixel", - "ResourceBar_Sprite", - "+", - "1", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "BlueBar", - "ResourceBar_Sprite", - "+", - "1", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "PlayingCard", - "ResourceBar_Sprite", - "+", - "1", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "Sprites", - "ResourceBar_Sprite", - "+", - "1", - "" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Tiled sprite", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantity" - }, - "parameters": [ - "TiledSprites", - "ResourceBar_TiledSprite", - "+", - "1", - "" - ] - } - ] - } - ], - "parameters": [] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SourisSurObjet" - }, - "parameters": [ - "MinusKey", - "", - "", - "" - ] - } - ], - "actions": [], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Sprite", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "disabled": true, - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "Heart", - "ResourceBar_Sprite", - "-", - "1", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "Key", - "ResourceBar_Sprite", - "-", - "1", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "Arrow", - "ResourceBar_Sprite", - "-", - "1", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "Bomb", - "ResourceBar_Sprite", - "-", - "1", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "Heart_Pixel", - "ResourceBar_Sprite", - "-", - "1", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "BlueBar", - "ResourceBar_Sprite", - "-", - "1", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "PlayingCard", - "ResourceBar_Sprite", - "-", - "1", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" - }, - "parameters": [ - "Sprites", - "ResourceBar_Sprite", - "-", - "1", - "" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Tiled sprite", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantity" - }, - "parameters": [ - "TiledSprites", - "ResourceBar_TiledSprite", - "-", - "1", - "" - ] - } - ] - } - ], - "parameters": [] - } - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Press", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "MouseButtonPressed" - }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SourisSurObjet" - }, - "parameters": [ - "Buttons", - "", - "", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "ChangeColor" - }, - "parameters": [ - "Buttons", - "\"189;16;224\"" - ] - }, - { - "type": { - "value": "ChangeScale" - }, - "parameters": [ - "Buttons", - "=", - "0.9" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "MouseButtonPressed" - }, - "parameters": [ - "", - "Left" - ] - } - ], - "actions": [ - { - "type": { - "value": "ChangeColor" - }, - "parameters": [ - "Buttons", - "\"255;255;255\"" - ] - }, - { - "type": { - "value": "ChangeScale" - }, - "parameters": [ - "Buttons", - "=", - "1" - ] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [] - } - ], - "layers": [ - { - "ambientLightColorB": 32, - "ambientLightColorG": 0, - "ambientLightColorR": 0, - "followBaseLayerCamera": false, - "isLightingLayer": false, - "name": "", - "visibility": true, - "cameras": [ - { - "defaultSize": true, - "defaultViewport": true, - "height": 0, - "viewportBottom": 1, - "viewportLeft": 0, - "viewportRight": 1, - "viewportTop": 0, - "width": 0 - } - ], - "effects": [] - } - ], - "behaviorsSharedData": [ - { - "name": "Health", - "type": "Health::Health" - }, - { - "name": "ResourceBar_ShapePainter", - "type": "ResourceBar::ResourceBar_ShapePainter" - }, - { - "name": "ResourceBar_Sprite", - "type": "ResourceBar::ResourceBar_Sprite" - }, - { - "name": "ResourceBar_TiledSprite", - "type": "ResourceBar::ResourceBar_TiledSprite" - }, - { - "name": "ShakeObject_PositionAngleScale", - "type": "ShakeObject::ShakeObject_PositionAngleScale" - }, - { - "name": "Shield", - "type": "Health::Shield" - }, - { - "name": "Sticker", - "type": "Sticker::Sticker" - } - ] - }, - { - "b": 0, - "disableInputWhenNotFocused": true, - "mangledName": "Shape_32Painter_32_40Game_41", - "name": "Shape Painter (Game)", - "r": 0, - "standardSortMethod": true, - "stopSoundsOnStartup": true, - "title": "", - "v": 0, - "uiSettings": { - "grid": true, - "gridType": "rectangular", - "gridWidth": 8, - "gridHeight": 8, - "gridOffsetX": 0, - "gridOffsetY": 0, - "gridColor": 10401023, - "gridAlpha": 0.2, - "snap": true, - "zoomFactor": 1.06, - "windowMask": false - }, - "objectsGroups": [], - "variables": [], - "instances": [ - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "Shield_Bar", - "persistentUuid": "b581caf8-44ee-423e-b57e-cdd910fb7374", - "width": 0, - "x": 192, - "y": 216, - "zOrder": 2, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "ResourceMouseX_Bar", - "persistentUuid": "17a23f4a-a442-4b52-8380-9f2b6a9c2494", - "width": 0, - "x": 192, - "y": 536, - "zOrder": 3, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 80, - "layer": "", - "name": "Fly", - "persistentUuid": "e0b70af7-7a81-41c3-88ac-88305df91ed2", - "width": 128, - "x": 481.13275146484375, - "y": 293, - "zOrder": 4, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 128, - "layer": "", - "name": "Moon", - "persistentUuid": "8428ea9d-6d1e-41b0-9f54-1840f3378846", - "width": 129.1327362060547, - "x": 480, - "y": 272, - "zOrder": 0, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "Health_Text", - "persistentUuid": "921b2f28-8bee-4ab2-a6cc-1ee823c5215e", - "width": 0, - "x": 48, - "y": 96, - "zOrder": 9, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "Shield_Text", - "persistentUuid": "a231209b-a5d8-4280-868d-1e9beb31527b", - "width": 0, - "x": 48, - "y": 208, - "zOrder": 10, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "ResourceMouseX_Text", - "persistentUuid": "07fda015-55f8-4959-80fc-f1ee3074d028", - "width": 0, - "x": 32, - "y": 512, - "zOrder": 11, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "Title_Text", - "persistentUuid": "29ae792c-1331-430c-aadf-70fa8d9e36d6", - "width": 0, - "x": 208, - "y": 16, - "zOrder": 12, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "Health_Bar", - "persistentUuid": "c411b32c-f357-4b8f-9e87-f3fdde7657d5", - "width": 0, - "x": 192, - "y": 104, - "zOrder": 1, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - } - ], - "objects": [ - { - "assetStoreId": "", - "name": "Health_Bar", - "tags": "", - "type": "PrimitiveDrawing::Drawer", - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_ShapePainter", - "type": "ResourceBar::ResourceBar_ShapePainter", - "ValueMin": 0, - "ValueMax": 1, - "TickSpacing": 0, - "BarLength": 200, - "BarThickness": 16, - "InactiveBarColor": "11;255;0", - "InactiveBarOpacity": 96, - "ActiveBarColor": " 11;255;0", - "ActiveBarOpacity": 255, - "RoundedBar": true, - "Value": 0, - "ThumbOffset": 0, - "NeedRedraw": true - } - ], - "fillOpacity": 255, - "outlineSize": 1, - "outlineOpacity": 255, - "fillColor": { - "b": 255, - "g": 255, - "r": 255 - }, - "outlineColor": { - "b": 0, - "g": 0, - "r": 0 - }, - "absoluteCoordinates": false, - "clearBetweenFrames": true - }, - { - "assetStoreId": "", - "name": "MiniHealth_Bar", - "tags": "", - "type": "PrimitiveDrawing::Drawer", - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_ShapePainter", - "type": "ResourceBar::ResourceBar_ShapePainter", - "ValueMin": 0, - "ValueMax": 1, - "TickSpacing": 0, - "BarLength": 50, - "BarThickness": 4, - "InactiveBarColor": "11;255;0", - "InactiveBarOpacity": 96, - "ActiveBarColor": " 11;255;0", - "ActiveBarOpacity": 255, - "Value": 0, - "ThumbOffset": 0, - "NeedRedraw": true - }, - { - "name": "Sticker", - "type": "Sticker::Sticker", - "OnlyFollowPosition": true - } - ], - "fillOpacity": 255, - "outlineSize": 1, - "outlineOpacity": 255, - "fillColor": { - "b": 255, - "g": 255, - "r": 255 - }, - "outlineColor": { - "b": 0, - "g": 0, - "r": 0 - }, - "absoluteCoordinates": false, - "clearBetweenFrames": true - }, - { - "assetStoreId": "", - "name": "Shield_Bar", - "tags": "", - "type": "PrimitiveDrawing::Drawer", - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_ShapePainter", - "type": "ResourceBar::ResourceBar_ShapePainter", - "ValueMin": 0, - "ValueMax": 1, - "TickSpacing": 0, - "ThumbShape": "circle", - "ThumbWidth": 20, - "ThumbHeight": 20, - "ThumbColor": " 24;119;211", - "ThumbOpacity": 255, - "BarLength": 200, - "BarThickness": 16, - "InactiveBarColor": "144;19;254", - "InactiveBarOpacity": 96, - "ActiveBarColor": " 144;19;254", - "ActiveBarOpacity": 255, - "HaloRadius": 24, - "HaloOpacityHover": 32, - "HaloOpacityClick": 64, - "RoundedBar": true, - "Enabled": true, - "IsBeingDragged": false, - "Value": 0, - "ThumbOffset": 0, - "NeedRedraw": true, - "IsHovered": false, - "MouseX": 0, - "MouseY": 0, - "CurrentHaloRadius": 0, - "HaloGrowSpeed": 0.2, - "TargetHaloRadius": 0.19999992847442627 - } - ], - "fillOpacity": 255, - "outlineSize": 1, - "outlineOpacity": 255, - "fillColor": { - "b": 255, - "g": 255, - "r": 255 - }, - "outlineColor": { - "b": 0, - "g": 0, - "r": 0 - }, - "absoluteCoordinates": false, - "clearBetweenFrames": true - }, - { - "assetStoreId": "", - "name": "ResourceMouseX_Bar", - "tags": "", - "type": "PrimitiveDrawing::Drawer", - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_ShapePainter", - "type": "ResourceBar::ResourceBar_ShapePainter", - "ValueMin": 0, - "ValueMax": 1, - "TickSpacing": 0, - "ThumbShape": "circle", - "ThumbWidth": 20, - "ThumbHeight": 20, - "ThumbColor": "248;231;28", - "ThumbOpacity": 255, - "BarLength": 200, - "BarThickness": 16, - "InactiveBarColor": "248;231;28", - "InactiveBarOpacity": 96, - "ActiveBarColor": "248;231;28", - "ActiveBarOpacity": 255, - "HaloRadius": 24, - "HaloOpacityHover": 32, - "HaloOpacityClick": 64, - "RoundedBar": false, - "Enabled": true, - "IsBeingDragged": false, - "Value": 0, - "ThumbOffset": 0, - "NeedRedraw": true, - "IsHovered": false, - "MouseX": 0, - "MouseY": 0, - "CurrentHaloRadius": 0, - "HaloGrowSpeed": 0.2, - "TargetHaloRadius": 0.19999992847442627 - } - ], - "fillOpacity": 255, - "outlineSize": 1, - "outlineOpacity": 255, - "fillColor": { - "b": 255, - "g": 255, - "r": 255 - }, - "outlineColor": { - "b": 0, - "g": 0, - "r": 0 - }, - "absoluteCoordinates": false, - "clearBetweenFrames": true - }, - { - "assetStoreId": "48a2d179a1921276abe3f99ce3cf195fa7c310bc511fa215d9647c3fb9027921", - "name": "Fly", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "Health", - "type": "Health::Health", - "Health": 100, - "DamageCooldown": 0, - "MaxHealth": 100, - "IsJustDamaged": false, - "HealthRegenRate": 0, - "HealthRegenDelay": 0, - "AllowOverHealing": false, - "HitAtLeastOnce": false - }, - { - "name": "ShakeObject_PositionAngleScale", - "type": "ShakeObject::ShakeObject_PositionAngleScale" - }, - { - "name": "Shield", - "type": "Health::Shield", - "RequireHealth": "Health", - "MaxShieldPoints": 30, - "ShieldDuration": 5, - "ShieldPoints": 0, - "ShieldRegenRate": 0, - "ShieldBlocksExcessDamage": false, - "ShieldRegenDelay": 0, - "RegenShieldWhenZeroPoints": false, - "IsShieldJustDamaged": false - } - ], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.05000000074505806, - "sprites": [ - { - "hasCustomCollisionMask": true, - "image": "Fly_1.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_2.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_3.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_4.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_5.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_6.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_7.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_8.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_9.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_10.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "574655a4565bd983af8f5dd98e0fd8cda3bd67cf929c00d3db317e898322e06b", - "name": "Star", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "LargeNarrow", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Star_LargeNarrow.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "LargeWide", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Star_LargeWide.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Medium", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Star_Medium.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Small", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Star_Small.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "794ab341df538c9b3bdad418dfdcccc7be5d90f3d0b5929d6d528a542c6ed3ae", - "name": "SilverShield", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [ - { - "effectType": "Outline", - "name": "Effect", - "doubleParameters": { - "padding": 2, - "thickness": 2 - }, - "stringParameters": { - "color": "255;255;255" - }, - "booleanParameters": {} - } - ], - "behaviors": [], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Silver shield.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 14.592423439025879, - "y": 15.103429794311523 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "d2bc2d266f5bb666ef68023abc14f51bc8fe8b5222af931efa378ac10c50f98a", - "name": "MeteorDetailed", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "Large", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": true, - "image": "Meteor Detailed_Large.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 65.07723999023438, - "y": 63.82252502441406 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [ - [ - { - "x": 20, - "y": 20 - }, - { - "x": 110, - "y": 20 - }, - { - "x": 110, - "y": 110 - }, - { - "x": 20, - "y": 110 - } - ] - ] - } - ] - } - ] - }, - { - "name": "Small", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": true, - "image": "Meteor Detailed_Small.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 65.07723999023438, - "y": 63.82252502441406 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [ - [ - { - "x": 20, - "y": 20 - }, - { - "x": 110, - "y": 20 - }, - { - "x": 110, - "y": 110 - }, - { - "x": 20, - "y": 110 - } - ] - ] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "a1e62f5a19d1fe476e2ad0b8977768d020cc1dc55423427f79a486664cebb631", - "name": "UpgradedPotionBlue", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "No Shadow", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Upgraded Potion Blue_No Shadow.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 15.793042182922363, - "y": 15.89681625366211 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Shadow", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Upgraded Potion Blue_Shadow.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 15.793042182922363, - "y": 15.89681625366211 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "c2ce913ddbcd055c4e49a1c01b63aff1a3d59e4e1c1845db4c38aedda3712d3a", - "name": "Moon", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "Sticker", - "type": "Sticker::Sticker", - "OnlyFollowPosition": false - } - ], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Moon.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "", - "bold": true, - "italic": false, - "name": "Health_Text", - "smoothed": true, - "tags": "", - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [], - "string": "Health", - "font": "", - "characterSize": 30, - "color": { - "b": 255, - "g": 255, - "r": 255 - } - }, - { - "assetStoreId": "", - "bold": true, - "italic": false, - "name": "Shield_Text", - "smoothed": true, - "tags": "", - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [], - "string": "Shield", - "font": "", - "characterSize": 30, - "color": { - "b": 255, - "g": 255, - "r": 255 - } - }, - { - "assetStoreId": "", - "bold": true, - "italic": false, - "name": "ResourceMouseX_Text", - "smoothed": true, - "tags": "", - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [], - "string": "Resource \n(Mouse X)", - "font": "", - "characterSize": 30, - "color": { - "b": 255, - "g": 255, - "r": 255 - } - }, - { - "assetStoreId": "", - "bold": true, - "italic": false, - "name": "Title_Text", - "smoothed": true, - "tags": "", - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [], - "string": "Extension: Resource Bar", - "font": "", - "characterSize": 30, - "color": { - "b": 255, - "g": 255, - "r": 255 - } - }, - { - "assetStoreId": "", - "name": "ResourceBarNew", - "tags": "", - "type": "PrimitiveDrawing::Drawer", - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_ShapePainter", - "type": "ResourceBar_ShapePainter::ResourceBar_ShapePainter", - "ValueMin": 0, - "ValueMax": 1, - "TickSpacing": 0, - "BarLength": 200, - "BarThickness": 4, - "InactiveBarColor": "11;255;0", - "InactiveBarOpacity": 96, - "ActiveBarColor": "11;255;0", - "ActiveBarOpacity": 255, - "RoundedBar": false, - "Value": 0, - "ThumbOffset": 0, - "NeedRedraw": true - } - ], - "fillOpacity": 255, - "outlineSize": 1, - "outlineOpacity": 255, - "fillColor": { - "b": 255, - "g": 255, - "r": 255 - }, - "outlineColor": { - "b": 0, - "g": 0, - "r": 0 - }, - "absoluteCoordinates": false, - "clearBetweenFrames": true - }, - { - "assetStoreId": "8d524a624fbc72a1fd6c3975369a7cd55b8a52035887ef664bcd93bf8e273881", - "name": "Unit_ResourceBar", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_Sprite", - "type": "ResourceBar::ResourceBar_Sprite", - "StartingUnits": 3, - "CurrentUnits": 3, - "MaxUnits": 3, - "UnitSpacing": 0, - "NextUnitToCreate": 0, - "HideEmptyUnits": false, - "EmptyUnitOpacity": 64, - "EmptyUnitAnimation": 0, - "EmptyColorTint": "255;255;255", - "ActiveUnitOpacity": 255 - } - ], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Emote Heart.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "8d524a624fbc72a1fd6c3975369a7cd55b8a52035887ef664bcd93bf8e273881", - "name": "Heart_Unit", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Emote Heart.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "752e405ef67d9f9d1bd36f9763f1b6fc05633d64700982c0f3118a25a32e39b2", - "height": 16, - "name": "TiledEmptyUiHeart", - "tags": "", - "texture": "tiled_Tiled Empty UI Heart.png", - "type": "TiledSpriteObject::TiledSprite", - "width": 16, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_TiledSprite", - "type": "ResourceBar::ResourceBar_TiledSprite", - "StartingQuantity": 0, - "CurrentQuantity": 0, - "UnitWidth": 16, - "MaxQuantity": 0 - } - ] - }, - { - "assetStoreId": "abf51d082db5a117d9ee2e65299660f6787d47664e4571bad6db3075b3393c5f", - "height": 16, - "name": "Tiled_ResourceBar", - "tags": "", - "texture": "tiled_Tiled Filler UI Heart.png", - "type": "TiledSpriteObject::TiledSprite", - "width": 16, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_TiledSprite", - "type": "ResourceBar::ResourceBar_TiledSprite", - "StartingQuantity": 6, - "CurrentQuantity": 0, - "UnitWidth": 16 - } - ] - }, - { - "assetStoreId": "45107bbfbc2b5cbc83e3785f802b99664a23d59e74414e332c9afafac63e1ca3", - "name": "HealthBar", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Health Bar.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "1f3dba67c868b7320572a6591d1d0418f23b7c132df0963cf77286a9149971d9", - "height": 128, - "name": "HealthBarFill", - "tags": "", - "texture": "tiled_Health Bar Fill.png", - "type": "TiledSpriteObject::TiledSprite", - "width": 128, - "variables": [], - "effects": [], - "behaviors": [] - }, - { - "assetStoreId": "3bd9517a10ad3d98341eea33f0c139f08a1b04f26500e85ac49bb7f9e157a303", - "height": 128, - "name": "EnergyBarFill", - "tags": "", - "texture": "tiled_Energy Bar Fill.png", - "type": "TiledSpriteObject::TiledSprite", - "width": 128, - "variables": [], - "effects": [], - "behaviors": [] - }, - { - "assetStoreId": "138ee716846635e3e0e5ab7b63752d1a36754f1ac874c70e1b5fa372d5a05474", - "bottomMargin": 6, - "height": 15, - "leftMargin": 11, - "name": "HealthBarBox", - "rightMargin": 9, - "tags": "", - "texture": "Health Bar Box.png", - "tiled": true, - "topMargin": 6, - "type": "PanelSpriteObject::PanelSprite", - "width": 96, - "variables": [], - "effects": [], - "behaviors": [] - }, - { - "assetStoreId": "7c1048053bc2d851157c4e0868c4ac0338f4ca93170d28990a7f64eaed2a1723", - "name": "HealthIndicator", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "Black Outline Empty", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Health Indicator_Black Outline Empty.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Black Outline Heart", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Health Indicator_Black Outline Heart.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "White Outline Empty", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Health Indicator_White Outline Empty.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "White Outline Heart", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Health Indicator_White Outline Heart.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "0714257da345b4ec7de558ac0e42290362b85a79c97160c0e09636cd2fc31e3c", - "name": "Heart", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Heart.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Initialize game", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DepartScene" - }, - "parameters": [ - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "Opacity" - }, - "parameters": [ - "Moon", - "=", - "128" - ] - }, - { - "type": { - "value": "ModVarScene" - }, - "parameters": [ - "MaxResource", - "=", - "CameraBorderRight()" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ChangeColor" - }, - "parameters": [ - "Moon", - "\"144;19;254\"" - ] - }, - { - "type": { - "value": "SetCenter" - }, - "parameters": [ - "Moon", - "=", - "Fly.CenterX()", - "=", - "Fly.CenterY()-10" - ] - }, - { - "type": { - "value": "Sticker::Sticker::Stick" - }, - "parameters": [ - "Moon", - "Sticker", - "Fly", - "" - ] - }, - { - "type": { - "value": "Cache" - }, - "parameters": [ - "Moon" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Create" - }, - "parameters": [ - "", - "MiniHealth_Bar", - "Fly.X()", - "Fly.Y()", - "\"\"" - ] - }, - { - "type": { - "value": "MettreXY" - }, - "parameters": [ - "MiniHealth_Bar", - "=", - "Fly.CenterX() - MiniHealth_Bar.ResourceBar_ShapePainter::BarLength()/2", - "=", - "Fly.BoundingBoxTop()" - ] - }, - { - "type": { - "value": "Sticker::Sticker::Stick" - }, - "parameters": [ - "MiniHealth_Bar", - "Sticker", - "Fly", - "" - ] - } - ] - }, - { - "disabled": true, - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DebuggerTools::EnableDebugDraw" - }, - "parameters": [ - "", - "", - "", - "", - "" - ] - } - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "folded": true, - "name": "Spawn items", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "RepeatEveryXSeconds::Repeat" - }, - "parameters": [ - "", - "\"SpawnShield\"", - "5", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "Create" - }, - "parameters": [ - "", - "SilverShield", - "Fly.CenterX()", - "CameraBorderTop()", - "" - ] - }, - { - "type": { - "value": "AddForceAL" - }, - "parameters": [ - "SilverShield", - "90", - "75", - "1" - ] - }, - { - "type": { - "value": "ChangeColor" - }, - "parameters": [ - "SilverShield", - "\"144;19;254\"" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "RepeatEveryXSeconds::Repeat" - }, - "parameters": [ - "", - "\"SpawnHealth\"", - "12", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "Create" - }, - "parameters": [ - "", - "UpgradedPotionBlue", - "Fly.CenterX()", - "CameraBorderBottom()", - "" - ] - }, - { - "type": { - "value": "AddForceAL" - }, - "parameters": [ - "UpgradedPotionBlue", - "270", - "75", - "1" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "RepeatEveryXSeconds::Repeat" - }, - "parameters": [ - "", - "\"SpawnRock\"", - "1", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "Create" - }, - "parameters": [ - "", - "MeteorDetailed", - "CameraBorderLeft()", - "Fly.CenterY()", - "" - ] - }, - { - "type": { - "value": "AddForceAL" - }, - "parameters": [ - "MeteorDetailed", - "0", - "300", - "1" - ] - }, - { - "type": { - "value": "ChangeScale" - }, - "parameters": [ - "MeteorDetailed", - "=", - "0.5" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Rotate" - }, - "parameters": [ - "MeteorDetailed", - "30", - "" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "folded": true, - "name": "Collisions", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Shield::IsShieldActive" - }, - "parameters": [ - "Fly", - "Shield", - "" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "Montre" - }, - "parameters": [ - "Moon", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "Health::Shield::IsShieldActive" - }, - "parameters": [ - "Fly", - "Shield", - "" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "Cache" - }, - "parameters": [ - "Moon" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "CollisionNP" - }, - "parameters": [ - "SilverShield", - "Fly", - "", - "", - "" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "Health::Shield::ActivateShield" - }, - "parameters": [ - "Fly", - "Shield", - "" - ] - }, - { - "type": { - "value": "Delete" - }, - "parameters": [ - "SilverShield", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "CollisionNP" - }, - "parameters": [ - "UpgradedPotionBlue", - "Fly", - "", - "", - "" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::Heal" - }, - "parameters": [ - "Fly", - "Health", - "100", - "" - ] - }, - { - "type": { - "value": "Delete" - }, - "parameters": [ - "UpgradedPotionBlue", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "CollisionNP" - }, - "parameters": [ - "MeteorDetailed", - "Fly", - "", - "", - "" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "Health::Shield::ShieldHit" - }, - "parameters": [ - "Fly", - "Shield", - "10", - "" - ] - }, - { - "type": { - "value": "Delete" - }, - "parameters": [ - "MeteorDetailed", - "" - ] - }, - { - "type": { - "value": "ShakeObject::ShakeObject_PositionAngleScale::ShakeObject_PositionAngleScale" - }, - "parameters": [ - "Fly", - "ShakeObject_PositionAngleScale", - "", - "10", - "10", - "5", - "", - "", - "", - "" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 224, - "colorG": 16, - "colorR": 189, - "creationTime": 0, - "name": "Draw Resource bars", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "This resource shows the horizontal mouse position in scene, but it can be used for anything!", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarScene" - }, - "parameters": [ - "MyResource", - "=", - "MouseX()" - ] - } - ] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Shape painter resource bar", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::DrawHealthBar" - }, - "parameters": [ - "MiniHealth_Bar", - "ResourceBar_ShapePainter", - "Fly", - "Health", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::DrawShieldBar" - }, - "parameters": [ - "Shield_Bar", - "ResourceBar_ShapePainter", - "Fly", - "Shield", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::DrawResourceBar" - }, - "parameters": [ - "ResourceMouseX_Bar", - "ResourceBar_ShapePainter", - "Variable(MyResource)", - "Variable(MaxResource)", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::DrawHealthBar" - }, - "parameters": [ - "Health_Bar", - "ResourceBar_ShapePainter", - "Fly", - "Health", - "" - ] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [] - } - ], - "layers": [ - { - "ambientLightColorB": 32, - "ambientLightColorG": 0, - "ambientLightColorR": 0, - "followBaseLayerCamera": false, - "isLightingLayer": false, - "name": "", - "visibility": true, - "cameras": [ - { - "defaultSize": true, - "defaultViewport": true, - "height": 0, - "viewportBottom": 1, - "viewportLeft": 0, - "viewportRight": 1, - "viewportTop": 0, - "width": 0 - } - ], - "effects": [] - } - ], - "behaviorsSharedData": [ - { - "name": "Health", - "type": "Health::Health" - }, - { - "name": "ResourceBar_ShapePainter", - "type": "ResourceBar::ResourceBar_ShapePainter" - }, - { - "name": "ResourceBar_Sprite", - "type": "ResourceBar::ResourceBar_Sprite" - }, - { - "name": "ResourceBar_TiledSprite", - "type": "ResourceBar::ResourceBar_TiledSprite" - }, - { - "name": "ShakeObject_PositionAngleScale", - "type": "ShakeObject::ShakeObject_PositionAngleScale" - }, - { - "name": "Shield", - "type": "Health::Shield" - }, - { - "name": "Sticker", - "type": "Sticker::Sticker" - } - ] - } - ], - "externalEvents": [], - "eventsFunctionsExtensions": [ - { - "author": "@4ian", - "category": "Game mechanic", - "extensionNamespace": "", - "fullName": "Fire bullets", - "helpPath": "https://gdevelop.io/game-example/fire-bullet", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWJ1bGxldCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNCwyMkgxMFYyMUgxNFYyMk0xMywxMFY3SDExVjEwTDEwLDExLjVWMjBIMTRWMTEuNUwxMywxME0xMiwyQzEyLDIgMTEsMyAxMSw1VjZIMTNWNUMxMyw1IDEzLDMgMTIsMloiIC8+PC9zdmc+", - "name": "FireBullet", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/bullet.svg", - "shortDescription": "Fire bullets, manage ammo, reloading, and overheating.", - "version": "0.3.0", - "description": "Fire bullets, manage ammo, reloading, and overheating.\n\nFiring bullets:\n- Cooldown: Time between shots (seconds)\n- Bullet Quantity: Number of bullets created each time Fire Bullet action is used. \n- Angle Variance: Each bullet trajectory will be adjusted by a random value within this range (degrees)\n- Firing Arc: Range of angles (in degrees) that bullets will shoot. Bullets are evenly spread within this range.\n- Rotate bullet: Change the angle of each bullet to match the direction it is travelling (enabled by default)\n\n Ammo:\n- Starting ammo\n- Max ammo\n- Shots per reload. Use 0 to disable reloading\n- Reload duration\n- Automatic reloading is enabled by default, but it can also be done manually.\n\nOverheat:\n- Heat increase per shot. Object is Overheated when Heat reaches 1.\n- Cooling rate per second\n- When overheated, the object cannot fire any bullets\n\nStatistics:\n- Total bullets created\n- Total shots taken\n- Total reloads completed\n\nBullets:\n- Each bullet is assigned several variables that can be used for advanced object picking\n- __FireBullet.BulletID = Unique number for every bullet created\n- __FireBullet.BatchID = Unique number for all bullets created in the same frame\n- __FireBullet.BatchOrderID = Unique number for each bullet in the same batch. Can be used to identify the position in the firing arc.", - "origin": { - "identifier": "FireBullet", - "name": "gdevelop-extension-store" - }, - "tags": [ - "fire", - "bullet", - "spawn", - "firerate", - "reload", - "weapon", - "ranged", - "ammo", - "overheat" - ], - "authorIds": [ - "wWP8BSlAW0UP4NeaHa2LcmmDzmH2", - "xpwUwByyImTDcHEqDUqfyg0oRBt1", - "2OwwM8ToR9dx9RJ2sAKTcrLmCB92", - "gqDaZjCfevOOxBYkK6zlhtZnXCg1" - ], - "dependencies": [], - "eventsFunctions": [], - "eventsBasedBehaviors": [ - { - "description": "Fire bullets, manage ammo, reloading, and overheating.", - "fullName": "Fire bullets", - "name": "FireBullet", - "objectType": "", - "eventsFunctions": [ - { - "fullName": "", - "functionType": "Action", - "name": "onCreated", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__FireBullet.FiringCooldown\"" - ] - }, - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyStartingAmmo()" - ] - }, - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyShotsPerReload()" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "fullName": "", - "functionType": "Action", - "name": "doStepPreEvents", - "sentence": "", - "events": [ - { - "colorB": 224, - "colorG": 16, - "colorR": 189, - "creationTime": 0, - "name": "Take a shot (if triggered)", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Creators can use the \"FireBullet\" action multiple times in a frame and it will be counted as a single \"shot\".", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyHasJustFired" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Reset firing cooldown", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__FireBullet.FiringCooldown\"" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update ammo", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Subtract 1 from ammo (if not unlimited ammo)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "FireBullet::FireBullet::PropertyUnlimitedAmmo" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "-", - "1" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update reloading counter", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyShotsPerReload" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" - }, - "parameters": [ - "Object", - "Behavior", - "-", - "1" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Automatically reload gun when needed", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyAutomaticReloading" - }, - "parameters": [ - "Object", - "Behavior" - ] - }, - { - "type": { - "value": "FireBullet::FireBullet::IsReloadNeeded" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "inverted": true, - "value": "FireBullet::FireBullet::IsReloadInProgress" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::ReloadAmmo" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update Overheat", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Increase heat (if needed)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyHeatIncreasePerShot" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyHeatLevel" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "Object.Behavior::PropertyHeatIncreasePerShot()" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Check if this caused overheat", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyOverheatDuration" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - }, - { - "type": { - "value": "FireBullet::FireBullet::IsOverheated" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__FireBullet.OverheatDuration\"" - ] - } - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update statistics", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalShotsFired" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "1" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Reset firing detection", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyHasJustFired" - }, - "parameters": [ - "Object", - "Behavior", - "=" - ] - } - ] - } - ], - "parameters": [] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Reload gun when needed", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Detect when reload is completed", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::IsReloadInProgress" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "CompareObjectTimer" - }, - "parameters": [ - "Object", - "\"__FireBullet.ReloadingTimer\"", - ">=", - "Object.Behavior::PropertyReloadDuration()" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalReloadsCompleted" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "1" - ] - }, - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyReloadInProgress" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::IsUnlimitedAmmo" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyShotsPerReload()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Only reload the amount of ammo available", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "FireBullet::FireBullet::IsUnlimitedAmmo" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::PropertyShotsPerReload(), Object.Behavior::PropertyAmmoQuantity())" - ] - } - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Reduce heat level (based on cooling rate)", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "Object.Behavior::HeatLevel()", - ">", - "0" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyExponentialCoolingRate" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyHeatLevel" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "max(0, Object.Behavior::PropertyHeatLevel() - TimeDelta() * Object.Behavior::PropertyExponentialCoolingRate() * Object.Behavior::PropertyHeatLevel())" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyLinearCoolingRate" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyHeatLevel" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "max(0, Object.Behavior::PropertyHeatLevel() - TimeDelta() * Object.Behavior::PropertyLinearCoolingRate())" - ] - } - ] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Fire bullets toward a position.", - "fullName": "Fire bullets toward a position", - "functionType": "Action", - "name": "FireTowardPosition", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward position _PARAM5_;_PARAM6_ with speed _PARAM7_ px/s", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Calculate the trajectory angle and use the \"Fire bullets\" action", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::Fire" - }, - "parameters": [ - "Object", - "Behavior", - "GetArgumentAsNumber(\"XPosition\")", - "GetArgumentAsNumber(\"YPosition\")", - "Bullet", - "Object.AngleToPosition(GetArgumentAsNumber(\"TargetXPosition\"),GetArgumentAsNumber(\"TargetYPosition\"))", - "GetArgumentAsNumber(\"Speed\")", - "" - ] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "X position, where to create the bullet", - "name": "XPosition", - "type": "expression" - }, - { - "description": "Y position, where to create the bullet", - "name": "YPosition", - "type": "expression" - }, - { - "description": "The bullet object", - "name": "Bullet", - "type": "objectList" - }, - { - "description": "Target X position", - "name": "TargetXPosition", - "type": "expression" - }, - { - "description": "Target Y position", - "name": "TargetYPosition", - "type": "expression" - }, - { - "description": "Speed of the bullet, in pixels per second", - "name": "Speed", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Fire bullets in the direction of a given angle.", - "fullName": "Fire bullets toward an angle", - "functionType": "Action", - "name": "Fire", - "sentence": "Fire _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, toward angle _PARAM5_ and speed _PARAM6_ px/s", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Check if ready to shoot", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::IsReadyToShoot" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyHasJustFired" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Single bullet", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "Object.Behavior::PropertyBulletQuantity()", - "=", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::FireSingleBullet" - }, - "parameters": [ - "Object", - "Behavior", - "GetArgumentAsNumber(\"XPosition\")", - "GetArgumentAsNumber(\"YPosition\")", - "Bullet", - "GetArgumentAsNumber(\"Angle\")", - "GetArgumentAsNumber(\"Speed\")", - "" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Multiple bullets", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "Object.Behavior::PropertyBulletQuantity()", - ">", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__FireBullet.CurrentBulletAngle", - "=", - "GetArgumentAsNumber(\"Angle\") - Object.Behavior::PropertyFiringArc()/2" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__FireBullet.BatchOrderID", - "=", - "0" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Repeat", - "repeatExpression": "Object.Behavior::PropertyBulletQuantity()", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::FireSingleBullet" - }, - "parameters": [ - "Object", - "Behavior", - "GetArgumentAsNumber(\"XPosition\")", - "GetArgumentAsNumber(\"YPosition\")", - "Bullet", - "Object.Variable(__FireBullet.CurrentBulletAngle) + RandomInRange(-Object.Behavior::PropertyAngleVariance(),Object.Behavior::PropertyAngleVariance())", - "GetArgumentAsNumber(\"Speed\")", - "" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move temp variable to the next angle a bullet will be sent", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__FireBullet.CurrentBulletAngle", - "+", - "Object.Behavior::PropertyFiringArc() / (Object.Behavior::PropertyBulletQuantity() - 1)" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__FireBullet.BatchOrderID", - "+", - "1" - ] - } - ] - } - ] - } - ] - } - ], - "parameters": [] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "X position, where to create the bullet", - "name": "XPosition", - "type": "expression" - }, - { - "description": "Y position, where to create the bullet", - "name": "YPosition", - "type": "expression" - }, - { - "description": "The bullet object", - "name": "Bullet", - "type": "objectList" - }, - { - "description": "Angle of the bullet, in degrees", - "name": "Angle", - "type": "expression" - }, - { - "description": "Speed of the bullet, in pixels per second", - "name": "Speed", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Fire a single bullet. This is only meant to be used inside the \"Fire bullet\" action.", - "fullName": "Fire a single bullet", - "functionType": "Action", - "group": "Firing", - "name": "FireSingleBullet", - "private": true, - "sentence": "Fire a single bullet _PARAM4_ from _PARAM0_, at position _PARAM2_; _PARAM3_, with angle _PARAM5_ and speed _PARAM6_ px/s", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Fire a single bullet", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Create bullet", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Create" - }, - "parameters": [ - "", - "Bullet", - "GetArgumentAsNumber(\"XPosition\")", - "GetArgumentAsNumber(\"YPosition\")", - "\"\"" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move bullet", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "AddForceAL" - }, - "parameters": [ - "Bullet", - "GetArgumentAsNumber(\"Angle\") + RandomInRange(-Object.Behavior::PropertyAngleVariance(), Object.Behavior::PropertyAngleVariance())", - "GetArgumentAsNumber(\"Speed\")", - "1" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Add identifier variables (to enable advanced picking by users)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Bullet", - "__FireBullet.BulletID", - "=", - "Object.Behavior::PropertyTotalBulletsCreated()" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Bullet", - "__FireBullet.BatchID", - "=", - "Object.Behavior::PropertyTotalShotsFired()" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Bullet", - "__FireBullet.BatchOrderID", - "=", - "0" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Rotate newly created bullet, if needed", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyRotateBullet" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetAngle" - }, - "parameters": [ - "Bullet", - "=", - "GetArgumentAsNumber(\"Angle\")" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Update statistics", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalBulletsCreated" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "1" - ] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "X position, where to create the bullet", - "name": "XPosition", - "type": "expression" - }, - { - "description": "Y position, where to create the bullet", - "name": "YPosition", - "type": "expression" - }, - { - "description": "The bullet object", - "name": "Bullet", - "type": "objectList" - }, - { - "description": "Angle of the bullet, in degrees", - "name": "Angle", - "type": "expression" - }, - { - "description": "Speed of the bullet, in pixels per second", - "name": "Speed", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Reload ammo.", - "fullName": "Reload ammo", - "functionType": "Action", - "name": "ReloadAmmo", - "sentence": "Reload ammo on _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "FireBullet::FireBullet::IsOutOfAmmo" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyReloadInProgress" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - }, - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__FireBullet.ReloadingTimer\"" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the object has just fired something.", - "fullName": "Has just fired", - "functionType": "Condition", - "group": "Firing", - "name": "HasJustFired", - "sentence": "_PARAM0_ has just fired", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyHasJustFired" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if bullet rotates to match trajectory.", - "fullName": "Is bullet rotation enabled", - "functionType": "Condition", - "group": "Firing", - "name": "BulletRotationEnabled", - "sentence": "Bullet rotation enabled on _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyRotateBullet" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change the firing arc (in degrees) where bullets will be shot. Bullets will be evenly spaced out inside the firing arc.", - "fullName": "Set firing arc", - "functionType": "Action", - "group": "Multi-Fire", - "name": "SetFiringArc", - "sentence": "Set firing arc of _PARAM0_ to _PARAM2_ degrees", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyFiringArc" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "Firing arc (degrees) Range: 0 to 360", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the angle variance (in degrees) applied to each bullet.", - "fullName": "Set angle variance", - "functionType": "Action", - "group": "Firing", - "name": "SetAngleVariance", - "sentence": "Set angle variance of _PARAM0_ to _PARAM2_ degrees", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyAngleVariance" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "Angle variance (degrees) Range: 0 to 180", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the number of bullets shot every time the \"fire bullet\" action is used.", - "fullName": "Set number of bullets per shot", - "functionType": "Action", - "group": "Multi-Fire", - "name": "SetBulletQuantity", - "sentence": "Set number of bullets per shot of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyBulletQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "Bullets", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Enable bullet rotation.", - "fullName": "Enable (or disable) bullet rotation", - "functionType": "Action", - "group": "Firing", - "name": "SetRotateBullet", - "sentence": "Enable bullet rotation on _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"RotateBullet\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyRotateBullet" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"RotateBullet\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyRotateBullet" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "defaultValue": "yes", - "description": "Rotate bullet to match trajetory", - "name": "RotateBullet", - "optional": true, - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Enable unlimited ammo.", - "fullName": "Enable (or disable) unlimited ammo", - "functionType": "Action", - "group": "Ammo", - "name": "SetUnlimitedAmmo", - "sentence": "Enable unlimited ammo on _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"UnlimitedAmmo\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyUnlimitedAmmo" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"UnlimitedAmmo\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyUnlimitedAmmo" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "defaultValue": "yes", - "description": "Unlimited ammo", - "name": "UnlimitedAmmo", - "optional": true, - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Change the firing cooldown, which changes the rate of fire.", - "fullName": "Set firing cooldown", - "functionType": "Action", - "group": "Firing", - "name": "SetCooldown", - "sentence": "Set the fire rate of _PARAM0_ to _PARAM2_ seconds", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyFireCooldown" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"NewCooldown\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "Cooldown in seconds", - "name": "NewCooldown", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the duration to reload ammo.", - "fullName": "Set reload duration", - "functionType": "Action", - "group": "Reload", - "name": "SetReloadDuration", - "sentence": "Set the reload duration of _PARAM0_ to _PARAM2_ seconds", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyReloadDuration" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "Reload duration (seconds)", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the duration after becoming overheated.", - "fullName": "Set overheat duration", - "functionType": "Action", - "group": "Overheat", - "name": "SetOverheatDuration", - "sentence": "Set the overheat duration of _PARAM0_ to _PARAM2_ seconds", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyOverheatDuration" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "Overheat duration (seconds)", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the quantity of ammo.", - "fullName": "Set ammo quantity", - "functionType": "Action", - "group": "Ammo", - "name": "SetAmmoQuantity", - "sentence": "Set the ammo quantity of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "Ammo", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the heat increase per shot.", - "fullName": "Set heat increase per shot", - "functionType": "Action", - "group": "Overheat", - "name": "SetHeatPerShot", - "sentence": "Set the heat increase of _PARAM0_ to _PARAM2_ per shot", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyHeatIncreasePerShot" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "Heat increase per shot (Range: 0 to 1)", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the max ammo.", - "fullName": "Set max ammo", - "functionType": "Action", - "group": "Ammo", - "name": "SetMaxAmmo", - "sentence": "Set the max ammo of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyMaxAmmo" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyMaxAmmo" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::MaxAmmo(),Object.Behavior::AmmoQuantity())" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "Max ammo", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Reset total shots fired.", - "fullName": "Reset total shots fired", - "functionType": "Action", - "group": "Stats", - "name": "ResetTotalShotsFired", - "sentence": "Reset total shots fired by _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalShotsFired" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Reset total bullets created.", - "fullName": "Reset total bullets created", - "functionType": "Action", - "group": "Stats", - "name": "ResetTotalBulletsCreated", - "sentence": "Reset total bullets created by _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalBulletsCreated" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Reset total reloads completed.", - "fullName": "Reset total reloads completed", - "functionType": "Action", - "group": "Stats", - "name": "ResetTotalReloadsCompleted", - "sentence": "Reset total reloads completed by _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyTotalReloadsCompleted" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change the number of shots per reload.", - "fullName": "Set shots per reload", - "functionType": "Action", - "group": "Reload", - "name": "SetShotsPerReload", - "sentence": "Set the shots per reload of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsPerReload" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyShotsBeforeNextReload" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "Object.Behavior::PropertyShotsPerReload()" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyShotsBeforeNextReload" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyShotsPerReload()" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "Shots per reload", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Enable (or disable) automatic reloading.", - "fullName": "Enable (or disable) automatic reloading", - "functionType": "Action", - "group": "Reload", - "name": "SetAutomaticReload", - "sentence": "Enable automatic reloading on _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyAutomaticReloading" - }, - "parameters": [ - "Object", - "Behavior", - "=" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"Value\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyAutomaticReloading" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "defaultValue": "yes", - "description": "Enable automatic reloading", - "name": "Value", - "optional": true, - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Change the linear rate of cooling.", - "fullName": "Set linear cooling rate", - "functionType": "Action", - "group": "Overheat", - "name": "SetLinearCoolingRate", - "sentence": "Set the linear cooling rate of _PARAM0_ to _PARAM2_ per second", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyLinearCoolingRate" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "Heat cooling rate (per second)", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the exponential rate of cooling.", - "fullName": "Set exponential cooling rate", - "functionType": "Action", - "group": "Overheat", - "name": "SetExponentialCoolingRate", - "sentence": "Set the exponential cooling rate of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyExponentialCoolingRate" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "Exponential cooling rate", - "name": "Value", - "supplementaryInformation": "[\"Exponential\",\"Linear\"]", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Increase ammo quantity.", - "fullName": "Increase ammo", - "functionType": "Action", - "name": "IncreaseAmmo", - "sentence": "Increase ammo of _PARAM0_ by _PARAM2_ shots", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "GetArgumentAsNumber(\"AmmoGained\")" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "If Max Ammo is set, do not exceed the value", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyMaxAmmo" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::SetPropertyAmmoQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::MaxAmmo(),Object.Behavior::AmmoQuantity())" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::IsReloadNeeded" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "FireBullet::FireBullet::PropertyAutomaticReloading" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "FireBullet::FireBullet::ReloadAmmo" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - }, - { - "description": "Ammo gained", - "name": "AmmoGained", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Number of bullets to shoot at once (evenly spaced inside the Firing Arc).", - "fullName": "Bullet quantity", - "functionType": "Expression", - "group": "Multi-Fire", - "name": "BulletQuantity", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyBulletQuantity()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Angle variance, in degrees.", - "fullName": "Angle variance", - "functionType": "Expression", - "group": "Firing", - "name": "AngleVariance", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyAngleVariance()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Firing arc, in degrees.", - "fullName": "Firing arc", - "functionType": "Expression", - "group": "Multi-Fire", - "name": "FiringArc", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyFiringArc()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Heat level (Range: 0 to 1).", - "fullName": "Heat level", - "functionType": "Expression", - "group": "Overheat", - "name": "HeatLevel", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "min(1,Object.Behavior::PropertyHeatLevel())" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Firing cooldown, in seconds.", - "fullName": "Firing cooldown", - "functionType": "Expression", - "group": "Firing", - "name": "Cooldown", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyFireCooldown()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Reload duration, in seconds.", - "fullName": "Reload duration", - "functionType": "Expression", - "group": "Ammo", - "name": "ReloadDuration", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyReloadDuration()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Overheat duration, in seconds.", - "fullName": "Overheat duration", - "functionType": "Expression", - "group": "Overheat", - "name": "OverheatDuration", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyOverheatDuration()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Heat increase per shot.", - "fullName": "Heat increase per shot", - "functionType": "Expression", - "group": "Overheat", - "name": "HeatIncreasePerShot", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyHeatIncreasePerShot()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Linear cooling rate, per second.", - "fullName": "Linear cooling rate", - "functionType": "Expression", - "group": "Overheat", - "name": "LinearCoolingRate", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyLinearCoolingRate()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Exponential cooling rate, per second.", - "fullName": "Exponential cooling rate", - "functionType": "Expression", - "group": "Overheat", - "name": "ExponentialCoolingRate", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyExponentialCoolingRate()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Max ammo.", - "fullName": "Max ammo", - "functionType": "Expression", - "group": "Ammo", - "name": "MaxAmmo", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyMaxAmmo()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Total shots fired (multi-bullet shots are considered one shot).", - "fullName": "Shots fired", - "functionType": "Expression", - "group": "Stats", - "name": "TotalShotsFired", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyTotalShotsFired()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Total bullets created.", - "fullName": "Bullets created", - "functionType": "Expression", - "group": "Stats", - "name": "TotalBulletsCreated", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyTotalBulletsCreated()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Reloads completed.", - "fullName": "Reloads completed", - "functionType": "Expression", - "group": "Stats", - "name": "TotalReloadsCompleted", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyTotalReloadsCompleted()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Ammo quantity.", - "fullName": "Ammo quantity", - "functionType": "Expression", - "group": "Ammo", - "name": "AmmoQuantity", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyAmmoQuantity()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Shots remaining before the next reload is required.", - "fullName": "Shots before next reload", - "functionType": "Expression", - "group": "Reload", - "name": "ShotsBeforeNextReload", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyShotsBeforeNextReload()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Shots per reload.", - "fullName": "Shots per reload", - "functionType": "Expression", - "group": "Reload", - "name": "ShotsPerReload", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyShotsPerReload()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Seconds remaining before the cooldown will permit a bullet to be fired.", - "fullName": "Time remaining before a bullet may be fired", - "functionType": "Expression", - "group": "Firing", - "name": "CooldownTimeLeft", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "max(0,Object.Behavior::Cooldown() - Object.ObjectTimerElapsedTime(\"__FireBullet.FiringCooldown\"))" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Seconds remaining before the overheat penalty ends.", - "fullName": "Time remaining before overheat penalty ends", - "functionType": "Expression", - "group": "Overheat", - "name": "OverheatTimeLeft", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "CompareObjectTimer" - }, - "parameters": [ - "Object", - "\"__FireBullet.OverheatDuration\"", - ">", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "max(0, Object.Behavior::PropertyOverheatDuration() - Object.ObjectTimerElapsedTime(\"__FireBullet.OverheatDuration\"))" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if object is currently performing an ammo reload.", - "fullName": "Is ammo reloading in progress", - "functionType": "Condition", - "group": "Reload", - "name": "IsReloadInProgress", - "sentence": "_PARAM0_ is reloading ammo", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyReloadInProgress" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if object is ready to shoot.", - "fullName": "Is ready to shoot", - "functionType": "Condition", - "group": "Firing", - "name": "IsReadyToShoot", - "sentence": "_PARAM0_ is ready to shoot", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Check if ready to shoot", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Verify that the gun has ammo", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "FireBullet::FireBullet::IsOutOfAmmo" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Verify that the gun does not need to be reloaded and is not currently reloading", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "FireBullet::FireBullet::IsReloadNeeded" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "inverted": true, - "value": "FireBullet::FireBullet::IsReloadInProgress" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Verify gun is not shooting sooner than the proper rate of fire", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "FireBullet::FireBullet::IsFiringCooldownActive" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Verify the gun is not overheated", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "FireBullet::FireBullet::IsOverheated" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ] - } - ] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if automatic reloading is enabled.", - "fullName": "Is automatic reloading enabled", - "functionType": "Condition", - "group": "Reload", - "name": "IsAutomaticReloadingEnabled", - "sentence": "Automatic reloading is enabled on_PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyAutomaticReloading" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if ammo is unlimited.", - "fullName": "Is ammo unlimited", - "functionType": "Condition", - "group": "Ammo", - "name": "IsUnlimitedAmmo", - "sentence": "_PARAM0_ has unlimited ammo", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyUnlimitedAmmo" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if object has no ammo available.", - "fullName": "Is out of ammo", - "functionType": "Condition", - "group": "Ammo", - "name": "IsOutOfAmmo", - "sentence": "_PARAM0_ is out of ammo", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "FireBullet::FireBullet::IsUnlimitedAmmo" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "FireBullet::FireBullet::PropertyAmmoQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if object needs to reload ammo.", - "fullName": "Is a reload needed", - "functionType": "Condition", - "group": "Reload", - "name": "IsReloadNeeded", - "sentence": "_PARAM0_ needs to reload ammo", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Shots per reload must not be \"0\"", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyShotsPerReload" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - }, - { - "type": { - "value": "FireBullet::FireBullet::PropertyShotsBeforeNextReload" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if object is overheated.", - "fullName": "Is overheated", - "functionType": "Condition", - "group": "Overheat", - "name": "IsOverheated", - "sentence": "_PARAM0_ is overheated", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "FireBullet::FireBullet::PropertyHeatLevel" - }, - "parameters": [ - "Object", - "Behavior", - ">=", - "1" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "Object.Behavior::OverheatTimeLeft()", - ">", - "0" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if firing cooldown is active.", - "fullName": "Is firing cooldown active", - "functionType": "Condition", - "group": "Firing", - "name": "IsFiringCooldownActive", - "sentence": "Firing cooldown is active on _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "Object.Behavior::CooldownTimeLeft()", - ">", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "0.1", - "type": "Number", - "label": "Firing cooldown (seconds)", - "description": "Object cannot shoot while firing cooldown is active", - "group": "Shooting configuration", - "extraInformation": [], - "hidden": false, - "name": "FireCooldown" - }, - { - "value": "", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "HasJustFired" - }, - { - "value": "45", - "type": "Number", - "label": "Firing arc (degrees)", - "description": "Multi-Fire bullets will be evenly spaced inside the Firing Arc", - "group": "Multi-Fire", - "extraInformation": [], - "hidden": false, - "name": "FiringArc" - }, - { - "value": "1", - "type": "Number", - "label": "Number of bullets created at once (Multi-Fire)", - "description": "Multi-Fire bullets will be evenly spaced inside the Firing Arc", - "group": "Multi-Fire", - "extraInformation": [], - "hidden": false, - "name": "BulletQuantity" - }, - { - "value": "0", - "type": "Number", - "label": "Angle variance (degrees)", - "description": "Used to simulate imperfect aim (Range: 0 to 180 degrees)", - "group": "Shooting configuration", - "extraInformation": [], - "hidden": false, - "name": "AngleVariance" - }, - { - "value": "true", - "type": "Boolean", - "label": "Rotate bullet to match trajectory", - "description": "", - "group": "Shooting configuration", - "extraInformation": [], - "hidden": false, - "name": "RotateBullet" - }, - { - "value": "0", - "type": "Number", - "label": "Ammo quantity (current)", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "AmmoQuantity" - }, - { - "value": "0", - "type": "Number", - "label": "Shots per reload ", - "description": "Use 0 to disable reloading", - "group": "Reload", - "extraInformation": [], - "hidden": false, - "name": "ShotsPerReload" - }, - { - "value": "1", - "type": "Number", - "label": "Reloading duration (seconds)", - "description": "Object cannot shoot while reloading is in progress", - "group": "Reload", - "extraInformation": [], - "hidden": false, - "name": "ReloadDuration" - }, - { - "value": "0", - "type": "Number", - "label": "Max ammo ", - "description": "Use \"0\" to disable restrictions on ammo capacity", - "group": "Ammo", - "extraInformation": [], - "hidden": false, - "name": "MaxAmmo" - }, - { - "value": "0", - "type": "Number", - "label": "Shots before next reload", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "ShotsBeforeNextReload" - }, - { - "value": "0", - "type": "Number", - "label": "Total shots fired", - "description": "Regardless of how many bullets are created, only 1 shot will be counted per frame", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "TotalShotsFired" - }, - { - "value": "0", - "type": "Number", - "label": "Total bullets created", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "TotalBulletsCreated" - }, - { - "value": "0", - "type": "Number", - "label": "Starting ammo", - "description": "", - "group": "Ammo", - "extraInformation": [], - "hidden": false, - "name": "StartingAmmo" - }, - { - "value": "0", - "type": "Number", - "label": "Total reloads completed", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "TotalReloadsCompleted" - }, - { - "value": "true", - "type": "Boolean", - "label": "Unlimited ammo", - "description": "", - "group": "Ammo", - "extraInformation": [], - "hidden": false, - "name": "UnlimitedAmmo" - }, - { - "value": "", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "ReloadInProgress" - }, - { - "value": "0", - "type": "Number", - "label": "Heat increase per shot (Range: 0 to 1)", - "description": " Object is overheated when Heat reaches 1", - "group": "Overheat", - "extraInformation": [], - "hidden": false, - "name": "HeatIncreasePerShot" - }, - { - "value": "0", - "type": "Number", - "label": "Heat level (Range: 0 to 1)", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "HeatLevel" - }, - { - "value": "true", - "type": "Boolean", - "label": "Reload automatically", - "description": "", - "group": "Reload", - "extraInformation": [], - "hidden": false, - "name": "AutomaticReloading" - }, - { - "value": "0", - "type": "Number", - "label": "Overheat duration (seconds) ", - "description": "Object cannot shoot while overheat duration is active", - "group": "Overheat", - "extraInformation": [], - "hidden": false, - "name": "OverheatDuration" - }, - { - "value": "0.1", - "type": "Number", - "label": "Linear cooling rate (per second)", - "description": "", - "group": "Overheat", - "extraInformation": [], - "hidden": false, - "name": "LinearCoolingRate" - }, - { - "value": "0.3", - "type": "Number", - "label": "Exponential cooling rate (per second)", - "description": "Exponential cooling happens faster when heat is high and slower when heat is low", - "group": "Overheat", - "extraInformation": [ - "Linear", - "Exponential" - ], - "hidden": false, - "name": "ExponentialCoolingRate" - } - ], - "sharedPropertyDescriptors": [] - } - ], - "eventsBasedObjects": [] - }, - { - "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", - "category": "Input", - "extensionNamespace": "", - "fullName": "Resource bar", - "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", - "name": "ResourceBar", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/UI Essentials/UI Essentials_sliders_options.svg", - "shortDescription": "Display a bar that represents a resource in the game (health, mana, ammo, etc)", - "version": "0.0.1", - "description": "The resource bar can be displayed using these objects:\n\n- Shape painter\n- Tiled sprite\n- Sprite\n", - "origin": { - "identifier": "ResourceBar", - "name": "gdevelop-extension-store" - }, - "tags": [ - "resource", - "bar", - "shape painter", - "health", - "mana", - "shield", - "hearts", - "lives", - "ammo" - ], - "authorIds": [ - "gqDaZjCfevOOxBYkK6zlhtZnXCg1", - "q8ubdigLvIRXLxsJDDTaokO41mc2" - ], - "dependencies": [], - "eventsFunctions": [], - "eventsBasedBehaviors": [ - { - "description": "Draws a solid bar that represents a resource in the game (health, shield, mana, ammo, etc)", - "fullName": "Resource bar (shape painter)", - "name": "ResourceBar_ShapePainter", - "objectType": "PrimitiveDrawing::Drawer", - "eventsFunctions": [ - { - "fullName": "", - "functionType": "Action", - "name": "onCreated", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make sure object doesn't get redrawn every frame", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::ClearBetweenFrames" - }, - "parameters": [ - "Object", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Use correct min value (instead of always starting at 0)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMin()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "fullName": "", - "functionType": "Action", - "name": "doStepPostEvents", - "sentence": "", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Draw resource bar (if needed)", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::PropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior" - ] - }, - { - "type": { - "value": "Visible" - }, - "parameters": [ - "Object" - ] - }, - { - "type": { - "value": "LayerVisible" - }, - "parameters": [ - "", - "Object.Layer()" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::Drawer::ClearShapes" - }, - "parameters": [ - "Object" - ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Inactive Bar", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set inactive Bar parameters", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyInactiveBarColor()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyInactiveBarOpacity()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::OutlineOpacity" - }, - "parameters": [ - "Object", - "=", - "0" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw inactive Bar", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyValueOffset()", - "0", - "Object.Behavior::PropertyBarLength()", - "Object.Behavior::PropertyBarThickness()" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Active Bar", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set active Bar parameters", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyActiveBarColor()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyActiveBarOpacity()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw active Bar", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "0", - "0", - "Object.Behavior::PropertyValueOffset()", - "Object.Behavior::PropertyBarThickness()" - ] - } - ] - } - ], - "parameters": [] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Draw a resource bar that shows current and max values.", - "fullName": "Draw a resource bar (shape painter)", - "functionType": "Action", - "name": "DrawResourceBar", - "sentence": "Draw a resource bar using _PARAM0_ with current value _PARAM2_ and max value _PARAM3_", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set values", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Tween::Ease(Object.Behavior::PropertyEasing(), Object.Behavior::Value(), GetArgumentAsNumber(\"CurrentValue\"), Object.Behavior::PropertyEasingSpeed())", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetValueMax" - }, - "parameters": [ - "Object", - "Behavior", - "GetArgumentAsNumber(\"MaxValue\")", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - }, - { - "description": "Current value", - "name": "CurrentValue", - "type": "expression" - }, - { - "description": "Max value", - "name": "MaxValue", - "supplementaryInformation": "Health::Health", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Draw a resource bar based on the health points of an object.", - "fullName": "Draw a health bar", - "functionType": "Action", - "name": "DrawHealthBar", - "sentence": "Draw a resource bar using _PARAM0_ based on the health points of _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set values", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Tween::Ease(Object.Behavior::PropertyEasing(), Object.Behavior::Value(), ObjectWithHealth.HealthBehavior::Health(), Object.Behavior::PropertyEasingSpeed())", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetValueMax" - }, - "parameters": [ - "Object", - "Behavior", - "ObjectWithHealth.HealthBehavior::MaxHealth()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - }, - { - "description": "Object with health", - "name": "ObjectWithHealth", - "type": "objectList" - }, - { - "description": "Health behavior", - "name": "HealthBehavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Draw a resource bar based on the shield points of an object.", - "fullName": "Draw a shield bar", - "functionType": "Action", - "name": "DrawShieldBar", - "sentence": "Draw a resource bar using _PARAM0_ based on the shield points of _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set values", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Tween::Ease(Object.Behavior::PropertyEasing(), Object.Behavior::Value(), ObjectWithShield.ShieldBehavior::ShieldPoints(), Object.Behavior::PropertyEasingSpeed())", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetValueMax" - }, - "parameters": [ - "Object", - "Behavior", - "ObjectWithShield.ShieldBehavior::MaxShield()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - }, - { - "description": "Object with shield", - "name": "ObjectWithShield", - "type": "objectList" - }, - { - "description": "Shield behavior", - "name": "ShieldBehavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Draw a resource bar based on the ammo of an object.", - "fullName": "Draw an ammo bar", - "functionType": "Action", - "name": "DrawAmmoBar", - "sentence": "Draw a resource bar using _PARAM0_ based on the ammo of _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set values", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Tween::Ease(Object.Behavior::PropertyEasing(), Object.Behavior::Value(), ObjectWithFireBullet.FireBulletBehavior::AmmoQuantity(), Object.Behavior::PropertyEasingSpeed())", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetValueMax" - }, - "parameters": [ - "Object", - "Behavior", - "ObjectWithFireBullet.FireBulletBehavior::MaxAmmo()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - }, - { - "description": "Object with fire bullet", - "name": "ObjectWithFireBullet", - "type": "objectList" - }, - { - "description": "Fire bullet behavior", - "name": "FireBulletBehavior", - "supplementaryInformation": "FireBullet::FireBullet", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Value of the resource.", - "fullName": "Resource value", - "functionType": "Expression", - "group": "Resource value", - "name": "Value", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyValue()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change the value of the resource.", - "fullName": "Resource value", - "functionType": "Action", - "group": "Resource value", - "name": "SetValue", - "sentence": "Change the value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::PropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - "<=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::PropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "round(GetArgumentAsNumber(\"Value\") / Object.Behavior::PropertyTickSpacing()) * Object.Behavior::PropertyTickSpacing()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::PropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyValueMin()" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMin()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::PropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "Object.Behavior::PropertyValueMax()" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMax()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set the proper offset", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValueOffset" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyBarLength() * (Object.Behavior::PropertyValue() - Object.Behavior::PropertyValueMin()) / (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin())" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - }, - { - "description": "Resource value", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Minimum value of the resource.", - "fullName": "Resource minimum value", - "functionType": "Expression", - "group": "Resource value", - "name": "ValueMin", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyValueMin()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change the minimum value of the resource.", - "fullName": "Resource minimum value", - "functionType": "Action", - "group": "Resource value", - "name": "SetValueMin", - "sentence": "Change the minimum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValueMin" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"ValueMin\")" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - }, - { - "description": "Minimum value", - "name": "ValueMin", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Maximum value of the resource.", - "fullName": "Resource maximum value", - "functionType": "Expression", - "group": "Resource value", - "name": "ValueMax", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyValueMax()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Thickness of the resource bar.", - "fullName": "Resource bar thickness", - "functionType": "Expression", - "group": "Resource bar configuration", - "name": "BarThickness", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyBarThickness()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Length of the resource bar.", - "fullName": "Resource bar length", - "functionType": "Expression", - "group": "Resource bar configuration", - "name": "BarLength", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyBarLength()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change the maximum value of the resource.", - "fullName": "Resource maximum value", - "functionType": "Action", - "group": "Resource value", - "name": "SetValueMax", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyValueMax" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"ValueMax\")" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - }, - { - "description": "Maximum value", - "name": "ValueMax", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Tick spacing of the resource bar.", - "fullName": "Tick spacing", - "functionType": "Expression", - "group": "Resource bar configuration", - "name": "TickSpacing", - "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyTickSpacing()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - }, - { - "description": "Tick spacing", - "name": "TickSpacing", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the tick spacing of the resource bar.", - "fullName": "Tick spacing", - "functionType": "Action", - "group": "Resource bar configuration", - "name": "SetTickSpacing", - "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"TickSpacing\")" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - }, - { - "description": "Tick spacing", - "name": "TickSpacing", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change length of the resource bar.", - "fullName": "Bar length", - "functionType": "Action", - "group": "Resource bar configuration", - "name": "SetBarLength", - "sentence": "Change length of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyBarLength" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyValue()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - }, - { - "description": "Bar width", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change thickness of the resource bar.", - "fullName": "Bar thickness", - "functionType": "Action", - "group": "Resource bar configuration", - "name": "SetBarThickness", - "sentence": "Change thickness of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyBarThickness" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - }, - { - "description": "Bar thickness", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change opacity of the inactive portion of a resource bar.", - "fullName": "Inactive opacity", - "functionType": "Action", - "group": "Resource bar configuration", - "name": "SetInactiveBarOpacity", - "sentence": "Change opacity of inactive part of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyInactiveBarOpacity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - }, - { - "description": "Inactive bar opacity", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change opacity of the active portion of a resource bar.", - "fullName": "Active bar opacity", - "functionType": "Action", - "group": "Resource bar configuration", - "name": "SetActiveBarOpacity", - "sentence": "Change opacity of active part of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyActiveBarOpacity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - }, - { - "description": "Active bar opacity", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the color of the active area of bar.", - "fullName": "Active bar color ", - "functionType": "Action", - "group": "Resource bar configuration", - "name": "SetActiveBarColor", - "sentence": "Change active bar color of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyActiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Color\")" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - }, - { - "description": "Active bar color", - "name": "Color", - "type": "color" - } - ], - "objectGroups": [] - }, - { - "description": "Change the color of the inactive area of bar.", - "fullName": "Inactive bar color", - "functionType": "Action", - "group": "Resource bar configuration", - "name": "SetInactiveBarColor", - "sentence": "Change inactive bar color of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyInactiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Color\")" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - }, - { - "description": "Inactive bar color", - "name": "Color", - "type": "color" - } - ], - "objectGroups": [] - }, - { - "description": "Update the hitbox.", - "fullName": "Update hitbox", - "functionType": "Action", - "group": "Private", - "name": "UpdateHitbox", - "private": true, - "sentence": "Update the hitbox of _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::SetRotationCenter" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyBarLength() / 2", - "Object.Behavior::PropertyBarThickness() / 2" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::SetRectangularCollisionMask" - }, - "parameters": [ - "Object", - "0", - "0", - "Object.Behavior::PropertyBarLength()", - "Object.Behavior::PropertyBarThickness()" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_ShapePainter", - "type": "behavior" - } - ], - "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "0", - "type": "Number", - "label": "Minimum value", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "ValueMin" - }, - { - "value": "1", - "type": "Number", - "label": "Maximum value", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "ValueMax" - }, - { - "value": "0", - "type": "Number", - "label": "Tick spacing", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "TickSpacing" - }, - { - "value": "200", - "type": "Number", - "label": "Bar length", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "BarLength" - }, - { - "value": "16", - "type": "Number", - "label": "Bar thickness", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "BarThickness" - }, - { - "value": "11;255;0", - "type": "Color", - "label": "Inactive Bar color", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "InactiveBarColor" - }, - { - "value": "96", - "type": "Number", - "label": "Inactive Bar opacity", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "InactiveBarOpacity" - }, - { - "value": " 11;255;0", - "type": "Color", - "label": "Active Bar color", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "ActiveBarColor" - }, - { - "value": "255", - "type": "Number", - "label": "Active Bar opacity", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "ActiveBarOpacity" - }, - { - "value": "0", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "Value" - }, - { - "value": "0", - "type": "Number", - "label": "", - "description": "Distance from the object origin to where the active and inactive bar touch", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "ValueOffset" - }, - { - "value": "true", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "NeedRedraw" - }, - { - "value": "easeOutCirc", - "type": "Choice", - "label": "Easing", - "description": "Easing used to change the displayed value of the resource bar. (Note: Changes to the Value property are always instant)", - "group": "", - "extraInformation": [ - "easeOutCirc" - ], - "hidden": false, - "name": "Easing" - }, - { - "value": "0.05", - "type": "Number", - "label": "Easing speed (Range: 0 to 1)", - "description": "Higher values mean faster movement. Value of \"1\" means instant change.", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "EasingSpeed" - } - ], - "sharedPropertyDescriptors": [] - }, - { - "description": "Displays a line of objects that represent a resource in the game (hearts, lives, ammo, etc). \nUse the same image for the resource bar and the unit objects.", - "fullName": "Resource bar (sprite)", - "name": "ResourceBar_Sprite", - "objectType": "", - "eventsFunctions": [ - { - "fullName": "", - "functionType": "Action", - "name": "onCreated", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Cache" - }, - "parameters": [ - "Object" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Draw a resource bar made from sprite objects.", - "fullName": "Draw a resource bar (sprite)", - "functionType": "Action", - "name": "DrawResourceBar", - "sentence": "Draw a resource bar located at _PARAM0_ that is made from _PARAM2_", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Create unit objects", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "infiniteLoopWarning": true, - "type": "BuiltinCommonInstructions::While", - "whileConditions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::PropertyNextUnitToCreate" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "max(Object.Behavior::PropertyQuantity(), Object.Behavior::PropertyMaxQuantity())" - ] - } - ], - "conditions": [], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Create" - }, - "parameters": [ - "", - "UnitObject", - "Object.X() + Object.Width() * (Object.Behavior::PropertyNextUnitToCreate())", - "Object.Y()", - "Object.Layer()" - ] - }, - { - "type": { - "value": "SetSize" - }, - "parameters": [ - "UnitObject", - "Object.Width()", - "Object.Height()" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "UnitObject", - "__ResourceBar.UnitID", - "=", - "Object.Behavior::PropertyNextUnitToCreate()" - ] - }, - { - "type": { - "value": "LinkedObjects::LinkObjects" - }, - "parameters": [ - "", - "Object", - "UnitObject" - ] - }, - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyNextUnitToCreate" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "1" - ] - } - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update state of units", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "LinkedObjects::PickObjectsLinkedTo" - }, - "parameters": [ - "", - "UnitObject", - "Object", - "" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::ForEach", - "object": "UnitObject", - "conditions": [], - "actions": [], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Delete units higher than desired value", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Delete objects higher than max value", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "Object.Behavior::PropertyMaxQuantity()", - ">", - "0" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "UnitObject.Variable(__ResourceBar.UnitID)", - ">=", - "Object.Behavior::PropertyMaxQuantity()" - ] - } - ], - "actions": [ - { - "type": { - "value": "Delete" - }, - "parameters": [ - "UnitObject", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "If no max value, delete objects greater than current value", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "Object.Behavior::PropertyMaxQuantity()", - "=", - "0" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "UnitObject.Variable(__ResourceBar.UnitID)", - ">=", - "Object.Behavior::PropertyQuantity()" - ] - } - ], - "actions": [ - { - "type": { - "value": "Delete" - }, - "parameters": [ - "UnitObject", - "" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update active units", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "UnitObject.Variable(__ResourceBar.UnitID)", - "<", - "Object.Behavior::PropertyQuantity()" - ] - } - ], - "actions": [ - { - "type": { - "value": "Opacity" - }, - "parameters": [ - "UnitObject", - "=", - "Object.Behavior::PropertyActiveUnitOpacity()" - ] - }, - { - "type": { - "value": "ChangeAnimation" - }, - "parameters": [ - "UnitObject", - "=", - "Object.Behavior::PropertyActiveUnitAnimationNumber()" - ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Color tint", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Only apply color if it has changed from default value", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareStrings" - }, - "parameters": [ - "Object.Behavior::PropertyActiveUnitColorTint()", - "!=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "ChangeColor" - }, - "parameters": [ - "UnitObject", - "Object.Behavior::PropertyActiveUnitColorTint()" - ] - } - ] - } - ], - "parameters": [] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update empty units", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "UnitObject.Variable(__ResourceBar.UnitID)", - ">=", - "Object.Behavior::PropertyQuantity()" - ] - } - ], - "actions": [], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Color tint", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Only apply color if it has changed from default value", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareStrings" - }, - "parameters": [ - "Object.Behavior::PropertyEmptyUnitColorTint()", - "!=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "ChangeColor" - }, - "parameters": [ - "UnitObject", - "Object.Behavior::PropertyEmptyUnitColorTint()" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Opacity", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Opacity" - }, - "parameters": [ - "UnitObject", - "=", - "Object.Behavior::PropertyEmptyUnitOpacity()" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Animation", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ChangeAnimation" - }, - "parameters": [ - "UnitObject", - "=", - "Object.Behavior::PropertyEmptyUnitAnimationNumber()" - ] - } - ] - } - ], - "parameters": [] - } - ] - } - ], - "parameters": [] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Update counter", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyNextUnitToCreate" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "PickedInstancesCount(UnitObject)" - ] - } - ] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", - "type": "behavior" - }, - { - "description": "Object used to display each unit", - "name": "UnitObject", - "supplementaryInformation": "Sprite", - "type": "objectList" - } - ], - "objectGroups": [] - }, - { - "description": "Apply color tint to empty units. Empty units exist between the current and maximum value.", - "fullName": "Color tint of empty units", - "functionType": "ActionWithOperator", - "getterName": "EmptyUnitColor", - "name": "SetEmptyUnitColor", - "sentence": "Apply color tint _PARAM2_ to empty units of _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyEmptyUnitColorTint" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", - "type": "behavior" - }, - { - "description": "Color tint", - "longDescription": "Use white (\"255;255;255\") to remove all color tint", - "name": "ColorTint", - "type": "color" - } - ], - "objectGroups": [] - }, - { - "description": "Apply color tint to active units.", - "fullName": "Color tint of active units", - "functionType": "ActionWithOperator", - "getterName": "ActiveUnitColor", - "name": "SetActiveUnitColor", - "sentence": "Apply color tint _PARAM2_ to active units of _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyActiveUnitColorTint" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", - "type": "behavior" - }, - { - "description": "Color tint", - "longDescription": "Use white (\"255;255;255\") to remove all color tint", - "name": "ColorTint", - "type": "color" - } - ], - "objectGroups": [] - }, - { - "description": "Change the opacity of empty units. Empty units exist between the current and maximum value.", - "fullName": "Opacity of empty units", - "functionType": "ActionWithOperator", - "getterName": "EmptyUnitOpacity", - "name": "SetEmptyUnitOpacity", - "sentence": "Change the opacity of empty units of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyEmptyUnitOpacity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", - "type": "behavior" - }, - { - "description": "Opacity of empty units", - "longDescription": "Range: 0 to 255", - "name": "Opacity", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the opacity of active units. ", - "fullName": "Opacity of active units", - "functionType": "ActionWithOperator", - "getterName": "ActiveUnitOpacity", - "name": "SetActiveUnitOpacity", - "sentence": "Change the opacity of active units of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyActiveUnitOpacity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", - "type": "behavior" - }, - { - "description": "Opacity of active units", - "longDescription": "Range: 0 to 255", - "name": "Opacity", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the animation of empty units. Empty units exist between the current and maximum value.", - "fullName": "Animation of empty units", - "functionType": "ActionWithOperator", - "getterName": "EmptyUnitAnimation", - "name": "SetEmptyUnitAnimation", - "sentence": "Change the animation of empty units of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyEmptyUnitAnimationNumber" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", - "type": "behavior" - }, - { - "description": "Animation number", - "name": "AnimationNumber", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the animation of empty units. Empty units exist between the current and maximum value.", - "fullName": "Animation of empty units", - "functionType": "ActionWithOperator", - "getterName": "ActiveUnitAnimation", - "name": "SetActiveUnitAnimation", - "sentence": "Change the animation of empty units of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyActiveUnitAnimationNumber" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", - "type": "behavior" - }, - { - "description": "Animation number", - "name": "AnimationNumber", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change maximum units that can be displayed.", - "fullName": "Maximum units", - "functionType": "ActionWithOperator", - "getterName": "MaxQuantity", - "name": "SetMaxQuantity", - "sentence": "Change maximum units of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyMaxQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", - "type": "behavior" - }, - { - "description": "Maximum units", - "name": "Value", - "supplementaryInformation": "Sprite", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the current quantity of units.", - "fullName": "Unit quantity", - "functionType": "ActionWithOperator", - "getterName": "Quantity", - "name": "SetQuantity", - "sentence": "Change the unit quantity of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Prevent values less than 0", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "max(0,GetArgumentAsNumber(\"Value\"))" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Prevent values more than max (when max is non-zero)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::MaxQuantity" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_Sprite::SetPropertyQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "clamp(GetArgumentAsNumber(\"Value\"), 0, Object.Behavior::PropertyMaxQuantity())" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", - "type": "behavior" - }, - { - "description": "Current units", - "name": "Value", - "supplementaryInformation": "Sprite", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "quantity", - "fullName": "Quantity", - "functionType": "ExpressionAndCondition", - "name": "Quantity", - "sentence": "quantity", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyQuantity()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "active unit color", - "fullName": "Active unit color", - "functionType": "ExpressionAndCondition", - "name": "ActiveUnitColor", - "sentence": "active unit color", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnString" - }, - "parameters": [ - "Object.Behavior::PropertyActiveUnitColorTint()" - ] - } - ] - } - ], - "expressionType": { - "type": "color" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "empty unit color", - "fullName": "Empty unit color", - "functionType": "ExpressionAndCondition", - "name": "EmptyUnitColor", - "sentence": "empty unit color", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnString" - }, - "parameters": [ - "Object.Behavior::PropertyEmptyUnitColorTint()" - ] - } - ] - } - ], - "expressionType": { - "type": "color" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "empty unit opacity", - "fullName": "Empty unit opacity", - "functionType": "ExpressionAndCondition", - "name": "EmptyUnitOpacity", - "sentence": "empty unit opacity", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnString" - }, - "parameters": [ - "ToString(Object.Behavior::PropertyEmptyUnitOpacity())" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "empty unit animation", - "fullName": "Empty unit animation", - "functionType": "ExpressionAndCondition", - "name": "EmptyUnitAnimation", - "sentence": "empty unit animation", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnString" - }, - "parameters": [ - "ToString(Object.Behavior::PropertyEmptyUnitAnimationNumber())" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "active unit animation", - "fullName": "Active unit animation", - "functionType": "ExpressionAndCondition", - "name": "ActiveUnitAnimation", - "sentence": "active unit animation", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnString" - }, - "parameters": [ - "ToString(Object.Behavior::PropertyActiveUnitAnimationNumber())" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "active unit opacity", - "fullName": "Active unit opacity", - "functionType": "ExpressionAndCondition", - "name": "ActiveUnitOpacity", - "sentence": "active unit opacity", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnString" - }, - "parameters": [ - "ToString(Object.Behavior::PropertyActiveUnitOpacity())" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "max quantity", - "fullName": "Max quantity", - "functionType": "ExpressionAndCondition", - "name": "MaxQuantity", - "sentence": "max quantity", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyMaxQuantity()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_Sprite", - "type": "behavior" - } - ], - "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "", - "type": "Number", - "label": "Quantity", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "Quantity" - }, - { - "value": "10", - "type": "Number", - "label": "Maximum quantity (Use \"0\" for unlimited)", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "MaxQuantity" - }, - { - "value": "0", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "NextUnitToCreate" - }, - { - "value": "", - "type": "Color", - "label": "Empty color tint", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "EmptyUnitColorTint" - }, - { - "value": "64", - "type": "Number", - "label": "Opacity of empty units (Range: 0 to 255)", - "description": "Empty units exist between the current and maximum value.", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "EmptyUnitOpacity" - }, - { - "value": "0", - "type": "Number", - "label": "Animation number for empty units", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "EmptyUnitAnimationNumber" - }, - { - "value": "255", - "type": "Number", - "label": "Opacity of active units", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "ActiveUnitOpacity" - }, - { - "value": "", - "type": "Color", - "label": "Color tint of active units", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "ActiveUnitColorTint" - }, - { - "value": "0", - "type": "Number", - "label": "Animation number for active units", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "ActiveUnitAnimationNumber" - } - ], - "sharedPropertyDescriptors": [] - }, - { - "description": "Use a tiled sprite to display repeated objects to represent a resource in the game (hearts, lives, ammo, etc). ", - "fullName": "Resource bar (tiled sprite)", - "name": "ResourceBar_TiledSprite", - "objectType": "TiledSpriteObject::TiledSprite", - "eventsFunctions": [ - { - "description": "Draw a resource bar using a tiled sprite.", - "fullName": "Draw resource bar (tiled sprite)", - "functionType": "Action", - "name": "DrawResourceBar", - "sentence": "Draw a tiled resource bar using _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "TiledSpriteObject::Width" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyUnitWidth() * Object.Behavior::PropertyQuantity()" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "TiledSpriteObject::TiledSprite", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change the quantity of a tiled resource bar.", - "fullName": "Quantity", - "functionType": "ActionWithOperator", - "getterName": "Quantity", - "name": "SetQuantity", - "sentence": "Change the quantity of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "If max quantity has NOT been set, do not enforce it.", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::PropertyMaxQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "max(0,GetArgumentAsNumber(\"Value\"))" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "If max quantity has been set, make sure quantity does not exceed it.", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::PropertyMaxQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "clamp(GetArgumentAsNumber(\"Value\"), 0, Object.Behavior::PropertyMaxQuantity())" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "TiledSpriteObject::TiledSprite", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", - "type": "behavior" - }, - { - "description": "Value", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the maximum quantity of a tiled resource bar.", - "fullName": "Maximum quantity", - "functionType": "ActionWithOperator", - "getterName": "MaxQuantity", - "name": "SetMaxQuantity", - "sentence": "Change the maximum quantity of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_TiledSprite::SetPropertyMaxQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "max(0,GetArgumentAsNumber(\"Value\"))" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "TiledSpriteObject::TiledSprite", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", - "type": "behavior" - }, - { - "description": "Value", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "the quantity", - "fullName": "Quantity", - "functionType": "ExpressionAndCondition", - "name": "Quantity", - "sentence": "the quantity", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyQuantity()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "TiledSpriteObject::TiledSprite", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "the max quantity", - "fullName": "Max quantity", - "functionType": "ExpressionAndCondition", - "name": "MaxQuantity", - "sentence": "the max quantity", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyMaxQuantity()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "TiledSpriteObject::TiledSprite", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar_TiledSprite", - "type": "behavior" - } - ], - "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "1", - "type": "Number", - "label": "Quantity", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "Quantity" - }, - { - "value": "16", - "type": "Number", - "label": "Unit width (pixels)", - "description": "Width of one individual unit", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "UnitWidth" - }, - { - "value": "0", - "type": "Number", - "label": "Maximum quantity", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "MaxQuantity" - } - ], - "sharedPropertyDescriptors": [] - } - ], - "eventsBasedObjects": [] - }, - { - "author": "@Bouh, D8H", - "category": "General", - "extensionNamespace": "", - "fullName": "Extended variables support", - "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXZhcmlhYmxlLWJveCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xOSAzSDVDMy45IDMgMyAzLjkgMyA1VjE5QzMgMjAuMSAzLjkgMjEgNSAyMUgxOUMyMC4xIDIxIDIxIDIwLjEgMjEgMTlWNUMyMSAzLjkgMjAuMSAzIDE5IDNNNy40IDE4QzUuOSAxNi41IDUgMTQuMyA1IDEyUzUuOSA3LjUgNy40IDZMOSA2LjdDNy43IDcuOSA3IDkuOSA3IDEyUzcuNyAxNi4xIDkgMTcuM0w3LjQgMThNMTIuNyAxNUwxMS45IDEzTDEwLjUgMTVIOUwxMS4zIDExLjlMMTAgOUgxMS4zTDEyLjEgMTFMMTMuNSA5SDE1TDEyLjggMTJMMTQuMSAxNUgxMi43TTE2LjYgMThMMTUgMTcuM0MxNi4zIDE2IDE3IDE0LjEgMTcgMTJTMTYuMyA3LjkgMTUgNi43TDE2LjYgNkMxOC4xIDcuNSAxOSA5LjcgMTkgMTJTMTguMSAxNi41IDE2LjYgMThaIiAvPjwvc3ZnPg==", - "name": "ExtendedVariables", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/variable-box.svg", - "shortDescription": "Add conditions, actions and expressions to check for the existence of a variable, copy variables, delete existing ones from memory, and create dynamic variables.", - "version": "1.0.0", - "description": "This extension provides: \n- Conditions to check if a global/scene/object variable exists.\n- Actions to copy object variables, global and scene variables.\n- Actions to delete an existing global/scene variable from memory.\n- Actions to create a global/scene variable using a text expression, rather than a variable name input.\n- Expressions to get the value or text from a global/scene variable using a text expression, rather than a variable name.\n\nText expressions allows to enter the name of the variable with an expression like `\"MyVar\"+ ToString(Variable(Health))`", - "origin": { - "identifier": "ExtendedVariables", - "name": "gdevelop-extension-store" - }, - "tags": [ - "variable", - "scene", - "global", - "object", - "remove", - "expression", - "copy", - "structure", - "array", - "boolean", - "duplication" - ], - "authorIds": [ - "2OwwM8ToR9dx9RJ2sAKTcrLmCB92", - "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" - ], - "dependencies": [], - "eventsFunctions": [ - { - "description": "Check if a global variable exists.", - "fullName": "Global variable exists", - "functionType": "Condition", - "group": "Deprecated", - "name": "C_global_variable_exist", - "private": true, - "sentence": "If the global variable _PARAM1_ exist", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ExtendedVariables::GlobalVariableExist" - }, - "parameters": [ - "", - "GetArgumentAsString(\"GlobalVariableName\")", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Name of the global variable", - "name": "GlobalVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the global variable exists.", - "fullName": "Global variable exists", - "functionType": "Condition", - "group": "Global variables", - "name": "GlobalVariableExist", - "sentence": "If the global variable _PARAM1_ exist", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const globalVariables = runtimeScene.getGame().getVariables();\r\neventsFunctionContext.returnValue = globalVariables.has(eventsFunctionContext.getArgument(\"GlobalVariableName\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the global variable", - "name": "GlobalVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Check if a scene variable exists.", - "fullName": "Scene variable exists", - "functionType": "Condition", - "group": "Deprecated", - "name": "C_scene_variable_exist", - "private": true, - "sentence": "If the scene variable _PARAM1_ exist", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ExtendedVariables::SceneVariableExist" - }, - "parameters": [ - "", - "GetArgumentAsString(\"SceneVariableName\")", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the scene variable exists.", - "fullName": "Scene variable exists", - "functionType": "Condition", - "group": "Scene variables", - "name": "SceneVariableExist", - "sentence": "If the scene variable _PARAM1_ exist", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const sceneVariables = runtimeScene.getVariables();\r\neventsFunctionContext.returnValue = sceneVariables.has(eventsFunctionContext.getArgument(\"SceneVariableName\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Check if an object variable exists.", - "fullName": "Object variable exists", - "functionType": "Condition", - "group": "Deprecated", - "name": "C_object_variable_exist", - "private": true, - "sentence": "Object _PARAM1_ has object variable _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ExtendedVariables::ObjectVariableExist" - }, - "parameters": [ - "", - "ObjectToCheck", - "GetArgumentAsString(\"ObjectVariableName\")", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "ObjectToCheck", - "type": "objectList" - }, - { - "description": "Name of object variable", - "name": "ObjectVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Check if an object variable exists.", - "fullName": "Object variable exists", - "functionType": "Condition", - "group": "Object variables", - "name": "ObjectVariableExist", - "sentence": "Object _PARAM1_ has object variable _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "let returnValue = true;\r\nif (!objects.length) {\r\n returnValue = false;\r\n} else {\r\n const objectVariableName = eventsFunctionContext.getArgument(\"ObjectVariableName\");\r\n for (let i = 0; i < objects.length; i++) {\r\n if (!objects[i].hasVariable(objectVariableName)) {\r\n // If any object does NOT have the variable, return false.\r\n returnValue = false;\r\n break;\r\n }\r\n }\r\n}\r\n\r\neventsFunctionContext.returnValue = returnValue;", - "parameterObjects": "ObjectToCheck", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Object", - "name": "ObjectToCheck", - "type": "objectList" - }, - { - "description": "Name of object variable", - "name": "ObjectVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Delete a global variable, removing it from memory.", - "fullName": "Delete global variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_Delete_global_variable", - "private": true, - "sentence": "Delete global variable _PARAM1_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ExtendedVariables::DeleteGlobalVariable" - }, - "parameters": [ - "", - "GetArgumentAsString(\"GlobalVariableName\")", - "" + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "Heart", + "ResourceBar_Sprite", + "-", + "1", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "Key", + "ResourceBar_Sprite", + "-", + "1", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "Arrow", + "ResourceBar_Sprite", + "-", + "1", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "Bomb", + "ResourceBar_Sprite", + "-", + "1", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "Heart_Pixel", + "ResourceBar_Sprite", + "-", + "1", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "BlueBar", + "ResourceBar_Sprite", + "-", + "1", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "PlayingCard", + "ResourceBar_Sprite", + "-", + "1", + "" + ] + } + ] + } ] - } - ] - } - ], - "parameters": [ - { - "description": "Name of the global variable to delete", - "name": "GlobalVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Delete the global variable, removing it from memory.", - "fullName": "Delete global variable", - "functionType": "Action", - "group": "Global variables", - "name": "DeleteGlobalVariable", - "sentence": "Delete the global variable _PARAM1_ from memory", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "runtimeScene.getGame().getVariables().remove(eventsFunctionContext.getArgument(\"GlobalVariableName\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the global variable to delete", - "name": "GlobalVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the text of a scene variable.", - "fullName": "String of a scene variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_Modify_scene_variable_string", - "private": true, - "sentence": "Change the text of scene variable _PARAM1_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + }, { - "type": { - "value": "ExtendedVariables::ModifySceneVariableString" - }, - "parameters": [ - "", - "GetArgumentAsString(\"SceneVariableName\")", - "GetArgumentAsNumber(\"SceneVariableValue\")", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "KeyReleased" + }, + "parameters": [ + "", + "Right" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "Sprites", + "ResourceBar_Sprite", + "+", + "1", + "" + ] + } + ], + "events": [ + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "Heart", + "ResourceBar_Sprite", + "+", + "1", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "Key", + "ResourceBar_Sprite", + "+", + "1", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "Arrow", + "ResourceBar_Sprite", + "+", + "1", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "Bomb", + "ResourceBar_Sprite", + "+", + "1", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "Heart_Pixel", + "ResourceBar_Sprite", + "+", + "1", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "BlueBar", + "ResourceBar_Sprite", + "+", + "1", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "PlayingCard", + "ResourceBar_Sprite", + "+", + "1", + "" + ] + } + ] + } ] - } - ] - } - ], - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - }, - { - "description": "Value", - "name": "SceneVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the text of a scene variable.", - "fullName": "String of a scene variable", - "functionType": "Action", - "group": "Scene variables", - "name": "ModifySceneVariableString", - "sentence": "Change the text of scene variable _PARAM1_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const variable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r\nvariable.setString(eventsFunctionContext.getArgument(\"SceneVariableValue\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - }, - { - "description": "Value", - "name": "SceneVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the text of a global variable.", - "fullName": "String of a global variable", - "functionType": "Action", - "group": "Global variables", - "name": "ModifyGlobalVariableString", - "sentence": "Change the text of global variable _PARAM1_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const variable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r\nvariable.setString(eventsFunctionContext.getArgument(\"GlobalVariableValue\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the global variable", - "name": "GlobalVariableName", - "type": "string" - }, - { - "description": "Value", - "name": "GlobalVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the value of a global variable.", - "fullName": "Value of a global variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_Modify_global_variable", - "private": true, - "sentence": "Change the global variable _PARAM1_ with value: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + }, { - "type": { - "value": "ExtendedVariables::ModifyGlobalVariable" - }, - "parameters": [ - "", - "GetArgumentAsString(\"SceneVariableName\")", - "GetArgumentAsNumber(\"SceneVariableValue\")", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::DrawResourceBar" + }, + "parameters": [ + "Heart", + "ResourceBar_Sprite", + "Heart_Unit", + "5", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::DrawResourceBar" + }, + "parameters": [ + "Key", + "ResourceBar_Sprite", + "Key_Unit", + "5" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::DrawResourceBar" + }, + "parameters": [ + "Arrow", + "ResourceBar_Sprite", + "Arrow_Unit", + "5" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::DrawResourceBar" + }, + "parameters": [ + "Bomb", + "ResourceBar_Sprite", + "Bomb_Unit", + "5" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::DrawResourceBar" + }, + "parameters": [ + "Heart_Pixel", + "ResourceBar_Sprite", + "Heart_Pixel_Unit", + "5" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::DrawResourceBar" + }, + "parameters": [ + "BlueBar", + "ResourceBar_Sprite", + "BlueBar_Unit", + "5" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::DrawResourceBar" + }, + "parameters": [ + "PlayingCard", + "ResourceBar_Sprite", + "PlayingCard_Unit", + "5" + ] + } ] } - ] - } - ], - "parameters": [ - { - "description": "Name of the global variable", - "name": "SceneVariableName", - "type": "string" - }, - { - "description": "Value", - "name": "SceneVariableValue", - "type": "expression" + ], + "parameters": [] } ], - "objectGroups": [] + "parameters": [] }, { - "description": "Modify the text of a global variable.", - "fullName": "String of a global variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_Modify_global_variable_string", - "private": true, - "sentence": "Change the text of global variable _PARAM1_ to _PARAM2_", + "colorB": 224, + "colorG": 16, + "colorR": 189, + "creationTime": 0, + "name": "Buttons", + "source": "", + "type": "BuiltinCommonInstructions::Group", "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Hover", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "ExtendedVariables::ModifyGlobalVariableString" - }, - "parameters": [ - "", - "GetArgumentAsString(\"SceneVariableName\")", - "GetArgumentAsNumber(\"SceneVariableValue\")", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SourisSurObjet" + }, + "parameters": [ + "Buttons", + "", + "", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "EnableEffect" + }, + "parameters": [ + "Buttons", + "\"Effect\"", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SourisSurObjet" + }, + "parameters": [ + "Buttons", + "", + "", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "EnableEffect" + }, + "parameters": [ + "Buttons", + "\"Effect\"", + "yes" + ] + } ] } - ] - } - ], - "parameters": [ - { - "description": "Name of the global variable", - "name": "SceneVariableName", - "type": "string" - }, - { - "description": "Value", - "name": "SceneVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the value of a global variable.", - "fullName": "Value of a global variable", - "functionType": "Action", - "group": "Global variables", - "name": "ModifyGlobalVariable", - "sentence": "Change the global variable _PARAM1_ with value: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const variable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r\nvariable.setNumber(eventsFunctionContext.getArgument(\"GlobalVariableValue\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the global variable", - "name": "GlobalVariableName", - "type": "string" + ], + "parameters": [] }, { - "description": "Value", - "name": "GlobalVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the value of a scene variable.", - "fullName": "Value of a scene variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_Modify_scene_variable", - "private": true, - "sentence": "Change the scene variable _PARAM1_ with value: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Clicked", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "ExtendedVariables::ModifySceneVariable" - }, - "parameters": [ - "", - "GetArgumentAsString(\"SceneVariableName\")", - "GetArgumentAsNumber(\"SceneVariableValue\")", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "MouseButtonReleased" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "ScaleWidth" + }, + "parameters": [ + "Buttons", + "=", + "0.9" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SourisSurObjet" + }, + "parameters": [ + "PlusKey", + "", + "", + "" + ] + } + ], + "actions": [], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Sprite", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "Heart", + "ResourceBar_Sprite", + "+", + "1", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "Key", + "ResourceBar_Sprite", + "+", + "1", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "Arrow", + "ResourceBar_Sprite", + "+", + "1", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "Bomb", + "ResourceBar_Sprite", + "+", + "1", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "Heart_Pixel", + "ResourceBar_Sprite", + "+", + "1", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "BlueBar", + "ResourceBar_Sprite", + "+", + "1", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "PlayingCard", + "ResourceBar_Sprite", + "+", + "1", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "Sprites", + "ResourceBar_Sprite", + "+", + "1", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Tiled sprite", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantity" + }, + "parameters": [ + "TiledSprites", + "ResourceBar_TiledSprite", + "+", + "1", + "" + ] + } + ] + } + ], + "parameters": [] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SourisSurObjet" + }, + "parameters": [ + "MinusKey", + "", + "", + "" + ] + } + ], + "actions": [], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Sprite", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "Heart", + "ResourceBar_Sprite", + "-", + "1", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "Key", + "ResourceBar_Sprite", + "-", + "1", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "Arrow", + "ResourceBar_Sprite", + "-", + "1", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "Bomb", + "ResourceBar_Sprite", + "-", + "1", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "Heart_Pixel", + "ResourceBar_Sprite", + "-", + "1", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "BlueBar", + "ResourceBar_Sprite", + "-", + "1", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "PlayingCard", + "ResourceBar_Sprite", + "-", + "1", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_Sprite::SetQuantity" + }, + "parameters": [ + "Sprites", + "ResourceBar_Sprite", + "-", + "1", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Tiled sprite", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_TiledSprite::SetQuantity" + }, + "parameters": [ + "TiledSprites", + "ResourceBar_TiledSprite", + "-", + "1", + "" + ] + } + ] + } + ], + "parameters": [] + } + ] + } ] } - ] - } - ], - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - }, - { - "description": "Value", - "name": "SceneVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the value of a scene variable.", - "fullName": "Value of a scene variable", - "functionType": "Action", - "group": "Scene variables", - "name": "ModifySceneVariable", - "sentence": "Change the scene variable _PARAM1_ with value: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const variable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r\nvariable.setNumber(eventsFunctionContext.getArgument(\"SceneVariableValue\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" + ], + "parameters": [] }, { - "description": "Value", - "name": "SceneVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Delete scene variable, the variable will be deleted from the memory.", - "fullName": "Delete scene variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_Delete_scene_variable", - "private": true, - "sentence": "Delete the scene variable _PARAM1_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Press", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "ExtendedVariables::DeleteSceneVariable" - }, - "parameters": [ - "", - "GetArgumentAsString(\"SceneVariableName\")", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "MouseButtonPressed" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SourisSurObjet" + }, + "parameters": [ + "Buttons", + "", + "", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeColor" + }, + "parameters": [ + "Buttons", + "\"189;16;224\"" + ] + }, + { + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "Buttons", + "=", + "0.9" + ] + } + ] + } ] - } - ] - } - ], - "parameters": [ - { - "description": "Name of the scene variable to delete", - "name": "SceneVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Delete the scene variable, the variable will be deleted from the memory.", - "fullName": "Delete scene variable", - "functionType": "Action", - "group": "Scene variables", - "name": "DeleteSceneVariable", - "sentence": "Delete the scene variable _PARAM1_ from memory", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "runtimeScene.getVariables().remove(eventsFunctionContext.getArgument(\"SceneVariableName\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the scene variable to delete", - "name": "SceneVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Copy an object variable from one object to another.", - "fullName": "Copy an object variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_CopyObjectVariable", - "private": true, - "sentence": "Copy the variable _PARAM1_ of _PARAM2_ to the variable _PARAM3_ of _PARAM4_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + }, { - "type": { - "value": "ExtendedVariables::CopyObjectVariable" - }, - "parameters": [ - "", - "SourceObject", - "GetArgumentAsString(\"SourceVariableName\")", - "TargetObject", - "GetArgumentAsString(\"TargetVariableName\")", - "no", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "MouseButtonPressed" + }, + "parameters": [ + "", + "Left" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeColor" + }, + "parameters": [ + "Buttons", + "\"255;255;255\"" + ] + }, + { + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "Buttons", + "=", + "1" + ] + } ] } - ] + ], + "parameters": [] } ], - "parameters": [ - { - "description": "Source object", - "name": "SourceObject", - "type": "objectList" - }, - { - "description": "Variable to copy", - "name": "SourceVariableName", - "type": "string" - }, - { - "description": "Destination object", - "longDescription": "To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.", - "name": "TargetObject", - "type": "objectList" - }, + "parameters": [] + } + ], + "layers": [ + { + "ambientLightColorB": 32, + "ambientLightColorG": 0, + "ambientLightColorR": 0, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "", + "visibility": true, + "cameras": [ { - "description": "Destination variable", - "name": "TargetVariableName", - "type": "string" + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 } ], - "objectGroups": [] + "effects": [] + } + ], + "behaviorsSharedData": [ + { + "name": "ResourceBar_Sprite", + "type": "ResourceBar::ResourceBar_Sprite" }, { - "description": "Copy the object variable from one object to another.", - "fullName": "Copy an object variable", - "functionType": "Action", - "group": "Object variables", - "name": "CopyObjectVariable", - "sentence": "Copy the variable _PARAM2_ of _PARAM1_ to the variable _PARAM4_ of _PARAM3_ (clear destination first: _PARAM5_)", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const sourceObject = eventsFunctionContext.getObjects(\"SourceObject\")[0];\nconst targetObject = eventsFunctionContext.getObjects(\"TargetObject\")[0];\nconst sourceVariableName = eventsFunctionContext.getArgument(\"SourceVariableName\");\nconst targetVariableName = eventsFunctionContext.getArgument(\"TargetVariableName\");\nconst isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");\n\nconst sourceVariables = sourceObject.getVariables();\nconst targetVariables = targetObject.getVariables();\n\nif (sourceVariables.has(sourceVariableName))\n{\n gdjs.Variable.copy\n (\n sourceVariables.get(sourceVariableName),\n targetVariables.get(targetVariableName),\n isExactCopy\n );\n}", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ - { - "description": "Source object", - "name": "SourceObject", - "type": "objectList" - }, - { - "description": "Variable to copy", - "name": "SourceVariableName", - "type": "string" - }, - { - "description": "Destination object", - "longDescription": "To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.", - "name": "TargetObject", - "type": "objectList" - }, - { - "description": "Destination variable", - "name": "TargetVariableName", - "type": "string" - }, - { - "defaultValue": "yes", - "description": "Clear destination first", - "name": "isExactCopy", - "optional": true, - "type": "yesorno" - } - ], - "objectGroups": [] + "name": "ResourceBar_TiledSprite", + "type": "ResourceBar::ResourceBar" + } + ] + }, + { + "b": 0, + "disableInputWhenNotFocused": true, + "mangledName": "Shape_32Painter_32_40Game_41", + "name": "Shape Painter (Game)", + "r": 0, + "standardSortMethod": true, + "stopSoundsOnStartup": true, + "title": "", + "v": 0, + "uiSettings": { + "grid": true, + "gridType": "rectangular", + "gridWidth": 8, + "gridHeight": 8, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.2, + "snap": true, + "zoomFactor": 1.06, + "windowMask": false + }, + "objectsGroups": [], + "variables": [], + "instances": [ + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Shield_Bar", + "persistentUuid": "b581caf8-44ee-423e-b57e-cdd910fb7374", + "width": 0, + "x": 192, + "y": 216, + "zOrder": 2, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] }, { - "description": "Copy all object variables from one object to another.", - "fullName": "Copy all object variables", - "functionType": "Action", - "group": "Deprecated", - "name": "A_CopyAllObjectVariables", - "private": true, - "sentence": "Copy all variables from _PARAM1_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ExtendedVariables::CopyAllObjectVariables" - }, - "parameters": [ - "", - "SourceObject", - "TargetObject", - "no", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Source object", - "name": "SourceObject", - "type": "objectList" - }, - { - "description": "Destination object", - "name": "TargetObject", - "type": "objectList" - } - ], - "objectGroups": [] + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "ResourceMouseX_Bar", + "persistentUuid": "17a23f4a-a442-4b52-8380-9f2b6a9c2494", + "width": 0, + "x": 192, + "y": 536, + "zOrder": 3, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 80, + "layer": "", + "name": "Fly", + "persistentUuid": "e0b70af7-7a81-41c3-88ac-88305df91ed2", + "width": 128, + "x": 481.13275146484375, + "y": 293, + "zOrder": 4, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 128, + "layer": "", + "name": "Moon", + "persistentUuid": "8428ea9d-6d1e-41b0-9f54-1840f3378846", + "width": 129.1327362060547, + "x": 480, + "y": 272, + "zOrder": 0, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Health_Text", + "persistentUuid": "921b2f28-8bee-4ab2-a6cc-1ee823c5215e", + "width": 0, + "x": 48, + "y": 96, + "zOrder": 9, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Shield_Text", + "persistentUuid": "a231209b-a5d8-4280-868d-1e9beb31527b", + "width": 0, + "x": 48, + "y": 208, + "zOrder": 10, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] }, { - "description": "Copy all object variables from one object to another.", - "fullName": "Copy all object variables", - "functionType": "Action", - "group": "Object variables", - "name": "CopyAllObjectVariables", - "sentence": "Copy all variables from object _PARAM1_ to object _PARAM2_ (clear destination first: _PARAM3_)", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "// This JS event use private scope from the API, this can be borken at anytime.\n\nconst sourceObject = eventsFunctionContext.getObjects(\"SourceObject\")[0];\nconst targetObject = eventsFunctionContext.getObjects(\"TargetObject\")[0];\nconst isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");\n\nconst targetVariables = targetObject.getVariables();\nconst sourceVariables = sourceObject.getVariables()._variables.items;\nfor (const variableName in sourceVariables)\n{\n if (sourceVariables.hasOwnProperty(variableName))\n {\n gdjs.Variable.copy(sourceVariables[variableName], targetVariables.get(variableName), isExactCopy);\n }\n}", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ - { - "description": "Source object", - "name": "SourceObject", - "type": "objectList" - }, - { - "description": "Destination object", - "name": "TargetObject", - "type": "objectList" - }, - { - "defaultValue": "yes", - "description": "Clear destination first", - "name": "isExactCopy", - "optional": true, - "type": "yesorno" - } - ], - "objectGroups": [] + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "ResourceMouseX_Text", + "persistentUuid": "07fda015-55f8-4959-80fc-f1ee3074d028", + "width": 0, + "x": 32, + "y": 512, + "zOrder": 11, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] }, { - "description": "Delete an object variable, removing it from memory.", - "fullName": "Delete object variable", - "functionType": "Action", - "group": "Object variables", - "name": "DeleteObjectVariable", - "sentence": "Delete for the object _PARAM1_ the object variable _PARAM2_ from the memory", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const object = eventsFunctionContext.getObjects(\"Object\")[0];\r\nconst objectVariables = object.getVariables();\r\n\r\nobjectVariables.remove(eventsFunctionContext.getArgument(\"VariableName\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "objectList" - }, - { - "description": "Name of object variable", - "name": "VariableName", - "type": "string" - } - ], - "objectGroups": [] + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Title_Text", + "persistentUuid": "29ae792c-1331-430c-aadf-70fa8d9e36d6", + "width": 0, + "x": 208, + "y": 16, + "zOrder": 12, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] }, { - "description": "Return the text of a global variable.", - "fullName": "Text of a global variable", - "functionType": "StringExpression", - "group": "Global variables", - "name": "GlobalVariableString", - "sentence": "", - "events": [ + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "Health_Bar", + "persistentUuid": "c411b32c-f357-4b8f-9e87-f3fdde7657d5", + "width": 0, + "x": 192, + "y": 104, + "zOrder": 1, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ], + "objects": [ + { + "assetStoreId": "", + "name": "Health_Bar", + "tags": "", + "type": "PrimitiveDrawing::Drawer", + "variables": [], + "effects": [], + "behaviors": [ { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const globalVariables = runtimeScene.getGame().getVariables();\r\nconst variableExist = globalVariables.has(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r\n\r\nif (variableExist) {\r\n eventsFunctionContext.returnValue = globalVariables.get(eventsFunctionContext.getArgument(\"GlobalVariableName\")).getAsString();\r\n}", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false + "name": "ResourceBar_ShapePainter", + "type": "ResourceBar::ResourceBar_ShapePainter", + "ValueMin": 0, + "ValueMax": 1, + "TickSpacing": 0, + "BarLength": 200, + "BarThickness": 16, + "InactiveBarColor": "11;255;0", + "InactiveBarOpacity": 96, + "ActiveBarColor": " 11;255;0", + "ActiveBarOpacity": 255, + "RoundedBar": true, + "Value": 0, + "ThumbOffset": 0, + "NeedRedraw": true } ], - "expressionType": { - "type": "string" + "fillOpacity": 255, + "outlineSize": 1, + "outlineOpacity": 255, + "fillColor": { + "b": 255, + "g": 255, + "r": 255 }, - "parameters": [ - { - "description": "Name of the global variable", - "name": "GlobalVariableName", - "type": "string" - } - ], - "objectGroups": [] + "outlineColor": { + "b": 0, + "g": 0, + "r": 0 + }, + "absoluteCoordinates": false, + "clearBetweenFrames": true }, { - "description": "Return the text of a scene variable.", - "fullName": "Text of a scene variable", - "functionType": "StringExpression", - "group": "Scene variables", - "name": "VariableString", - "sentence": "", - "events": [ + "assetStoreId": "", + "name": "MiniHealth_Bar", + "tags": "", + "type": "PrimitiveDrawing::Drawer", + "variables": [], + "effects": [], + "behaviors": [ { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const sceneVariables = runtimeScene.getVariables();\r\nconst variableExist = sceneVariables.has(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r\n\r\nif (variableExist) {\r\n eventsFunctionContext.returnValue = sceneVariables.get(eventsFunctionContext.getArgument(\"SceneVariableName\")).getAsString();\r\n}", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "expressionType": { - "type": "string" - }, - "parameters": [ + "name": "ResourceBar_ShapePainter", + "type": "ResourceBar::ResourceBar_ShapePainter", + "ValueMin": 0, + "ValueMax": 1, + "TickSpacing": 0, + "BarLength": 50, + "BarThickness": 4, + "InactiveBarColor": "11;255;0", + "InactiveBarOpacity": 96, + "ActiveBarColor": " 11;255;0", + "ActiveBarOpacity": 255, + "Value": 0, + "ThumbOffset": 0, + "NeedRedraw": true + }, { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" + "name": "Sticker", + "type": "Sticker::Sticker", + "OnlyFollowPosition": true } ], - "objectGroups": [] + "fillOpacity": 255, + "outlineSize": 1, + "outlineOpacity": 255, + "fillColor": { + "b": 255, + "g": 255, + "r": 255 + }, + "outlineColor": { + "b": 0, + "g": 0, + "r": 0 + }, + "absoluteCoordinates": false, + "clearBetweenFrames": true }, { - "description": "Return the value of a global variable.", - "fullName": "Value of a global variable", - "functionType": "Expression", - "group": "Global variables", - "name": "GlobalVariable", - "sentence": "", - "events": [ + "assetStoreId": "", + "name": "Shield_Bar", + "tags": "", + "type": "PrimitiveDrawing::Drawer", + "variables": [], + "effects": [], + "behaviors": [ { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const globalVariables = runtimeScene.getGame().getVariables();\r\nconst variableExist = globalVariables.has(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r\n\r\nif (variableExist) {\r\n eventsFunctionContext.returnValue = globalVariables.get(eventsFunctionContext.getArgument(\"GlobalVariableName\")).getAsNumber();\r\n}", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false + "name": "ResourceBar_ShapePainter", + "type": "ResourceBar::ResourceBar_ShapePainter", + "ValueMin": 0, + "ValueMax": 1, + "TickSpacing": 0, + "ThumbShape": "circle", + "ThumbWidth": 20, + "ThumbHeight": 20, + "ThumbColor": " 24;119;211", + "ThumbOpacity": 255, + "BarLength": 200, + "BarThickness": 16, + "InactiveBarColor": "144;19;254", + "InactiveBarOpacity": 96, + "ActiveBarColor": " 144;19;254", + "ActiveBarOpacity": 255, + "HaloRadius": 24, + "HaloOpacityHover": 32, + "HaloOpacityClick": 64, + "RoundedBar": true, + "Enabled": true, + "IsBeingDragged": false, + "Value": 0, + "ThumbOffset": 0, + "NeedRedraw": true, + "IsHovered": false, + "MouseX": 0, + "MouseY": 0, + "CurrentHaloRadius": 0, + "HaloGrowSpeed": 0.2, + "TargetHaloRadius": 0.19999992847442627 } ], - "expressionType": { - "type": "expression" + "fillOpacity": 255, + "outlineSize": 1, + "outlineOpacity": 255, + "fillColor": { + "b": 255, + "g": 255, + "r": 255 }, - "parameters": [ - { - "description": "Name of the global variable", - "name": "GlobalVariableName", - "type": "string" - } - ], - "objectGroups": [] + "outlineColor": { + "b": 0, + "g": 0, + "r": 0 + }, + "absoluteCoordinates": false, + "clearBetweenFrames": true }, { - "description": "Return the value of a scene variable.", - "fullName": "Value of a scene variable", - "functionType": "Expression", - "group": "Scene variables", - "name": "Variable", - "sentence": "", - "events": [ + "assetStoreId": "", + "name": "ResourceMouseX_Bar", + "tags": "", + "type": "PrimitiveDrawing::Drawer", + "variables": [], + "effects": [], + "behaviors": [ { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const sceneVariables = runtimeScene.getVariables();\r\nconst variableExist = sceneVariables.has(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r\n\r\nif (variableExist) {\r\n eventsFunctionContext.returnValue = sceneVariables.get(eventsFunctionContext.getArgument(\"SceneVariableName\")).getAsNumber();\r\n}", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false + "name": "ResourceBar_ShapePainter", + "type": "ResourceBar::ResourceBar_ShapePainter", + "ValueMin": 0, + "ValueMax": 1, + "TickSpacing": 0, + "ThumbShape": "circle", + "ThumbWidth": 20, + "ThumbHeight": 20, + "ThumbColor": "248;231;28", + "ThumbOpacity": 255, + "BarLength": 200, + "BarThickness": 16, + "InactiveBarColor": "248;231;28", + "InactiveBarOpacity": 96, + "ActiveBarColor": "248;231;28", + "ActiveBarOpacity": 255, + "HaloRadius": 24, + "HaloOpacityHover": 32, + "HaloOpacityClick": 64, + "RoundedBar": false, + "Enabled": true, + "IsBeingDragged": false, + "Value": 0, + "ThumbOffset": 0, + "NeedRedraw": true, + "IsHovered": false, + "MouseX": 0, + "MouseY": 0, + "CurrentHaloRadius": 0, + "HaloGrowSpeed": 0.2, + "TargetHaloRadius": 0.19999992847442627 } ], - "expressionType": { - "type": "expression" + "fillOpacity": 255, + "outlineSize": 1, + "outlineOpacity": 255, + "fillColor": { + "b": 255, + "g": 255, + "r": 255 }, - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - } - ], - "objectGroups": [] + "outlineColor": { + "b": 0, + "g": 0, + "r": 0 + }, + "absoluteCoordinates": false, + "clearBetweenFrames": true }, { - "description": "Copy the global variable to scene. This copy everything from the types to the values.", - "fullName": "Copy a global variable to scene", - "functionType": "Action", - "group": "Convert", - "name": "CopyGlobalVariableToScene", - "sentence": "Copy the global variable:_PARAM1_ to a scene variable:_PARAM2_ (clear destination first: _PARAM3_)", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const globalVariable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"globalVariableName\"));\nconst sceneVariable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"sceneVariableName\"));\nconst isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");\n\ngdjs.Variable.copy(globalVariable, sceneVariable, isExactCopy);\n", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ + "assetStoreId": "48a2d179a1921276abe3f99ce3cf195fa7c310bc511fa215d9647c3fb9027921", + "name": "Fly", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ { - "description": "Global variable to copy", - "name": "globalVariableName", - "type": "string" + "name": "Health", + "type": "Health::Health", + "Health": 100, + "DamageCooldown": 0, + "MaxHealth": 100, + "IsJustDamaged": false, + "HealthRegenRate": 0, + "HealthRegenDelay": 0, + "AllowOverHealing": false, + "HitAtLeastOnce": false }, { - "description": "Scene variable destination", - "name": "sceneVariableName", - "type": "string" + "name": "ShakeObject_PositionAngleScale", + "type": "ShakeObject::ShakeObject_PositionAngleScale" }, { - "defaultValue": "yes", - "description": "Clear destination first", - "name": "isExactCopy", - "optional": true, - "type": "yesorno" + "name": "Shield", + "type": "Health::Shield", + "RequireHealth": "Health", + "MaxShieldPoints": 30, + "ShieldDuration": 5, + "ShieldPoints": 0, + "ShieldRegenRate": 0, + "ShieldBlocksExcessDamage": false, + "ShieldRegenDelay": 0, + "RegenShieldWhenZeroPoints": false, + "IsShieldJustDamaged": false + } + ], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.05000000074505806, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "Fly_1.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_2.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_3.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_4.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_5.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_6.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_7.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_8.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_9.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + }, + { + "hasCustomCollisionMask": true, + "image": "Fly_10.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": false, + "name": "centre", + "x": 57.500244140625, + "y": 48.2830924987793 + }, + "customCollisionMask": [ + [ + { + "x": 35, + "y": 25 + }, + { + "x": 80, + "y": 25 + }, + { + "x": 80, + "y": 70 + }, + { + "x": 35, + "y": 70 + } + ] + ] + } + ] + } + ] } - ], - "objectGroups": [] + ] }, { - "description": "Copy the scene variable to global. This copy everything from the types to the values.", - "fullName": "Copy a scene variable to global ", - "functionType": "Action", - "group": "Copy variables", - "name": "CopySceneVariableToGlobal", - "sentence": "Copy the scene variable:_PARAM1_ to a global variable:_PARAM2_ (clear destination first: _PARAM3_)", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const sceneVariable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"sceneVariableName\"));\nconst globalVariable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"globalVariableName\"));\nconst isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");\n\ngdjs.Variable.copy(sceneVariable, globalVariable, isExactCopy);", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ - { - "description": "Scene variable to copy", - "name": "sceneVariableName", - "type": "string" - }, - { - "description": "Global variable destination", - "name": "globalVariableName", - "type": "string" - }, - { - "defaultValue": "yes", - "description": "Clear destination first", - "name": "isExactCopy", - "optional": true, - "type": "yesorno" - } - ], - "objectGroups": [] - } - ], - "eventsBasedBehaviors": [], - "eventsBasedObjects": [] - }, - { - "author": "D8H", - "category": "", - "extensionNamespace": "", - "fullName": "Stick objects to others", - "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXN0aWNrZXItb3V0bGluZSIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik01LjUgMkMzLjYgMiAyIDMuNiAyIDUuNVYxOC41QzIgMjAuNCAzLjYgMjIgNS41IDIySDE2TDIyIDE2VjUuNUMyMiAzLjYgMjAuNCAyIDE4LjUgMkg1LjVNNS44IDRIMTguM0MxOS4zIDQgMjAuMSA0LjggMjAuMSA1LjhWMTVIMTguNkMxNi43IDE1IDE1LjEgMTYuNiAxNS4xIDE4LjVWMjBINS44QzQuOCAyMCA0IDE5LjIgNCAxOC4yVjUuOEM0IDQuOCA0LjggNCA1LjggNCIgLz48L3N2Zz4=", - "name": "Sticker", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/sticker-outline.svg", - "shortDescription": "Behavior to stick objects to other objects - so that they follow the position and rotation of the object they are stuck to.", - "version": "0.3.4", - "description": "This extension can be useful for:\n* Stick an accessory to a moving object,\n* Animate a skeleton.", - "origin": { - "identifier": "Sticker", - "name": "gdevelop-extension-store" - }, - "tags": [ - "sticker", - "stick", - "follow", - "skeleton", - "joint" - ], - "authorIds": [ - "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" - ], - "dependencies": [], - "eventsFunctions": [ - { - "description": "Check if the object is stuck to another object.", - "fullName": "Is stuck to another object", - "functionType": "Condition", - "name": "IsStuck", - "sentence": "_PARAM1_ is stuck to _PARAM3_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const stickerBehaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\n/** @type {Hashtable} */\nconst stickerObjectsLists = eventsFunctionContext.getObjectsLists(\"Object\");\n/** @type {Hashtable} */\nconst basisObjectsLists = eventsFunctionContext.getObjectsLists(\"BasisObject\");\n\neventsFunctionContext.returnValue = gdjs.evtTools.object.twoListsTest(\n (stickerObject, basisObject, stickerBehaviorName) => {\n const behavior = stickerObject.getBehavior(stickerBehaviorName);\n return behavior.basisObject === basisObject;\n },\n stickerObjectsLists,\n basisObjectsLists,\n false,\n stickerBehaviorName\n);", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ - { - "description": "Sticker", - "name": "Object", - "type": "objectList" - }, - { - "description": "Sticker behavior", - "name": "Behavior", - "supplementaryInformation": "Sticker::Sticker", - "type": "behavior" - }, - { - "description": "Basis", - "name": "BasisObject", - "type": "objectList" - } - ], - "objectGroups": [] - } - ], - "eventsBasedBehaviors": [ - { - "description": "Stick the object to another. Use the action to stick the object, or unstick it later.", - "fullName": "Sticker", - "name": "Sticker", - "objectType": "", - "eventsFunctions": [ - { - "fullName": "", - "functionType": "Action", - "name": "onCreated", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\nconst object = objects[0];\nconst behavior = object.getBehavior(behaviorName);\n\n// Set up the scene sticker objects list - if not done already.\nif (!runtimeScene.__allStickers)\n runtimeScene.__allStickers = new Set();\n\n// Set up the behavior extra methods - if not done already.\nconst prototype = Object.getPrototypeOf(behavior);\nif (!prototype.updateRelativeCoordinates) {\n // Unstick from deleted objects.\n gdjs.registerObjectDeletedFromSceneCallback(function (runtimeScene, deletedObject) {\n if (!runtimeScene.__allStickers) return;\n\n for (const sticker of runtimeScene.__allStickers) {\n if (sticker.basisObject === deletedObject) {\n sticker.basisObject = null;\n }\n }\n });\n\n /**\n * Update the coordinates in the basisObject basis.\n * \n * It uses the basisObject coordinates from the previous frame.\n * This way, the sticker can move relatively to it and still\n * follow basisObject.\n * \n * @param {gdjs.RuntimeObject} basisObject\n */\n prototype.updateRelativeCoordinates = function (basisObject) {\n const object = this.owner;\n\n // Update relative coordinates\n this.relativeX = object.getX() - this.basisOldX;\n this.relativeY = object.getY() - this.basisOldY;\n if (!this._getOnlyFollowPosition()) {\n this.relativeAngle = object.getAngle() - this.basisOldAngle;\n this.relativeWidth = object.getWidth() / this.basisOldWidth;\n this.relativeHeight = object.getHeight() / this.basisOldHeight;\n const deltaX = object.getCenterXInScene() - this.basisOldCenterXInScene;\n const deltaY = object.getCenterYInScene() - this.basisOldCenterYInScene;\n const angle = this.basisOldAngle * Math.PI / 180;\n this.relativeRotatedX = (deltaX * Math.cos(angle) + deltaY * Math.sin(angle)) / this.basisOldWidth;\n this.relativeRotatedY = (-deltaX * Math.sin(angle) + deltaY * Math.cos(angle)) / this.basisOldHeight;\n\n // Save initial values to avoid calculus and rounding errors\n this.basisOriginalWidth = basisObject.getWidth();\n this.basisOriginalHeight = basisObject.getHeight();\n this.basisOriginalAngle = basisObject.getAngle();\n }\n }\n\n /**\n * Copy the coordinates to use it the next frame.\n * @param basisObject {gdjs.RuntimeObject}\n */\n prototype.updateOldCoordinates = function (basisObject) {\n const object = this.owner;\n\n this.ownerOldX = object.getX();\n this.ownerOldY = object.getY();\n\n this.basisOldX = basisObject.getX();\n this.basisOldY = basisObject.getY();\n\n if (!this._getOnlyFollowPosition()) {\n this.ownerOldAngle = object.getAngle();\n this.ownerOldWidth = object.getWidth();\n this.ownerOldHeight = object.getHeight();\n\n this.basisOldAngle = basisObject.getAngle();\n this.basisOldWidth = basisObject.getWidth();\n this.basisOldHeight = basisObject.getHeight();\n this.basisOldCenterXInScene = basisObject.getCenterXInScene();\n this.basisOldCenterYInScene = basisObject.getCenterYInScene();\n }\n }\n /**\n * Follow the basisObject (called in doStepPostEvents).\n * \n * This method is also called by children to ensure\n * parents are updated first.\n */\n prototype.followBasisObject = function () {\n if (this.followingDoneThisFrame) {\n return;\n }\n this.followingDoneThisFrame = true;\n /** @type {gdjs.RuntimeObject} */\n const basisObject = this.basisObject;\n if (basisObject) {\n // If the behavior on the basis object has a different name,\n // the objects will still follow their basis objects\n // but frame delays could happen.\n if (basisObject.hasBehavior(behaviorName)) {\n const basisBehavior = basisObject.getBehavior(behaviorName);\n if (basisBehavior.type === this.type) {\n // Follow parents 1st to avoid frame delays\n basisBehavior.followBasisObject();\n }\n }\n\n const object = this.owner;\n\n if (this._getOnlyFollowPosition()) {\n if (object.getX() !== this.ownerOldX\n || object.getY() !== this.ownerOldY) {\n this.updateRelativeCoordinates(basisObject);\n }\n\n if (this.basisOldX !== basisObject.getX() ||\n this.basisOldY !== basisObject.getY()) {\n object.setPosition(\n basisObject.getX() + this.relativeX,\n basisObject.getY() + this.relativeY);\n }\n } else {\n if (object.getX() !== this.ownerOldX\n || object.getY() !== this.ownerOldY\n || object.getAngle() !== this.ownerOldAngle\n || object.getWidth() !== this.ownerOldWidth\n || object.getHeight() !== this.ownerOldHeight) {\n this.updateRelativeCoordinates(basisObject);\n }\n\n // Follow basisObject\n if (basisObject.getAngle() === this.basisOriginalAngle && this.basisOriginalAngle === 0) {\n if (basisObject.getWidth() === this.basisOriginalWidth ||\n basisObject.getHeight() === this.basisOriginalHeight) {\n if (this.basisOldX !== basisObject.getX() ||\n this.basisOldY !== basisObject.getY()) {\n object.setPosition(\n basisObject.getX() + this.relativeX,\n basisObject.getY() + this.relativeY);\n }\n } else {\n object.setPosition(\n basisObject.getX() + this.relativeRotatedX * basisObject.getWidth(),\n basisObject.getY() + this.relativeRotatedY * basisObject.getHeight());\n }\n } else {\n object.setAngle(basisObject.getAngle() + this.relativeAngle);\n\n const deltaX = this.relativeRotatedX * basisObject.getWidth();\n const deltaY = this.relativeRotatedY * basisObject.getHeight();\n const angle = -basisObject.getAngle() * Math.PI / 180;\n object.setX(basisObject.getCenterXInScene() + object.getX() - object.getCenterXInScene() + deltaX * Math.cos(angle) + deltaY * Math.sin(angle));\n object.setY(basisObject.getCenterYInScene() + object.getY() - object.getCenterYInScene() - deltaX * Math.sin(angle) + deltaY * Math.cos(angle));\n }\n // Unproportional dimensions changes won't work as expected\n // if the object angle is not null but nothing more can be done\n // because there is no full affine transformation on objects.\n if (basisObject.getWidth() !== this.basisOriginalWidth) {\n object.setWidth(this.relativeWidth * basisObject.getWidth());\n }\n if (basisObject.getHeight() !== this.basisOriginalHeight) {\n object.setHeight(this.relativeHeight * basisObject.getHeight());\n }\n }\n\n this.updateOldCoordinates(basisObject);\n }\n }\n}\n\n// Register this object as a sticker.\nruntimeScene.__allStickers.add(behavior);\n", - "parameterObjects": "Object", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Sticker::Sticker", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "fullName": "", - "functionType": "Action", - "name": "doStepPreEvents", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\nconst object = objects[0];\nconst behavior = object.getBehavior(behaviorName);\n\nbehavior.followingDoneThisFrame = false;", - "parameterObjects": "Object", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Sticker::Sticker", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "fullName": "", - "functionType": "Action", - "name": "doStepPostEvents", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\nconst object = objects[0];\nconst behavior = object.getBehavior(behaviorName);\n\nbehavior.followBasisObject();", - "parameterObjects": "Object", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Sticker::Sticker", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Stick on another object.", - "fullName": "Stick", - "functionType": "Action", - "name": "Stick", - "sentence": "Stick _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const object = objects[0];\nconst behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\nconst basisObjects = eventsFunctionContext.getObjects(\"BasisObject\");\n\nif (basisObjects.length === 0) return;\nconst basisObject = basisObjects[0];\n\nconst behavior = object.getBehavior(behaviorName);\n\nbehavior.basisObject = basisObject;\nbehavior.updateOldCoordinates(basisObject);\nbehavior.updateRelativeCoordinates(basisObject);\n", - "parameterObjects": "Object", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Sticker::Sticker", - "type": "behavior" - }, - { - "description": "Object to stick to", - "name": "BasisObject", - "type": "objectList" - } - ], - "objectGroups": [] - }, + "assetStoreId": "574655a4565bd983af8f5dd98e0fd8cda3bd67cf929c00d3db317e898322e06b", + "name": "Star", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ { - "description": "Unstick from the object it was stuck to.", - "fullName": "Unstick", - "functionType": "Action", - "name": "Unstick", - "sentence": "Unstick _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const object = objects[0];\nconst behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\nconst behavior = object.getBehavior(behaviorName);\n\nbehavior.basisObject = null;", - "parameterObjects": "Object", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, + "name": "LargeNarrow", + "useMultipleDirections": false, + "directions": [ { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Sticker::Sticker", - "type": "behavior" + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Star_LargeNarrow.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] } - ], - "objectGroups": [] + ] }, { - "fullName": "", - "functionType": "Action", - "name": "onDestroy", - "sentence": "", - "events": [ + "name": "LargeWide", + "useMultipleDirections": false, + "directions": [ { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\nconst object = objects[0];\nconst behavior = object.getBehavior(behaviorName);\n\nif (runtimeScene.__allStickers)\n runtimeScene.__allStickers.delete(behavior);\n", - "parameterObjects": "Object", - "useStrict": true, - "eventsSheetExpanded": true + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Star_LargeWide.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, + ] + }, + { + "name": "Medium", + "useMultipleDirections": false, + "directions": [ { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Sticker::Sticker", - "type": "behavior" + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Star_Medium.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] } - ], - "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "", - "type": "Boolean", - "label": "Only follow the position", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "OnlyFollowPosition" - } - ], - "sharedPropertyDescriptors": [] - } - ], - "eventsBasedObjects": [] - }, - { - "author": "Tristan Rhodes (https://victrisgames.itch.io/)", - "category": "", - "extensionNamespace": "", - "fullName": "Shake Object (position, angle, scale)", - "helpPath": "https://victrisgames.itch.io/gdevelop-camera-shake-example", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWFycm93LWFsbCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xMywxMUgxOEwxNi41LDkuNUwxNy45Miw4LjA4TDIxLjg0LDEyTDE3LjkyLDE1LjkyTDE2LjUsMTQuNUwxOCwxM0gxM1YxOEwxNC41LDE2LjVMMTUuOTIsMTcuOTJMMTIsMjEuODRMOC4wOCwxNy45Mkw5LjUsMTYuNUwxMSwxOFYxM0g2TDcuNSwxNC41TDYuMDgsMTUuOTJMMi4xNiwxMkw2LjA4LDguMDhMNy41LDkuNUw2LDExSDExVjZMOS41LDcuNUw4LjA4LDYuMDhMMTIsMi4xNkwxNS45Miw2LjA4TDE0LjUsNy41TDEzLDZWMTFaIiAvPjwvc3ZnPg==", - "name": "ShakeObject", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/arrow-all.svg", - "shortDescription": "Shake an object, using one or more ways to shake (position, angle, scale).", - "version": "1.5.5", - "description": "Select one or more methods of shaking:\n- Position: Shake the X and/or Y position of the object \n- Angle: Shake the angle (rotation) of the object \n- Scale: Shake the scale of the object (must be a sprite)\n\nControl how the object shakes:\n- Amplitude: How far the object moves during each shake\n- Duration: Amount of time to shake the object\n- Time between shakes: Amount of time between each movement of the object\n- Keep shaking until stopped (boolean)\n\nTips:\n- For a single-shake effect, set the \"Time between shakes\" to be equal to \"Duration\" (great for a hit or impact)\n- To make the single-shake move in the opposite direction, use negative numbers \n- To repeat a single-shake effect in a loop, add a condition \"Object is not shaking\" \n- Use a long \"Time between shakes\" to simulate a slow moving object (like a ship rocking back and forth)\n- Make sure to \"Stop shaking\" before starting a new shake if it uses different parameters. \n- Use \"Shake until stopped\" to simulate engine vibration, earthquake, or pulsing", - "origin": { - "identifier": "ShakeObject", - "name": "gdevelop-extension-store" - }, - "tags": [ - "shaking", - "object", - "effect", - "shake", - "scale", - "position", - "rotate", - "angle" - ], - "authorIds": [ - "gqDaZjCfevOOxBYkK6zlhtZnXCg1" - ], - "dependencies": [], - "eventsFunctions": [], - "eventsBasedBehaviors": [ - { - "description": "Shake an object, using one or more ways to shake (position, angle).\nThis behavior can be used on any type of object.", - "fullName": "Shake object (position, angle)", - "name": "ShakeObject_PositionAngle", - "objectType": "", - "eventsFunctions": [ + ] + }, { - "description": "Shake an object, using one or more ways to shake (position, angle).", - "fullName": "Shake object (position, angle)", - "functionType": "Action", - "name": "ShakeObject_PositionAngle", - "sentence": "Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_. Wait _PARAM6_ seconds between shakes. Keep shaking until stopped: _PARAM7_", - "events": [ + "name": "Small", + "useMultipleDirections": false, + "directions": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Shake Object", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "hasCustomCollisionMask": false, + "image": "Star_Small.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "comment": "Start/Reset duration timer", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_DurationTimer\"" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 }, - "comment": "Pass input parameters to global variables so that onScenePostEvents can use them", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_Duration", - "=", - "GetArgumentAsNumber(\"Duration\")" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "=", - "GetArgumentAsNumber(\"PowerX\")" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "=", - "GetArgumentAsNumber(\"PowerY\")" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerAngle", - "=", - "GetArgumentAsNumber(\"PowerAngle\")" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_TimeBetweenShakes", - "=", - "GetArgumentAsNumber(\"TimeBetweenShakes\")" - ] - } - ] - }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "794ab341df538c9b3bdad418dfdcccc7be5d90f3d0b5929d6d528a542c6ed3ae", + "name": "SilverShield", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [ + { + "effectType": "Outline", + "name": "Effect", + "doubleParameters": { + "padding": 2, + "thickness": 2 + }, + "stringParameters": { + "color": "255;255;255" + }, + "booleanParameters": {} + } + ], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "hasCustomCollisionMask": false, + "image": "Silver shield.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 14.592423439025879, + "y": 15.103429794311523 }, - "comment": "Determine if the shake should keep going until stopped", - "comment2": "" - }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "d2bc2d266f5bb666ef68023abc14f51bc8fe8b5222af931efa378ac10c50f98a", + "name": "MeteorDetailed", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "Large", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetObjectVariableAsBoolean" + "hasCustomCollisionMask": true, + "image": "Meteor Detailed_Large.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 65.07723999023438, + "y": 63.82252502441406 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 20, + "y": 20 }, - "parameters": [ - "Object", - "__ShakeObject_ShakeForever", - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" + { + "x": 110, + "y": 20 }, - "parameters": [ - "\"ShakeForever\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetObjectVariableAsBoolean" + { + "x": 110, + "y": 110 }, - "parameters": [ - "Object", - "__ShakeObject_ShakeForever", - "True" - ] - } + { + "x": 20, + "y": 110 + } + ] ] - }, + } + ] + } + ] + }, + { + "name": "Small", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "hasCustomCollisionMask": true, + "image": "Meteor Detailed_Small.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 65.07723999023438, + "y": 63.82252502441406 }, - "comment": "Add default values if none were provided", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_Duration", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 20, + "y": 20 }, - "parameters": [ - "Object", - "__ShakeObject_Duration", - "=", - "0.5" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" + { + "x": 110, + "y": 20 }, - "parameters": [ - "Object", - "__ShakeObject_TimeBetweenShakes", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" + { + "x": 110, + "y": 110 }, - "parameters": [ - "Object", - "__ShakeObject_TimeBetweenShakes", - "=", - "0.08" - ] - } + { + "x": 20, + "y": 110 + } + ] ] - }, + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "a1e62f5a19d1fe476e2ad0b8977768d020cc1dc55423427f79a486664cebb631", + "name": "UpgradedPotionBlue", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "No Shadow", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Upgraded Potion Blue_No Shadow.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 15.793042182922363, + "y": 15.89681625366211 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Shadow", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "hasCustomCollisionMask": false, + "image": "Upgraded Potion Blue_Shadow.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 15.793042182922363, + "y": 15.89681625366211 }, - "comment": "If duration is less than a single shake, increase duration to make 1 full shake", - "comment2": "" - }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "c2ce913ddbcd055c4e49a1c01b63aff1a3d59e4e1c1845db4c38aedda3712d3a", + "name": "Moon", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Sticker", + "type": "Sticker::Sticker", + "OnlyFollowPosition": false + } + ], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_Duration", - "<", - "Object.Variable(__ShakeObject_TimeBetweenShakes)" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_Duration", - "=", - "Object.Variable(__ShakeObject_TimeBetweenShakes)" - ] - } - ] - }, + "hasCustomCollisionMask": false, + "image": "Moon.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "", + "bold": true, + "italic": false, + "name": "Health_Text", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Health", + "font": "", + "characterSize": 30, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + }, + { + "assetStoreId": "", + "bold": true, + "italic": false, + "name": "Shield_Text", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Shield", + "font": "", + "characterSize": 30, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + }, + { + "assetStoreId": "", + "bold": true, + "italic": false, + "name": "ResourceMouseX_Text", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Resource \n(Mouse X)", + "font": "", + "characterSize": 30, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + }, + { + "assetStoreId": "", + "bold": true, + "italic": false, + "name": "Title_Text", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Extension: Resource Bar", + "font": "", + "characterSize": 30, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + }, + { + "assetStoreId": "", + "name": "ResourceBarNew", + "tags": "", + "type": "PrimitiveDrawing::Drawer", + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "ResourceBar_ShapePainter", + "type": "ResourceBar_ShapePainter::ResourceBar_ShapePainter", + "ValueMin": 0, + "ValueMax": 1, + "TickSpacing": 0, + "BarLength": 200, + "BarThickness": 4, + "InactiveBarColor": "11;255;0", + "InactiveBarOpacity": 96, + "ActiveBarColor": "11;255;0", + "ActiveBarOpacity": 255, + "RoundedBar": false, + "Value": 0, + "ThumbOffset": 0, + "NeedRedraw": true + } + ], + "fillOpacity": 255, + "outlineSize": 1, + "outlineOpacity": 255, + "fillColor": { + "b": 255, + "g": 255, + "r": 255 + }, + "outlineColor": { + "b": 0, + "g": 0, + "r": 0 + }, + "absoluteCoordinates": false, + "clearBetweenFrames": true + }, + { + "assetStoreId": "8d524a624fbc72a1fd6c3975369a7cd55b8a52035887ef664bcd93bf8e273881", + "name": "Unit_ResourceBar", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "ResourceBar_Sprite", + "type": "ResourceBar::ResourceBar_Sprite", + "StartingUnits": 3, + "CurrentUnits": 3, + "MaxUnits": 3, + "UnitSpacing": 0, + "NextUnitToCreate": 0, + "HideEmptyUnits": false, + "EmptyUnitOpacity": 64, + "EmptyUnitAnimation": 0, + "EmptyColorTint": "255;255;255", + "ActiveUnitOpacity": 255 + } + ], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "hasCustomCollisionMask": false, + "image": "Emote Heart.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "comment": "Detect initial shake", - "comment2": "" - }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "8d524a624fbc72a1fd6c3975369a7cd55b8a52035887ef664bcd93bf8e273881", + "name": "Heart_Unit", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_InitialShake", - "=", - "1" - ] - } - ] - }, + "hasCustomCollisionMask": false, + "image": "Emote Heart.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "752e405ef67d9f9d1bd36f9763f1b6fc05633d64700982c0f3118a25a32e39b2", + "height": 16, + "name": "TiledEmptyUiHeart", + "tags": "", + "texture": "tiled_Tiled Empty UI Heart.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 16, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "ResourceBar_TiledSprite", + "type": "ResourceBar::ResourceBar", + "StartingQuantity": 0, + "CurrentQuantity": 0, + "UnitWidth": 16, + "MaxQuantity": 0 + } + ] + }, + { + "assetStoreId": "abf51d082db5a117d9ee2e65299660f6787d47664e4571bad6db3075b3393c5f", + "height": 16, + "name": "Tiled_ResourceBar", + "tags": "", + "texture": "tiled_Tiled Filler UI Heart.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 16, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "ResourceBar_TiledSprite", + "type": "ResourceBar::ResourceBar", + "StartingQuantity": 6, + "CurrentQuantity": 0, + "UnitWidth": 16 + } + ] + }, + { + "assetStoreId": "45107bbfbc2b5cbc83e3785f802b99664a23d59e74414e332c9afafac63e1ca3", + "name": "HealthBar", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "hasCustomCollisionMask": false, + "image": "Health Bar.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 }, - "comment": "Initiate the onScenePostEvents function", - "comment2": "" - }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "1f3dba67c868b7320572a6591d1d0418f23b7c132df0963cf77286a9149971d9", + "height": 128, + "name": "HealthBarFill", + "tags": "", + "texture": "tiled_Health Bar Fill.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 128, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "3bd9517a10ad3d98341eea33f0c139f08a1b04f26500e85ac49bb7f9e157a303", + "height": 128, + "name": "EnergyBarFill", + "tags": "", + "texture": "tiled_Energy Bar Fill.png", + "type": "TiledSpriteObject::TiledSprite", + "width": 128, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "138ee716846635e3e0e5ab7b63752d1a36754f1ac874c70e1b5fa372d5a05474", + "bottomMargin": 6, + "height": 15, + "leftMargin": 11, + "name": "HealthBarBox", + "rightMargin": 9, + "tags": "", + "texture": "Health Bar Box.png", + "tiled": true, + "topMargin": 6, + "type": "PanelSpriteObject::PanelSprite", + "width": 96, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "7c1048053bc2d851157c4e0868c4ac0338f4ca93170d28990a7f64eaed2a1723", + "name": "HealthIndicator", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "Black Outline Empty", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "1" - ] - } - ] + "hasCustomCollisionMask": false, + "image": "Health Indicator_Black Outline Empty.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] } - ], - "parameters": [] + ] } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, + ] + }, + { + "name": "Black Outline Heart", + "useMultipleDirections": false, + "directions": [ { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngle", - "type": "behavior" - }, + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Health Indicator_Black Outline Heart.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "White Outline Empty", + "useMultipleDirections": false, + "directions": [ { - "description": "Duration of shake (in seconds) (Default: 0.5) ", - "name": "Duration", - "type": "expression" - }, + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Health Indicator_White Outline Empty.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "White Outline Heart", + "useMultipleDirections": false, + "directions": [ { - "description": "Amplitude of postion shake in X direction (in pixels) (For example: 5)", - "name": "PowerX", - "type": "expression" - }, + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Health Indicator_White Outline Heart.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "0714257da345b4ec7de558ac0e42290362b85a79c97160c0e09636cd2fc31e3c", + "name": "Heart", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ { - "description": "Amplitude of position shake in Y direction (in pixels) (For example: 5)", - "name": "PowerY", - "type": "expression" - }, + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Heart.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Initialize game", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "description": "Amplitude of angle rotation shake (in degrees) (For example: 5)", - "name": "PowerAngle", - "type": "expression" - }, + "type": { + "value": "DepartScene" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ { - "description": "Amount of time between shakes (in seconds) (Default: 0.08)", - "name": "TimeBetweenShakes", - "type": "expression" + "type": { + "value": "Opacity" + }, + "parameters": [ + "Moon", + "=", + "128" + ] }, { - "description": "Keep shaking until stopped", - "longDescription": "Duration value will be ignored", - "name": "ShakeForever", - "type": "yesorno" + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "MaxResource", + "=", + "CameraBorderRight()" + ] } ], - "objectGroups": [] - }, - { - "fullName": "", - "functionType": "Action", - "name": "doStepPostEvents", - "sentence": "", "events": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Shake Object", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ChangeColor" + }, + "parameters": [ + "Moon", + "\"144;19;254\"" + ] + }, + { + "type": { + "value": "SetCenter" + }, + "parameters": [ + "Moon", + "=", + "Fly.CenterX()", + "=", + "Fly.CenterY()-10" + ] + }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Start shaking", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "1" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Keep object shaking forever (if desired)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ObjectVariableAsBoolean" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeForever", - "True" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_Duration", - "=", - "100" - ] - }, - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_DurationTimer\"" - ] - } - ] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Calculate movement of the shake", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Run once before every shake movement", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_InitialShake", - "=", - "1" - ] - }, - { - "type": { - "value": "ObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_ShakeTimer\"", - "Object.Variable(__ShakeObject_TimeBetweenShakes)" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_ShakeTimer\"" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeCounter", - "+", - "1" - ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Correct for drift and reset drift tracking variables", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move to correct any drift from previous shake", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - }, - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "MettreX" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_DisplacementTravelledX)" - ] - }, - { - "type": { - "value": "MettreY" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_DisplacementTravelledY)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerAngle", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetAngle" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_AngleTravelled)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Reset drift detection variables", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledX", - "=", - "0" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledY", - "=", - "0" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_AngleTravelled", - "=", - "0" - ] - } - ] - } - ], - "parameters": [] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Calculate Position Shake", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - }, - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "PositionDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude * [-1 or 1]", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make initial shake NOT random so users can set a direction for a one-shake effect", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_InitialShake", - "=", - "1" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementX", - "=", - "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerX)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementY", - "=", - "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerY)" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "After initial shake pick a random direction", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_InitialShake", - "=", - "0" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementX", - "=", - "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerX) * RandomWithStep(-1, 1, 2)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementY", - "=", - "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerY) * RandomWithStep(-1, 1, 2)" - ] - } - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Calculate Rotation (angle) shake ", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerAngle", - "!=", - "0" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Every \"even\" shake, rotate clockwise", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "AngleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementAngle", - "=", - "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerAngle)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Every \"odd\" shake, rotate counter-clockwise", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "AngleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", - "=", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementAngle", - "=", - "-1 *(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerAngle)" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Save that initial shake has been processed", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_InitialShake", - "=", - "0" - ] - } - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Move object", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Calculate the fraction of shake that occured during this frame", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PercentTimeElapsedThisFrame", - "=", - "min(1,TimeDelta()/Object.Variable(__ShakeObject_TimeBetweenShakes))" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Increase change for the first half of the shake (move away from original values)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "ObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_ShakeTimer\"", - "Object.Variable(__ShakeObject_TimeBetweenShakes)/2" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Change position", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - }, - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "MettreX" - }, - "parameters": [ - "Object", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - }, - { - "type": { - "value": "MettreY" - }, - "parameters": [ - "Object", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Save movement to calculate drift", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledX", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledY", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Change angle", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Variable(__ShakeObject_PowerAngle)", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetAngle" - }, - "parameters": [ - "Object", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Save movement to calculate drift", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_AngleTravelled", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Decrease change the second half of the shake (return to original position)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_ShakeTimer\"", - "Object.Variable(__ShakeObject_TimeBetweenShakes)/2" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Change position", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - }, - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "MettreX" - }, - "parameters": [ - "Object", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - }, - { - "type": { - "value": "MettreY" - }, - "parameters": [ - "Object", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Save movement to calculate drift", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledX", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledY", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Change angle", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Variable(__ShakeObject_PowerAngle)", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetAngle" - }, - "parameters": [ - "Object", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Save movement to calculate drift", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_AngleTravelled", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ] - } - ] - } - ] - } - ], - "parameters": [] - } - ] - } - ], - "parameters": [] + "type": { + "value": "Sticker::Sticker::Stick" + }, + "parameters": [ + "Moon", + "Sticker", + "Fly", + "" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Moon" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "MiniHealth_Bar", + "Fly.X()", + "Fly.Y()", + "\"\"" + ] }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Stop shaking", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Stop shaking when the duration has been reached (or if the stop shaking function was called)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "ObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_DurationTimer\"", - "Object.Variable(__ShakeObject_Duration)" - ] - }, - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "-1" - ] - } - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "0" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeCounter", - "=", - "0" - ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Correct for drift and reset drift tracking variables", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move to correct any drift from previous shake", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - }, - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "MettreX" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_DisplacementTravelledX)" - ] - }, - { - "type": { - "value": "MettreY" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_DisplacementTravelledY)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerAngle", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetAngle" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_AngleTravelled)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Reset drift detection variables", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledX", - "=", - "0" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledY", - "=", - "0" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_AngleTravelled", - "=", - "0" - ] - } - ] - } - ], - "parameters": [] - } - ] - } - ], - "parameters": [] + "type": { + "value": "MettreXY" + }, + "parameters": [ + "MiniHealth_Bar", + "=", + "Fly.CenterX() - MiniHealth_Bar.ResourceBar_ShapePainter::BarLength()/2", + "=", + "Fly.BoundingBoxTop()" + ] + }, + { + "type": { + "value": "Sticker::Sticker::Stick" + }, + "parameters": [ + "MiniHealth_Bar", + "Sticker", + "Fly", + "" + ] } - ], + ] + }, + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::EnableDebugDraw" + }, + "parameters": [ + "", + "", + "", + "", + "" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "folded": true, + "name": "Spawn items", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RepeatEveryXSeconds::Repeat" + }, + "parameters": [ + "", + "\"SpawnShield\"", + "5", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "SilverShield", + "Fly.CenterX()", + "CameraBorderTop()", + "" + ] + }, + { + "type": { + "value": "AddForceAL" + }, + "parameters": [ + "SilverShield", + "90", + "75", + "1" + ] + }, + { + "type": { + "value": "ChangeColor" + }, + "parameters": [ + "SilverShield", + "\"144;19;254\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RepeatEveryXSeconds::Repeat" + }, + "parameters": [ + "", + "\"SpawnHealth\"", + "12", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "UpgradedPotionBlue", + "Fly.CenterX()", + "CameraBorderBottom()", + "" + ] + }, + { + "type": { + "value": "AddForceAL" + }, + "parameters": [ + "UpgradedPotionBlue", + "270", + "75", + "1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RepeatEveryXSeconds::Repeat" + }, + "parameters": [ + "", + "\"SpawnRock\"", + "1", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "MeteorDetailed", + "CameraBorderLeft()", + "Fly.CenterY()", + "" + ] + }, + { + "type": { + "value": "AddForceAL" + }, + "parameters": [ + "MeteorDetailed", + "0", + "300", + "1" + ] + }, + { + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "MeteorDetailed", + "=", + "0.5" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Rotate" + }, + "parameters": [ + "MeteorDetailed", + "30", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "folded": true, + "name": "Collisions", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Health::Shield::IsShieldActive" + }, + "parameters": [ + "Fly", + "Shield", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Moon", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Health::Shield::IsShieldActive" + }, + "parameters": [ + "Fly", + "Shield", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Moon" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionNP" + }, + "parameters": [ + "SilverShield", + "Fly", + "", + "", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Health::Shield::ActivateShield" + }, + "parameters": [ + "Fly", + "Shield", + "" + ] + }, + { + "type": { + "value": "Delete" + }, + "parameters": [ + "SilverShield", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionNP" + }, + "parameters": [ + "UpgradedPotionBlue", + "Fly", + "", + "", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, "parameters": [] } ], - "parameters": [ + "actions": [ { - "description": "Object", - "name": "Object", - "type": "object" + "type": { + "value": "Health::Health::Heal" + }, + "parameters": [ + "Fly", + "Health", + "100", + "" + ] }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngle", - "type": "behavior" + "type": { + "value": "Delete" + }, + "parameters": [ + "UpgradedPotionBlue", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionNP" + }, + "parameters": [ + "MeteorDetailed", + "Fly", + "", + "", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] } ], - "objectGroups": [] + "actions": [ + { + "type": { + "value": "Health::Shield::ShieldHit" + }, + "parameters": [ + "Fly", + "Shield", + "10", + "" + ] + }, + { + "type": { + "value": "Delete" + }, + "parameters": [ + "MeteorDetailed", + "" + ] + }, + { + "type": { + "value": "ShakeObject::ShakeObject_PositionAngleScale::ShakeObject_PositionAngleScale" + }, + "parameters": [ + "Fly", + "ShakeObject_PositionAngleScale", + "", + "10", + "10", + "5", + "", + "", + "", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 224, + "colorG": 16, + "colorR": 189, + "creationTime": 0, + "name": "Draw Resource bars", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "This resource shows the horizontal mouse position in scene, but it can be used for anything!", + "comment2": "" }, { - "description": "Stop any shaking of object that was initiated by the Shake Object extension.", - "fullName": "Stop shaking the object", - "functionType": "Action", - "name": "StopShaking", - "sentence": "Stop shaking _PARAM0_", + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "MyResource", + "=", + "MouseX()" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Shape painter resource bar", + "source": "", + "type": "BuiltinCommonInstructions::Group", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "conditions": [], + "actions": [ { "type": { - "value": "ShakeObject::ShakeObject_PositionAngle::IsShaking" + "value": "ResourceBar::ResourceBar_ShapePainter::DrawHealthBar" }, "parameters": [ - "Object", - "Behavior", + "MiniHealth_Bar", + "ResourceBar_ShapePainter", + "Fly", + "Health", "" ] } - ], + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], "actions": [ { "type": { - "value": "ModVarObjet" + "value": "ResourceBar::ResourceBar_ShapePainter::DrawShieldBar" }, "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "-1" + "Shield_Bar", + "ResourceBar_ShapePainter", + "Fly", + "Shield", + "" ] } ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngle", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if an object is shaking.", - "fullName": "Check if an object is shaking", - "functionType": "Condition", - "name": "IsShaking", - "sentence": "_PARAM0_ is shaking", - "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "conditions": [], + "actions": [ { "type": { - "value": "VarObjet" + "value": "ResourceBar::ResourceBar_ShapePainter::DrawResourceBar" }, "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "1" + "ResourceMouseX_Bar", + "ResourceBar_ShapePainter", + "Variable(MyResource)", + "Variable(MaxResource)", + "" ] } - ], + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], "actions": [ { "type": { - "value": "SetReturnBoolean" + "value": "ResourceBar::ResourceBar_ShapePainter::DrawHealthBar" }, "parameters": [ - "True" + "Health_Bar", + "ResourceBar_ShapePainter", + "Fly", + "Health", + "" ] } ] } ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngle", - "type": "behavior" - } - ], - "objectGroups": [] + "parameters": [] } ], - "propertyDescriptors": [], - "sharedPropertyDescriptors": [] + "parameters": [] + } + ], + "layers": [ + { + "ambientLightColorB": 32, + "ambientLightColorG": 0, + "ambientLightColorR": 0, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "behaviorsSharedData": [ + { + "name": "Health", + "type": "Health::Health" + }, + { + "name": "ResourceBar_ShapePainter", + "type": "ResourceBar::ResourceBar_ShapePainter" + }, + { + "name": "ResourceBar_Sprite", + "type": "ResourceBar::ResourceBar_Sprite" + }, + { + "name": "ResourceBar_TiledSprite", + "type": "ResourceBar::ResourceBar" }, { - "description": "Shake an object, using one or more ways to shake (position, angle, scale)\nThis behavior can only be used on sprite objects.", - "fullName": "Shake object (position, angle, scale)", "name": "ShakeObject_PositionAngleScale", - "objectType": "Sprite", + "type": "ShakeObject::ShakeObject_PositionAngleScale" + }, + { + "name": "Shield", + "type": "Health::Shield" + }, + { + "name": "Sticker", + "type": "Sticker::Sticker" + } + ] + } + ], + "externalEvents": [], + "eventsFunctionsExtensions": [ + { + "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", + "category": "Input", + "extensionNamespace": "", + "fullName": "Resource bar", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", + "name": "ResourceBar", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/UI Essentials/UI Essentials_sliders_options.svg", + "shortDescription": "Display a bar that represents a resource in the game (health, mana, ammo, etc)", + "version": "0.0.1", + "description": "The resource bar can be displayed using these objects:\n\n- Shape painter\n- Tiled sprite\n- Sprite\n", + "origin": { + "identifier": "ResourceBar", + "name": "gdevelop-extension-store" + }, + "tags": [ + "resource", + "bar", + "shape painter", + "health", + "mana", + "shield", + "hearts", + "lives", + "ammo" + ], + "authorIds": [ + "gqDaZjCfevOOxBYkK6zlhtZnXCg1", + "q8ubdigLvIRXLxsJDDTaokO41mc2" + ], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "Use a tiled sprite to display repeated objects to represent a resource in the game (hearts, lives, ammo, etc). ", + "fullName": "Resource bar", + "name": "ResourceBar", + "objectType": "", "eventsFunctions": [ { - "description": "Shake an object, using one or more ways to shake (position, angle, scale).", - "fullName": "Shake object (position, angle, scale)", - "functionType": "Action", - "name": "ShakeObject_PositionAngleScale", - "sentence": "Shake object _PARAM0_ for _PARAM2_ seconds. Modify position amplitude _PARAM3_ on X axis and _PARAM4_ on Y axis, angle rotation amplitude _PARAM5_, and scale amplitude _PARAM6_. Wait _PARAM7_ seconds between shakes. Keep shaking until stopped: _PARAM8_", - "events": [ + "fullName": "Full", + "functionType": "Condition", + "name": "IsFull", + "sentence": "", + "events": [], + "parameters": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Shake Object", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Start/Reset duration timer", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_DurationTimer\"" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Pass input parameters to global variables so that onScenePostEvents can use them", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_Duration", - "=", - "GetArgumentAsNumber(\"Duration\")" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "=", - "GetArgumentAsNumber(\"PowerX\")" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "=", - "GetArgumentAsNumber(\"PowerY\")" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerAngle", - "=", - "GetArgumentAsNumber(\"PowerAngle\")" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerScale", - "=", - "GetArgumentAsNumber(\"PowerScale\")" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_TimeBetweenShakes", - "=", - "GetArgumentAsNumber(\"TimeBetweenShakes\")" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Determine if the shake should keep going until stopped", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetObjectVariableAsBoolean" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeForever", - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"ShakeForever\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetObjectVariableAsBoolean" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeForever", - "True" - ] - } - ] - }, + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "Empty", + "functionType": "Condition", + "name": "IsEmpty", + "sentence": "", + "events": [], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the value of the object.", + "fullName": "Value", + "functionType": "ExpressionAndCondition", + "name": "Value", + "sentence": "the value", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "SetReturnNumber" }, - "comment": "Add default values if none were provided", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_Duration", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_Duration", - "=", - "0.5" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_TimeBetweenShakes", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_TimeBetweenShakes", - "=", - "0.08" - ] - } + "parameters": [ + "Object.Behavior::PropertyValue()" ] - }, + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "Value", + "name": "SetValue", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "ResourceBar::ResourceBar::SetPropertyValue" }, - "comment": "If duration is less than a single shake, increase duration to make 1 full shake", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_Duration", - "<", - "Object.Variable(__ShakeObject_TimeBetweenShakes)" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_Duration", - "=", - "Object.Variable(__ShakeObject_TimeBetweenShakes)" - ] - } + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" ] - }, + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the maximum value of the object.", + "fullName": "Maximum value", + "functionType": "ExpressionAndCondition", + "name": "MaxValue", + "sentence": "the maximum value", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "SetReturnNumber" }, - "comment": "Detect initial shake", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_InitialShake", - "=", - "1" - ] - } + "parameters": [ + "Object.Behavior::PropertyMaxValue()" ] - }, + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "MaxValue", + "name": "SetMaxValue", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "ResourceBar::ResourceBar::SetPropertyMaxValue" }, - "comment": "Initiate the onScenePostEvents function", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "1" - ] - } + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" ] } - ], - "parameters": [] + ] } ], "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "Sprite", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngleScale", + "supplementaryInformation": "ResourceBar::ResourceBar", "type": "behavior" - }, - { - "description": "Duration of shake (in seconds) (Default: 0.5)", - "name": "Duration", - "type": "expression" - }, + } + ], + "objectGroups": [] + }, + { + "description": "the previous value of the object.", + "fullName": "Previous value", + "functionType": "ExpressionAndCondition", + "name": "PreviousValue", + "sentence": "the previous value", + "events": [ { - "description": "Amplitude of postion shake in X direction (in pixels) (For example: 5)", - "name": "PowerX", - "type": "expression" - }, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyPreviousValue()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ { - "description": "Amplitude of position shake in Y direction (in pixels) (For example: 5)", - "name": "PowerY", - "type": "expression" + "description": "Object", + "name": "Object", + "type": "object" }, { - "description": "Amplitude of angle rotation shake (in degrees) (For example: 5)", - "name": "PowerAngle", - "type": "expression" - }, + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "PreviousValue", + "name": "SetPreviousValue", + "sentence": "", + "events": [ { - "description": "Amplitude of scale shake (in percent change) (For example: 5)", - "name": "PowerScale", - "type": "expression" - }, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar::SetPropertyPreviousValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ { - "description": "Amount of time between shakes (in seconds) (Default: 0.08)", - "name": "TimeBetweenShakes", - "type": "expression" + "description": "Object", + "name": "Object", + "type": "object" }, { - "description": "Keep shaking until stopped", - "longDescription": "Duration value will be ignored", - "name": "ShakeForever", - "type": "yesorno" + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar", + "type": "behavior" } ], "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "1", + "type": "Number", + "label": "Value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "Value" + }, + { + "value": "0", + "type": "Number", + "label": "Maximum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "MaxValue" }, + { + "value": "", + "type": "Number", + "label": "Previous value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "PreviousValue" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [ + { + "defaultName": "", + "description": "", + "fullName": "", + "name": "TiledResourceBar", + "eventsFunctions": [ { "fullName": "", "functionType": "Action", - "name": "doStepPostEvents", + "name": "onCreated", "sentence": "", "events": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Shake Object", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Create one background instance for of each state.\nOnly the instance for the current state is shown.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Background", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Bar", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Resource", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Background", + "=", + "1" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Bar", + "=", + "2" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Resource", + "=", + "3" + ] + }, + { + "type": { + "value": "TiledSpriteObject::Width" + }, + "parameters": [ + "Bar", + "=", + "Object.PropertyUnitWidth() * Object.PropertyMaxValue()" + ] + }, + { + "type": { + "value": "ResourceBar::TiledResourceBar::CenterBar" + }, + "parameters": [ + "Object", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Place the label over the backgrounds.", + "comment2": "" + }, + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Start shaking", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "1" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Keep object shaking forever (if desired)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ObjectVariableAsBoolean" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeForever", - "True" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_Duration", - "=", - "100" - ] - }, - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_DurationTimer\"" - ] - } - ] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Calculate movement of the shake", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Run once before every shake movement", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_InitialShake", - "=", - "1" - ] - }, - { - "type": { - "value": "ObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_ShakeTimer\"", - "Object.Variable(__ShakeObject_TimeBetweenShakes)" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_ShakeTimer\"" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeCounter", - "+", - "1" - ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "folded": true, - "name": "Correct for drift and reset drift tracking variables", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move to correct any drift from previous shake", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - }, - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "MettreX" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_DisplacementTravelledX)" - ] - }, - { - "type": { - "value": "MettreY" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_DisplacementTravelledY)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerAngle", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetAngle" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_AngleTravelled)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerScale", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ChangeScale" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_ScaleTravelled)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Reset drift detection variables", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledX", - "=", - "0" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledY", - "=", - "0" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_AngleTravelled", - "=", - "0" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ScaleTravelled", - "=", - "0" - ] - } - ] - } - ], - "parameters": [] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Calculate Position Shake", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - }, - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "PositionDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude * [-1 or 1]", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make initial shake NOT random so users can set a direction for a one-shake effect", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_InitialShake", - "=", - "1" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementX", - "=", - "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerX)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementY", - "=", - "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerY)" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "After initial shake pick a random direction", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_InitialShake", - "=", - "0" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementX", - "=", - "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerX) * RandomWithStep(-1, 1, 2)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementY", - "=", - "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerY) * RandomWithStep(-1, 1, 2)" - ] - } - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Calculate Rotation (angle) shake ", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerAngle", - "!=", - "0" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Every \"even\" shake, rotate clockwise", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "AngleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementAngle", - "=", - "-1 * (Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerAngle)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Every \"odd\" shake, rotate counter-clockwise", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "AngleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", - "=", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementAngle", - "=", - "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerAngle)" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Calculate Scale shake", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerScale", - "!=", - "0" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Calculate object scale displacement, with linear decay over time", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "ScaleDisplacement = (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude * 1/100", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Every even shake, increase scale", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementScale", - "=", - "-1 * (Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerScale) * (1/100)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Every \"odd\" shake, decrease scale", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "ScaleDisplacement = -1 * (DesiredDuration - RunningTimer) / DesiredDuration * Amplitude * 1/100", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "mod(Object.Variable(__ShakeObject_ShakeCounter),2)", - "=", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementScale", - "=", - "(Object.Variable(__ShakeObject_Duration) - Object.ObjectTimerElapsedTime(\"__ShakeObject_DurationTimer\")) / Object.Variable(__ShakeObject_Duration) * Object.Variable(__ShakeObject_PowerScale) * (1/100)" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Save that initial shake has been processed", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_InitialShake", - "=", - "0" - ] - } - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Move object", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Calculate the fraction of shake that occured during this frame", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PercentTimeElapsedThisFrame", - "=", - "min(1,TimeDelta()/Object.Variable(__ShakeObject_TimeBetweenShakes))" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Increase change for the first half of the shake (move away from original values)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "ObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_ShakeTimer\"", - "Object.Variable(__ShakeObject_TimeBetweenShakes)/2" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Change position", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - }, - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "MettreX" - }, - "parameters": [ - "Object", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - }, - { - "type": { - "value": "MettreY" - }, - "parameters": [ - "Object", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Save movement to calculate drift", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledX", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledY", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Change angle", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Variable(__ShakeObject_PowerAngle)", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetAngle" - }, - "parameters": [ - "Object", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Save movement to calculate drift", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_AngleTravelled", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Change scale", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Variable(__ShakeObject_PowerScale)", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ChangeScale" - }, - "parameters": [ - "Object", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementScale) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Save movement to calculate drift", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ScaleTravelled", - "+", - "round(1024 * Object.Variable(__ShakeObject_DisplacementScale) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Decrease change the second half of the shake (return to original position)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_ShakeTimer\"", - "Object.Variable(__ShakeObject_TimeBetweenShakes)/2" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Change position", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - }, - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "MettreX" - }, - "parameters": [ - "Object", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - }, - { - "type": { - "value": "MettreY" - }, - "parameters": [ - "Object", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Save movement to calculate drift", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledX", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementX) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledY", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementY) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Change angle", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Variable(__ShakeObject_PowerAngle)", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetAngle" - }, - "parameters": [ - "Object", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Save movement to calculate drift", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_AngleTravelled", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementAngle) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Change scale", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Variable(__ShakeObject_PowerScale)", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ChangeScale" - }, - "parameters": [ - "Object", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementScale) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Save movement to calculate drift", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ScaleTravelled", - "-", - "round(1024 * Object.Variable(__ShakeObject_DisplacementScale) * Object.Variable(__ShakeObject_PercentTimeElapsedThisFrame)) / 1024" - ] - } - ] - } - ] - } - ] - } - ], - "parameters": [] - } - ] - } - ], - "parameters": [] + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Label", + "0", + "0", + "" + ] }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Stop shaking", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Stop shaking when the duration has been reached (or if the stop shaking function was called)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "ObjectTimer" - }, - "parameters": [ - "Object", - "\"__ShakeObject_DurationTimer\"", - "Object.Variable(__ShakeObject_Duration)" - ] - }, - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "-1" - ] - } - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "0" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeCounter", - "=", - "0" - ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Correct for drift and reset drift tracking variables", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move to correct any drift from previous shake", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerX", - "!=", - "0" - ] - }, - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerY", - "!=", - "0" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "MettreX" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_DisplacementTravelledX)" - ] - }, - { - "type": { - "value": "MettreY" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_DisplacementTravelledY)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerAngle", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetAngle" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_AngleTravelled)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_PowerScale", - "!=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ChangeScale" - }, - "parameters": [ - "Object", - "-", - "Object.Variable(__ShakeObject_ScaleTravelled)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Reset drift detection variables", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledX", - "=", - "0" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_DisplacementTravelledY", - "=", - "0" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_AngleTravelled", - "=", - "0" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ScaleTravelled", - "=", - "0" - ] - } - ] - } - ], - "parameters": [] + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Label", + "=", + "4" + ] + }, + { + "type": { + "value": "TextObject::SetTextAlignment" + }, + "parameters": [ + "Label", + "\"center\"" + ] + }, + { + "type": { + "value": "TextObject::SetWrapping" + }, + "parameters": [ + "Label", + "yes" + ] + }, + { + "type": { + "value": "ResourceBar::TiledResourceBar::CenterLabel" + }, + "parameters": [ + "Object", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "ResourceBar::TiledResourceBar", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Resize", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Children instances must be resized when the button size change:\n- backgrounds for each state are resized to take the full dimensions of the button\n- the label is put back at the center of the button\n\nThe scale is set back to 1 because it means that the parent instance has the same dimensions as the union of its children instances.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Width()", + "!=", + "max(Background.Width(), Label.Width())" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Height()", + "!=", + "max(Background.Height(), Label.Height())" + ] } ] } ], - "parameters": [] + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Background", + "Width", + "=", + "Object.Width()" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Background", + "Height", + "=", + "Object.Height()" + ] + }, + { + "type": { + "value": "ResourceBar::Scale" + }, + "parameters": [ + "Object", + "=", + "1" + ] + }, + { + "type": { + "value": "PanelSpriteObject::Width" + }, + "parameters": [ + "Background", + "=", + "Background.Variable(Width)" + ] + }, + { + "type": { + "value": "PanelSpriteObject::Height" + }, + "parameters": [ + "Background", + "=", + "Background.Variable(Height)" + ] + }, + { + "type": { + "value": "ResourceBar::TiledResourceBar::CenterLabel" + }, + "parameters": [ + "Object", + "" + ] + }, + { + "type": { + "value": "ResourceBar::TiledResourceBar::CenterBar" + }, + "parameters": [ + "Object", + "" + ] + } + ] } ], "parameters": [] } ], - "parameters": [ + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "ResourceBar::TiledResourceBar", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Center the label according to the button configuration. This is used in doStepPostEvents when the button is resized.", + "fullName": "", + "functionType": "Action", + "name": "CenterLabel", + "private": true, + "sentence": "Center the label of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "MettreXY" + }, + "parameters": [ + "Label", + "=", + "Object.PropertyLabelLeftPadding()", + "=", + "Object.PropertyLabelTopPadding()" + ] + }, + { + "type": { + "value": "TextObject::WrappingWidth" + }, + "parameters": [ + "Label", + "=", + "Background.Width() - Object.PropertyLabelLeftPadding() - Object.PropertyLabelRightPadding()" + ] + }, + { + "type": { + "value": "TextObject::WrappingWidth" + }, + "parameters": [ + "Label", + "=", + "Background.Width() - Object.PropertyLabelLeftPadding() - Object.PropertyLabelRightPadding()" + ] + }, + { + "type": { + "value": "SetCenterY" + }, + "parameters": [ + "Label", + "=", + "round(Background.CenterY() + (Object.PropertyLabelTopPadding() - Object.PropertyLabelBottomPadding()) / 2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetCenterX" + }, + "parameters": [ + "Label", + "=", + "round(Background.CenterX() + (Object.PropertyLabelLeftPadding() - Object.PropertyLabelRightPadding()) / 2)" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "ResourceBar::TiledResourceBar", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Center the bar according to the button configuration. This is used in doStepPostEvents when the button is resized.", + "fullName": "", + "functionType": "Action", + "name": "CenterBar", + "private": true, + "sentence": "Center the bar of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetCenter" + }, + "parameters": [ + "Bar", + "=", + "Background.CenterX()", + "=", + "Background.CenterY()" + ] + }, + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Bar", + "+", + "0" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Bar", + "+", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "MettreXY" + }, + "parameters": [ + "Resource", + "=", + "Bar.X()", + "=", + "Bar.Y()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "ResourceBar::TiledResourceBar", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the value of the object.", + "fullName": "Value", + "functionType": "ExpressionAndCondition", + "name": "Value", + "sentence": "the value", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Resource.ResourceBar::Value()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "ResourceBar::TiledResourceBar", + "type": "object" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "Label", + "extraInformation": [], + "hidden": false, + "name": "LabelLeftPadding" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "Label", + "extraInformation": [], + "hidden": false, + "name": "LabelTopPadding" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "Label", + "extraInformation": [], + "hidden": false, + "name": "LabelRightPadding" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "Label", + "extraInformation": [], + "hidden": false, + "name": "LabelBottomPadding" + }, + { + "value": "3", + "type": "Number", + "label": "Maximum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "MaxValue" + }, + { + "value": "3", + "type": "Number", + "label": "Initial value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "InitialValue" + }, + { + "value": "24", + "type": "Number", + "label": "Unit width", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "UnitWidth" + } + ], + "objects": [ + { + "assetStoreId": "", + "bold": false, + "italic": false, + "name": "Label", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Text", + "font": "", + "characterSize": 20, + "color": { + "b": 0, + "g": 0, + "r": 0 + } + }, + { + "assetStoreId": "", + "height": 32, + "name": "Resource", + "tags": "", + "texture": "", + "type": "TiledSpriteObject::TiledSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "ResourceBar", + "type": "ResourceBar::ResourceBar", + "Value": 1, + "MaxValue": 0, + "PreviousValue": 0 + } + ] + }, + { + "assetStoreId": "", + "height": 32, + "name": "Bar", + "tags": "", + "texture": "", + "type": "TiledSpriteObject::TiledSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "", + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "name": "Background", + "rightMargin": 0, + "tags": "", + "texture": "", + "tiled": true, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [] + } + ] + } + ] + }, + { + "author": "@Bouh, D8H", + "category": "General", + "extensionNamespace": "", + "fullName": "Extended variables support", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXZhcmlhYmxlLWJveCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xOSAzSDVDMy45IDMgMyAzLjkgMyA1VjE5QzMgMjAuMSAzLjkgMjEgNSAyMUgxOUMyMC4xIDIxIDIxIDIwLjEgMjEgMTlWNUMyMSAzLjkgMjAuMSAzIDE5IDNNNy40IDE4QzUuOSAxNi41IDUgMTQuMyA1IDEyUzUuOSA3LjUgNy40IDZMOSA2LjdDNy43IDcuOSA3IDkuOSA3IDEyUzcuNyAxNi4xIDkgMTcuM0w3LjQgMThNMTIuNyAxNUwxMS45IDEzTDEwLjUgMTVIOUwxMS4zIDExLjlMMTAgOUgxMS4zTDEyLjEgMTFMMTMuNSA5SDE1TDEyLjggMTJMMTQuMSAxNUgxMi43TTE2LjYgMThMMTUgMTcuM0MxNi4zIDE2IDE3IDE0LjEgMTcgMTJTMTYuMyA3LjkgMTUgNi43TDE2LjYgNkMxOC4xIDcuNSAxOSA5LjcgMTkgMTJTMTguMSAxNi41IDE2LjYgMThaIiAvPjwvc3ZnPg==", + "name": "ExtendedVariables", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/variable-box.svg", + "shortDescription": "Add conditions, actions and expressions to check for the existence of a variable, copy variables, delete existing ones from memory, and create dynamic variables.", + "version": "1.0.0", + "description": "This extension provides: \n- Conditions to check if a global/scene/object variable exists.\n- Actions to copy object variables, global and scene variables.\n- Actions to delete an existing global/scene variable from memory.\n- Actions to create a global/scene variable using a text expression, rather than a variable name input.\n- Expressions to get the value or text from a global/scene variable using a text expression, rather than a variable name.\n\nText expressions allows to enter the name of the variable with an expression like `\"MyVar\"+ ToString(Variable(Health))`", + "origin": { + "identifier": "ExtendedVariables", + "name": "gdevelop-extension-store" + }, + "tags": [ + "variable", + "scene", + "global", + "object", + "remove", + "expression", + "copy", + "structure", + "array", + "boolean", + "duplication" + ], + "authorIds": [ + "2OwwM8ToR9dx9RJ2sAKTcrLmCB92", + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" + ], + "dependencies": [], + "eventsFunctions": [ + { + "description": "Check if a global variable exists.", + "fullName": "Global variable exists", + "functionType": "Condition", + "group": "Deprecated", + "name": "C_global_variable_exist", + "private": true, + "sentence": "If the global variable _PARAM1_ exist", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ExtendedVariables::GlobalVariableExist" + }, + "parameters": [ + "", + "GetArgumentAsString(\"GlobalVariableName\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Name of the global variable", + "name": "GlobalVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the global variable exists.", + "fullName": "Global variable exists", + "functionType": "Condition", + "group": "Global variables", + "name": "GlobalVariableExist", + "sentence": "If the global variable _PARAM1_ exist", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const globalVariables = runtimeScene.getGame().getVariables();\r\neventsFunctionContext.returnValue = globalVariables.has(eventsFunctionContext.getArgument(\"GlobalVariableName\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Name of the global variable", + "name": "GlobalVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Check if a scene variable exists.", + "fullName": "Scene variable exists", + "functionType": "Condition", + "group": "Deprecated", + "name": "C_scene_variable_exist", + "private": true, + "sentence": "If the scene variable _PARAM1_ exist", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ExtendedVariables::SceneVariableExist" + }, + "parameters": [ + "", + "GetArgumentAsString(\"SceneVariableName\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Name of the scene variable", + "name": "SceneVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the scene variable exists.", + "fullName": "Scene variable exists", + "functionType": "Condition", + "group": "Scene variables", + "name": "SceneVariableExist", + "sentence": "If the scene variable _PARAM1_ exist", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const sceneVariables = runtimeScene.getVariables();\r\neventsFunctionContext.returnValue = sceneVariables.has(eventsFunctionContext.getArgument(\"SceneVariableName\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Name of the scene variable", + "name": "SceneVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Check if an object variable exists.", + "fullName": "Object variable exists", + "functionType": "Condition", + "group": "Deprecated", + "name": "C_object_variable_exist", + "private": true, + "sentence": "Object _PARAM1_ has object variable _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ExtendedVariables::ObjectVariableExist" + }, + "parameters": [ + "", + "ObjectToCheck", + "GetArgumentAsString(\"ObjectVariableName\")", + "" + ] + } + ], + "actions": [ { - "description": "Object", - "name": "Object", - "supplementaryInformation": "Sprite", - "type": "object" - }, + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "ObjectToCheck", + "type": "objectList" + }, + { + "description": "Name of object variable", + "name": "ObjectVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Check if an object variable exists.", + "fullName": "Object variable exists", + "functionType": "Condition", + "group": "Object variables", + "name": "ObjectVariableExist", + "sentence": "Object _PARAM1_ has object variable _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "let returnValue = true;\r\nif (!objects.length) {\r\n returnValue = false;\r\n} else {\r\n const objectVariableName = eventsFunctionContext.getArgument(\"ObjectVariableName\");\r\n for (let i = 0; i < objects.length; i++) {\r\n if (!objects[i].hasVariable(objectVariableName)) {\r\n // If any object does NOT have the variable, return false.\r\n returnValue = false;\r\n break;\r\n }\r\n }\r\n}\r\n\r\neventsFunctionContext.returnValue = returnValue;", + "parameterObjects": "ObjectToCheck", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Object", + "name": "ObjectToCheck", + "type": "objectList" + }, + { + "description": "Name of object variable", + "name": "ObjectVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Delete a global variable, removing it from memory.", + "fullName": "Delete global variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_Delete_global_variable", + "private": true, + "sentence": "Delete global variable _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngleScale", - "type": "behavior" + "type": { + "value": "ExtendedVariables::DeleteGlobalVariable" + }, + "parameters": [ + "", + "GetArgumentAsString(\"GlobalVariableName\")", + "" + ] } - ], - "objectGroups": [] + ] + } + ], + "parameters": [ + { + "description": "Name of the global variable to delete", + "name": "GlobalVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Delete the global variable, removing it from memory.", + "fullName": "Delete global variable", + "functionType": "Action", + "group": "Global variables", + "name": "DeleteGlobalVariable", + "sentence": "Delete the global variable _PARAM1_ from memory", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "runtimeScene.getGame().getVariables().remove(eventsFunctionContext.getArgument(\"GlobalVariableName\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Name of the global variable to delete", + "name": "GlobalVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the text of a scene variable.", + "fullName": "String of a scene variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_Modify_scene_variable_string", + "private": true, + "sentence": "Change the text of scene variable _PARAM1_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ExtendedVariables::ModifySceneVariableString" + }, + "parameters": [ + "", + "GetArgumentAsString(\"SceneVariableName\")", + "GetArgumentAsNumber(\"SceneVariableValue\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Name of the scene variable", + "name": "SceneVariableName", + "type": "string" + }, + { + "description": "Value", + "name": "SceneVariableValue", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the text of a scene variable.", + "fullName": "String of a scene variable", + "functionType": "Action", + "group": "Scene variables", + "name": "ModifySceneVariableString", + "sentence": "Change the text of scene variable _PARAM1_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const variable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r\nvariable.setString(eventsFunctionContext.getArgument(\"SceneVariableValue\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Name of the scene variable", + "name": "SceneVariableName", + "type": "string" + }, + { + "description": "Value", + "name": "SceneVariableValue", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the text of a global variable.", + "fullName": "String of a global variable", + "functionType": "Action", + "group": "Global variables", + "name": "ModifyGlobalVariableString", + "sentence": "Change the text of global variable _PARAM1_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const variable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r\nvariable.setString(eventsFunctionContext.getArgument(\"GlobalVariableValue\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Name of the global variable", + "name": "GlobalVariableName", + "type": "string" }, { - "description": "Stop shaking an object.", - "fullName": "Stop shaking an object", - "functionType": "Action", - "name": "StopShaking", - "sentence": "Stop shaking _PARAM0_", - "events": [ + "description": "Value", + "name": "GlobalVariableValue", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the value of a global variable.", + "fullName": "Value of a global variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_Modify_global_variable", + "private": true, + "sentence": "Change the global variable _PARAM1_ with value: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ShakeObject::ShakeObject_PositionAngleScale::IsShaking" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "-1" - ] - } + "type": { + "value": "ExtendedVariables::ModifyGlobalVariable" + }, + "parameters": [ + "", + "GetArgumentAsString(\"SceneVariableName\")", + "GetArgumentAsNumber(\"SceneVariableValue\")", + "" ] } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "Sprite", - "type": "object" - }, + ] + } + ], + "parameters": [ + { + "description": "Name of the global variable", + "name": "SceneVariableName", + "type": "string" + }, + { + "description": "Value", + "name": "SceneVariableValue", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the text of a global variable.", + "fullName": "String of a global variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_Modify_global_variable_string", + "private": true, + "sentence": "Change the text of global variable _PARAM1_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngleScale", - "type": "behavior" + "type": { + "value": "ExtendedVariables::ModifyGlobalVariableString" + }, + "parameters": [ + "", + "GetArgumentAsString(\"SceneVariableName\")", + "GetArgumentAsNumber(\"SceneVariableValue\")", + "" + ] } - ], - "objectGroups": [] + ] + } + ], + "parameters": [ + { + "description": "Name of the global variable", + "name": "SceneVariableName", + "type": "string" }, { - "description": "Check if an object is shaking.", - "fullName": "Check if an object is shaking", - "functionType": "Condition", - "name": "IsShaking", - "sentence": "_PARAM0_ is shaking", - "events": [ + "description": "Value", + "name": "SceneVariableValue", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the value of a global variable.", + "fullName": "Value of a global variable", + "functionType": "Action", + "group": "Global variables", + "name": "ModifyGlobalVariable", + "sentence": "Change the global variable _PARAM1_ with value: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const variable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r\nvariable.setNumber(eventsFunctionContext.getArgument(\"GlobalVariableValue\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Name of the global variable", + "name": "GlobalVariableName", + "type": "string" + }, + { + "description": "Value", + "name": "GlobalVariableValue", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the value of a scene variable.", + "fullName": "Value of a scene variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_Modify_scene_variable", + "private": true, + "sentence": "Change the scene variable _PARAM1_ with value: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "VarObjet" - }, - "parameters": [ - "Object", - "__ShakeObject_ShakeInProgress", - "=", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } + "type": { + "value": "ExtendedVariables::ModifySceneVariable" + }, + "parameters": [ + "", + "GetArgumentAsString(\"SceneVariableName\")", + "GetArgumentAsNumber(\"SceneVariableValue\")", + "" ] } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "Sprite", - "type": "object" - }, + ] + } + ], + "parameters": [ + { + "description": "Name of the scene variable", + "name": "SceneVariableName", + "type": "string" + }, + { + "description": "Value", + "name": "SceneVariableValue", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the value of a scene variable.", + "fullName": "Value of a scene variable", + "functionType": "Action", + "group": "Scene variables", + "name": "ModifySceneVariable", + "sentence": "Change the scene variable _PARAM1_ with value: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const variable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r\nvariable.setNumber(eventsFunctionContext.getArgument(\"SceneVariableValue\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Name of the scene variable", + "name": "SceneVariableName", + "type": "string" + }, + { + "description": "Value", + "name": "SceneVariableValue", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Delete scene variable, the variable will be deleted from the memory.", + "fullName": "Delete scene variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_Delete_scene_variable", + "private": true, + "sentence": "Delete the scene variable _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ShakeObject::ShakeObject_PositionAngleScale", - "type": "behavior" + "type": { + "value": "ExtendedVariables::DeleteSceneVariable" + }, + "parameters": [ + "", + "GetArgumentAsString(\"SceneVariableName\")", + "" + ] } - ], - "objectGroups": [] + ] } ], - "propertyDescriptors": [], - "sharedPropertyDescriptors": [] - } - ], - "eventsBasedObjects": [] - }, - { - "author": "VegeTato, arthuro555", - "category": "", - "extensionNamespace": "", - "fullName": "Repeat every X seconds", - "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXJlcGVhdCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNywxN0g3VjE0TDMsMThMNywyMlYxOUgxOVYxM0gxN003LDdIMTdWMTBMMjEsNkwxNywyVjVINVYxMUg3VjdaIiAvPjwvc3ZnPg==", - "name": "RepeatEveryXSeconds", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/repeat.svg", - "shortDescription": "This allows to trigger an event every X seconds.", - "version": "0.1.0", - "description": "Convenience conditions, actions and behaviors for timers to trigger a condition every X seconds.", - "origin": { - "identifier": "RepeatEveryXSeconds", - "name": "gdevelop-extension-store" - }, - "tags": [ - "repeat", - "timer", - "time", - "convenience" - ], - "authorIds": [ - "ZgrsWuRTAkXgeuPV9bo0zuEcA2w1", - "IRIhkkTTl2UHhfjrLTTH5GYwkYu1" - ], - "dependencies": [], - "eventsFunctions": [ + "parameters": [ + { + "description": "Name of the scene variable to delete", + "name": "SceneVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, { - "description": "Triggers every X seconds.", - "fullName": "Repeat every X seconds", - "functionType": "Condition", - "name": "Repeat", - "sentence": "Repeat timer _PARAM1_ every _PARAM2_ seconds", + "description": "Delete the scene variable, the variable will be deleted from the memory.", + "fullName": "Delete scene variable", + "functionType": "Action", + "group": "Scene variables", + "name": "DeleteSceneVariable", + "sentence": "Delete the scene variable _PARAM1_ from memory", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "runtimeScene.getVariables().remove(eventsFunctionContext.getArgument(\"SceneVariableName\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Name of the scene variable to delete", + "name": "SceneVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Copy an object variable from one object to another.", + "fullName": "Copy an object variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_CopyObjectVariable", + "private": true, + "sentence": "Copy the variable _PARAM1_ of _PARAM2_ to the variable _PARAM3_ of _PARAM4_", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "conditions": [], + "actions": [ { "type": { - "value": "BuiltinCommonInstructions::Once" + "value": "ExtendedVariables::CopyObjectVariable" }, - "parameters": [] + "parameters": [ + "", + "SourceObject", + "GetArgumentAsString(\"SourceVariableName\")", + "TargetObject", + "GetArgumentAsString(\"TargetVariableName\")", + "no", + "" + ] } - ], + ] + } + ], + "parameters": [ + { + "description": "Source object", + "name": "SourceObject", + "type": "objectList" + }, + { + "description": "Variable to copy", + "name": "SourceVariableName", + "type": "string" + }, + { + "description": "Destination object", + "longDescription": "To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.", + "name": "TargetObject", + "type": "objectList" + }, + { + "description": "Destination variable", + "name": "TargetVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Copy the object variable from one object to another.", + "fullName": "Copy an object variable", + "functionType": "Action", + "group": "Object variables", + "name": "CopyObjectVariable", + "sentence": "Copy the variable _PARAM2_ of _PARAM1_ to the variable _PARAM4_ of _PARAM3_ (clear destination first: _PARAM5_)", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const sourceObject = eventsFunctionContext.getObjects(\"SourceObject\")[0];\nconst targetObject = eventsFunctionContext.getObjects(\"TargetObject\")[0];\nconst sourceVariableName = eventsFunctionContext.getArgument(\"SourceVariableName\");\nconst targetVariableName = eventsFunctionContext.getArgument(\"TargetVariableName\");\nconst isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");\n\nconst sourceVariables = sourceObject.getVariables();\nconst targetVariables = targetObject.getVariables();\n\nif (sourceVariables.has(sourceVariableName))\n{\n gdjs.Variable.copy\n (\n sourceVariables.get(sourceVariableName),\n targetVariables.get(targetVariableName),\n isExactCopy\n );\n}", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Source object", + "name": "SourceObject", + "type": "objectList" + }, + { + "description": "Variable to copy", + "name": "SourceVariableName", + "type": "string" + }, + { + "description": "Destination object", + "longDescription": "To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.", + "name": "TargetObject", + "type": "objectList" + }, + { + "description": "Destination variable", + "name": "TargetVariableName", + "type": "string" + }, + { + "defaultValue": "yes", + "description": "Clear destination first", + "name": "isExactCopy", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Copy all object variables from one object to another.", + "fullName": "Copy all object variables", + "functionType": "Action", + "group": "Deprecated", + "name": "A_CopyAllObjectVariables", + "private": true, + "sentence": "Copy all variables from _PARAM1_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], "actions": [ { "type": { - "value": "ResetTimer" + "value": "ExtendedVariables::CopyAllObjectVariables" }, "parameters": [ - "player", - "GetArgumentAsString(\"timerName\")" + "", + "SourceObject", + "TargetObject", + "no", + "" ] } ] + } + ], + "parameters": [ + { + "description": "Source object", + "name": "SourceObject", + "type": "objectList" + }, + { + "description": "Destination object", + "name": "TargetObject", + "type": "objectList" + } + ], + "objectGroups": [] + }, + { + "description": "Copy all object variables from one object to another.", + "fullName": "Copy all object variables", + "functionType": "Action", + "group": "Object variables", + "name": "CopyAllObjectVariables", + "sentence": "Copy all variables from object _PARAM1_ to object _PARAM2_ (clear destination first: _PARAM3_)", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "// This JS event use private scope from the API, this can be borken at anytime.\n\nconst sourceObject = eventsFunctionContext.getObjects(\"SourceObject\")[0];\nconst targetObject = eventsFunctionContext.getObjects(\"TargetObject\")[0];\nconst isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");\n\nconst targetVariables = targetObject.getVariables();\nconst sourceVariables = sourceObject.getVariables()._variables.items;\nfor (const variableName in sourceVariables)\n{\n if (sourceVariables.hasOwnProperty(variableName))\n {\n gdjs.Variable.copy(sourceVariables[variableName], targetVariables.get(variableName), isExactCopy);\n }\n}", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Source object", + "name": "SourceObject", + "type": "objectList" + }, + { + "description": "Destination object", + "name": "TargetObject", + "type": "objectList" }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Timer" - }, - "parameters": [ - "player", - "GetArgumentAsNumber(\"time\")", - "GetArgumentAsString(\"timerName\")" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResetTimer" - }, - "parameters": [ - "player", - "GetArgumentAsString(\"timerName\")" - ] - }, - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] + "defaultValue": "yes", + "description": "Clear destination first", + "name": "isExactCopy", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Delete an object variable, removing it from memory.", + "fullName": "Delete object variable", + "functionType": "Action", + "group": "Object variables", + "name": "DeleteObjectVariable", + "sentence": "Delete for the object _PARAM1_ the object variable _PARAM2_ from the memory", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const object = eventsFunctionContext.getObjects(\"Object\")[0];\r\nconst objectVariables = object.getVariables();\r\n\r\nobjectVariables.remove(eventsFunctionContext.getArgument(\"VariableName\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": true } ], "parameters": [ { - "description": "The name of the timer to loop", - "name": "timerName", - "type": "string" + "description": "Object", + "name": "Object", + "type": "objectList" }, { - "description": "The time in seconds between each trigger", - "name": "time", - "type": "expression" + "description": "Name of object variable", + "name": "VariableName", + "type": "string" } ], "objectGroups": [] }, { - "description": "Triggers every X seconds X amount of times.", - "fullName": "Repeat every X seconds in X number", - "functionType": "Condition", - "name": "RepeatXTimes", - "sentence": "Repeat timer _PARAM1_ every _PARAM2_ seconds _PARAM3_ times", + "description": "Return the text of a global variable.", + "fullName": "Text of a global variable", + "functionType": "StringExpression", + "group": "Global variables", + "name": "GlobalVariableString", + "sentence": "", "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "ResetTimer" - }, - "parameters": [ - "player", - "GetArgumentAsString(\"timerName\")" - ] - }, - { - "type": { - "value": "ModVarScene" - }, - "parameters": [ - "__RepeatEveryXSeconds_.Counter[GetArgumentAsString(\"timerName\")]", - "=", - "0" - ] - } - ] - }, + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const globalVariables = runtimeScene.getGame().getVariables();\r\nconst variableExist = globalVariables.has(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r\n\r\nif (variableExist) {\r\n eventsFunctionContext.returnValue = globalVariables.get(eventsFunctionContext.getArgument(\"GlobalVariableName\")).getAsString();\r\n}", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Timer" - }, - "parameters": [ - "player", - "GetArgumentAsNumber(\"time\")", - "GetArgumentAsString(\"timerName\")" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "GetArgumentAsNumber(\"limit\")", - "=", - "-1" - ] - }, - { - "type": { - "value": "VarScene" - }, - "parameters": [ - "__RepeatEveryXSeconds_.Counter[GetArgumentAsString(\"timerName\")]", - "<", - "GetArgumentAsNumber(\"limit\")" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "ResetTimer" - }, - "parameters": [ - "player", - "GetArgumentAsString(\"timerName\")" - ] - }, - { - "type": { - "value": "ModVarScene" - }, - "parameters": [ - "__RepeatEveryXSeconds_.Counter[GetArgumentAsString(\"timerName\")]", - "+", - "1" - ] - }, - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] + "description": "Name of the global variable", + "name": "GlobalVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Return the text of a scene variable.", + "fullName": "Text of a scene variable", + "functionType": "StringExpression", + "group": "Scene variables", + "name": "VariableString", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const sceneVariables = runtimeScene.getVariables();\r\nconst variableExist = sceneVariables.has(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r\n\r\nif (variableExist) {\r\n eventsFunctionContext.returnValue = sceneVariables.get(eventsFunctionContext.getArgument(\"SceneVariableName\")).getAsString();\r\n}", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false } ], + "expressionType": { + "type": "string" + }, "parameters": [ { - "description": "The name of the timer to loop", - "name": "timerName", + "description": "Name of the scene variable", + "name": "SceneVariableName", "type": "string" - }, + } + ], + "objectGroups": [] + }, + { + "description": "Return the value of a global variable.", + "fullName": "Value of a global variable", + "functionType": "Expression", + "group": "Global variables", + "name": "GlobalVariable", + "sentence": "", + "events": [ { - "description": "The time in seconds between each trigger", - "name": "time", - "type": "expression" - }, + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const globalVariables = runtimeScene.getGame().getVariables();\r\nconst variableExist = globalVariables.has(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r\n\r\nif (variableExist) {\r\n eventsFunctionContext.returnValue = globalVariables.get(eventsFunctionContext.getArgument(\"GlobalVariableName\")).getAsNumber();\r\n}", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ { - "description": "The limit of loops", - "longDescription": "The condition will trigger at most this amount of times. Make it -1 for looping forever.", - "name": "limit", - "type": "expression" + "description": "Name of the global variable", + "name": "GlobalVariableName", + "type": "string" } ], "objectGroups": [] - } - ], - "eventsBasedBehaviors": [ + }, { - "description": "Allows to repeat an object timer every X seconds.", - "fullName": "Repeat every X seconds", - "name": "RepeatTimer", - "objectType": "", - "eventsFunctions": [ + "description": "Return the value of a scene variable.", + "fullName": "Value of a scene variable", + "functionType": "Expression", + "group": "Scene variables", + "name": "Variable", + "sentence": "", + "events": [ { - "fullName": "", - "functionType": "Action", - "name": "onCreated", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyTimerName()" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", - "type": "behavior" - } - ], - "objectGroups": [] - }, + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const sceneVariables = runtimeScene.getVariables();\r\nconst variableExist = sceneVariables.has(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r\n\r\nif (variableExist) {\r\n eventsFunctionContext.returnValue = sceneVariables.get(eventsFunctionContext.getArgument(\"SceneVariableName\")).getAsNumber();\r\n}", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Name of the scene variable", + "name": "SceneVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Copy the global variable to scene. This copy everything from the types to the values.", + "fullName": "Copy a global variable to scene", + "functionType": "Action", + "group": "Convert", + "name": "CopyGlobalVariableToScene", + "sentence": "Copy the global variable:_PARAM1_ to a scene variable:_PARAM2_ (clear destination first: _PARAM3_)", + "events": [ { - "description": "Triggers every X seconds, where X is defined in the behavior properties.", - "fullName": "Repeat every X seconds", - "functionType": "Condition", - "name": "Repeat", - "sentence": "Recurring timer _PARAM1_ of _PARAM0_ has triggered", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ObjectTimer" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyTimerName()", - "Object.Behavior::PropertyTimerLength()" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "RepeatEveryXSeconds::RepeatTimer::PropertyLimit" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "-1" - ] - }, - { - "type": { - "value": "RepeatEveryXSeconds::RepeatTimer::PropertyCounter" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyLimit()" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyTimerName()" - ] - }, - { - "type": { - "value": "RepeatEveryXSeconds::RepeatTimer::SetPropertyCounter" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "1" - ] - }, - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", - "type": "behavior" - } - ], - "objectGroups": [] - }, + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const globalVariable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"globalVariableName\"));\nconst sceneVariable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"sceneVariableName\"));\nconst isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");\n\ngdjs.Variable.copy(globalVariable, sceneVariable, isExactCopy);\n", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ { - "description": "Pauses a recurring timer.", - "fullName": "Pause a recurring timer", - "functionType": "Action", - "name": "Pause", - "sentence": "Pause recurring timer _PARAM1_ of _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PauseObjectTimer" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyTimerName()" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", - "type": "behavior" - } - ], - "objectGroups": [] + "description": "Global variable to copy", + "name": "globalVariableName", + "type": "string" }, { - "description": "Resumes a paused recurring timer.", - "fullName": "Resume a recurring timer", - "functionType": "Action", - "name": "Resume", - "sentence": "Resume recurring timer _PARAM1_ of _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "UnPauseObjectTimer" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyTimerName()" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", - "type": "behavior" - } - ], - "objectGroups": [] + "description": "Scene variable destination", + "name": "sceneVariableName", + "type": "string" }, { - "description": "Allows to trigger the recurring timer X times again.", - "fullName": "Reset the limit", - "functionType": "Action", - "name": "ResetLimit", - "sentence": "Allow to trigger the recurring timer _PARAM1_ of _PARAM0_ X times again", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "RepeatEveryXSeconds::RepeatTimer::SetPropertyCounter" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", - "type": "behavior" - } - ], - "objectGroups": [] + "defaultValue": "yes", + "description": "Clear destination first", + "name": "isExactCopy", + "optional": true, + "type": "yesorno" } ], - "propertyDescriptors": [ + "objectGroups": [] + }, + { + "description": "Copy the scene variable to global. This copy everything from the types to the values.", + "fullName": "Copy a scene variable to global ", + "functionType": "Action", + "group": "Copy variables", + "name": "CopySceneVariableToGlobal", + "sentence": "Copy the scene variable:_PARAM1_ to a global variable:_PARAM2_ (clear destination first: _PARAM3_)", + "events": [ { - "value": "MyTimer", - "type": "String", - "label": "The name of the timer to repeat", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "TimerName" - }, + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "const sceneVariable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"sceneVariableName\"));\nconst globalVariable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"globalVariableName\"));\nconst isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");\n\ngdjs.Variable.copy(sceneVariable, globalVariable, isExactCopy);", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ { - "value": "1", - "type": "Number", - "label": "The time between each trigger (in seconds)", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "TimerLength" + "description": "Scene variable to copy", + "name": "sceneVariableName", + "type": "string" }, { - "value": "-1", - "type": "Number", - "label": "How many times should the timer trigger? -1 for forever.", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "Limit" + "description": "Global variable destination", + "name": "globalVariableName", + "type": "string" }, { - "value": "0", - "type": "Number", - "label": "An internal counter", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "Counter" + "defaultValue": "yes", + "description": "Clear destination first", + "name": "isExactCopy", + "optional": true, + "type": "yesorno" } ], - "sharedPropertyDescriptors": [] + "objectGroups": [] } ], + "eventsBasedBehaviors": [], "eventsBasedObjects": [] }, { From d8fb22c7cf85ddf6343551270c0343746559816a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Tue, 29 Nov 2022 12:27:50 +0100 Subject: [PATCH 26/98] Handle changes --- .../assets/Flashy Empty Heart.png | Bin 0 -> 11278 bytes .../assets/Flashy Full Heart 2.png | Bin 0 -> 349 bytes .../resource-bar/assets/Flashy Full Heart.png | Bin 0 -> 11426 bytes examples/resource-bar/game.json | 3192 ++++++----------- 4 files changed, 1011 insertions(+), 2181 deletions(-) create mode 100644 examples/resource-bar/assets/Flashy Empty Heart.png create mode 100644 examples/resource-bar/assets/Flashy Full Heart 2.png create mode 100644 examples/resource-bar/assets/Flashy Full Heart.png diff --git a/examples/resource-bar/assets/Flashy Empty Heart.png b/examples/resource-bar/assets/Flashy Empty Heart.png new file mode 100644 index 0000000000000000000000000000000000000000..0ea83b42370d8f7278be5a80faa0fd42d1a1b017 GIT binary patch literal 11278 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Flashy Full Heart 2.png b/examples/resource-bar/assets/Flashy Full Heart 2.png new file mode 100644 index 0000000000000000000000000000000000000000..fcabd7eb053921ec0fa037bc4cefba9f9a728a6e GIT binary patch literal 349 zcmeAS@N?(olHy`uVBq!ia0vp^QXtI11|(N{`J7{5U{vvRaSZV|o}3`Tn!@B(Gs#Wu z-2cQk#p&OSCaq>$?rLy$k$n7tqj8_T7f7%LFaGsSF6L}*qUszmBcV+$56+v5RL)2| zA(k-NeS6Qu3H}MwY7-tF+AwAAcYUt^&(qW9OfwYha+&e)#k2`rGc+##`D|=_N8Dgm zme|3jZlD^OWNx>T15SPV9UmDz?G~BDZCJJ|da~3%V*>*N7aglJ4qm648~Jr&G=Ao~ z&e3HCg660=X63-29U}8V7M-|Z@tEV8P|Ey+G2MBFn=IP=&%H_AVY>36y`Q|` literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Flashy Full Heart.png b/examples/resource-bar/assets/Flashy Full Heart.png new file mode 100644 index 0000000000000000000000000000000000000000..06503da24dfcb9ad33f8a100bf682c45a0160cf3 GIT binary patch literal 11426 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 pbauNFp}T?ew*=RHK~^OIU|1`+;", + "Object.Behavior::PropertyPreviousValueDuration()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar::UpdatePreviousValue" + }, + "parameters": [ + "Object", + "Behavior", + "=" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, { "fullName": "Full", "functionType": "Condition", @@ -6033,11 +5322,100 @@ "objectGroups": [] }, { - "fullName": "Empty", - "functionType": "Condition", - "name": "IsEmpty", + "fullName": "Empty", + "functionType": "Condition", + "name": "IsEmpty", + "sentence": "", + "events": [], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the value of the object.", + "fullName": "Value", + "functionType": "ExpressionAndCondition", + "name": "Value", + "sentence": "the value", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValue()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "Value", + "name": "SetValue", "sentence": "", - "events": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "clamp(GetArgumentAsNumber(\"Value\"), 0, Object.Behavior::MaxValue())" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__ResourceBar.LastValueChange\"" + ] + } + ] + } + ], "parameters": [ { "description": "Object", @@ -6054,11 +5432,12 @@ "objectGroups": [] }, { - "description": "the value of the object.", - "fullName": "Value", + "description": "the maximum value of the object.", + "fullName": "Maximum value", "functionType": "ExpressionAndCondition", - "name": "Value", - "sentence": "the value", + "group": "Resource bar configuration", + "name": "MaxValue", + "sentence": "the maximum value", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -6069,7 +5448,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyValue()" + "Object.Behavior::PropertyMaxValue()" ] } ] @@ -6096,8 +5475,8 @@ { "fullName": "", "functionType": "ActionWithOperator", - "getterName": "Value", - "name": "SetValue", + "getterName": "MaxValue", + "name": "SetMaxValue", "sentence": "", "events": [ { @@ -6106,7 +5485,7 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar::SetPropertyValue" + "value": "ResourceBar::ResourceBar::SetPropertyMaxValue" }, "parameters": [ "Object", @@ -6134,11 +5513,11 @@ "objectGroups": [] }, { - "description": "the maximum value of the object.", - "fullName": "Maximum value", + "description": "the previous value of the resource bar before the current change.", + "fullName": "Previous value", "functionType": "ExpressionAndCondition", - "name": "MaxValue", - "sentence": "the maximum value", + "name": "PreviousValue", + "sentence": "the previous value", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -6149,7 +5528,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyMaxValue()" + "Object.Behavior::PropertyPreviousValue()" ] } ] @@ -6174,11 +5553,11 @@ "objectGroups": [] }, { - "fullName": "", - "functionType": "ActionWithOperator", - "getterName": "MaxValue", - "name": "SetMaxValue", - "sentence": "", + "description": "Force the previous resource value to update to the current one.", + "fullName": "Update previous value", + "functionType": "Action", + "name": "UpdatePreviousValue", + "sentence": "Update the previous resource value of _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -6186,13 +5565,13 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar::SetPropertyMaxValue" + "value": "ResourceBar::ResourceBar::SetPropertyPreviousValue" }, "parameters": [ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"Value\")" + "Object.Behavior::PropertyValue()" ] } ] @@ -6214,11 +5593,12 @@ "objectGroups": [] }, { - "description": "the previous value of the object.", - "fullName": "Previous value", + "description": "the previous value conservation duration (in seconds) of the object.", + "fullName": "Previous value conservation duration (in seconds)", "functionType": "ExpressionAndCondition", - "name": "PreviousValue", - "sentence": "the previous value", + "group": "Resource bar configuration", + "name": "PreviousValueDuration", + "sentence": "the previous value conservation duration", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -6229,7 +5609,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyPreviousValue()" + "Object.Behavior::PropertyPreviousValueDuration()" ] } ] @@ -6256,8 +5636,8 @@ { "fullName": "", "functionType": "ActionWithOperator", - "getterName": "PreviousValue", - "name": "SetPreviousValue", + "getterName": "PreviousValueDuration", + "name": "SetPreviousValueDuration", "sentence": "", "events": [ { @@ -6266,7 +5646,7 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar::SetPropertyPreviousValue" + "value": "ResourceBar::ResourceBar::SetPropertyPreviousValueDuration" }, "parameters": [ "Object", @@ -6292,6 +5672,67 @@ } ], "objectGroups": [] + }, + { + "description": "Check if the resource value is changing.", + "fullName": "Value is changing", + "functionType": "Condition", + "name": "IsChanging", + "sentence": "_PARAM0_ value is changing", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::ResourceBar::PreviousValue" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "Object.Behavior::PropertyValue()", + "" + ] + }, + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__ResourceBar.LastValueChange\"", + "<=", + "Object.Behavior::PropertyPreviousValueDuration()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] } ], "propertyDescriptors": [ @@ -6306,7 +5747,7 @@ "name": "Value" }, { - "value": "0", + "value": "3", "type": "Number", "label": "Maximum value", "description": "", @@ -6322,8 +5763,18 @@ "description": "", "group": "", "extraInformation": [], - "hidden": false, + "hidden": true, "name": "PreviousValue" + }, + { + "value": "1", + "type": "Number", + "label": "Previous value conservation duration (in seconds)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "PreviousValueDuration" } ], "sharedPropertyDescriptors": [] @@ -6332,8 +5783,8 @@ "eventsBasedObjects": [ { "defaultName": "", - "description": "", - "fullName": "", + "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", + "fullName": "Resource bar (tiled)", "name": "TiledResourceBar", "eventsFunctions": [ { @@ -6383,6 +5834,18 @@ "" ] }, + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Buffer", + "0", + "0", + "" + ] + }, { "type": { "value": "Create" @@ -6420,28 +5883,19 @@ "value": "ChangePlan" }, "parameters": [ - "Resource", + "Buffer", "=", "3" ] }, { "type": { - "value": "TiledSpriteObject::Width" + "value": "ChangePlan" }, "parameters": [ - "Bar", + "Resource", "=", - "Object.PropertyUnitWidth() * Object.PropertyMaxValue()" - ] - }, - { - "type": { - "value": "ResourceBar::TiledResourceBar::CenterBar" - }, - "parameters": [ - "Object", - "" + "4" ] } ] @@ -6514,6 +5968,68 @@ ] } ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Pass configuration to the behavior", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::TiledResourceBar::SetValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyInitialValue()", + "" + ] + }, + { + "type": { + "value": "ResourceBar::TiledResourceBar::SetMaxValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyMaxValue()", + "" + ] + }, + { + "type": { + "value": "ResourceBar::TiledResourceBar::SetPreviousValueDuration" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyPreviousValueDuration()", + "" + ] + }, + { + "type": { + "value": "ResourceBar::ResourceBar::ResetPreviousValue" + }, + "parameters": [ + "Resource", + "ResourceBar", + "" + ] + } + ] } ], "parameters": [ @@ -6661,6 +6177,43 @@ } ], "parameters": [] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "ResourceBar::TiledResourceBar::IsChanging" + }, + "parameters": [ + "Object", + "ResourceBar" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Tween::AddObjectWidthTween" + }, + "parameters": [ + "Buffer", + "Tween", + "\"ChangeValue\"", + "Resource.ResourceBar::Value() * Object.PropertyUnitWidth()", + "\"linear\"", + "Object.PropertyEasingDuration() * 1000", + "" + ] + } + ] } ], "parameters": [ @@ -6811,7 +6364,19 @@ "value": "MettreXY" }, "parameters": [ - "Resource", + "Resource", + "=", + "Bar.X()", + "=", + "Bar.Y()" + ] + }, + { + "type": { + "value": "MettreXY" + }, + "parameters": [ + "Buffer", "=", "Bar.X()", "=", @@ -6849,1271 +6414,536 @@ "parameters": [ "Resource.ResourceBar::Value()" ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "ResourceBar::TiledResourceBar", - "type": "object" - } - ], - "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "Label", - "extraInformation": [], - "hidden": false, - "name": "LabelLeftPadding" - }, - { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "Label", - "extraInformation": [], - "hidden": false, - "name": "LabelTopPadding" - }, - { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "Label", - "extraInformation": [], - "hidden": false, - "name": "LabelRightPadding" - }, - { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "Label", - "extraInformation": [], - "hidden": false, - "name": "LabelBottomPadding" - }, - { - "value": "3", - "type": "Number", - "label": "Maximum value", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "MaxValue" - }, - { - "value": "3", - "type": "Number", - "label": "Initial value", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "InitialValue" - }, - { - "value": "24", - "type": "Number", - "label": "Unit width", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "UnitWidth" - } - ], - "objects": [ - { - "assetStoreId": "", - "bold": false, - "italic": false, - "name": "Label", - "smoothed": true, - "tags": "", - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [], - "string": "Text", - "font": "", - "characterSize": 20, - "color": { - "b": 0, - "g": 0, - "r": 0 - } - }, - { - "assetStoreId": "", - "height": 32, - "name": "Resource", - "tags": "", - "texture": "", - "type": "TiledSpriteObject::TiledSprite", - "width": 32, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar", - "type": "ResourceBar::ResourceBar", - "Value": 1, - "MaxValue": 0, - "PreviousValue": 0 - } - ] - }, - { - "assetStoreId": "", - "height": 32, - "name": "Bar", - "tags": "", - "texture": "", - "type": "TiledSpriteObject::TiledSprite", - "width": 32, - "variables": [], - "effects": [], - "behaviors": [] - }, - { - "assetStoreId": "", - "bottomMargin": 0, - "height": 32, - "leftMargin": 0, - "name": "Background", - "rightMargin": 0, - "tags": "", - "texture": "", - "tiled": true, - "topMargin": 0, - "type": "PanelSpriteObject::PanelSprite", - "width": 32, - "variables": [], - "effects": [], - "behaviors": [] - } - ] - } - ] - }, - { - "author": "@Bouh, D8H", - "category": "General", - "extensionNamespace": "", - "fullName": "Extended variables support", - "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXZhcmlhYmxlLWJveCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xOSAzSDVDMy45IDMgMyAzLjkgMyA1VjE5QzMgMjAuMSAzLjkgMjEgNSAyMUgxOUMyMC4xIDIxIDIxIDIwLjEgMjEgMTlWNUMyMSAzLjkgMjAuMSAzIDE5IDNNNy40IDE4QzUuOSAxNi41IDUgMTQuMyA1IDEyUzUuOSA3LjUgNy40IDZMOSA2LjdDNy43IDcuOSA3IDkuOSA3IDEyUzcuNyAxNi4xIDkgMTcuM0w3LjQgMThNMTIuNyAxNUwxMS45IDEzTDEwLjUgMTVIOUwxMS4zIDExLjlMMTAgOUgxMS4zTDEyLjEgMTFMMTMuNSA5SDE1TDEyLjggMTJMMTQuMSAxNUgxMi43TTE2LjYgMThMMTUgMTcuM0MxNi4zIDE2IDE3IDE0LjEgMTcgMTJTMTYuMyA3LjkgMTUgNi43TDE2LjYgNkMxOC4xIDcuNSAxOSA5LjcgMTkgMTJTMTguMSAxNi41IDE2LjYgMThaIiAvPjwvc3ZnPg==", - "name": "ExtendedVariables", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/variable-box.svg", - "shortDescription": "Add conditions, actions and expressions to check for the existence of a variable, copy variables, delete existing ones from memory, and create dynamic variables.", - "version": "1.0.0", - "description": "This extension provides: \n- Conditions to check if a global/scene/object variable exists.\n- Actions to copy object variables, global and scene variables.\n- Actions to delete an existing global/scene variable from memory.\n- Actions to create a global/scene variable using a text expression, rather than a variable name input.\n- Expressions to get the value or text from a global/scene variable using a text expression, rather than a variable name.\n\nText expressions allows to enter the name of the variable with an expression like `\"MyVar\"+ ToString(Variable(Health))`", - "origin": { - "identifier": "ExtendedVariables", - "name": "gdevelop-extension-store" - }, - "tags": [ - "variable", - "scene", - "global", - "object", - "remove", - "expression", - "copy", - "structure", - "array", - "boolean", - "duplication" - ], - "authorIds": [ - "2OwwM8ToR9dx9RJ2sAKTcrLmCB92", - "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" - ], - "dependencies": [], - "eventsFunctions": [ - { - "description": "Check if a global variable exists.", - "fullName": "Global variable exists", - "functionType": "Condition", - "group": "Deprecated", - "name": "C_global_variable_exist", - "private": true, - "sentence": "If the global variable _PARAM1_ exist", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ExtendedVariables::GlobalVariableExist" - }, - "parameters": [ - "", - "GetArgumentAsString(\"GlobalVariableName\")", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Name of the global variable", - "name": "GlobalVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the global variable exists.", - "fullName": "Global variable exists", - "functionType": "Condition", - "group": "Global variables", - "name": "GlobalVariableExist", - "sentence": "If the global variable _PARAM1_ exist", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const globalVariables = runtimeScene.getGame().getVariables();\r\neventsFunctionContext.returnValue = globalVariables.has(eventsFunctionContext.getArgument(\"GlobalVariableName\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the global variable", - "name": "GlobalVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Check if a scene variable exists.", - "fullName": "Scene variable exists", - "functionType": "Condition", - "group": "Deprecated", - "name": "C_scene_variable_exist", - "private": true, - "sentence": "If the scene variable _PARAM1_ exist", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ExtendedVariables::SceneVariableExist" - }, - "parameters": [ - "", - "GetArgumentAsString(\"SceneVariableName\")", - "" + } ] } ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the scene variable exists.", - "fullName": "Scene variable exists", - "functionType": "Condition", - "group": "Scene variables", - "name": "SceneVariableExist", - "sentence": "If the scene variable _PARAM1_ exist", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const sceneVariables = runtimeScene.getVariables();\r\neventsFunctionContext.returnValue = sceneVariables.has(eventsFunctionContext.getArgument(\"SceneVariableName\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Check if an object variable exists.", - "fullName": "Object variable exists", - "functionType": "Condition", - "group": "Deprecated", - "name": "C_object_variable_exist", - "private": true, - "sentence": "Object _PARAM1_ has object variable _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "expressionType": { + "type": "expression" + }, + "parameters": [ { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] + "description": "Object", + "name": "Object", + "supplementaryInformation": "ResourceBar::TiledResourceBar", + "type": "object" } - ] + ], + "objectGroups": [] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "Value", + "name": "SetValue", + "sentence": "", + "events": [ { - "type": { - "value": "ExtendedVariables::ObjectVariableExist" - }, - "parameters": [ - "", - "ObjectToCheck", - "GetArgumentAsString(\"ObjectVariableName\")", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar::SetValue" + }, + "parameters": [ + "Resource", + "ResourceBar", + "=", + "GetArgumentAsNumber(\"Value\")", + "" + ] + }, + { + "type": { + "value": "Tween::AddObjectWidthTween" + }, + "parameters": [ + "Resource", + "Tween", + "\"ChangeValue\"", + "Resource.ResourceBar::Value() * Object.PropertyUnitWidth()", + "\"linear\"", + "Object.PropertyEasingDuration() * 1000", + "" + ] + } ] } ], - "actions": [ + "parameters": [ { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] + "description": "Object", + "name": "Object", + "supplementaryInformation": "ResourceBar::TiledResourceBar", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar", + "type": "behavior" } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "ObjectToCheck", - "type": "objectList" - }, - { - "description": "Name of object variable", - "name": "ObjectVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Check if an object variable exists.", - "fullName": "Object variable exists", - "functionType": "Condition", - "group": "Object variables", - "name": "ObjectVariableExist", - "sentence": "Object _PARAM1_ has object variable _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "let returnValue = true;\r\nif (!objects.length) {\r\n returnValue = false;\r\n} else {\r\n const objectVariableName = eventsFunctionContext.getArgument(\"ObjectVariableName\");\r\n for (let i = 0; i < objects.length; i++) {\r\n if (!objects[i].hasVariable(objectVariableName)) {\r\n // If any object does NOT have the variable, return false.\r\n returnValue = false;\r\n break;\r\n }\r\n }\r\n}\r\n\r\neventsFunctionContext.returnValue = returnValue;", - "parameterObjects": "ObjectToCheck", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Object", - "name": "ObjectToCheck", - "type": "objectList" + ], + "objectGroups": [] }, { - "description": "Name of object variable", - "name": "ObjectVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Delete a global variable, removing it from memory.", - "fullName": "Delete global variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_Delete_global_variable", - "private": true, - "sentence": "Delete global variable _PARAM1_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "description": "the maximum value of the object.", + "fullName": "Maximum value", + "functionType": "ExpressionAndCondition", + "group": "Resource bar configuration", + "name": "MaxValue", + "sentence": "the maximum value", + "events": [ { - "type": { - "value": "ExtendedVariables::DeleteGlobalVariable" - }, - "parameters": [ - "", - "GetArgumentAsString(\"GlobalVariableName\")", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Resource.ResourceBar::PropertyMaxValue()" + ] + } ] } - ] - } - ], - "parameters": [ - { - "description": "Name of the global variable to delete", - "name": "GlobalVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Delete the global variable, removing it from memory.", - "fullName": "Delete global variable", - "functionType": "Action", - "group": "Global variables", - "name": "DeleteGlobalVariable", - "sentence": "Delete the global variable _PARAM1_ from memory", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "runtimeScene.getGame().getVariables().remove(eventsFunctionContext.getArgument(\"GlobalVariableName\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the global variable to delete", - "name": "GlobalVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the text of a scene variable.", - "fullName": "String of a scene variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_Modify_scene_variable_string", - "private": true, - "sentence": "Change the text of scene variable _PARAM1_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ { - "type": { - "value": "ExtendedVariables::ModifySceneVariableString" - }, - "parameters": [ - "", - "GetArgumentAsString(\"SceneVariableName\")", - "GetArgumentAsNumber(\"SceneVariableValue\")", - "" - ] + "description": "Object", + "name": "Object", + "supplementaryInformation": "ResourceBar::TiledResourceBar", + "type": "object" } - ] - } - ], - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - }, - { - "description": "Value", - "name": "SceneVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the text of a scene variable.", - "fullName": "String of a scene variable", - "functionType": "Action", - "group": "Scene variables", - "name": "ModifySceneVariableString", - "sentence": "Change the text of scene variable _PARAM1_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const variable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r\nvariable.setString(eventsFunctionContext.getArgument(\"SceneVariableValue\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - }, - { - "description": "Value", - "name": "SceneVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the text of a global variable.", - "fullName": "String of a global variable", - "functionType": "Action", - "group": "Global variables", - "name": "ModifyGlobalVariableString", - "sentence": "Change the text of global variable _PARAM1_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const variable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r\nvariable.setString(eventsFunctionContext.getArgument(\"GlobalVariableValue\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the global variable", - "name": "GlobalVariableName", - "type": "string" + ], + "objectGroups": [] }, { - "description": "Value", - "name": "GlobalVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the value of a global variable.", - "fullName": "Value of a global variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_Modify_global_variable", - "private": true, - "sentence": "Change the global variable _PARAM1_ with value: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "MaxValue", + "name": "SetMaxValue", + "sentence": "", + "events": [ { - "type": { - "value": "ExtendedVariables::ModifyGlobalVariable" - }, - "parameters": [ - "", - "GetArgumentAsString(\"SceneVariableName\")", - "GetArgumentAsNumber(\"SceneVariableValue\")", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar::SetMaxValue" + }, + "parameters": [ + "Resource", + "ResourceBar", + "=", + "GetArgumentAsNumber(\"Value\")", + "" + ] + }, + { + "type": { + "value": "TiledSpriteObject::Width" + }, + "parameters": [ + "Bar", + "=", + "Object.PropertyMaxValue() * Object.PropertyUnitWidth()" + ] + }, + { + "type": { + "value": "ResourceBar::TiledResourceBar::CenterBar" + }, + "parameters": [ + "Object", + "" + ] + } ] } - ] - } - ], - "parameters": [ - { - "description": "Name of the global variable", - "name": "SceneVariableName", - "type": "string" - }, - { - "description": "Value", - "name": "SceneVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the text of a global variable.", - "fullName": "String of a global variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_Modify_global_variable_string", - "private": true, - "sentence": "Change the text of global variable _PARAM1_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + ], + "parameters": [ { - "type": { - "value": "ExtendedVariables::ModifyGlobalVariableString" - }, - "parameters": [ - "", - "GetArgumentAsString(\"SceneVariableName\")", - "GetArgumentAsNumber(\"SceneVariableValue\")", - "" - ] + "description": "Object", + "name": "Object", + "supplementaryInformation": "ResourceBar::TiledResourceBar", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar", + "type": "behavior" } - ] - } - ], - "parameters": [ - { - "description": "Name of the global variable", - "name": "SceneVariableName", - "type": "string" - }, - { - "description": "Value", - "name": "SceneVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the value of a global variable.", - "fullName": "Value of a global variable", - "functionType": "Action", - "group": "Global variables", - "name": "ModifyGlobalVariable", - "sentence": "Change the global variable _PARAM1_ with value: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const variable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r\nvariable.setNumber(eventsFunctionContext.getArgument(\"GlobalVariableValue\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the global variable", - "name": "GlobalVariableName", - "type": "string" + ], + "objectGroups": [] }, { - "description": "Value", - "name": "GlobalVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the value of a scene variable.", - "fullName": "Value of a scene variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_Modify_scene_variable", - "private": true, - "sentence": "Change the scene variable _PARAM1_ with value: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "description": "the previous value conservation duration (in seconds) of the object.", + "fullName": "Previous value conservation duration (in seconds)", + "functionType": "ExpressionAndCondition", + "group": "Resource bar configuration", + "name": "PreviousValueDuration", + "sentence": "the previous value conservation duration", + "events": [ { - "type": { - "value": "ExtendedVariables::ModifySceneVariable" - }, - "parameters": [ - "", - "GetArgumentAsString(\"SceneVariableName\")", - "GetArgumentAsNumber(\"SceneVariableValue\")", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Resource.ResourceBar::PropertyPreviousValueDuration()" + ] + } ] } - ] - } - ], - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - }, - { - "description": "Value", - "name": "SceneVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the value of a scene variable.", - "fullName": "Value of a scene variable", - "functionType": "Action", - "group": "Scene variables", - "name": "ModifySceneVariable", - "sentence": "Change the scene variable _PARAM1_ with value: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const variable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r\nvariable.setNumber(eventsFunctionContext.getArgument(\"SceneVariableValue\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "ResourceBar::TiledResourceBar", + "type": "object" + } + ], + "objectGroups": [] }, { - "description": "Value", - "name": "SceneVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Delete scene variable, the variable will be deleted from the memory.", - "fullName": "Delete scene variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_Delete_scene_variable", - "private": true, - "sentence": "Delete the scene variable _PARAM1_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "PreviousValueDuration", + "name": "SetPreviousValueDuration", + "sentence": "", + "events": [ { - "type": { - "value": "ExtendedVariables::DeleteSceneVariable" - }, - "parameters": [ - "", - "GetArgumentAsString(\"SceneVariableName\")", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar::SetPreviousValueDuration" + }, + "parameters": [ + "Resource", + "ResourceBar", + "=", + "GetArgumentAsNumber(\"Value\")", + "" + ] + } ] - } - ] - } - ], - "parameters": [ - { - "description": "Name of the scene variable to delete", - "name": "SceneVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Delete the scene variable, the variable will be deleted from the memory.", - "fullName": "Delete scene variable", - "functionType": "Action", - "group": "Scene variables", - "name": "DeleteSceneVariable", - "sentence": "Delete the scene variable _PARAM1_ from memory", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "runtimeScene.getVariables().remove(eventsFunctionContext.getArgument(\"SceneVariableName\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the scene variable to delete", - "name": "SceneVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Copy an object variable from one object to another.", - "fullName": "Copy an object variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_CopyObjectVariable", - "private": true, - "sentence": "Copy the variable _PARAM1_ of _PARAM2_ to the variable _PARAM3_ of _PARAM4_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + }, { - "type": { - "value": "ExtendedVariables::CopyObjectVariable" - }, - "parameters": [ - "", - "SourceObject", - "GetArgumentAsString(\"SourceVariableName\")", - "TargetObject", - "GetArgumentAsString(\"TargetVariableName\")", - "no", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CompareArgumentAsNumber" + }, + "parameters": [ + "\"Value\"", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Buffer", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CompareArgumentAsNumber" + }, + "parameters": [ + "\"Value\"", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Buffer" + ] + } ] } - ] - } - ], - "parameters": [ - { - "description": "Source object", - "name": "SourceObject", - "type": "objectList" - }, - { - "description": "Variable to copy", - "name": "SourceVariableName", - "type": "string" - }, - { - "description": "Destination object", - "longDescription": "To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.", - "name": "TargetObject", - "type": "objectList" + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "ResourceBar::TiledResourceBar", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] }, { - "description": "Destination variable", - "name": "TargetVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Copy the object variable from one object to another.", - "fullName": "Copy an object variable", - "functionType": "Action", - "group": "Object variables", - "name": "CopyObjectVariable", - "sentence": "Copy the variable _PARAM2_ of _PARAM1_ to the variable _PARAM4_ of _PARAM3_ (clear destination first: _PARAM5_)", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const sourceObject = eventsFunctionContext.getObjects(\"SourceObject\")[0];\nconst targetObject = eventsFunctionContext.getObjects(\"TargetObject\")[0];\nconst sourceVariableName = eventsFunctionContext.getArgument(\"SourceVariableName\");\nconst targetVariableName = eventsFunctionContext.getArgument(\"TargetVariableName\");\nconst isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");\n\nconst sourceVariables = sourceObject.getVariables();\nconst targetVariables = targetObject.getVariables();\n\nif (sourceVariables.has(sourceVariableName))\n{\n gdjs.Variable.copy\n (\n sourceVariables.get(sourceVariableName),\n targetVariables.get(targetVariableName),\n isExactCopy\n );\n}", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": true + "description": "Check if the resource value is changing.", + "fullName": "Value is changing", + "functionType": "Condition", + "name": "IsChanging", + "sentence": "_PARAM0_ value is changing", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::ResourceBar::IsChanging" + }, + "parameters": [ + "Resource", + "ResourceBar", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "ResourceBar::TiledResourceBar", + "type": "object" + } + ], + "objectGroups": [] } ], - "parameters": [ + "propertyDescriptors": [ { - "description": "Source object", - "name": "SourceObject", - "type": "objectList" + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "Label", + "extraInformation": [], + "hidden": false, + "name": "LabelLeftPadding" }, { - "description": "Variable to copy", - "name": "SourceVariableName", - "type": "string" + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "Label", + "extraInformation": [], + "hidden": false, + "name": "LabelTopPadding" }, { - "description": "Destination object", - "longDescription": "To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.", - "name": "TargetObject", - "type": "objectList" + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "Label", + "extraInformation": [], + "hidden": false, + "name": "LabelRightPadding" }, { - "description": "Destination variable", - "name": "TargetVariableName", - "type": "string" + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "Label", + "extraInformation": [], + "hidden": false, + "name": "LabelBottomPadding" }, { - "defaultValue": "yes", - "description": "Clear destination first", - "name": "isExactCopy", - "optional": true, - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Copy all object variables from one object to another.", - "fullName": "Copy all object variables", - "functionType": "Action", - "group": "Deprecated", - "name": "A_CopyAllObjectVariables", - "private": true, - "sentence": "Copy all variables from _PARAM1_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ExtendedVariables::CopyAllObjectVariables" - }, - "parameters": [ - "", - "SourceObject", - "TargetObject", - "no", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Source object", - "name": "SourceObject", - "type": "objectList" + "value": "3", + "type": "Number", + "label": "Maximum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "MaxValue" }, { - "description": "Destination object", - "name": "TargetObject", - "type": "objectList" - } - ], - "objectGroups": [] - }, - { - "description": "Copy all object variables from one object to another.", - "fullName": "Copy all object variables", - "functionType": "Action", - "group": "Object variables", - "name": "CopyAllObjectVariables", - "sentence": "Copy all variables from object _PARAM1_ to object _PARAM2_ (clear destination first: _PARAM3_)", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "// This JS event use private scope from the API, this can be borken at anytime.\n\nconst sourceObject = eventsFunctionContext.getObjects(\"SourceObject\")[0];\nconst targetObject = eventsFunctionContext.getObjects(\"TargetObject\")[0];\nconst isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");\n\nconst targetVariables = targetObject.getVariables();\nconst sourceVariables = sourceObject.getVariables()._variables.items;\nfor (const variableName in sourceVariables)\n{\n if (sourceVariables.hasOwnProperty(variableName))\n {\n gdjs.Variable.copy(sourceVariables[variableName], targetVariables.get(variableName), isExactCopy);\n }\n}", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ - { - "description": "Source object", - "name": "SourceObject", - "type": "objectList" + "value": "3", + "type": "Number", + "label": "Initial value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "InitialValue" }, { - "description": "Destination object", - "name": "TargetObject", - "type": "objectList" + "value": "24", + "type": "Number", + "label": "Unit width", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "UnitWidth" }, { - "defaultValue": "yes", - "description": "Clear destination first", - "name": "isExactCopy", - "optional": true, - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Delete an object variable, removing it from memory.", - "fullName": "Delete object variable", - "functionType": "Action", - "group": "Object variables", - "name": "DeleteObjectVariable", - "sentence": "Delete for the object _PARAM1_ the object variable _PARAM2_ from the memory", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const object = eventsFunctionContext.getObjects(\"Object\")[0];\r\nconst objectVariables = object.getVariables();\r\n\r\nobjectVariables.remove(eventsFunctionContext.getArgument(\"VariableName\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "objectList" + "value": "1", + "type": "Number", + "label": "Previous value conservation duration (in seconds)", + "description": "", + "group": "Animation", + "extraInformation": [], + "hidden": false, + "name": "PreviousValueDuration" }, { - "description": "Name of object variable", - "name": "VariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Return the text of a global variable.", - "fullName": "Text of a global variable", - "functionType": "StringExpression", - "group": "Global variables", - "name": "GlobalVariableString", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const globalVariables = runtimeScene.getGame().getVariables();\r\nconst variableExist = globalVariables.has(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r\n\r\nif (variableExist) {\r\n eventsFunctionContext.returnValue = globalVariables.get(eventsFunctionContext.getArgument(\"GlobalVariableName\")).getAsString();\r\n}", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "expressionType": { - "type": "string" - }, - "parameters": [ - { - "description": "Name of the global variable", - "name": "GlobalVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Return the text of a scene variable.", - "fullName": "Text of a scene variable", - "functionType": "StringExpression", - "group": "Scene variables", - "name": "VariableString", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const sceneVariables = runtimeScene.getVariables();\r\nconst variableExist = sceneVariables.has(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r\n\r\nif (variableExist) {\r\n eventsFunctionContext.returnValue = sceneVariables.get(eventsFunctionContext.getArgument(\"SceneVariableName\")).getAsString();\r\n}", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "expressionType": { - "type": "string" - }, - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Return the value of a global variable.", - "fullName": "Value of a global variable", - "functionType": "Expression", - "group": "Global variables", - "name": "GlobalVariable", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const globalVariables = runtimeScene.getGame().getVariables();\r\nconst variableExist = globalVariables.has(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r\n\r\nif (variableExist) {\r\n eventsFunctionContext.returnValue = globalVariables.get(eventsFunctionContext.getArgument(\"GlobalVariableName\")).getAsNumber();\r\n}", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Name of the global variable", - "name": "GlobalVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Return the value of a scene variable.", - "fullName": "Value of a scene variable", - "functionType": "Expression", - "group": "Scene variables", - "name": "Variable", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const sceneVariables = runtimeScene.getVariables();\r\nconst variableExist = sceneVariables.has(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r\n\r\nif (variableExist) {\r\n eventsFunctionContext.returnValue = sceneVariables.get(eventsFunctionContext.getArgument(\"SceneVariableName\")).getAsNumber();\r\n}", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Copy the global variable to scene. This copy everything from the types to the values.", - "fullName": "Copy a global variable to scene", - "functionType": "Action", - "group": "Convert", - "name": "CopyGlobalVariableToScene", - "sentence": "Copy the global variable:_PARAM1_ to a scene variable:_PARAM2_ (clear destination first: _PARAM3_)", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const globalVariable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"globalVariableName\"));\nconst sceneVariable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"sceneVariableName\"));\nconst isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");\n\ngdjs.Variable.copy(globalVariable, sceneVariable, isExactCopy);\n", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": true + "value": "0.25", + "type": "Number", + "label": "Easing duration", + "description": "", + "group": "Animation", + "extraInformation": [], + "hidden": false, + "name": "EasingDuration" } ], - "parameters": [ + "objects": [ { - "description": "Global variable to copy", - "name": "globalVariableName", - "type": "string" + "assetStoreId": "", + "bold": false, + "italic": false, + "name": "Label", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Text", + "font": "", + "characterSize": 20, + "color": { + "b": 0, + "g": 0, + "r": 0 + } }, { - "description": "Scene variable destination", - "name": "sceneVariableName", - "type": "string" + "assetStoreId": "", + "height": 32, + "name": "Resource", + "tags": "", + "texture": "", + "type": "TiledSpriteObject::TiledSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "ResourceBar", + "type": "ResourceBar::ResourceBar", + "Value": 1, + "MaxValue": 3, + "PreviousValue": 0 + }, + { + "name": "Tween", + "type": "Tween::TweenBehavior" + } + ] }, { - "defaultValue": "yes", - "description": "Clear destination first", - "name": "isExactCopy", - "optional": true, - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Copy the scene variable to global. This copy everything from the types to the values.", - "fullName": "Copy a scene variable to global ", - "functionType": "Action", - "group": "Copy variables", - "name": "CopySceneVariableToGlobal", - "sentence": "Copy the scene variable:_PARAM1_ to a global variable:_PARAM2_ (clear destination first: _PARAM3_)", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "const sceneVariable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"sceneVariableName\"));\nconst globalVariable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"globalVariableName\"));\nconst isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");\n\ngdjs.Variable.copy(sceneVariable, globalVariable, isExactCopy);", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ - { - "description": "Scene variable to copy", - "name": "sceneVariableName", - "type": "string" + "assetStoreId": "", + "height": 32, + "name": "Buffer", + "tags": "", + "texture": "", + "type": "TiledSpriteObject::TiledSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Tween", + "type": "Tween::TweenBehavior" + } + ] }, { - "description": "Global variable destination", - "name": "globalVariableName", - "type": "string" + "assetStoreId": "", + "height": 32, + "name": "Bar", + "tags": "", + "texture": "", + "type": "TiledSpriteObject::TiledSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [] }, { - "defaultValue": "yes", - "description": "Clear destination first", - "name": "isExactCopy", - "optional": true, - "type": "yesorno" + "assetStoreId": "", + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "name": "Background", + "rightMargin": 0, + "tags": "", + "texture": "", + "tiled": true, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [] } - ], - "objectGroups": [] + ] } - ], - "eventsBasedBehaviors": [], - "eventsBasedObjects": [] + ] }, { "author": "@4ian", From 0d87ad145ec08b46c431f77df144269263f3c4c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Tue, 29 Nov 2022 15:23:22 +0100 Subject: [PATCH 27/98] Split objects --- examples/resource-bar/ResourceBar.json | 7578 ----------------- examples/resource-bar/assets/Fly_1.png | Bin 3375 -> 0 bytes examples/resource-bar/assets/Fly_10.png | Bin 3384 -> 0 bytes examples/resource-bar/assets/Fly_2.png | Bin 3322 -> 0 bytes examples/resource-bar/assets/Fly_3.png | Bin 3396 -> 0 bytes examples/resource-bar/assets/Fly_4.png | Bin 3412 -> 0 bytes examples/resource-bar/assets/Fly_5.png | Bin 3417 -> 0 bytes examples/resource-bar/assets/Fly_6.png | Bin 3444 -> 0 bytes examples/resource-bar/assets/Fly_7.png | Bin 3444 -> 0 bytes examples/resource-bar/assets/Fly_8.png | Bin 3396 -> 0 bytes examples/resource-bar/assets/Fly_9.png | Bin 3364 -> 0 bytes .../assets/Meteor Detailed_Large.png | Bin 1147 -> 0 bytes .../assets/Meteor Detailed_Small.png | Bin 804 -> 0 bytes examples/resource-bar/assets/Moon.png | Bin 2048 -> 0 bytes .../assets/Playing Card_Back Blue 1.png | Bin 14269 -> 0 bytes .../assets/Playing Card_Back Blue 2.png | Bin 13615 -> 0 bytes .../assets/Playing Card_Back Brown 1.png | Bin 13704 -> 0 bytes .../assets/Playing Card_Back Brown 2.png | Bin 13438 -> 0 bytes .../assets/Playing Card_Back Red 1.png | Bin 14106 -> 0 bytes .../assets/Playing Card_Back Red 2.png | Bin 14338 -> 0 bytes .../assets/Playing Card_Clubs 02.png | Bin 2565 -> 0 bytes .../assets/Playing Card_Clubs 03.png | Bin 2987 -> 0 bytes .../assets/Playing Card_Clubs 04.png | Bin 3002 -> 0 bytes .../assets/Playing Card_Clubs 05.png | Bin 3489 -> 0 bytes .../assets/Playing Card_Clubs 06.png | Bin 3744 -> 0 bytes .../assets/Playing Card_Clubs 07.png | Bin 3998 -> 0 bytes .../assets/Playing Card_Clubs 08.png | Bin 4257 -> 0 bytes .../assets/Playing Card_Clubs 09.png | Bin 4351 -> 0 bytes .../assets/Playing Card_Clubs 10.png | Bin 4501 -> 0 bytes .../assets/Playing Card_Clubs A.png | Bin 2692 -> 0 bytes .../assets/Playing Card_Clubs J.png | Bin 3208 -> 0 bytes .../assets/Playing Card_Clubs K.png | Bin 4109 -> 0 bytes .../assets/Playing Card_Clubs Q.png | Bin 3339 -> 0 bytes .../assets/Playing Card_Diamond 02.png | Bin 2206 -> 0 bytes .../assets/Playing Card_Diamond 03.png | Bin 2538 -> 0 bytes .../assets/Playing Card_Diamond 04.png | Bin 2458 -> 0 bytes .../assets/Playing Card_Diamond 05.png | Bin 2871 -> 0 bytes .../assets/Playing Card_Diamond 06.png | Bin 3303 -> 0 bytes .../assets/Playing Card_Diamond 07.png | Bin 3499 -> 0 bytes .../assets/Playing Card_Diamond 08.png | Bin 3705 -> 0 bytes .../assets/Playing Card_Diamond 09.png | Bin 3486 -> 0 bytes .../assets/Playing Card_Diamond 10.png | Bin 3488 -> 0 bytes .../assets/Playing Card_Diamond A.png | Bin 2383 -> 0 bytes .../assets/Playing Card_Diamond J.png | Bin 3105 -> 0 bytes .../assets/Playing Card_Diamond K.png | Bin 4261 -> 0 bytes .../assets/Playing Card_Diamond Q.png | Bin 3308 -> 0 bytes .../assets/Playing Card_Hearts 02.png | Bin 2273 -> 0 bytes .../assets/Playing Card_Hearts 03.png | Bin 2651 -> 0 bytes .../assets/Playing Card_Hearts 04.png | Bin 2648 -> 0 bytes .../assets/Playing Card_Hearts 05.png | Bin 3070 -> 0 bytes .../assets/Playing Card_Hearts 06.png | Bin 3358 -> 0 bytes .../assets/Playing Card_Hearts 07.png | Bin 3655 -> 0 bytes .../assets/Playing Card_Hearts 08.png | Bin 3835 -> 0 bytes .../assets/Playing Card_Hearts 09.png | Bin 3990 -> 0 bytes .../assets/Playing Card_Hearts 10.png | Bin 4130 -> 0 bytes .../assets/Playing Card_Hearts A.png | Bin 2514 -> 0 bytes .../assets/Playing Card_Hearts J.png | Bin 3150 -> 0 bytes .../assets/Playing Card_Hearts K.png | Bin 4275 -> 0 bytes .../assets/Playing Card_Hearts Q.png | Bin 3335 -> 0 bytes .../assets/Playing Card_Joker Black.png | Bin 3673 -> 0 bytes .../assets/Playing Card_Joker Red.png | Bin 3733 -> 0 bytes .../assets/Playing Card_Spades 02.png | Bin 2351 -> 0 bytes .../assets/Playing Card_Spades 03.png | Bin 2707 -> 0 bytes .../assets/Playing Card_Spades 04.png | Bin 2793 -> 0 bytes .../assets/Playing Card_Spades 05.png | Bin 3230 -> 0 bytes .../assets/Playing Card_Spades 06.png | Bin 3494 -> 0 bytes .../assets/Playing Card_Spades 07.png | Bin 3776 -> 0 bytes .../assets/Playing Card_Spades 08.png | Bin 4048 -> 0 bytes .../assets/Playing Card_Spades 09.png | Bin 4226 -> 0 bytes .../assets/Playing Card_Spades 10.png | Bin 4423 -> 0 bytes .../assets/Playing Card_Spades A.png | Bin 2544 -> 0 bytes .../assets/Playing Card_Spades J.png | Bin 3127 -> 0 bytes .../assets/Playing Card_Spades K.png | Bin 4045 -> 0 bytes .../assets/Playing Card_Spades Q.png | Bin 3310 -> 0 bytes .../resource-bar/assets/Silver shield.png | Bin 745 -> 0 bytes .../resource-bar/assets/Star_LargeNarrow.png | Bin 630 -> 0 bytes .../resource-bar/assets/Star_LargeWide.png | Bin 587 -> 0 bytes examples/resource-bar/assets/Star_Medium.png | Bin 354 -> 0 bytes examples/resource-bar/assets/Star_Small.png | Bin 270 -> 0 bytes .../assets/Upgraded Potion Blue_No Shadow.png | Bin 438 -> 0 bytes .../assets/Upgraded Potion Blue_Shadow.png | Bin 503 -> 0 bytes examples/resource-bar/game.json | 3185 ++++--- 82 files changed, 1449 insertions(+), 9314 deletions(-) delete mode 100644 examples/resource-bar/ResourceBar.json delete mode 100644 examples/resource-bar/assets/Fly_1.png delete mode 100644 examples/resource-bar/assets/Fly_10.png delete mode 100644 examples/resource-bar/assets/Fly_2.png delete mode 100644 examples/resource-bar/assets/Fly_3.png delete mode 100644 examples/resource-bar/assets/Fly_4.png delete mode 100644 examples/resource-bar/assets/Fly_5.png delete mode 100644 examples/resource-bar/assets/Fly_6.png delete mode 100644 examples/resource-bar/assets/Fly_7.png delete mode 100644 examples/resource-bar/assets/Fly_8.png delete mode 100644 examples/resource-bar/assets/Fly_9.png delete mode 100644 examples/resource-bar/assets/Meteor Detailed_Large.png delete mode 100644 examples/resource-bar/assets/Meteor Detailed_Small.png delete mode 100644 examples/resource-bar/assets/Moon.png delete mode 100644 examples/resource-bar/assets/Playing Card_Back Blue 1.png delete mode 100644 examples/resource-bar/assets/Playing Card_Back Blue 2.png delete mode 100644 examples/resource-bar/assets/Playing Card_Back Brown 1.png delete mode 100644 examples/resource-bar/assets/Playing Card_Back Brown 2.png delete mode 100644 examples/resource-bar/assets/Playing Card_Back Red 1.png delete mode 100644 examples/resource-bar/assets/Playing Card_Back Red 2.png delete mode 100644 examples/resource-bar/assets/Playing Card_Clubs 02.png delete mode 100644 examples/resource-bar/assets/Playing Card_Clubs 03.png delete mode 100644 examples/resource-bar/assets/Playing Card_Clubs 04.png delete mode 100644 examples/resource-bar/assets/Playing Card_Clubs 05.png delete mode 100644 examples/resource-bar/assets/Playing Card_Clubs 06.png delete mode 100644 examples/resource-bar/assets/Playing Card_Clubs 07.png delete mode 100644 examples/resource-bar/assets/Playing Card_Clubs 08.png delete mode 100644 examples/resource-bar/assets/Playing Card_Clubs 09.png delete mode 100644 examples/resource-bar/assets/Playing Card_Clubs 10.png delete mode 100644 examples/resource-bar/assets/Playing Card_Clubs A.png delete mode 100644 examples/resource-bar/assets/Playing Card_Clubs J.png delete mode 100644 examples/resource-bar/assets/Playing Card_Clubs K.png delete mode 100644 examples/resource-bar/assets/Playing Card_Clubs Q.png delete mode 100644 examples/resource-bar/assets/Playing Card_Diamond 02.png delete mode 100644 examples/resource-bar/assets/Playing Card_Diamond 03.png delete mode 100644 examples/resource-bar/assets/Playing Card_Diamond 04.png delete mode 100644 examples/resource-bar/assets/Playing Card_Diamond 05.png delete mode 100644 examples/resource-bar/assets/Playing Card_Diamond 06.png delete mode 100644 examples/resource-bar/assets/Playing Card_Diamond 07.png delete mode 100644 examples/resource-bar/assets/Playing Card_Diamond 08.png delete mode 100644 examples/resource-bar/assets/Playing Card_Diamond 09.png delete mode 100644 examples/resource-bar/assets/Playing Card_Diamond 10.png delete mode 100644 examples/resource-bar/assets/Playing Card_Diamond A.png delete mode 100644 examples/resource-bar/assets/Playing Card_Diamond J.png delete mode 100644 examples/resource-bar/assets/Playing Card_Diamond K.png delete mode 100644 examples/resource-bar/assets/Playing Card_Diamond Q.png delete mode 100644 examples/resource-bar/assets/Playing Card_Hearts 02.png delete mode 100644 examples/resource-bar/assets/Playing Card_Hearts 03.png delete mode 100644 examples/resource-bar/assets/Playing Card_Hearts 04.png delete mode 100644 examples/resource-bar/assets/Playing Card_Hearts 05.png delete mode 100644 examples/resource-bar/assets/Playing Card_Hearts 06.png delete mode 100644 examples/resource-bar/assets/Playing Card_Hearts 07.png delete mode 100644 examples/resource-bar/assets/Playing Card_Hearts 08.png delete mode 100644 examples/resource-bar/assets/Playing Card_Hearts 09.png delete mode 100644 examples/resource-bar/assets/Playing Card_Hearts 10.png delete mode 100644 examples/resource-bar/assets/Playing Card_Hearts A.png delete mode 100644 examples/resource-bar/assets/Playing Card_Hearts J.png delete mode 100644 examples/resource-bar/assets/Playing Card_Hearts K.png delete mode 100644 examples/resource-bar/assets/Playing Card_Hearts Q.png delete mode 100644 examples/resource-bar/assets/Playing Card_Joker Black.png delete mode 100644 examples/resource-bar/assets/Playing Card_Joker Red.png delete mode 100644 examples/resource-bar/assets/Playing Card_Spades 02.png delete mode 100644 examples/resource-bar/assets/Playing Card_Spades 03.png delete mode 100644 examples/resource-bar/assets/Playing Card_Spades 04.png delete mode 100644 examples/resource-bar/assets/Playing Card_Spades 05.png delete mode 100644 examples/resource-bar/assets/Playing Card_Spades 06.png delete mode 100644 examples/resource-bar/assets/Playing Card_Spades 07.png delete mode 100644 examples/resource-bar/assets/Playing Card_Spades 08.png delete mode 100644 examples/resource-bar/assets/Playing Card_Spades 09.png delete mode 100644 examples/resource-bar/assets/Playing Card_Spades 10.png delete mode 100644 examples/resource-bar/assets/Playing Card_Spades A.png delete mode 100644 examples/resource-bar/assets/Playing Card_Spades J.png delete mode 100644 examples/resource-bar/assets/Playing Card_Spades K.png delete mode 100644 examples/resource-bar/assets/Playing Card_Spades Q.png delete mode 100644 examples/resource-bar/assets/Silver shield.png delete mode 100644 examples/resource-bar/assets/Star_LargeNarrow.png delete mode 100644 examples/resource-bar/assets/Star_LargeWide.png delete mode 100644 examples/resource-bar/assets/Star_Medium.png delete mode 100644 examples/resource-bar/assets/Star_Small.png delete mode 100644 examples/resource-bar/assets/Upgraded Potion Blue_No Shadow.png delete mode 100644 examples/resource-bar/assets/Upgraded Potion Blue_Shadow.png diff --git a/examples/resource-bar/ResourceBar.json b/examples/resource-bar/ResourceBar.json deleted file mode 100644 index d66648ba1..000000000 --- a/examples/resource-bar/ResourceBar.json +++ /dev/null @@ -1,7578 +0,0 @@ -{ - "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", - "category": "Input", - "description": "Solid resource bar\n\nUnit resource bar", - "extensionNamespace": "", - "fullName": "Resource bar", - "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", - "name": "ResourceBar", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/UI Essentials/UI Essentials_sliders_options.svg", - "shortDescription": "Displays a bar that represents a resource in the game (health, shield, mana, ammo, etc)", - "version": "0.0.1", - "origin": { - "identifier": "DraggableSliderControl", - "name": "gdevelop-extension-store" - }, - "tags": [ - "resource", - "bar", - "shape painter", - "health", - "mana", - "shield", - "hearts", - "lives" - ], - "authorIds": [ - "IWykYNRvhCZBN3vEgKEbBPOR3Oc2", - "gqDaZjCfevOOxBYkK6zlhtZnXCg1" - ], - "dependencies": [], - "eventsFunctions": [], - "eventsBasedBehaviors": [ - { - "description": "Displays a solid bar that represents a resource in the game (health, shield, mana, ammo, etc)", - "fullName": "Solid resource bar", - "name": "SolidResourceBar", - "objectType": "PrimitiveDrawing::Drawer", - "eventsFunctions": [ - { - "description": "", - "fullName": "", - "functionType": "Action", - "group": "", - "name": "onCreated", - "private": false, - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make sure object doesn't get re-drawn every frame", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::ClearBetweenFrames" - }, - "parameters": [ - "Object", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Use correct min value (instead of always starting at 0)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMin()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set Bar height function (which enforces valid thumb sizes)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyBarThickness" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyBarThickness()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Start halo at same size as thumb", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::PropertyThumbHeight()/2,Object.Behavior::PropertyThumbWidth()/2)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "", - "fullName": "", - "functionType": "Action", - "group": "", - "name": "doStepPreEvents", - "private": false, - "sentence": "", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Slider logic", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::IsEnabled" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Bar where the mouse is (in relation to object)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyMouseX" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.ToDrawingX(MouseX(Object.Layer(), 0), MouseY(Object.Layer(), 0))" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyMouseY" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.ToDrawingY(MouseX(Object.Layer(), 0), MouseY(Object.Layer(), 0))" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move slider when being dragged", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyThumbOffset" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyMouseX()" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "End sliding and update variables", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "MouseButtonReleased" - }, - "parameters": [ - "", - "Left" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Update \"Value\" based on the location of the thumb", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyValueMin() + (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin()) * Object.Behavior::PropertyThumbOffset() / Object.Behavior::PropertyBarLength()", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Grow halo even more when pressed", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyTargetHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "1.25 * Object.Behavior::PropertyHaloRadius()" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Detect hover/touch/click (but only if the layer and object is visible, and the object is not already being dragged)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "ResourceBar::SolidResourceBar::PropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Detect mouse clicks near Bar, start dragging", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SourisBouton" - }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseX()", - ">=", - "-Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseX()", - "<=", - "Object.Behavior::PropertyBarLength() + Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseY()", - ">=", - "-Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseY()", - "<=", - "Object.Behavior::PropertyHaloRadius()" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Reset hover detection ", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyIsHovered" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Grow halo when hovered", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "SourisBouton" - }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseX()", - ">=", - "Object.Behavior::PropertyThumbOffset() - Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseX()", - "<=", - "Object.Behavior::PropertyThumbOffset() + Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseY()", - ">=", - "- Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseY()", - "<=", - "Object.Behavior::PropertyHaloRadius()" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyIsHovered" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyTargetHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyHaloRadius()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Shrink halo to zero when not hovered", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "ResourceBar::SolidResourceBar::PropertyIsHovered" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyTargetHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" - ] - } - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "Object.Behavior::PropertyTargetHaloRadius()" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Redraw slider only when halo is not at final size", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "abs(Object.Behavior::PropertyCurrentHaloRadius() - Object.Behavior::PropertyTargetHaloRadius())", - "<", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyTargetHaloRadius()" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "Object.Behavior::PropertyTargetHaloRadius()" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "lerp(Object.Behavior::PropertyCurrentHaloRadius(), Object.Behavior::PropertyTargetHaloRadius(), Object.Behavior::PropertyHaloGrowSpeed())" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "", - "fullName": "", - "functionType": "Action", - "group": "", - "name": "doStepPostEvents", - "private": false, - "sentence": "", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Slider drawing", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior" - ] - }, - { - "type": { - "value": "Visible" - }, - "parameters": [ - "Object" - ] - }, - { - "type": { - "value": "LayerVisible" - }, - "parameters": [ - "", - "Object.Layer()" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::Drawer::ClearShapes" - }, - "parameters": [ - "Object" - ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Inactive Bar", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set inactive Bar parameters (by default, use thumb color)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyInactiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyInactiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyInactiveBarColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyInactiveBarOpacity()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::OutlineOpacity" - }, - "parameters": [ - "Object", - "=", - "0" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw inactive Bar", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset()", - "-Object.Behavior::PropertyBarThickness() / 2", - "Object.Behavior::PropertyBarLength()", - "Object.Behavior::PropertyBarThickness() / 2" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw half circle at end of Bar (inactive side)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyRoundedBar" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Arc" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyBarLength()", - "0", - "Object.Behavior::PropertyBarThickness() / 2", - "270", - "90", - "", - "yes" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Active Bar", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set active Bar parameters (by default, use thumb color)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyActiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyActiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyActiveBarColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyActiveBarOpacity()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw active Bar (2 pixels bigger than property) ", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "0", - "-(Object.Behavior::PropertyBarThickness() / 2 + 1)", - "Object.Behavior::PropertyThumbOffset()", - "Object.Behavior::PropertyBarThickness() / 2 + 1" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw half circle at end of Bar (active side)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyRoundedBar" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Arc" - }, - "parameters": [ - "Object", - "0", - "0", - "1 + Object.Behavior::PropertyBarThickness() / 2", - "90", - "270", - "", - "yes" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Halo", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Prepare halo", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbColor()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::OutlineOpacity" - }, - "parameters": [ - "Object", - "=", - "0" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw halo (it will grow or shrink as needed)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "ResourceBar::SolidResourceBar::PropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyHaloOpacityHover()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::Circle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset()", - "0", - "Object.Behavior::PropertyCurrentHaloRadius()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Use a more opaque halo while being dragged (it will grow or shrink as needed)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyHaloOpacityClick()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::Circle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset()", - "0", - "Object.Behavior::PropertyCurrentHaloRadius()" - ] - } - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Thumb", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Prepare thumb settings", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbColor()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyThumbOpacity()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw Circle thumb", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyThumbShape" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"circle\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Circle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset()", - "0", - "ceil(max(Object.Behavior::PropertyThumbWidth(),Object.Behavior::PropertyThumbHeight())/2)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw Rectangle thumb", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyThumbShape" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"rectangle\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset() - (Object.Behavior::PropertyThumbWidth() / 2)", - "-Object.Behavior::PropertyThumbHeight() / 2", - "Object.Behavior::PropertyThumbOffset() + (Object.Behavior::PropertyThumbWidth() / 2)", - "Object.Behavior::PropertyThumbHeight() / 2" - ] - } - ] - } - ], - "parameters": [] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the slider is being dragged.", - "fullName": "Being dragged", - "functionType": "Condition", - "group": "Slider", - "name": "IsBeingDragged", - "private": false, - "sentence": "_PARAM0_ is being dragged", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the slider interations are enabled.", - "fullName": "Interactions enabled", - "functionType": "Condition", - "group": "Slider", - "name": "IsEnabled", - "private": false, - "sentence": "Interactions of _PARAM0_ are enabled", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyEnabled" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Enable or disable the slider. Users cannot interact while it is disabled.", - "fullName": "Enable interactions", - "functionType": "Action", - "group": "Slider", - "name": "SetEnabled", - "private": false, - "sentence": "Enable interactions of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"Enable\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyEnabled" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Stop dragging (so the slider won't be dragging when it gets enabled)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Reset halo size (so halo won't appear when slider gets enabled)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyTargetHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"Enable\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyEnabled" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Enable", - "longDescription": "", - "name": "Enable", - "optional": false, - "supplementaryInformation": "", - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "The value of the slider (based on position of the thumb).", - "fullName": "Slider value", - "functionType": "Expression", - "group": "Slider", - "name": "Value", - "private": false, - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyValue()" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change the value of a slider (this will move the thumb to the correct position).", - "fullName": "Slider value", - "functionType": "Action", - "group": "Slider", - "name": "SetValue", - "private": false, - "sentence": "Change the value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - "<=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "round(GetArgumentAsNumber(\"Value\") / Object.Behavior::PropertyTickSpacing()) * Object.Behavior::PropertyTickSpacing()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyValueMin()" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMin()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "Object.Behavior::PropertyValueMax()" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMax()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set the proper offset (it moves the slider)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyThumbOffset" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyBarLength() * (Object.Behavior::PropertyValue() - Object.Behavior::PropertyValueMin()) / (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin())" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Slider value", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "The minimum value of a slider.", - "fullName": "Slider minimum value", - "functionType": "Expression", - "group": "Slider value configuration", - "name": "ValueMin", - "private": false, - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyValueMin()" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change the minimum value of a slider.", - "fullName": "Slider minimum value", - "functionType": "Action", - "group": "Slider value configuration", - "name": "SetValueMin", - "private": false, - "sentence": "Change the minimum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyValueMin" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"ValueMin\")" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Minimum value", - "longDescription": "", - "name": "ValueMin", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "The maximum value of a slider.", - "fullName": "Slider maximum value", - "functionType": "Expression", - "group": "Slider value configuration", - "name": "ValueMax", - "private": false, - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyValueMax()" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Thickness of Bar.", - "fullName": "Slider Bar thickness", - "functionType": "Expression", - "group": "Slider Bar configuration", - "name": "BarThickness", - "private": false, - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyBarThickness()" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Length of Bar.", - "fullName": "Slider Bar length", - "functionType": "Expression", - "group": "Slider Bar configuration", - "name": "BarLength", - "private": false, - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyBarLength()" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Height of thumb.", - "fullName": "Slider thumb height", - "functionType": "Expression", - "group": "Slider thumb configuration", - "name": "ThumbHeight", - "private": false, - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyThumbHeight()" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change the maximum value of a slider.", - "fullName": "Slider maximum value", - "functionType": "Action", - "group": "Slider value configuration", - "name": "SetValueMax", - "private": false, - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyValueMax" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"ValueMax\")" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Maximum value", - "longDescription": "", - "name": "ValueMax", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "The tick spacing of a slider.", - "fullName": "Tick spacing", - "functionType": "Expression", - "group": "Slider value configuration", - "name": "TickSpacing", - "private": false, - "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyTickSpacing()" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Tick spacing", - "longDescription": "", - "name": "TickSpacing", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the tick spacing of a slider.", - "fullName": "Tick spacing", - "functionType": "Action", - "group": "Slider value configuration", - "name": "SetTickSpacing", - "private": false, - "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"TickSpacing\")" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Tick spacing", - "longDescription": "", - "name": "TickSpacing", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change length of Bar.", - "fullName": "Bar length", - "functionType": "Action", - "group": "Slider Bar configuration", - "name": "SetBarLength", - "private": false, - "sentence": "Change Bar length of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyBarLength" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move thumb to correct place (based on new Bar size)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyValue()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Bar width", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change thickness of Bar.", - "fullName": "Bar thickness", - "functionType": "Action", - "group": "Slider Bar configuration", - "name": "SetBarThickness", - "private": false, - "sentence": "Change Bar thickness of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyBarThickness" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make sure thumb width is not smaller than Bar height + 2 pixels (to prevent Bar ends from showing)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyBarThickness() + 2" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyBarThickness() + 2", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyThumbHeight" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyBarThickness() + 2" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetThumbHeight" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyBarThickness() + 2", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Bar thickness", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change width of thumb.", - "fullName": "Thumb width", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetThumbWidth", - "private": false, - "sentence": "Change thumb width of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Thumb cannot be less than Bar thickness (plus 2 pixels)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "max(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyBarThickness() + 2)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Thumb width", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change height of thumb.", - "fullName": "Thumb height", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetThumbHeight", - "private": false, - "sentence": "Change thumb height of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Thumb cannot be less than Bar thickness (plus 2 pixels)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyThumbHeight" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "max(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyBarThickness() + 2)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Thumb height", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change radius of the halo around the thumb. This size is also used to detect interaction with the slider.", - "fullName": "Halo radius", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetHaloRadius", - "private": false, - "sentence": "Change halo radius of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Halo radius", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the halo opacity when the thumb is hovered.", - "fullName": "Halo opacity (hover)", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetHaloOpacityHover", - "private": false, - "sentence": "Change the halo opacity when hovered of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyHaloOpacityHover" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Halo opacity (hover)", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change opacity of halo when pressed.", - "fullName": "Halo opacity (pressed)", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetHaloOpacityPressed", - "private": false, - "sentence": "Change halo opacity when pressed of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyHaloOpacityClick" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Halo opacity (pressed)", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change shape of thumb (circle or rectangle).", - "fullName": "Thumb shape", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetThumbShape", - "private": false, - "sentence": "Change shape of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyThumbShape" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Shape\")" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make sure thumb width is not smaller than Bar height (to prevent Bar ends from showing)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyThumbShape" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"rectangle\"" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::PropertyThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyBarThickness()" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyBarThickness()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "New thumb shape", - "longDescription": "", - "name": "Shape", - "optional": false, - "supplementaryInformation": "[\"circle\",\"rectangle\"]", - "type": "stringWithSelector" - } - ], - "objectGroups": [] - }, - { - "description": "Make Bar use rounded ends.", - "fullName": "Rounded Bar ends", - "functionType": "Action", - "group": "Slider Bar configuration", - "name": "SetRoundedBar", - "private": false, - "sentence": "Draw _PARAM0_ with a rounded Bar: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "GetArgumentAsNumber(\"Value\")", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyRoundedBar" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "GetArgumentAsNumber(\"Value\")", - "=", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyRoundedBar" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Rounded Bar", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Change opacity of thumb.", - "fullName": "Thumb opacity", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetThumbOpacity", - "private": false, - "sentence": "Change thumb opacity of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyThumbOpacity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Thumb opacity", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change opacity of inactive Bar.", - "fullName": "Inactive Bar opacity", - "functionType": "Action", - "group": "Slider Bar configuration", - "name": "SetInactiveBarOpacity", - "private": false, - "sentence": "Change inactive Bar opacity of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyInactiveBarOpacity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Inactive Bar opacity", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change opacity of active Bar.", - "fullName": "Active Bar opacity", - "functionType": "Action", - "group": "Slider Bar configuration", - "name": "SetActiveBarOpacity", - "private": false, - "sentence": "Change active Bar opacity of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyActiveBarOpacity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Active Bar opacity", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the color of the Bar that is LEFT of the thumb.", - "fullName": "Active Bar color ", - "functionType": "Action", - "group": "Slider Bar configuration", - "name": "SetActiveBarColor", - "private": false, - "sentence": "Change active Bar color of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyActiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Color\")" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Active Bar color", - "longDescription": "", - "name": "Color", - "optional": false, - "supplementaryInformation": "", - "type": "color" - } - ], - "objectGroups": [] - }, - { - "description": "Change the color of the Bar that is RIGHT of the thumb.", - "fullName": "Inactive Bar color", - "functionType": "Action", - "group": "Slider Bar configuration", - "name": "SetInactiveBarColor", - "private": false, - "sentence": "Change inactive Bar color of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyInactiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Color\")" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Inactive Bar color", - "longDescription": "", - "name": "Color", - "optional": false, - "supplementaryInformation": "", - "type": "color" - } - ], - "objectGroups": [] - }, - { - "description": "Change the thumb color to a specific value.", - "fullName": "Thumb color", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetThumbColor", - "private": false, - "sentence": "Change thumb color of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyThumbColor" - }, - "parameters": [ - "Object", - "Behavior", - "GetArgumentAsString(\"Color\")" - ] - }, - { - "type": { - "value": "ResourceBar::SolidResourceBar::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Thumb color", - "longDescription": "", - "name": "Color", - "optional": false, - "supplementaryInformation": "", - "type": "color" - } - ], - "objectGroups": [] - }, - { - "description": "Update the hitbox.", - "fullName": "Update hitbox", - "functionType": "Action", - "group": "Private", - "name": "UpdateHitbox", - "private": true, - "sentence": "Update the hitbox of _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::SetRotationCenter" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyBarLength() / 2", - "Object.Behavior::PropertyBarThickness() / 2" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::SetRectangularCollisionMask" - }, - "parameters": [ - "Object", - "-Object.Behavior::PropertyThumbWidth() / 2", - "-Object.Behavior::PropertyThumbHeight() / 2", - "Object.Behavior::PropertyBarLength() + Object.Behavior::PropertyThumbWidth() / 2", - "Object.Behavior::PropertyThumbHeight() / 2" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::SolidResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "0", - "type": "Number", - "label": "Minimum value", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "ValueMin" - }, - { - "value": "1", - "type": "Number", - "label": "Maximum value", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "ValueMax" - }, - { - "value": "0", - "type": "Number", - "label": "Tick spacing", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "TickSpacing" - }, - { - "value": "circle", - "type": "Choice", - "label": "Thumb shape", - "description": "", - "group": "Thumb", - "extraInformation": [ - "circle", - "rectangle" - ], - "hidden": false, - "name": "ThumbShape" - }, - { - "value": "20", - "type": "Number", - "label": "Thumb width", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "ThumbWidth" - }, - { - "value": "20", - "type": "Number", - "label": "Thumb height", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "ThumbHeight" - }, - { - "value": " 24;119;211", - "type": "Color", - "label": "Thumb Color", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "ThumbColor" - }, - { - "value": "255", - "type": "Number", - "label": "Thumb opacity", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "ThumbOpacity" - }, - { - "value": "200", - "type": "Number", - "label": "Bar length", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "BarLength" - }, - { - "value": "4", - "type": "Number", - "label": "Bar thickness", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "BarThickness" - }, - { - "value": "", - "type": "String", - "label": "Inactive Bar color (thumb color by default)", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "InactiveBarColor" - }, - { - "value": "96", - "type": "Number", - "label": "Inactive Bar opacity", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "InactiveBarOpacity" - }, - { - "value": " ", - "type": "String", - "label": "Active Bar color (thumb color by default)", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "ActiveBarColor" - }, - { - "value": "255", - "type": "Number", - "label": "Active Bar opacity", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "ActiveBarOpacity" - }, - { - "value": "24", - "type": "Number", - "label": "Halo size (hover)", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "HaloRadius" - }, - { - "value": "32", - "type": "Number", - "label": "Halo opacity (hover)", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "HaloOpacityHover" - }, - { - "value": "64", - "type": "Number", - "label": "Halo opacity (pressed)", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "HaloOpacityClick" - }, - { - "value": "true", - "type": "Boolean", - "label": "Rounded Bar ends", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "RoundedBar" - }, - { - "value": "true", - "type": "Boolean", - "label": "Enable interactions", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "Enabled" - }, - { - "value": "", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "IsBeingDragged" - }, - { - "value": "0", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "Value" - }, - { - "value": "0", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "ThumbOffset" - }, - { - "value": "true", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "NeedRedraw" - }, - { - "value": "", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "IsHovered" - }, - { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "MouseX" - }, - { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "MouseY" - }, - { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "CurrentHaloRadius" - }, - { - "value": "0.2", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "HaloGrowSpeed" - }, - { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "TargetHaloRadius" - } - ] - }, - { - "description": "Displays a line of objects that represent a resource in the game (hearts, lives, ammo, etc). \nUse the same image used for resource bar and unit objects.", - "fullName": "Unit resource bar", - "name": "UnitResourceBar", - "objectType": "", - "eventsFunctions": [ - { - "description": "Draw a unit resource bar.", - "fullName": "Draw a unit resource bar", - "functionType": "Action", - "group": "", - "name": "DrawUnitBar", - "private": false, - "sentence": "Draw unit bar _PARAM0_ with _PARAM2_ objects", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Create unit objects", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "infiniteLoopWarning": true, - "type": "BuiltinCommonInstructions::While", - "whileConditions": [ - { - "type": { - "value": "ResourceBar::UnitResourceBar::PropertyNextUnitToCreate" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyCurrentQuantity()" - ] - } - ], - "conditions": [], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::UnitResourceBar::SetPropertyNextUnitToCreate" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "1" - ] - }, - { - "type": { - "value": "Create" - }, - "parameters": [ - "", - "UnitObject", - "Object.X() + Object.Width() * Object.Behavior::PropertyNextUnitToCreate()", - "Object.Y()", - "Object.Layer()" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "UnitObject", - "__ResourceBar.UnitID", - "=", - "Object.Behavior::PropertyNextUnitToCreate()" - ] - }, - { - "type": { - "value": "LinkedObjects::LinkObjects" - }, - "parameters": [ - "", - "Object", - "UnitObject" - ] - } - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Remove excess units", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Delete all units higher than max unit value", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "Object.Behavior::PropertyMaxQuantity()", - "!=", - "0" - ] - }, - { - "type": { - "value": "LinkedObjects::PickObjectsLinkedTo" - }, - "parameters": [ - "", - "UnitObject", - "Object", - "" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "UnitObject.Variable(__ResourceBar.UnitID)", - ">", - "Object.Behavior::PropertyCurrentQuantity()" - ] - } - ], - "actions": [ - { - "type": { - "value": "Delete" - }, - "parameters": [ - "UnitObject", - "" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update non-empty units", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "LinkedObjects::PickObjectsLinkedTo" - }, - "parameters": [ - "", - "UnitObject", - "Object", - "" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "UnitObject.Variable(__ResourceBar.UnitID)", - "<=", - "Object.Behavior::PropertyCurrentQuantity()" - ] - } - ], - "actions": [ - { - "type": { - "value": "Montre" - }, - "parameters": [ - "UnitObject", - "" - ] - }, - { - "type": { - "value": "ChangeColor" - }, - "parameters": [ - "UnitObject", - "\"255;255;255\"" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update empty units", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "LinkedObjects::PickObjectsLinkedTo" - }, - "parameters": [ - "", - "UnitObject", - "Object", - "" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "UnitObject.Variable(__ResourceBar.UnitID)", - ">", - "Object.Behavior::PropertyCurrentQuantity()" - ] - } - ], - "actions": [], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Color tint", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Only apply color if it has change from default value", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareStrings" - }, - "parameters": [ - "Object.Behavior::PropertyEmptyColorTint()", - "!=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "ChangeColor" - }, - "parameters": [ - "UnitObject", - "Object.Behavior::PropertyEmptyColorTint()" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Hide", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::UnitResourceBar::PropertyHideEmptyUnits" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "Cache" - }, - "parameters": [ - "UnitObject" - ] - } - ] - } - ], - "parameters": [] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Update counter", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "LinkedObjects::PickObjectsLinkedTo" - }, - "parameters": [ - "", - "UnitObject", - "Object", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::UnitResourceBar::SetPropertyNextUnitToCreate" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "PickedInstancesCount(UnitObject)+1" - ] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::UnitResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Object used to display each unit", - "longDescription": "", - "name": "UnitObject", - "optional": false, - "supplementaryInformation": "Sprite", - "type": "objectList" - } - ], - "objectGroups": [] - }, - { - "description": "Apply color tint to empty units. Empty units exist between the current and maximum value.", - "fullName": "Color tint of empty units", - "functionType": "Action", - "group": "", - "name": "SetEmptyUnitColor", - "private": false, - "sentence": "Apply color tint _PARAM2_ to empty units of _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::UnitResourceBar::SetPropertyEmptyColorTint" - }, - "parameters": [ - "Object", - "Behavior", - "GetArgumentAsString(\"ColorTint\")" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::UnitResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Color tint", - "longDescription": "Use \"white\" to remove all color tint", - "name": "ColorTint", - "optional": false, - "supplementaryInformation": "", - "type": "color" - } - ], - "objectGroups": [] - }, - { - "description": "Hide empty units. Empty units exist between the current and maximum value.", - "fullName": "Hide (or show) empty units", - "functionType": "Action", - "group": "", - "name": "SetHideEmptyUnits", - "private": false, - "sentence": "Hide empty units of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"HideEmptyUnits\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::UnitResourceBar::SetPropertyHideEmptyUnits" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"HideEmptyUnits\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::UnitResourceBar::SetPropertyHideEmptyUnits" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::UnitResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Hide empty units", - "longDescription": "", - "name": "HideEmptyUnits", - "optional": false, - "supplementaryInformation": "", - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Change maximum units that can be displayed.", - "fullName": "Maximum units", - "functionType": "Action", - "group": "", - "name": "SetMaxUnits", - "private": false, - "sentence": "Change maximum units of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::UnitResourceBar::SetPropertyMaxQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::UnitResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Maximum units", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "Sprite", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the current quantity of units.", - "fullName": "Unit quantity", - "functionType": "Action", - "group": "", - "name": "SetCurrentUnits", - "private": false, - "sentence": "Change the unit quantity of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::UnitResourceBar::SetPropertyCurrentQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::UnitResourceBar", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Current units", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "Sprite", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "", - "fullName": "", - "functionType": "Action", - "group": "", - "name": "onCreated", - "private": false, - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::UnitResourceBar::SetPropertyCurrentQuantity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyStartingUnits()" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::UnitResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "0", - "type": "Number", - "label": "Starting quantity", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "StartingUnits" - }, - { - "value": "", - "type": "Number", - "label": "Quantity", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "CurrentQuantity" - }, - { - "value": "0", - "type": "Number", - "label": "Maximum quantity (Use \"0\" for unlimited)", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "MaxQuantity" - }, - { - "value": "0", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "NextUnitToCreate" - }, - { - "value": "", - "type": "Color", - "label": "Empty color tint", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "EmptyColorTint" - }, - { - "value": "true", - "type": "Boolean", - "label": "Hide empty units", - "description": "Empty units exist between the current and maximum value.", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "HideEmptyUnits" - } - ] - }, - { - "description": "Draw a resource bar that represents health, shield, or any value.", - "fullName": "Draw resource bar", - "name": "DrawResourceBar117", - "objectType": "PrimitiveDrawing::Drawer", - "eventsFunctions": [ - { - "description": "", - "fullName": "", - "functionType": "Action", - "group": "", - "name": "onCreated", - "private": false, - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make sure object doesn't get re-drawn every frame", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::ClearBetweenFrames" - }, - "parameters": [ - "Object", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Use correct min value (instead of always starting at 0)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMin()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "", - "fullName": "", - "functionType": "Action", - "group": "", - "name": "doStepPostEvents", - "private": false, - "sentence": "", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Slider drawing", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::PropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior" - ] - }, - { - "type": { - "value": "Visible" - }, - "parameters": [ - "Object" - ] - }, - { - "type": { - "value": "LayerVisible" - }, - "parameters": [ - "", - "Object.Layer()" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::Drawer::ClearShapes" - }, - "parameters": [ - "Object" - ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Inactive bar", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set inactive Bar parameters (by default, use the active bar color)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DrawResourceBar::DrawResourceBar::PropertyInactiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyActiveBarColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DrawResourceBar::DrawResourceBar::PropertyInactiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyInactiveBarColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyInactiveBarOpacity()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::OutlineOpacity" - }, - "parameters": [ - "Object", - "=", - "0" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw inactive Bar", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset()", - "-Object.Behavior::PropertyBarThickness() / 2", - "Object.Behavior::PropertyBarLength()", - "Object.Behavior::PropertyBarThickness() / 2" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw half circle at end of Bar (inactive side)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DrawResourceBar::DrawResourceBar::PropertyRoundedBar" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Arc" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyBarLength()", - "0", - "Object.Behavior::PropertyBarThickness() / 2", - "270", - "90", - "", - "yes" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Active bar", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set active Bar parameters", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DrawResourceBar::DrawResourceBar::PropertyActiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyActiveBarColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyActiveBarOpacity()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw active bar", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "0", - "-(Object.Behavior::PropertyBarThickness() / 2)", - "Object.Behavior::PropertyThumbOffset()", - "Object.Behavior::PropertyBarThickness() / 2" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw half circle at end of bar (active side)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DrawResourceBar::DrawResourceBar::PropertyRoundedBar" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Arc" - }, - "parameters": [ - "Object", - "0", - "0", - "Object.Behavior::PropertyBarThickness() / 2", - "90", - "270", - "", - "yes" - ] - } - ] - } - ], - "parameters": [] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "The value of the resource bar.", - "fullName": "Value", - "functionType": "Expression", - "group": "Bar", - "name": "Value", - "private": false, - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyValue()" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change the value of the resource bar.", - "fullName": "Value", - "functionType": "Action", - "group": "Resource Bar", - "name": "SetValue", - "private": false, - "sentence": "Change the value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::PropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - "<=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::PropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "round(GetArgumentAsNumber(\"Value\") / Object.Behavior::PropertyTickSpacing()) * Object.Behavior::PropertyTickSpacing()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::PropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyValueMin()" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMin()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::PropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "Object.Behavior::PropertyValueMax()" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMax()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set the proper offset", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyThumbOffset" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyBarLength() * (Object.Behavior::PropertyValue() - Object.Behavior::PropertyValueMin()) / (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin())" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Resource bar value", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "The minimum value of the resource bar.", - "fullName": "Minimum value", - "functionType": "Expression", - "group": "Value configuration", - "name": "ValueMin", - "private": false, - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyValueMin()" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change the minimum value of the resource bar.", - "fullName": "Minimum value", - "functionType": "Action", - "group": "Value configuration", - "name": "SetValueMin", - "private": false, - "sentence": "Change the minimum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyValueMin" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"ValueMin\")" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Minimum value", - "longDescription": "", - "name": "ValueMin", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "The maximum value of the resource bar.", - "fullName": "Maximum value", - "functionType": "Expression", - "group": "Value configuration", - "name": "ValueMax", - "private": false, - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyValueMax()" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Thickness of the resource bar.", - "fullName": "Bar thickness", - "functionType": "Expression", - "group": "Bar configuration", - "name": "BarThickness", - "private": false, - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyBarThickness()" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Length of the resource bar.", - "fullName": "Bar length", - "functionType": "Expression", - "group": "Bar configuration", - "name": "BarLength", - "private": false, - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyBarLength()" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change the maximum value of a resource bar.", - "fullName": "Maximum value", - "functionType": "Action", - "group": "Bar value configuration", - "name": "SetValueMax", - "private": false, - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyValueMax" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"ValueMax\")" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Maximum value", - "longDescription": "", - "name": "ValueMax", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "The tick spacing of a bar.", - "fullName": "Tick spacing", - "functionType": "Expression", - "group": "Value configuration", - "name": "TickSpacing", - "private": false, - "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyTickSpacing()" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Tick spacing", - "longDescription": "", - "name": "TickSpacing", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the tick spacing of a resource bar.", - "fullName": "Tick spacing", - "functionType": "Action", - "group": "Value configuration", - "name": "SetTickSpacing", - "private": false, - "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"TickSpacing\")" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Tick spacing", - "longDescription": "", - "name": "TickSpacing", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change length of a resource bar.", - "fullName": "Bar length", - "functionType": "Action", - "group": "Bar configuration", - "name": "SetBarLength", - "private": false, - "sentence": "Change bar length of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyBarLength" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move thumb to correct place (based on new Bar size)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyValue()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Bar width", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change thickness of a resource bar", - "fullName": "Bar thickness", - "functionType": "Action", - "group": "Bar configuration", - "name": "SetBarThickness", - "private": false, - "sentence": "Change the bar thickness of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyBarThickness" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make sure thumb width is not smaller than Bar height + 2 pixels (to prevent Bar ends from showing)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::PropertyThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyBarThickness() + 2" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyBarThickness() + 2", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::PropertyThumbHeight" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyBarThickness() + 2" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetThumbHeight" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyBarThickness() + 2", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Bar thickness", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Make bar use rounded ends.", - "fullName": "Rounded bar ends", - "functionType": "Action", - "group": "Bar configuration", - "name": "SetRoundedBar", - "private": false, - "sentence": "Draw _PARAM0_ with a rounded bar: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "GetArgumentAsNumber(\"Value\")", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyRoundedBar" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "GetArgumentAsNumber(\"Value\")", - "=", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyRoundedBar" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Rounded bar", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Change opacity of inactive bar.", - "fullName": "Inactive bar opacity", - "functionType": "Action", - "group": "Bar configuration", - "name": "SetInactiveBarOpacity", - "private": false, - "sentence": "Change inactive bar opacity of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyInactiveBarOpacity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Inactive bar opacity", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change opacity of active bar.", - "fullName": "Active bar opacity", - "functionType": "Action", - "group": "Bar configuration", - "name": "SetActiveBarOpacity", - "private": false, - "sentence": "Change active bar opacity of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyActiveBarOpacity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Active bar opacity", - "longDescription": "", - "name": "Value", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the color of the left side of the bar.", - "fullName": "Active bar color ", - "functionType": "Action", - "group": "Bar configuration", - "name": "SetActiveBarColor", - "private": false, - "sentence": "Change active bar color of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyActiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Color\")" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Active bar color", - "longDescription": "", - "name": "Color", - "optional": false, - "supplementaryInformation": "", - "type": "color" - } - ], - "objectGroups": [] - }, - { - "description": "Change the color of the right side of the resource bar.", - "fullName": "Inactive bar color", - "functionType": "Action", - "group": "Bar configuration", - "name": "SetInactiveBarColor", - "private": false, - "sentence": "Change inactive bar color of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyInactiveBarColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Color\")" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Inactive bar color", - "longDescription": "", - "name": "Color", - "optional": false, - "supplementaryInformation": "", - "type": "color" - } - ], - "objectGroups": [] - }, - { - "description": "Update the hitbox.", - "fullName": "Update hitbox", - "functionType": "Action", - "group": "Private", - "name": "UpdateHitbox", - "private": true, - "sentence": "Update the hitbox of _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::SetRotationCenter" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyBarLength() / 2", - "Object.Behavior::PropertyBarThickness() / 2" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::SetRectangularCollisionMask" - }, - "parameters": [ - "Object", - "0", - "-Object.Behavior::PropertyBarThickness() / 2", - "Object.Behavior::PropertyBarLength()", - "Object.Behavior::PropertyBarThickness() / 2" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Draw health bar.", - "fullName": "Draw health bar", - "functionType": "Action", - "group": "", - "name": "DrawHealthBar", - "private": false, - "sentence": "Draw health bar with _PARAM0_ based on health of _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set values", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetValue" - }, - "parameters": [ - "Object", - "DraggableSliderBehavior", - "Tween::Ease(\"easeOutCirc\", Object.Behavior::Value(), ObjectWithHealth.HealthBehavior::Health(), 0.05)", - "" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetValueMax" - }, - "parameters": [ - "Object", - "DraggableSliderBehavior", - "ObjectWithHealth.HealthBehavior::MaxHealth()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Object with health", - "longDescription": "", - "name": "ObjectWithHealth", - "optional": false, - "supplementaryInformation": "", - "type": "objectList" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Health behavior", - "longDescription": "", - "name": "HealthBehavior", - "optional": false, - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Draw shield bar.", - "fullName": "Draw shield bar", - "functionType": "Action", - "group": "", - "name": "DrawShieldBar", - "private": false, - "sentence": "Draw shield bar with _PARAM0_ based on shield of _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set values", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetValue" - }, - "parameters": [ - "Object", - "DraggableSliderBehavior", - "Tween::Ease(\"easeOutCirc\", Object.Behavior::Value(), ObjectWithShield.ShieldBehavior::ShieldPoints(), 0.05)", - "" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetValueMax" - }, - "parameters": [ - "Object", - "DraggableSliderBehavior", - "ObjectWithShield.ShieldBehavior::MaxShield()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Object with shield", - "longDescription": "", - "name": "ObjectWithShield", - "optional": false, - "supplementaryInformation": "", - "type": "objectList" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Shield behavior", - "longDescription": "", - "name": "ShieldBehavior", - "optional": false, - "supplementaryInformation": "Health::Shield", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Draw resource bar.", - "fullName": "Draw resource bar", - "functionType": "Action", - "group": "", - "name": "DrawResourceBar", - "private": false, - "sentence": "Draw resource bar with _PARAM0_ with current value _PARAM2_ and max value _PARAM3_", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set values", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetValue" - }, - "parameters": [ - "Object", - "DraggableSliderBehavior", - "Tween::Ease(\"easeOutCirc\", Object.Behavior::Value(), GetArgumentAsNumber(\"CurrentValue\"), 0.05)", - "" - ] - }, - { - "type": { - "value": "ResourceBar::DrawResourceBar117::SetValueMax" - }, - "parameters": [ - "Object", - "DraggableSliderBehavior", - "GetArgumentAsNumber(\"MaxValue\")", - "" - ] - } - ] - } - ], - "parameters": [ - { - "codeOnly": false, - "defaultValue": "", - "description": "Object", - "longDescription": "", - "name": "Object", - "optional": false, - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Behavior", - "longDescription": "", - "name": "Behavior", - "optional": false, - "supplementaryInformation": "ResourceBar::DrawResourceBar117", - "type": "behavior" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Current value", - "longDescription": "", - "name": "CurrentValue", - "optional": false, - "supplementaryInformation": "", - "type": "expression" - }, - { - "codeOnly": false, - "defaultValue": "", - "description": "Max value", - "longDescription": "", - "name": "MaxValue", - "optional": false, - "supplementaryInformation": "Health::Health", - "type": "expression" - } - ], - "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "0", - "type": "Number", - "label": "Minimum value", - "description": "", - "group": "Value", - "extraInformation": [], - "hidden": false, - "name": "ValueMin" - }, - { - "value": "1", - "type": "Number", - "label": "Maximum value", - "description": "", - "group": "Value", - "extraInformation": [], - "hidden": false, - "name": "ValueMax" - }, - { - "value": "0", - "type": "Number", - "label": "Tick spacing", - "description": "", - "group": "Value", - "extraInformation": [], - "hidden": false, - "name": "TickSpacing" - }, - { - "value": "200", - "type": "Number", - "label": "Bar length", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "BarLength" - }, - { - "value": "4", - "type": "Number", - "label": "Bar thickness", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "BarThickness" - }, - { - "value": "11;255;0", - "type": "Color", - "label": "Inactive bar color", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "InactiveBarColor" - }, - { - "value": "96", - "type": "Number", - "label": "Inactive bar opacity", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "InactiveBarOpacity" - }, - { - "value": "11;255;0", - "type": "Color", - "label": "Active bar color", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "ActiveBarColor" - }, - { - "value": "255", - "type": "Number", - "label": "Active bar opacity", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "ActiveBarOpacity" - }, - { - "value": "false", - "type": "Boolean", - "label": "Rounded bar ends", - "description": "", - "group": "Bar", - "extraInformation": [], - "hidden": false, - "name": "RoundedBar" - }, - { - "value": "0", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "Value" - }, - { - "value": "0", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "ThumbOffset" - }, - { - "value": "true", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "NeedRedraw" - }, - { - "value": "0", - "type": "Number", - "label": "Time to complete moving the bar when the value is changed (seconds)", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "ChangeDuration" - } - ] - } - ], - "eventsBasedObjects": [] -} \ No newline at end of file diff --git a/examples/resource-bar/assets/Fly_1.png b/examples/resource-bar/assets/Fly_1.png deleted file mode 100644 index 85870bc9dbb5a5372d6c50128620e4f4a1d5954a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3375 zcmV+~4bbw5P)p z3=H@{5Uzr6$w%hRZY5Se6R&BeSIxTeT4l?t&Y`X~F1wbMsTp^f*bN_nAo9QeJq`vk z=ga^zqvihA`YmRdGyCy<=j^lho`F`an3$NDn3$NDn3$NDn3$NDn3$NDn3$NDn3$ND zn3$NDn3$NDn3$NDm>v}ouICeGen;tM?)OX&cbNXjnEQSgfQ-K{++j$2=Gem#8l{cE zYj4m1>pf3JeCs`b9vLF=UT2|lnd}$l1bvR0@l&X)|?|;?--8j z{l_v-TkxM&$%Teax*|gm5`&~7E0FcbHe{!XcaU7uYpJGVgOZC39hVbmHT;EP;ToD4+;AVIF)scrdHMKvwyBA2L$(I6?PtEoCoGGV?Vqwm2K?Opb zHJxpf@N6X31=+tXl3&k2GxUFe^xcocd6cD12ijlSZ&Uxz+QHlTVquQALxuNWwRxuD zqN7kd+_?ek5NJLF?M<~iH>kgWhaFA*%WL7)XAR@U!t}Ls<@Gs@tV9A*3Qyf@gOnQ- zj@&`O@q{*ovr;b1xCW)|r~NSX=d=So^c5Z!3QsxV0iQXrF_iOk7)m%)5`vSHC(s}R z0*=DNYQoL26x$wb8b;4M*tgGUUX~_7YaHAtBT4xuFARJk=bV6PW*Gdyk;{fvg=$y* zZ_LZPE^9yf{Gx+BTVr|FRb&|OAi|_P6{f3@aYMkiJY!eF5?}iD0r@q+VwkvwX^jUS zadhM2_n-JtA&sb&aYMn@$eYYCtMTbJv07L7rK5v9LUXciO;luY0IXDgS zwjGAwZdTr_XZOxxi|-4Kd%4^}n=G0Z?eJp(QTALAPkE=fG%{o3)qoz_Y9%)Ygz%D$ zhpMV-xL?)PxAAH{1*>!NV9bbY@KaARy=SaN{M4~9Vf12n2C&(J$mMddR^vu4#k!vpL@kZ29kF10S={@_F4@VO z9O}PKKeSHDH}2amu~(R}n+i)+WFm;Mb9=E>0c2)oiiQ~y5@J<3RaLhkKpls5Pr8rT zdjy5fudw4uzJ&U2mv14=$TtqT+7^CzZJt8I1z$hi?ca@>+=$fVT&qIZv}u!Qm}AF| zwW^#G$If8AQ$!h&m1mDNCiPcK{kFTXqJj4KbR}&1Yvn5PJP6UlHyQ79H5NnA>-C~x zW@Kbo73QLO+p*rMf_SSF?`S`?`35`nb)ZAPD`ffm|v0YrlTmFu(fhD~s>X{o6;NCNBu0aZ7;M&BeCblcoNJ zQ$HWLk_!#a*qG;9`e{qd+Jl!zE!}g)$8%PVnk0Y_2lnz7!`QNAi`gK9gM%%e45dH) z0^L1lV_jN7LZ_}T50BeWK5ggGpIY+i2lb8m_t1S!6DKikuyMnYT`k#Yh|bx2Ma?Cl zY32#^Nry`puZjk8z&RbnS5Aghssh(RFWACQyC zUOe-2ycKDO)RLJXL|Cuo@XeY33WifzSqXuGfyN*e3I&vwmI@ww{aOViPTg3q{8{Fx z9W-gfR@y#OJAV)e&S2{2YGc2#|I~*+rE~>fI?-=sC*KX(2kC;dI5|Fd+0iq*%}%22 znoE)pZxOwxI*^n+>x&(1?ae|W`dZivdWPkyI%dosu zQKBR>D_0TS2XB(3RlB&vNjnBE@y9mHY5QqEXn%}<4S@Z7WdEL|L^`}xiTl{V5^nO_ zM@f9yhd9akJ4pl#6jqRAh`_5tBbkGw2@>eN0G4I%2mbi?P<2au&y@yv{#+Ss-f#ql z^9cn* zP$=PI;W)103ec=QXxc_J?`5JZA5Ugo@RX!iY9#4k34g^r7!m#o=%#Oj?DRdxkeAHg z2k9w0A$Ifz=-G8CSW}LP+ruQY|GAdvKHW?bzuQN&)y23p(c`+a#BCyAkibhLfR_#W z8vEk=Xosl?mhkePmw4Gg;5~-bmbgcsE8!+>IYHtQ@azxXO|*~Uux1>#(AaLs32TE; zx&H-}9`o-aoo7T%<~AkBi^yQa*w%j#Z7U42y`IGN!XW3AxQ{x(dpvWEm-Po;5poRs z!v1`oS3Ws{R|M7a@;0{h_4{s5C2qVlJ_!z-UEM`Jj#W0#U-r! z*m19uq&ajVf}z4Zk^(cy3_~|b+9V8PH*&o}m^i#D6bl+)Cd?Y-INpzErH~ni7Gk+{ z()9|~v4JG55I+h1cJpfQPq6K5cx_~kMlpz2tFQ8EPqV{YK1m?&6YZ~gIMaO_Cr0at zt{9gukJlT5J0L@m<;VvZW+feJ>w{sI<7-EdH;~DQtnQwOA-2JjWy=;U|6QDX9U$7@ z@E)l&fAV?yVq1U4Hmg~30@8a*7wa{$nPy)j({ga>0!28RJV+9b?jVVR{|N+xY>iyI zHv#&ce6jj*+0ptVlCb9p)px;1%en!r7}C%J4POVUZ_sPv8>iLW$crTzW)b$E8Q-hHZQd z>70PDz$^#a>9Ixz%LeIqk0H3Gi$sG*C0Hs$?Up$g0RbW`Z)8Np;8F?KkKxFG^oH&0 zNZZKnlg(SYbj6utAkQm$0x$1(8bcK|QbXoCtGSHt5fI>CxZV`6(<9u8m-jx&E1m|N zWf!v)Y`T2$3q`K+%5E2UWq_-NFsEwjHU~&Ls7WgRoMU`!{Qce6hFDlGb>&q7zws)c zGrY=I!4k0f@#oj2!n10n zGtN{?aHjelK4$-=%YL(6G6Jd6dve1CCqL48YZZztka{ix56^|*p;>SjPf9kS5uKIFl?$B_AEYM|h)5O6g-#aAPDI8tmmM2u zYb1^aYr`^~kde&Y2NP&}8i0*Y5GUp=6B82?6Vsnt{|C*SuC6!PbXFRCwC$oC#P|F9l=NoEe1~P2O%T+y2R9TW^{R*~nvy9h z;sV3w#*%3+S$Q?(dULzgKo@z0dP|W}G>5zW4k8&$pf<4h}qc@ZiCN2M-=Rc<|uCg9i^DJb3Wn!Gi}69z1yP z;K73j4<0;t@ZiCN2M-=Rcs#}tn_CbBwtyT1nIHqK0B?X85CXJuIR%anOWsTfko&yh z!>YBUpQNKf&lrQgD-3#PR`5XbBd9iJjszzy)j)V3#vp!f|(I~us0R&a}w+_VF zwe>*TXs7ZwpLp0Lof3TA(}lN+Gnr2FQjKqnw{W1bEWY znXptJL%mMeNVlIQUutY-^p5{X$?dXHQsw*rrp4tJG%{hP^W8BpAYCB@Tn8k<>_-X6 z1xncqANfo5Fx1DEdhL>YsqI=b)yBz{vj=oBmV+R4YRiO<-vO#Qooa+&nj?Y`*wKha zT@3l#L#NcbY#a=*QXt+kP%4`;a|#Sz?Vn+V=J|a@@!JPV4+a@3;$HsP1$% zi$^W#IP~S~cD~5l*L@o*yKGjw(OyXh4x4`6L+C~ij=x%jr(1UlTe9gFJL$4f^1)hn zPy%c{(Cf1foa+Dj>WfN`o~52bcX~MKQHd5EB5p;j-+9)?W2dBhfb}*)i6ldp+WHC% z8a3xyRlzK$r&*LXAn?T**Tde*I3Jz4-&Te$mGrmv{Y?QJw3U%D*@sUy^&MQS6oSe6 z^s*UkdQK>^;RP<~E!gUYb#GgBx5MAv`d=?0gdQGxTZG!PU+MTy^G@5Sd+lwrdvfD; zA9gToTUp)Akfi08?+Vn%B2*8YzV{fsApL?3G?^ypZQGlyxdqbwxp%Cc{IkR6T(2ll zb^4J`8Cv#gPujK`S>?0-)d-%r^fxQ(@s6aky`EW-wzAe)vjXk=q})^q14s^UujlEz zZ+@c45wDTjP5!vr6IzLmZN}2(jGgq+hr6qNSCuZK=U=s=7VF|FY-!rd&?ivvDr;4u zZTG|?l`xQup$2~1p;TI0N>Us?c#I~*{GEJMVP)T$W>Agj8W>0G(zeqdf7~i7Yjegf zv%l#Q@#Zxv>99)D^}#$B}z)sidTG8EaN&8u`tTO7w_bdc_Jx&Xx3hppOYo z&iYZB6pa8!Yg36)Yj>RMH$Cmwmj3$N_XP^8hSu!`x^bh3@yn6ro@s=uaL^dXeA~M9Gu>NogxHsj%R9H3KWgg1PHS&0a7`=&SEv ztb>V?ZX+ZeAExJQp9a~rtyB;F(kp51ow8BV~El<~ow`w~1k#zBWr2czD+-LWmQrlqZu2K8o z**7(86v@%Q=PZj%*t&JANi(COqAWVk+SR!zH$om^G>uIA{G5fmIg$>6k}i*IL~S`L znc5o60|h3#+WDI=XxM0yLn}nm&ΠYr@&HXUWmgQP#}V)KrVi4DIzA%8fL_m@?XS zn`Lfaw!l#D){+kYSAj920V>uF%r-n8QfUS(jXkZ}rrgr7u_VW9Gd?hDg0vp>^YfE6 zGbbm<>^a1J$57rlS+rp2;;p|JnVD`e)UTUVUx&vfP+4i6+7vt|J*?D!+WN)*ooDRU zvhk&WjL}>jM`us}YSxUDloX>zy12N|@4x?U^0y@=r8K19ngXjhw*lw|foShI2`%84;W z5%TauuAV^0-7{%yjEhzg`#m5z7BAdp)|9?|`&KfNF-8|JUNrfeyuHWB*K;Duh%-eB zcgccykLewjv6y;&6mdP8DdPXsD&pxr3HQ*k1X{Kzi%d08sdYL#JKr-iJw4r|k$b;5 zO09IsmCDg7CRD;(k+7qsBEBAXN+$B%2RF_a!Xx*xaT%E`>c{t){uT_SDJ+hB6%$Ek zg4oE_bm9CpS%X%rSV2xsPBe4oOxa^@-!7)*|H!6h?uj_(Bw5;^yjjQzxm{h)^oNk^ z#;@483HibZugBg*Q5DcwR6e&<^yqyRh7v@fy_m6PVS@1i#>}^2XflhZmWs&`(->3A zXsw$@sdKksVszQ4S?AB6H~M+e&0CbQL8Km?=G{A&9M7PT`loJUf= z`;gnH!-t}>OQ7i0@o_b?eLYdtVJ{3N(K7_13@Xic3qSJ}8=DQW-p18GdpV1l63Y@M z=@dza0GYyDNTxx(7SsGWTj`Tc2k1cl39L&m(z!Fg(V0`1>BzU|Xjkrcv|{-#(nq9G zE6sE=cTNM}PGJeJ!^lN2a_wg9{~2}tPpuR563*6XRfGI1seN)CmTOxD`t=zF_TPV`qCvVX6_p-u3m*PRRS_|;#9hL7Mils{!gbh#2XXDJC zN8|Bw6Ho%EB5IG9zrm~djSMzMg&FH5Tu7AfG2nve8T@3GJR9bDyR_tv)o3l+rU8~M z$3Q8lf1dEZUj!=r{feUxQ>XRdvSM!>>p3d`b;%sKTEL16{lBYHW zB!eXK)JPKTQ2?uf$>UV28Bc)mD)r2FK|0>Q z2U5Wp82yx)GP;4OTy6Up+6j2r@caXSBUjpfhB`fp=jOqK2M->PZ2S+PXNP!<1=)rG O0000EYQe0A*Gc(LE3%jBcDlV9c5MIR(F9zxuN z_!;7uVutk^U=>b;AfXJ9p0S>Lh1D1VBob+-Dd0OmPM{imh<>xc2%-OatU`BT-iGW+4Z2ViOu!%xIZ6f#4Xs?jO!C84NRa^e@#7f+U35H-QB=0 z1dXhxyA$cQ8K>@n+P3{08?K3^PK?zjHdhMR=~X8Vum&MjSIeb676Gy!J?+h%(7{=Q z4C8fnj9#tJjf2R?Fwk#@uG#UWr!>4$E)6Ho$4)O%0z%^NrtCj){xQTTvOZ=Cr`n^= z9B9gc6X#oXPPpSKjiASc!fGNZGJVB$CmSjFQNNop*fGhOMn5 zC@j9{;P~tme6ZJ7Vt$S;h$B<-Zm1BLN2j0D88G*+R~>v~#V$AejSYMu)Zul##MrKR4CnHuhmKwe}f7%NM^vWo6~`_O1{0@0p`#!jduv z#bu@tcL#kde%b{cS_`s{5|&38OlsuMSlye@#L1)4Woo=sdXv%?;=erD?SFYv|oLUU4#kH$tWJ%>P zw_}HH&Eb@3hEpg1OV%hZE{-rfQItw0S*!Ti1?YQ( zC|ddG>gZ`3uT9u->^nPTtuc@LNj`tD=TXfZ_4>gd)Z9p_L1TiV&F@=fKu%7MSu;aJ zL#=A(-rY)S>ywDSM~TwDNA53nIGBa_`Tr&!%`|-fnfgep^zf-~0|HViHQZCZRm3vS`AwW5>*znVp?&m6;3XZb84#i{h(Js!Dq2_=S4R^&3N+l)vc*s23bL zBA6Nk)`PEYndI2bM=omR6RI`bI1;1y&?zgDpmK6|cNaBt!-fqO+qiwZf)vAh$iV`*R%$YM5_urU* zn6zA?II<)fv+4csZFnq3h=b1)|8ob_Oiy7V;b4K`X?c^U;h`({T&oRa3JJ(UU&*5Mh+lmxJmIynaYaYJ6FH3*8|E7> z%>Q@$!ya7lTVj%7V5H$O{rQI9PzXC|RAUHb8+Swn8#yh$xu zw0OwOty{O6-LI;$ipGyzOIk^qDBiO4FL14#C5$)u-O|N|@n;$46DG`${d~(H1Pr9F z2PDRzsAW`k(|plCfByVhMn*(LP*s(90wt{2`7^eo{S0&50iBpjHW`}HP%D|V574h< z)*?E5DV;xe)odaZ6cnU4QYMqpxpU{tCOp|0Z#>k;uS_YWu_+J%9VDQCSU*%g2+(IH?Sjf`1G(KLSE4uWA9G9s#7Vi>e!I2PId4wUe$qkudcH#ZHvG*3Xr_; zqQ4bpsJv#AQaisE8rgJ<`}u$XN%juBmRoUVDd1J@D=>!;cEJ<^q6q}8ckt?GF7fJ+ zX6Cj=qz|x4$H9yPb+4&v z#Y|GE=F~zs^_np9GcYHK%Pg9MHie{X75YHd`nvgpuvG!C_0wVO?DYCjaJ*Fmd9C&W zuk~(Z>ht|51$J=B_X?5e79gv9g-hEEQyUqbf<3@6uo@hJnH9pR))<)iGd?>B3PA=4 zthpv)CAzHPQde$7`&*HG?dFmz4|9pnm_GQt6}(n+1!Hc-oD)%rk9>8Bw_=FN&$w|# zC|&41WRq`mN!wtm=yNhK(goZQR%addnd=`lu2Ac){{VdmSv4;mTV!%9-k#Gi)^W@+ zvu1j@m-x2Ktoy#sbAUf;(R(`C2$U}gXOD4-W`B2q%+> ze_HHQ5s9)R>|NBsge?1WjDZKT;VkV7twbRbHVP}u6j5!$Vz0A^DLZVPikb-NTrxUUS6pniM*6a zq*A7lT0XUAb?!FP53*J5Ze*&L0W;EZ36f+|i4XS+Xl*9>$@fytB8AUf19QOa`*_bn zMypSRW{CH}#i5^a5XK_zNHhJK0QXfTevP+?mL1HFf6w8wWq( z^M%0VQ{yH6Pq~!%H7W%|S+t#DsK1LVcnfIFZRe$)+Z1#HQJ@zHRH^4Sw9s}RFr7u& zxrR0a@eXKrFkk_G42Cwgb9?$#&mzmj#KgqJ^!wKT0Uq{uYlTTMm;e9(07*qoM6N<$ Ef+}fNoB#j- diff --git a/examples/resource-bar/assets/Fly_3.png b/examples/resource-bar/assets/Fly_3.png deleted file mode 100644 index 17b83a9b3bae215159c3563e1311898fdb98a02b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3396 zcmV-K4ZHG*P)F9F%>hNb6^H$VR20qL~;R_L?LrS(QsE} zM+Nrs6xktG}3c>VY zI!StEN%~o%^ZeSFnQmn#mB|K4NjU}XjuuJ~A8R15f=tE%6Ol2iiEu(DlHh z!s`Ukp~CAvmCd!wOvHGlaereY9c#7BCfX>8a?YA(drpDM28J~SNs@6P?7e29zcWy) z#K39I#lXMfc?_70=ec;C3PylXl^C?Wx!AE0o>y$o2c&@~X120ZQswMq#}g~fbO%$wGR(A4uonCX$c9`4@2SL26VT6M z(76U$`AOrkr(UgUyZ3yQ!S=yxdS4^%QH zJ|yLT*3LSesP%pxjcl@WlI83MEoBUi0+#{VkIqW$1MREPrlpj(BlOv1i;67TLCG@y z2?izP95?qZid{jM6hZ8A3lKxBGrHaeGgwY6KbEJIucNeywuPB$@NWku&C2+xErX)! ziDI`5h)31at=70b2yVfPSbjF#Zde1;UtMc6mn

=mrNSZpJS(?lU(rm~2Z(t#Nnj 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 diff --git a/examples/resource-bar/assets/Fly_6.png b/examples/resource-bar/assets/Fly_6.png deleted file mode 100644 index 4ca72e5bc3b0ca9771a3c0a8c93c57922e3caec6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3444 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 ee}0#-jmtkY6F*SHCZ*N@0000Gc6q=1 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 WFubf@6?pB(Lr_tC|F&8l6#9RdsGzn0 diff --git a/examples/resource-bar/assets/Playing Card_Back Blue 2.png b/examples/resource-bar/assets/Playing Card_Back Blue 2.png deleted file mode 100644 index 16d6f9b318aa10fa2fe3fe863cf1d7c35515a3ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13615 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 diff --git a/examples/resource-bar/assets/Playing Card_Back Brown 1.png b/examples/resource-bar/assets/Playing Card_Back Brown 1.png deleted file mode 100644 index b56c09845e8894f99211bb2970d06e47b844f6f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13704 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 diff --git a/examples/resource-bar/assets/Playing Card_Back Brown 2.png b/examples/resource-bar/assets/Playing Card_Back Brown 2.png deleted file mode 100644 index 5f0424372903340053b203f957fa5f6a9d1f2513..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13438 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 Yf1`(gkP$*3EC2ui07*qoM6N<$g5!VH!~g&Q diff --git a/examples/resource-bar/assets/Playing Card_Back Red 2.png b/examples/resource-bar/assets/Playing Card_Back Red 2.png deleted file mode 100644 index 675085ddb4f15b6f9229071841dcf2f2b9429f8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14338 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 diff --git a/examples/resource-bar/assets/Playing Card_Clubs 02.png b/examples/resource-bar/assets/Playing Card_Clubs 02.png deleted file mode 100644 index e3ee65c3846b582cd0af88ecb450ecf07cbca6d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2565 zcmai0_d6So6GrV3qqelF6|1!LW5jID2pVeDu1$?L6|*rzsL@!hsy%A-Q`8ELov0R# z-4e7!i`1%0jE_;i>0j{u;qIR2z5C(rdEWQ#QmtSR9!_yi1_lNmsHu@PJ^Iltjh&V5 z+Y4>0=z#-n>WHA{XZ{+afm~rE9czag>DxxmZ52oO3%ZJY&=5y%`$u}=lXW>wn1u!~ zQ9o)9t&9dR-GQf#5$O2T%OvD=lDWlaK_1Uk&s5htcksfwavvTqMqQh2{71WxxHpBH=&B6K)r(KdpD`E+D!m z-qQ|Se~&_;T+|+sJvZK-_&gO?BjFGf(V=LNj7&(}8wMs3=ei%f`qb|O>C0*f9q=X8 z++kzeK?S-S<1cCMLo6`-h+Dy`%qXlY# zp_z{%7$9^(gwby(2h=RCv3p|wCQ9X36lj876@;? zdhlE$k!V5fVFzbQ-kj!^QB=%`IX!u)vt93B?}7`d3*VZ9O*eT#_SdFlsU2_8lND(B zs?Lb*=5FLcb8D;W{-5Ir)DKPoA+RoUJ{XT;sg5q|jXR^Ry`rvs`t(a449)4MZZfVn9zE6UW3KKqEckNo=S06P zSW++AeIQ+AM(659NlD3kcx(OyT$xr+IYLlILEs8&`58R8uOJz_!s19c=oKIU>I{jdvz+yA|W?B8_$N^KX{?! zoOeMlnlvtPuQyirs!esq)JP|({9YM4Ik~wKlF7;n#ICZ$XFNu+0)YO*nxYol4&ngT z#0EW`0!e@SS_G!d&AVdUM78O!!_bPiM<`!>B-VgjJVKlQDB#kD+OD~m!vVvhIK zgt+t66@}`R+`1gv&nI(>eV^v>s8&G45Hq( zT9)cH)4-VC!0|FhByIKSyhd?J$zK{*uaoJNY$A~y)MHN~Yd}mzp>VZCs~Xsayqp}* z5q&vzd-wAnJHj^pTUgUY?l1SotxZ-b%FCy2SAMuO_M})Dhr7^nKu^|0qIf%0UE+KrcdhP4t{+*JZ^4jIp=l6imWs=F!1)+9Vyg6 z$H*;PSRu9e(vEYvQxIpTG1EOU$my;q#KNv>@Z2-C`;$qfECU^xvjmf)qrHtc1iU22 zDV#|dqk-lVjbla|rN|Lw$|~#brTA=5Qh1BdGKCAiux+L z*T9Ouhf|lK;oskLJouO?NmZ0(&ZH7CVRIfTbfd16Z) zdC?WaHR6Vhy(yK%Z}(fHoW_C1Uf*!ntaA?4fEnhyr*`XVst{BD)rPE3pNlu#I>SeL zmoD*CJ$bdr5;lqE7*Hnk_lLRizC?c!pdAVULw{Z-m*qT{CA5zJUg~$m27HP9T+7Yy zd-uwLd`LE|Ky_#(cl|D$uOuxV@#iS4|CiWHfiDdSW1g=c0YacJzLs)A3#!99W6UF>}j$$h70%sbM#{@4;yqUvV@r~z9 zX_&U(3|qHtSCIHutiX&IAvJl!kVYBv!{hOXRX&!Wk5)8F!l-)?lKK)V{p#7&!inNjwRn6|y|sfquN>F`WY-X{z+?WQ7UNUR z4r7exOU2E}mbC$cT5sIA5xJz-`I<-PoB+m^l-wD2c6u_)Ah=62!G`zEwgngFmOBLX z5q4O%zT#|X&01!W0>Fes&wBSp@qj~|+C6?kXix-|nH$e9SdT`dn+69>Wu4!_J;+3} zV+A1A$|;>4^MY&yfzXWgIz0}H$^Wqz#b2cG0dr))B!?%iWf=Pw-`l7kJRXOHo^r$V zCFZ2X?dSXLO&H-@47quECKCnzORrq@6DLr8d_YDsOG`>k`xkDu`mbV?W$-D3iYBy+ z9Kj+AZ>o|T%glPu6??ajk^WCmb)aTuoKfawa08f+CG$Jd(VGjt0|b63x9ES)RlW3* zEN_kg3TUUcT*=7K*tZV<_V?R#S0j$1bY|Xo1JEboM>!dFR_9WzMp@358IL3xsU1=V z8>M6KPtpD7pWT8{(?DkSkPrPkg*vx>CRRwN=PKH10xtivD-Ru^(ax44Kz1^@s6x0_U@00009a7bBm000fw z000fw0YWI7cmMzkT}ebiRCwC$od;|a%@W6xK)0ist?1xN(Zg8)%Qc_JhPB!rM? zq6X1>3*|u&1QB}gz4ww(9v=hID0c4S}9_MLNgKA&f#KLW>&?fr3k zv$Hd^evC0cTM6bb=s$w~D=1dbzkR3py=`k#yG?L1iW3 zSm-6uAbC{Z1clha5v+os6dD{u2plR{xcCKF=03Y8`TP5`X3d(h5hF&hsHiBC%8H1H zV8Ow`EFd623Q(Mdi(jbthb2msV5d%-+2zZZ zS=Ovs#c*N(=c4U{En2jo(ei+G=+Hq7=O4iNZu{Wq(W7akJYbV2PZq;T^%Ku^OP4OC zk@A3H+$HWi?!o!}`#0;~zds8K3X)WpE?rnsQWA~2-f#dWEG*2W&)%Rx0|KNc9Jyc! zkO$z*pFdyms<(IV-Zc7pz?n2@lHK!hZ#i=0h@FNHAD-bkWFCM65Mo=sdNsizI0VPe z&Ye5QA|oTyB^84sI38Z-*xIjOzu5Kb*V8p+$`pcQ6gY3*ym9KSb?@GtM&F2V%9k(C zUcGunqi;kw`SRtXEeKD-NlZ*+Wy+LESK-2i>7HX0IG*;_{`~pFZr!@YHgDd{E?&II zQd3iX6AlI*xdm1&S+c}qaQ^=N%c7&B`P6Cqe%Mt+#Qf{mue1pD1RPu~?c29^>Lp@| zeg6D8!OeQ*jh7KKSr&g_6X$t4VhYu`!_Uy8w;`{gS_YF9^ zckkvoZA!Kbrca-)>K8%eTgm%-Ltcbx-rCBQD`f*hQlh7(G^^UQY2#b2v>ZTMfU&-} z5;#42^zglP&YnGccuJ3ymMvSR*%wJjNKgc4?%cVw2-VAw$55|cJy~FK<;uk#KYr}H za6W(j%=Yfx%Z0ydVLyKSVDa(s+)Y1v^eEp)%9bsgOE^=fPG#rMpXZ zDVzcY3b3C)f0`4{w{PEA!-fqr{L)^%dS&`c-@JKKmoh)(JeUR!!t`_I%wdHJ72?m& zn>VlI?k8^6*rMLDWs4!FG^_AFrh$X~8>Itq{P=Oj9~SPi9&ipEIA9()b?equJOG_L zcUJsiKYjY73!K-lUz-O`xpL(c4*>2ccj(X|{uts}Sg&N(5N%kzcrlL_RIOT-@3bQFjrWGts#Pn)Ity<8*|TRkINT?T z6)VQKtnoS{CVprVTRU;$1k0a4zg_6&*|TT5eJRB8jO-$N3=XCSgzjtBtjVXI>eZ{W zYSpUolqoDCwKhz#6)RShgp(&v9>Xj!eQG}kh9nQ%&z#-#5tK!UiQwpH+qZAG+oo`) zoH=uHrvZ@-f}^p0`SOKl-yA-Cmxikj306MX4tS{EF~p{;CRBYZt2>!tJ5_Oq6gkmENm(` z3l=PpwFpIon&9YYA3uKNQAUFza z)228}5g|ZObI_ncc8{aIm7@wbv;-qKI$bg7 zmxk0^XxFY?TswE}`N!p%%`B!Z*Ru=kH3sH<%O zBj%|2#61VomH6;J+wBBB>vC{TTv%8bkAB+<{o>F;%T@O*Q#u5Q1W3U_nTXy700RaL zaBDoh8V)wcX3UtuPwU0eF9^$^YZUU^(1llg)gT7}4#T2Fi}(>O=wvly$PnJG7q3y% z&{k~RxN*G44xAF}&TLRn5I=npKSOgqY#f>j4q8ce?AXy^QXo3-_U+r(?(yK@V4hzs zb^ZZ_%{sMC20>b{?eE4ki)gs@bYa_EZT#KQ_<9{2bQ^Tl@D*PeJDtvYemZLRmD#TG z&W;Ok*2O9*Darfch*2ud)B}z)_g1NiPZqXHPM=Y)f`chT$tk+-2>+`c{ZDqs(C@(ABRRd!Tf<>^ zTEdBpj8ygWI?C;q(+9!p;GpVE+_;<;x}C3n3;`hHns1MDH|rPBxSh zrb^^jtI@_^Y-lrvgVU{_6=9?a6DF8HwuVi#jT<+zQKLq&sHi9&Ba_oP3c1l}m|uzSwPkt5CRtvRdtv=#cYX?eu47*2F_bcW}Q zA3xr=;2$L&`t_3p)3|YCU8>sTz(Jx3n(Ytkk6WJOA3*TArW=4@(}d-W0=4GdSPv&cEY@t`57 zN>`3SO?=P6X}_I1bxIeKA_I&nE@pVx58ppW^@BpZSpcFkS$w)2* z4iz{T{9ysqT~IO&j>o}-r8BYq#R90DptCec9#O2Iigr9~|6u{-FDS&~#hs_CNi!u| h#&@yBDf1Vz_&?eQy{5IPU?Ttk002ovPDHLkV1oFQus;9* diff --git a/examples/resource-bar/assets/Playing Card_Clubs 04.png b/examples/resource-bar/assets/Playing Card_Clubs 04.png deleted file mode 100644 index 178f85bb06246d6a3df2ab8707fd4916a9534cb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3002 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 diff --git a/examples/resource-bar/assets/Playing Card_Clubs 05.png b/examples/resource-bar/assets/Playing Card_Clubs 05.png deleted file mode 100644 index d107ad29baf489cc766968bb16f51a8ef94e6fd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3489 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 P00000NkvXXu0mjfQ`29T diff --git a/examples/resource-bar/assets/Playing Card_Clubs 06.png b/examples/resource-bar/assets/Playing Card_Clubs 06.png deleted file mode 100644 index a285bc09443bd5a0778c7ab4ffb3e0b0e5289a75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3744 zcmV;R4qx$!P)z1^@s6x0_U@00009a7bBm000fw z000fw0YWI7cmMznQb|NXRCwC$od<9gRTswtA_&-`h!_L}6cI%P3m_mvks?y038*Lv zqK=B8X+lvt;zutE8gwYiAfgU1fFK=WV<=KAv0@FOih!Wp@BMbNnSGmmTVC$lS8~tH z5tEm8n1gKSjk0>QYm5(usg1`w-O78Tf6cl|v9^h+?;4C-)QIR4=MB~PdMQUoQ zm^^v1V#z#UzyQ&tNfS}DXi+PGHn0W(OdIouDJdyp-MV!`QRHd!=FOsF#fnw{bxF$I zl?9EM_3PIwt@%h>w{Eo>LDQ0QcL{mFY}l}&(pD6xWy_XkaJD6xHv;|o^;4RP0;Q#; znZY@klzSk``z4E&BLC^tS6{VScf5gf{P=Ovv13P3w{Bfae&UHI#J~UktF-MmH~>?> zetpNidXFAG#DD+&r!?*tIBtQ_`Jsm%QULh{&ZCb$>iM)gefo5zbw9xA)TvX@7oU6X zIk9r(${=PfGXBlz(W8~tqXEtvZ@iK3Z!k$Ha1=NS9IxPDj~h2`Tpn-Rw$1ZR{`1d2 z;`iTw_f;`RjvNukjvY%JaMIJ$MP_DZKK|vGU&6Y%Pe1)s+YJ^kUR=BWl~-OVo_XdO zaq{HJh$&>|%$efaYp>PpiSYH;UoYNz>#g_)Clr?{Q%3CGz1!1`Em*KX6f0KD@_IFE z))asJ^_O&Ibno6hfnJ=km)h7nLei3gU||zS#3_ ztxcOYuE54AC4)|#Iu&vXHF9!tvf4`5t5?qzIPbszz7!?=@y8#o~@=L*RIvJ_}jN{ z_hovM3JwazrETOob?P{R^WlddYGz7En60J4c=T?!FRYY+)&S+J*CLQg7CoyAH*g&R@0UpFmJy3X3%$W z))5aUGdhxK&W@OxWXdaFzP$DvF$sQdZ}2o zYE{U;KYRA9D}$q#-4ij!c7$d8{PWM3CbM$o%Hr?8|Bh{NIIZKPGGFYn%PzA$B!2eU zXQEW8QkDC&ae)mL8~Qc=%7`>d;nwp;6Pt{Kl=IOzgELkEd zRH%@5jSDWgK-_=-{bK+A{Xy5}KCpgcVK?3fFCt#vm_39V2_L@|Fz20jo@+NXBa9dW z{P+4bjf#S&Oqrs6cKGmN?X4}SDdp#%f7V7XaSG7v*|YOK!w*0FpndlJ_up&V|L?y0 zF7|C}MmllgglN^ORlbY0ZQC|%OgShi62voLc{a;z(V|6EV!aCt4%3M~N1GjM z@I@D0q`m!QYIzBim^yW8$Z3)o0;ipzS2}(Av}oVHeMp&4J@u6Dp~M9O$Bp0J%%KjX zIx(en>(P4Ojaeg5kj^qFCnqOJCh~Nd$kS#1_~Vb_;K76O0S-GEui)Hr%Pm5Y58(9g z-`_JhDuvM}a4^-}amO7&UpDU8%(**^nsB|A3Y;)@YnWiLEzO!WOFJNvf1`ho-*FZh zJ9eyi_uY4Wja*USml(j&*||63Y=WRBiglV*L*ieEZpM7iz6bFU=c#2tU`R(txf3}sh`fN))0@Ljre5wE}gy3`^SF$oSzrB^~hlbFcc`Q(#NT*+ju zqOe{;W%6R^84(EyPOo0Qq-B{AEbo+dPPlJ~_9tO6_n(m9U=op?pE+X02wR!N(8-p$ zYuB#C1845sxzZIy#Hk&%Yu8S?Ols#O95^iGvK2)-pdGnM_3+9A2M$a;aHzl}TT$$~ z?5K0+&eCPFb4xgIu#LGX-{^&@U2R9kSZ-PA^^tNXM18l0Q_HEKky}MosZzzU<}|i3 zr!$lnnUO4M9CdK8YlYfQKk&c$wqUQ3iHkryS3L+|;9(uIO3G5;NTzVZefRF&8~fnkY-5LmCzPs(#>$6! z^+R$q`Io)}G6-iIRTg!b$TL=3)MZk2(aG6H)%kE@->eGL#^lH$l7{@7P!B^{e)@XK zq&<7~XzM{JnYZ75yH@<$i3pW4b{BEO^pT6JHHUB{tGpdz*673$3Hs`*uPhU&NEspE z#4XV!q+`d9+O?`xt7h33=(_8!(?%y*5uqxC#Ppi8d-rbJbVJG}%O6f~bfzpu%u6r5q=nWJVr#q?D(zCQn#OoEB%f-E}6S)7UnJ__6!$ zyDwx5vG?A4&y`GiU>iejjZ6b^V@e{*wQ6?;Gi5n7yD)do@)Bbmb#Mqdk`?jK98V_? zJ7N@YD3m3WIBGkZFkyn__uTY)iz+z8CdTQdU-0mTg~CUKG1dR#63q6E}0PpP9{8ttJb?xB{$pY#c=0 zSPJX_iu!Jij_9%!g^9(fWh9@oMUQ0DaQcdRDMS$pps0g`>Eg*JpDeJFIF!1veL*A& z17txHbvcMynfk-2N|K(Q9=qln4uNa!fM+LK)rkS)_gu@ zrdChff}>MTPL5c$YL&K#61p0RxB)AJ<)TH4w3f}7Vj@9tyIYHQVzjWc)7h$+g#sr^ zl+foK1&#v8H*i?|>1<-;l#~<&PBduQvSqHiiWtp8ob41iKGD*pOI-m3Friw_C~zW3 z_?hgg|Jnhg!0~}Nn^C{iik(7;LxFR|_zMh?iu@-Fd*3O*S#SI$0p^PQCySEFnSe9F zJeQsf`87FpEKo(4E=%-|4tPco{a$P*1}Njz1^@s6x0_U@00009a7bBm000fw z000fw0YWI7cmMzoP)S5VRCwC$oe8v6Qy9lzM2b{qQj{`fwk)hn2~iq|4249=kcBA2 z$`qni8mN?#N>Sz^O*E>oD2hnROr~ZHhPL}VtMk^m`<`K+clSB>oOk!P*4KKychA}P zeE+kDZ!Qr+lsGv<6*Al^!+kP5GsCMhyxFjJMy@k5+&ja~WgILlBw%W1czT9~;n;af zhHJWllc5$FUTcI@P-ZqY%K~THj9F)dlNf+%Zo|deW2VU;+HSk;M59KHMAxoeMZbRi z3~T0FZ@pEVe){R6LWK&hOPmc(Yx$40Yu6TY=FAa>qNnN8r;Gje+s_T4=72L$o-y<0 z%`;Mq86cM##3`<1p7WPyopqLxRso15P6CHhbIC^MFS~c|ZX{IzVh@tQSydvhbwh>> zF_J0(aY&G`*c=L+ufF<9oOt4i$~x=&R=bvK3h7GX_=ck{3694}DZ}|h~ z>Z`BLx<|*39Yf!PlU?uLy+xfmbxLO+``Ak_y%d>1{`lh$(Y9?{QKLo;Ys@NDs))1C zK3gnZy0rX&bLgRmX5HhNXPyZSOw*=KJx_jj-F26CVXRoO!pj;gcHVhs@$S3trXQSD zt5)S$RKNJ*i%|C%G-#0Tv7A}-{`>E16~;N|oZ~y@fd?Ka{`%{$bc4e&+Ic-oL|Ek$ z|51?M)TT`vZGu>^V1bgZHge?1bc1v6z4vBaf9|>GhPwXu-+xyU)IkRwq)iY{KmD}Q zn77<=OS-{f19e{izylA2x*q$RilC}htENp5k3RaS(wJ9Wbya%7VfjL6&g-X6of=w! zWdjZp)G4Q&qD>H!Cr?%ar%#_g=>_Mr&pyl9xYw*%6Z(r?a>*rug5sF1i%^jF+;dOg z@hVoVD3&Z)l3sA+wHv)emA?JBlTONOO!Tl{fBiK*;2eJV;aS&?7%?L7niefuXbHaCe*5jk zj2SZm$NTNK-^3n!?4f1M0}eRAvdkwQ9QGDj`TYFz&wa1K6r(dbvVQ&gV)N$BzGJp) z*G}u0%=*NGLwtbqy6V-d2P&TzUwpCl@YR_!XZr3ll`B`)Ivz@P;=!3ef4;cyzWYj< zjW&qt)vKo+93D#bG^vZf`R1GS7(P|$$Rm%`E~tS62l^faq5$Xn@4rtzIIQ=0JYRU> z1@XfVKLmarja#>%-h1yo-!WNkb&kj3BJs-_dWth{pi-qumd+Bi6r!l=5)@9ozyJQ* zcTC(3I>Cu5B33InMAyjI?zrQQV%f4~zSrG;`|X|&e)Q2ti(PivCF?Zi1twzwwu)Zm zx17o`%Cc`t{@ccl84_3G8>G2ak;(YbTy9AH>Jg7yGEk80hzb#v}{(M1<2JMRFH;1E^91jGv-v`EYvw15PDMGz!@6?i%AC#qxZ{rVyauP5 zn-A)VC!Pqj9Pq67-+zB>;Zk{l)1gC$GFgvR43oe7@{9QS=bx?Eu^)f@(PH!_lsy=e zJ$sG4|JZcrop<_<&!J`U;>9`pjy;~&n2cwS8P(}bD>xTia6xErSmvV2G(gDC6O|XM zxG|DId4a=H5Eh)~&6`K|Fmed67qje@dvI8LFTC)=oHP&Ix%_&PBv z)~s1d;1EGt?!mDM2NywroMs5-u&+b&M=#(IFlNjcv3~vfNFRnc0FMF-S=_pH>*4{& zCh|iMKKS6QC;a? z6+?#(6^}puxMc>imsL0B`=OihOdo#uVVM==)Xki@2@3+&f_yB>=u=6pPLf)1IE);B z{PEfXLzqPd98J`>Z(prG8C(;prX>ST0G)d3soFiLL6JfR97WRYYKEVC?l}XF4pPbA z3Co1p8gMkw`RAXXitwhQ1cwM8oxmiqx=5<^oEvVq!Bf~+3Y^L)O0id92u`_tT-`+r z4)!wAGw!(K4lAAU%{Sl7O7|eDv}VnkrQemG3C56(psiZ95^ul#w&hQ9<__Vo!++x> zjI#uK5Ce^XKKke*1CC61TAjkQnbZwuKn8@9%=z}q;a2#O@RCA+LC}etAr^sP6Lbq! zx34dHa1gX#@)QPEuWSM~cDGmnJhy(tEcDx#Zo26v0}jM86ts!=>eVafI%bfZBczf% zjGfM|+TmCGfH=CM21hkb!;UAj32U=TQWV};(&?SVex!1$BaW`9!J*nmSyJ5z^kW9V z#Htbe0Rsd4YN>X%qy?Fvbe!PuyGfOAU#rLOj-pL{hs3%=_xZ=ak@w~ zIE3u&q6g>MXP*u9!4Tsd=ON^fLk_W`NsA5~g7=8E#*K_3*|KFztJay9p!iI)X3eb6 zUwY}KRscy^Oh9;2Yt^bH4m<3yz^YN`S5yr-;e->!_19k?xpJBaa7gJ0I>xFnfU1_< zBGy_ZQYR>S)Gz-u_26)t3My+7hN=G_M6bX8y0-BESf%zsD#0NeK&N#XMKQ?q?+oA4 z!N(qZZ21HSMN+q4hGbzcLI=`49xp@`6$}dw&i?!FuU%LVJ@k<0cx>WPq`Fhzpxl8& z<0RdJdhx{UPS2h_wF@e!V1urBH=AiaQ!e)$*6JW@K$toO zBu@nq5uSec3^QJo{p=E<=U_TP`V~Sz3w5sD{6%~ZStuOO z_uhMN*F4d|g9n#?3js4|z<>c(Za)B!+>3Skwbx$Du?!G=jvJZM#YY`=l(^!GD}47E zFCr@fmo||++=F}K7MHWaue zoG6#zVEdxf7hXs90+u$I>a^@h@MV`>X8lb^@Hu-Jm2nx*YfQ$2akfRBKAD<5rB+M>CBZH%?n=m&7{Th%F;{!>)YjtbPcSvO%{FUCuU6PmJd^ zCgZ`BJ@#|9QRlQQ;JA5p6FYMVoAnFT1sJ&+d%i@Nli!jAfI)Et{GI5WFuRIO3GitG_CrAnl=5GX=w3$YIJ0e}~P8A%CCicb)ZmC6IbZMWT) zBPeH|oU(M*4I;UY0momb!WbqBhvpV;U~|+?jh?e&#R{vL5rUv&2(_Q7D?sUE=XXJH zq^|QOb3Emw!ydts6VxBnO>hJh@`f`T(dL&fT`KOr`|hkU$swW~3(+^!Ibb%Exa$gRDL9SVz{VE>=;$X$f$o;eencrUyY?HF z12VByI-wLCoQ4e>Y6pjCQ7>Y@iXyWu==4aWDE&)WDN^Gypay_$K@q*_MHH5Z0-Pwy z9v2)OmBtWZ`HeT;@EnhrXq`=C?K~Yn-wYN7xqTY_7ZMMS+-fpkrs1nxu1hAluTQ=l zbn>EgrStQgK2@r}7aSaP6Su6kD4K>lO+#TD0eUfQ$k2`ai0p3JT$37S+matmbnq3~8S9?D|Jjval$Xxg-?Rp*n>(XWT%dMYGWPYmi;nt0n9{Wyc(Tr3N^NTuZq zW}dLgQ#jw``^fDxQwI+AwK%J&ldi6^lrdw%5IR>Fg*EZu&^%Q|P$bssq9>nxQfW-8 zz=t8M0cEWbnn-YnR#6cY%S_aMoO~O=9&^kwS=WcDTaeggO{G5$3al=oW||5()Jjk# znxD%@_Js=Ka8U;vEX1xbT*K1iy_e6 zpn|H6ojcoekpk4sXHB((4U<5p{{7T z0S97sU>-rEf8~`|tSY*3D8%^q0ffECD*z*i>%#Gf>VaA==+i zeDuyc@3Q&Lhp!|S4mD>fXOISAA&1!o&TEN>f(a0<#ykd~#G*gtFos7{7w8X*;g*;;C6 z;oy%Ag_j9h1Dxc|0QtAdQh|3~U60sjvun*aa+07*qoM6N<$ Ef_lclN&o-= diff --git a/examples/resource-bar/assets/Playing Card_Clubs 08.png b/examples/resource-bar/assets/Playing Card_Clubs 08.png deleted file mode 100644 index 14b9b41f8941494d6b7fe171abaf840b98088684..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4257 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 diff --git a/examples/resource-bar/assets/Playing Card_Clubs 10.png b/examples/resource-bar/assets/Playing Card_Clubs 10.png deleted file mode 100644 index d2c845b541936a99ed097f905050616edb552cfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4501 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 yaRUmHY>;HDBujPEBZ diff --git a/examples/resource-bar/assets/Playing Card_Clubs J.png b/examples/resource-bar/assets/Playing Card_Clubs J.png deleted file mode 100644 index 3365d34abea47a4b1bc0d8cf86f9181aca854998..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3208 zcmV;340rR1P)z1^@s6x0_U@00009a7bBm000fw z000fw0YWI7cmMzlI!Q!9RCwC$odt{&TNlT>xVt+n5;SOV4eoA>ySr;}m!J#5H4r4Y z%eS~gg1ZKX1>VA<_v`~pZqG^1%cI+N+WYIh_uOM+VT@UXYLy_XHnr*; ztA<%M+^UhJKG$&D_+p%!VceZqh`?mA>T#2M=bID_7>@ECDFY#>EmM z{$qv=8Q8I7#~6wBa`NO!mN8>SDL~+22^BsVGiFS7=FAxyH67*j>C=4NMR35yazXfD z?b@|zv7ss`3>C&Y%QU(adU1Hzy9h@06X0Vba zOGfFsb?a!<%>t)Kj~)*1HEr578g+t0a0m{;Avgqw;1C>wLvRQV!67&Vhu{z#f8#avR6xdZNj7@M1f>X0*O^4@g-n^OM5FCP|8cwZRwOIfD{T;Mm!GZ+G2soog zjZ&2yhisDl`}fnR>jCHAzkjS}&z_3GY}l}YMqE!*S_vQmW8gUlfEF)a%u{)!bkCkW zG}2}~gpv>(f+HudU%zHUh74il%a><0YSiFn^N$}tXq1hHbMD+ZmOOcKr#H)!Cl7n~ z?j4P^QE)Ija^}qG(pqcXx;2foQE*Tm;?9(g8#gZd_3Ianwh?e}hLJmjK79C)M%xHD z7cX9vojJdM|EAG40uBbgNRc8g;dJTJg+^LWIN{;pZ0OLTtVD?ttZ?DNtX#QrF5$p? zUA%a477`Ldj!&)OJb(V2WzL-0lWL(bt{`Wb0&{D_3qu9FR69w*5%7D0)Sbv zWMN5?B$50s@#DwmD+Bh?YSpT-R;^mGzJ2?$MT-`(8#iunpr(X#^X5&Tbfv&v<&FIL z^M~ENdzWqBzMV~+IFYqz(Sj8yP=Ljb9b5B`8p)C+V|D7(;U$%4&z@yJfBrNF9C!m_ z#fs(i7i`zAovIItC1>^O)vSH{_N-8$LfkwzOZyYdw9wE{bL=@7AaA}5mJ)QSkaMDL z+O&zA;laVdrteR4?bYY}>YN ztXHpIEN|Yte$_ZAU%q_iI_F?hgxjWT*RHHXhYoDnvSr-rNt!fi)a$Sj!+U^+JJ?w9 zZ>-T$a{KmezwPQYWy%!u$8*-MUF+~Vgb>vD)T≥&))ML_c}*#N2R>A3x4FM)7NN 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 VjCSuLAddh5002ovPDHLkV1f*KUcmqW diff --git a/examples/resource-bar/assets/Playing Card_Diamond 02.png b/examples/resource-bar/assets/Playing Card_Diamond 02.png deleted file mode 100644 index 30bc42adc061f3b5589c3bd025122e4a1e6044a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2206 zcmV;P2x0e$P)z1^@s6x0_U@00009a7bBm000fw z000fw0YWI7cmMzhP)S5VRCwC$or!N0RUF5+<-ZVHEL!l2cMudK#R{cdm74-F5Ku0O zRSqjD6-175X%K1&C_zy`F(EWGprOzMTCh+AIYqESKv8ISc6MfunV;_s+hu2Vy3B6p z+MVAw`4ZUfvNONWy!U?Z&Gh|T0N_%ZsDOA4aSd@RF^|^Wt)ckRI1g9lpn%ei_y94W zP4|A{3{^Npqln!YBuh z9a?A8xYGF2II94v4smf6Du0-nnF+PEwSY2SH8nL-yj1{EF0L;kUrbL=hq}5tjGBq6 zudkQlu7E?ixEdp0%*)HeXjvc{cLf~E#l=OwSW;4gk+MKE?g}`Ri@dKZFE7VPSs)sB zm2oFQI6(op`D=h3JYCh^sU;vXEJodQI0TG$`eJZD@M=u6LuVo&Q{iX?gMci6<162x z8BDvm_scN)X29WBY?cMyJFNr)2ODMPOV=yjvk0Sa1ss0K#;EuBw^t$@goAM8`9Q-d z@U7n-cCh{g!m-^vhe-VAHV9`fMVVjqCBm^1j&R`$Fi#a|%hujqj?p&@PCQ`PL2rTB z#$fc#fP-L?C|hHC=7Xo#m?*QOi_8b(_amJ9rP5YNxONjfxl@w1rJ4pO@bgh%N6rbG zU;UM_XBHHIEts9unPJLKLVatu%D&J4^&W&{2ROmwr@@_(BTq)U4*=o(6@^tz5Y{%`hn+-ja51>&7H<0hj` zzkxfmzcx5DgFJNs>@MB2HTn>HR4_7fq^ClSmhZD|n&9|0?Q+hlw5*G1bp!LlXn8Q! zZZ+p@1OeC)b7FU`6BpQW!fDzhG%Via?XS!{NB>xUZZp$Hmml*5&rlKm`4W2 zRb4o>;Q0O02Hr7CvkadlRYEjXw1iCFH2IdvyAL=E4*$^xZKYXOn!EQJ|8aSAEABB! zD#+vrIDtdQz}>Z<_R=i%C(KFbYkukQxM*vNRRK69;LvTmXsMOBw#k2Xq#+xS%Z`iu z|8!r`n60?<^VEjpowOja(k$e2MoL*oR@E6f9qtL2^l*Gzc6X|lfsyrnq@Ch>jfvfI z%C@9t%Ms392KPg`oh#8|P<@~9n4?zhw|&ehm>n~7OkOw~FICLdrGAbP^?mNsy)lmu zmG;0+$!slnv{~QEQ%9N&JlJ~`=EJKMRkf)-&*6$z=mLhDxy1M`_}WdWc&s$eEc`U} zR|sfVM7yL;b!mOZO9QtlbFsbE;K`k$xdd6#XKTUc^We^WEipLcbHS76%)OxEC{vRX z^BmuXZxc(S%XirNyi#NNMihY^Qxx9>v~aFrrCPi*7RO(T`ICy&U0b6!v6v@^X|Jk# z>$Y(#76?aWz};VW|3Gx@CoM)Ax}1b?I!LdJ*ToLPvI^tZ`Vdb1D+lb58K#tKQNr<6 z>;$omk(sVWI}c9#np@WE@^PkTJ_s#0%vmK@!0~U}6ZIb2f*lD*ZMB+C0L>D@(GsN4 zeI9P!Dsx-z#j6lJax!eS$Dte#hu*}Z^B+16S-C*#-&qx9K{$3z2zrkLcJOqW>Epl%$BI0ot-B=e28$& z0#tce6Cepp!zs+x>;@ERX z`C@*4K1Rv{(YPz%P%f^D$QQeG=>iQ64HzvG)!5i5#a#i1a&b*k_H|iVS<(kk#)~!t z8gG^HhH`PG6W1z#NJ-}A=0b6Cu{2nr^)-zvjju|Jfe?>$7lB6sWfOZ<-h?*altZ?} zh5iu&R7lKXa4fZlczl>i`(HwU9w9!AL9)b$h_hroBL5Krltw&`cmwe<xGP!w57|N#&U*#!i~s-t07*qoM6N<$fz1^@s6x0_U@00009a7bBm000fw z000fw0YWI7cmMzioJmAMRCwC$oe6UkRSESs%e|?o4K9XT#jn zUDXt9cF9bC``+~H*WE7w00E^+GECCNk~T|vMpB;Ca6OZ1d1fxrhHRTQ4tInFaWBnt6}NV zrKAQc+7<1Kc2)tjEyX1;PWi)@t)_%`gXwK=dSGZp7@$Zf}Yi3ErT4ri2q`7MIu6gbI0{?_)^s^*dPod_p<<2XqE`43s& ziEu&}SAwu>KUv>4IDegl@b#lI8oGR_Jyj##e8$AC4eGWZ1*5_6$9{2#qayNA~;T?`|SEPJknPwI6~#%H)nn&)Y%#{s_T| z44wk~bIWBK8U2_gaFW3=gl`zF?!uSd2f*?Ef|F=$f?)T71#KC`mc3`n4MnGG?<;Xn zz2ZM_E&kpox&f(8dxm(;8#e3u{fWly{&S`E05S`Vc;py_dRORz6S`ywh(}NOZ=I9) zvTnvfF=fggpl#I(fFK7oR+J7DCsK=o*;x^XKY&Ao=fU|G>etr*QwV9WL{#4@|pw zgnuqzGHb5!Pf8b^^amX7k@^4M`~~G8eEWm((^>0oL%^ifiPM|maN-|s>AW((X*?vu zQG-1+fu;Bw0VaI=g8;F(x8aDt9*0n$JJeU^(r7Y#ZKLt~bU$;XwUPMqQI9`!bbOO> z1#fs%KxL#BqGnu^N@SETsp5G-fW{hS>!VwSu2BC`vYkNhLo;5EL z-ET}`&lyZIadufHcdWS^QH03wnc7q9gr^<3;IwQJD(u*o ziFaYbhZQll%$MW%Ul6+V&K#kd;f@W}SQ=a7Uus~vYRMDUXLhokS+yW%>uzw9n3%{e zfUx(VZ8yd}u}Ho>u&@E#CZ5>OQJvnR9E5M4&@r{%Rpt1NHDAGD{=xnqA#~L+mig&M z@iZJZf?VVP_zsSnh2Rhz5`sf;+~f@;A^z^i1jmUITd}rdLv7<11jk8&TLQt7TRUQE zeePge+62c5vsr{=NhPxM+sdgdZI|HKEL`!f$;SK zf@7-NtWiCkH+N0?oRhnIxE@Zv>gl}Y9}m?M95Y03^>p5RX@|z&Tnk71?GN46(|HxU zdpIz><6bzw{GK;ATen_V4&qNo367!DnnrGRL2mV18);fI#UW73%`U_tFsbr^;6N%j zyYI-ZRkfL1`9OY?$Y5~IOs0N8a@QK3MH}=91?;vm0DO$#I7O7X1>7@Bobjb8;0R7n!cm@bmDw)%tl8e{TK5_2$Agu3 zzJ!AT&RqFy*oV!oJ~%ATu2;u(agV;}Lpbp`Yv8T9MSXV_tL3p&@CccTDe@HHkGA*= z4*&cLeMhsrWNq&?eqLSYQH&MdM~?XePGb8m{pZGE*TS|v*0}S{U+26o98Fp$0DA%s zw(Y{BRticeyk>+c4ajBJCH?={S5$Kp*S_v;IMInucP$lH`ka}fs}!~=I^QSr%+aV<#p-V@&(XbbIG&xD zYsmRIW}NSnXL<`=Hk9?i_N2Eae7Voqlc#pl}Sw-U#0$lMoqIUDyJ2+!LlB)xt_rG)f}FgYMUCO75B1 z8g62RuDDD8sk;B1vK5RTK%R<9Cq8e@52yP;7L0TPn0$adx7o(cTB;o`Sx|5OHB`+r zx8$f6WwWGM{d(4&DqArcEratyy$|4|V{WCl$)7V9SAux-gf&re z1)TWmO`YC@BiNU4)S}h60JKU7jvgbW_IbD`U$*x5>VSh?uY?_YGpd%E>S;LW0pa=w zpF?)S;bty?`1;Km)f)l#ej>XKXM*zc-_Z2T^gjEj%D@zlM1)A?G=k$q$=3&t;MnPi zD4sdEO@Mvf(yBLfL~v~K)(DP+;b7JcOHN6t+6lk}hZdm(hu}EXA?P=THR{V&Oa~@7 zHVCFYrJEw@+WhNX!IBRNj#Ypfn{)wUU~)8qB{(($(gH(ptcc_sILyw8Q`3As;Bvv? zvtOvKttBhlAZT|57~~T8D*MIC%1W}74T5%8z(Fp7`s^3Gb?XK@ckU!>St#x8?ab~9 zILIY1Q90L@mX@*)keDwx5YXN#&l}_tD3-KE`9maGUS1BfX3b&`D^g<>?TYqQ88MLJ zQ5=xqA)wxpMpfQKYP}+d-i!avel!nDQz6qMb*h-IXl<1M@nN&cz`6VgLXD07*qoM6N<$f}c<4 AEC2ui diff --git a/examples/resource-bar/assets/Playing Card_Diamond 04.png b/examples/resource-bar/assets/Playing Card_Diamond 04.png deleted file mode 100644 index bea1b5c3e1128ef23e00977915387632b3e6c693..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2458 zcmX|@cQhON7r;Y}2#JKEDz?_>Q%`?Fj4B#cwYSt0s>4=$1vN{>s9Bpdtu|(3lp2-V zk6Moqtx8hQ3TpPzX!S?mIq#4Az2|)Hz5jhb=iWz_=0;%9Sr7mK02^ONSs!Qj<46T^ z9ltHbw$G0fkN48d(?a)X(mIW8D=D zJ>RGu7V19fOgX(Sr``UeGp6393;)poNCM{FxL<{PDQr`VAHp;15NwC>rPxP-P(4qx z=2#_t-@s2M&3OuNr5`V+pJvHa(aoYG{9iWVy{;~xlGu~g*)HZItCG4UQ*k(1V`F2v z3m0&IFD*S~*0?&nQlX+bEN{i)?!MY`GcaIRR8*8!=r;)nP;G1hO3~fWuJ z8U}sUKG;TpL!SIVkoM2eD(16gJJ!m?4$$d&oGlG_tt{ymq9 z5rUV3ntUGKi$Fp~T zGbB;gTW#h;!9I!RTWG3tc!5v#A$DQ(;h4LHn0xD!eh&D+!J7_Rv+fM;pn7w~3rI^E z?qwZ(>^MBL@w_s5VLn^stR?l(-3rGF4iwcOg@{uQbh#pltBiw-m~+#wiPEyVosjib z&0&N29-s>13S5i!u{{$knLP<$W9L-x3nW-w? z;>|hvX%W_7n}u8kg&+XYc_4)-N}#BEy>5FIK@I*UwwyTHi(Rqx>E4#mG;2-r7Mt3| zdJdXZeC^{ioaM6IZ*$4*19-Pwc$+M&lJ13UFxpKiOik}sBVE`o{pN(BM*Smm7=hRi zNE^+7AweQm`z&!Lc`9?g<)J`Vk0Pw-O-k)9&}`p|`P_gO2v%T-~#P^b70EjX0A`NKBU_}03CW~g;P6zT73F) z%S6I2JaPbv9Oc=Sh{>8(?8WYM?Ahk1p)`6(>&<6MXsLS%SGgtc2%B;a{IJnqP}%8k z@4X+CSk7fp@`B+dGIA{_tynOIKJIDpKR8RXb6~W<`(}b#d$V)cc5`fG&fn|#E$ELP zF}~1Y*W}W`4RdwJrn!OU??ySC91<#6z02#tjR+Sv(vILE`A??Nu2lqK7W=)#OC^M_ ztXua5kxur=X1P7?-J{j=jJ;q%NVPoSt_bMjJQIF7$qBYNQ|CTzuOKk&-uuAh1_y&6Fz24VKW zt~%+p#gh<8zaynxd0p|_4ShC;Lh`328p!5Hm;antSJZm8G3aVRk~@QCar>AdF2k?$ z-PGP&uIF~CwR!R*YcMXLymqP&I7;Nbie0j~oU+NRrE2=@=1a;qXNFdZg@_6w#BJY9 zr?_WsT&B(Vs$JEE>;!(EeV8C;?dIs0?zE*$(#;uN3K=Q%diRD`Y{bEj=>-fg6KfFd z=$vgbl*@Me!@elPt21;WL_R+nEICq_=Op3hu^MSq@<&?t1lpC63?OS#$P=bL0l?u~ zCIIx#b(|;tm1T5~d5=+J7wh8T{cjUemGP5v9LMgSK9<)K3IQFvtZ*!I#ebw*|38wL z5P#BhLV((lgn`zIrjNf544(~H&9$Aup~zKE}%HNoTTnP*}|m&a-pq!=eB}~ z)qq8(*v~!EUA*Botua6=ZtfwdQ~73X$4X0ypX|F^jTL5vJ}RB^UEeQ-2m2=(T4g@_ zU!o@+`OwtP;i8LqOBSmS{jBT-3J~knWV*O<8u?NLSO}90q zsT1K5Wv3%|=Cx+-a@4l-9u^WDSQY)7A$D2uk)N!ktZfiZm=gmM7kH;s-gah;6Rkp> zerJl)&vlFyxVV)?XZTGPp_Vbul?Wm5*QgmklG~zBX<;)pN|b$sjjicv?vT?e6smX1 z(e6+~>(dA8YeS=<1Lg{5ougql?+H36hTiE{d~7C8y+o65K~6IZ+BSPDH7n;G>JB!Fz;IyuM6N|zXeD^)>_kP&Yy2^(No2cVdQz4HLyRa*G3tJ;mAI| z3GVc#iTaQXC=T!HTwP$9(rgmj!XSP?^K&NjoAgwr1ARO{Anpo#ESF6)AwZ@|y{Zsw z%KRw+*yEtcs9B@-q$ntfO!@;3K%bR3Dnyi`#LxxWX)Ln;!>P^B(awwh&Ob~%TXP?y SymWkQ0gMgJQFR8c@&5-2#g#t* diff --git a/examples/resource-bar/assets/Playing Card_Diamond 05.png b/examples/resource-bar/assets/Playing Card_Diamond 05.png deleted file mode 100644 index 9ab1322df10f52bfa4fea0edf6c55f18449957fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2871 zcmV-73&`||P)z1^@s6x0_U@00009a7bBm000fw z000fw0YWI7cmMzj=}AOERCwC$or!xCMHav(;lEe~4GZe$daUcQ>$j+Y0b*QMBp`x- zD~Pvf{9F_@#0a}0%Ca61Km>0=UDg{3%assJI1~@q<@3giEO+MWxw@=ZnZ%h+Pj^*! z^>o+p-uFE}91?o^{pxu2>eZ_dAtYo}Dx;{*r`k;QC{+zrx*pBi7wmk6DF*|Tlc+XP zC8$N$wN(3>!l5#TY9|`WSB2g*Iu8z&{!}AqoIogW=%3{hDx%LTmXTV0Qx?;1Y`GeppvmhnDg|!0rY(z$JgIYiw*p zOZgyRcawQX3{LWeH%avJn}k$*cqv-H7;v5mQy$DUNUPnkO<*7mR!^cQ!-PY29!y}31t6jlK zZ~K&V_8mgB25&vV*p&N8_|$5W`R0exfRlXr9TKgX-lNIq-;@eR?~JhC$A0&O!JZ9? z5MA&7e$nb1J@2J~S?9Qc6T7J)?{~vzUP1JZgHjEV`TScF{`H9b_h?vza4cK%sx_ug zMRaT}wP;3Cmr0Vyu&KSD<6$rL4Ni2#G@{LVGEbv5cL>ADeDxg(53DNa^(7vEUWyU4 z2NxE6h8MlGsBlv6Y-X)Y#GOt&@uKxNqvL(_vKy@b9qJ%}qu@qTo3`10cd5P94{t5` z;@jMScw%qboW)%KR^!wncIBu2nql8O1{PpWzXG8{H>v?#`6FBkP=lt>_CsmU4CwuLOnn4q# z8IDD-3pgv%;Lyegkp-pTBwugp{UU$7hUk%)^)UGHUh1x1>e^_r8y~c8ICR)^4TpZu z^hbNt8rC4p9zNwV^SOZbCfm`iaizP~{D-Sq1lw}RjmBAHar2zSqE{4i2vTX5pl&(b zyt>9_veHR(++EIF^M`z`Ilb$Dj(cfr!rkn9Dg_5xliiC!5K}*N)S6GnK@vXW&*H6l z;mcy1e^0$6{0s>7=m!p~x6U!!59!tF=mL`~%Fxs*)|$sVXw7sD1_4d(=bSK@q?>mr z9$PEa>dqZQ^drakJ-++?>3M6`e>%`Bx1nH6(1-Ix(!DiEVmA%#w|y+Q$pS0+zu30s z)aLE(whZ2DwgnR%c?+9Um4^d?!SH!w^XG$qJnJm_V-o|@{=P(t5#lo*E8H_ryPRac z+pq3sTQ6^D>n_rH;*hRZS2Nw!MwM}UyQek(>1JuI8RBsemotwxY$AS%XR$Tyk!2+O zn~`i>cO9uV?7OhmyzeKehJf=z5Y5P2o82>?_$l5+rD>~{wTkZAu^jDrYfda#^~-{m z&UYlPl_(s^0uw(t0Pz_fwr1*%gIf+u0*I3PEy}=Qt~w+udfb}zjzc8%#`-|KuTpT1 zH$gZE2L<6E92A5j$u&;C@D{=eqQD-HRZaoI@kw%X5@72*2q)DL4l&OY2*OD zJJ)=Rp)+t7}1{E*D|``LDa<+k=&qgeb5;S|*a$dKr$+qm)pApOdZ zlWNB;9M}q%dh8M5Na{4(y9!8%B_R$a=^dXT98cY5C?N6san90r>F?>s!U)GJiQU}b zF7f?_dW7SJK<>4aBO?KgzbOkR^X-q81tf&D|L{PDchrRg)je!-vqkE^Wxm*laHI}v z7P;9%ZuRojIIMZ%5SZm=i#Pf7d+Z&TMjq11bnW`YMqsvjX1S z89S_(?h;=DH18<*F3_8-?n4M194JE^K6{jSN-fWABe`z#(pSZk5TTbI=1)R|9-UiZ z(X>a>5keU_v57OBrPlJ?Hqt#go7D64qL*?Vh3q?oMI{0cC-L-a?k<{u+eX4s>xaZO z61iluyTtdW`Fd&IwatZk&b()W-*ez5Cpe1X`sOK{+eV;9sOysn0=?Agyegdjw()g$GiK`n|THt!kLfaq8Mx`AuLIuxtI$DIDH@2uJ;YuTXy4%#Frx$0NdfirWkJC^r32M7Rb*fx74%^z_ zmZ%4Zy{s|8!-I33rU@Rio^z zE5a!iKnTYNK=Hfhu^66Fjdcfo?P)z1^@s6x0_U@00009a7bBm000fw z000fw0YWI7cmMzlnMp)JRCwC$U5k5E#TDQ1XM`qFt9@D(YipZ63@H)>5`jPvM57{z zB8DI_KzV4jUwFSMUr_|1&_aY38V#=mNJ5Gh1WQ%KQUsKOlvnm~_dT66Y?8fq?_=i9 zy?6KS&iTIMhs&~a_xyIwIdfj)K?r%2jHwLsBFqOdU&kC2Y&l;~$QR^1L=^`GD7`Vi zix~-aoEtIctAc~69P|3^)`dgR@)tro6m7R8&-is;jHf z(xpoUTg)I=kT1wt1)$vtTs*^-f0>`3k6Kz(A+0nJ$Xx*r;Ns~_ezCT;R!Axh1aen^1Gva_9T+P?&J)O8#qO|y z6Yun)z*94kfAB9gab{ZT2#y@Bx>db#om!;}@0g#j6&;rv9P|ZC2kK#h= zPJko5_&aJ~x;VUPr|E|czq1#`zWB;kfkcmej3Ng=a6dSKCuhn8AN=j_QKaR48G|iK zeotui7E=!jpm^^bi2P;GV+q=$9^-xq`F{Qw^4>cf#joAWE^xvPyHnm1oV|h{9Bixn zk4)1&0814+iM;7xXS|#|hN=jef?TdsjJ%U;dvtb@tU|amhp6ous8@KunRO!jI&u@7_?2tO`@=`f zfdi_i|I^sQhYb!iQRE*u-t-#a+`x0@95{ih8K#An9759d02i#|UL)|t^xOg`cJ@nd zp^;zqcLtH&p|xwMyfX@peR;`U-~>ibL%}&KW$b%s9QDqTrZ3?ZTIkJp^v^Y$c5$x( zF}RH1Iibbt*}hmoKNLBj9gYWA6{5nX)y-%+mpU-E&b(c7(52?igeujRCgTGooW^PL zDF7m~I{QHx^D$X`nD?n+bVo6FxYWO5;&%gckh`Cpss~DScZrnc z;6xe^rW)-BMxppkFV}+x#?R@o0e^be7GZ>zZ|sTD;p0KN$x?8L3i{p<4c$G5PrY5c zRfG{3H_JY0U^NMKalU?4MAc;vI8a+QY_e_DopG+Xjz=2Gp;bHFf z0jBf)xk#3QL&{|pDd`l|_E@bbWKWmP2{-J~E$(nCgDAk!a-&~(T{Z9tm7jvr3=WA` z{q#|J>bQQbkaVUTLP<^rA3n)R9$GfE(#C?)6I+7=9pvj{7cL1YXBs$g?%@sF2yikq zpCd?sBft?Pz!BgG65t3D;0SOmBdATVouDou6c*sH5>x7k~!1XZ0-jU&KepssX; zodtf;j}k>5y^Avqi<;9$UkC=?M3C# zOO%qioiJB`qiX}!ZnJ$hK(zgsW=SqfcSKHs1KrVj#q7{%#p}UAa?pGKNZmHZ*!lko zaAXvTAm4yzC}smJ;#x+U{JL@b$FRw18G)Ix-~{KV&X9t`F# zI51zvY^QU0{SLYV?Z%zv+uUJBb}oVwY5qIkjDXt*7>*5tT4?VbrCjU4$jO`n2TtQq z70Nrn!T<0C?UG+O(3U;VKP3dJSFsD8JK#Wz$K6A@1xJPxX}P`734y`m1_vAv&VD2J zskPnhe1hxKAH_aBqp#LJKS$Ibms&IFy1U;Ym^$D5+?%!A=t4p??J8OhLG8jEcBQ?3 zrV*0ewr12+`t}mAJ^201Dig*f`=#6kha5tWd_*;Twc7@Kzl?c2a{S`gY~#Ib7&PwQ z@Xc#$=xspbAyaFFckH8AnHJ4F$d15g7zTbnWo!ec)N?Hpc=i=zm1*V7gRDsze4;)o zUpDs!+bAv@2cz=)R%okC8)hD41vtdBTD?Vk?#(|=TI0eW_&_@(w52g^-#zow)NpVd z`aU|$O%0|#{Tq}{az}y3xr?$+ZMcfe>TWsZ2ul*8xq3r@L**Y}^+JSp zM=6T^=Yl;hJa(14@<>hvH?sm9;#pPAK;g~y+5k|OPNoI21{_|`jLtiVI+{?+8gO!r z1ULd5K>{2BjvxV!AOVg5N00!=4a71=Q-I?jh2Q=wxiOe_@~!~KAtJp-iIObZo2vvk zPEaT{#y0dAi%M6=RoJgeHHq}ipw`;$IgL{G}_C-%@SM_#(Hz2(dTKE7W*q}bi1@& z15VckdvIf~;pO0Ff9Z(}_E_#5HLKo8kB`9`?f^$|HKozz;AScLYRbTvY1Une0XNAH znkc{3s^$IcIOn8X>Izexu)44mf0avJp^wM1ou70|3hj?8IN4|6y{_QkGom4L2K> zPoi&ayniH9dpj9M(YM05&r}DXj06WJ1TuG0FMXS74LF%I&)0eGRr(!?9Tw_FU=4sW z4xI4zz2@4`$>c)1hFZ8cTXvf+%X}UDe1^7?Vuo9aU0bw1v%z8Ra5mG54vDXRRpzI6 zz~n-MJd8ByHTkZ7YX?z@$qbzgM$KTE0}jjvsI1{0eFFDl>mF!dSC#yF6#Wq0WC8o_qG_yXd=GxYsbc zy)i4nAwyTO=VDf9v=IZP@R(Fu>3GBNi}Lefo=Mn3Vy`4Hsrav*OGlp0j z7-SY#S2k?#^K-@;KxKfq;cj#TIK-j)!&bI02T|(wV{B*8)}xw(zIn$~f=8&_8Ce4k z@!Tq^>A%>k=JGqi*(+=t@CsF(fk$7;LU2I6U65Zcp*xw-Y}8l^l8Lv5DieEnkXA7B z`BKe1vWt|g99!lpa7eUZTa&)vAm4I|FW(Y9ajN^OX3eQoO>NeDrmpkW)Z%R8W@*RM z-e|DK#x2=k`cSL7VXEtIIW-AZyO1d>z=07b-g{C9vj#@nnBz|l2l)c*;AG`FM@x45 zI#QwlR#wM!=U%>5DxXSa@^0;%0*8Fz+J!wfz{0vRnT^}<7u_haS#V%3oPY2{87pUK zyBZu&FYqPdv~8=6!=4lfk7p_sI1olohBDHvc2Se7Dn8*B4l_1@=|^zs3dv$}tKz>M zpaO^hqoF=Ut+buCa%Zz{q+Jgf0ge-g>652Pv5FcS&5hFn$D8~@U0t1!avBKat^fvb z@w6qsSW;3VB$WmNxhuc{Ts+H@U+mSZ7iw*771DB$+S=NP+!f#eE}oG}T~|<0fDRu% zETrZDwYRsU!oor|djq(5@-XjL{v{v@TMcyKnl)<#Tg)I=kgv*)K?ywaJQzFxsE^Vy z5S%s!9QqJk;6Dj~MhJk?&YhSmx-secL(&e~FNBm9-iNtRhDY-MBml}w7^78~k6@OB l;A~+jA>UOAt(B+5;{T+k;^dlS)qVf~002ovPDHLkV1h2gKR*Bf diff --git a/examples/resource-bar/assets/Playing Card_Diamond 07.png b/examples/resource-bar/assets/Playing Card_Diamond 07.png deleted file mode 100644 index a7a1dc17179eb5301bd14281d256fe81999a9d00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3499 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 Z{tpu=Xg3^z1^@s6x0_U@00009a7bBm000fw z000fw0YWI7cmMznD@jB_RCwC$U5T3%#TB3R&%i8_XzoM;F)<+~!V0d+A+Q`lR}m2e z5jn!LKsZFq$9;o*atnckGeS_#U0~Ve3YUVMB8P||a_!9Y%+BmgrCu?+JKfXWRn^yY zPgi~4^TVN;?s>nicfVHwgit_9c(ung4bvV>cQHi;Sx$FT`~^O@Q^i36%EOpG!Gr`k zPFpZFQUwRE4w&uU8V(4aws(9D@L z1zAkMSKu%3Sp}eNDO>`bm4Df&Q6p4dUXH}Ff0dP$5q_%x1h@odDR&I~1F@W2un|;t z5a1HnoBmf3UC0IKy~_uB_$<-Q(0KRcLg|ri(J-$vJ%Vr1$_EV+Es96Xl5`x=Kg9E^XU+9Ob8$GQ{kwFs$Ku&_g3QRpfLnh&WloVWd z0-VS@|6m5Dj$$h}8GhK<`W+~7`5RjqQhW3Z6yI~$``}2gjgm1w`rZd9UVcbMpo`M4 zshPjp(1QXf!5=?|!tLL}9JEI~Cc_aF`qRrO_?ylsdFOs^ffHM|E#sQ#m^tRb!MZB^ z;(&(ln6cazW<*M-*WW{WV~hZYW!21GB^Qs43sCK`)0Q$KUUo231poU}0gmpb`Ql4d z{YdK!#)VqEgpwi28gX{_J`rWgdjx;-yzM&9F>q>Ttw4!W7i1K9>pkP()WlGz;5BXQ z?{8BqVS?0moaQ~k9R}E@URcz)d3}Mes4^ieRC59f7X`%?4aY0pYawr@$HrP z!JlCU2jqI<;#E4+uyY%FvODwlN-quLcW&|Z;ci2i?-6>cnEAzWrOtu3IQ08&G6JQ_ zt8*fQC-RHSB^&rGz(wo0?-3b3-QU(4=n!6}5&B^plsI>Z%>q1snOtw=KJlIV{RvL; z)*Tf5^^3;90nyX?b*$lI6o;l3g`ewV_#VN>JCf)09XL|Yk%pO;9zxQ!0H-W5eGlo? z5&i-vap{_Arja-Mr!SD*p|xw6tTP5mT)W{daHJl?P;~5E8HL*PX5KlG5i?9Pt!D9h zeZOYqX4Ch87@X^OPR;aXd_OF|6^ifH4#$J33Q=Lh;-&|iNi7wZ8rN$Mn$)H%vFe>^;^ZO<*<~MOat>BA7 zZ`sQ)G93=%SON}_Fc2ej+2s{=q}1)u2pK=c*#B8fX~bZStjWzS4;)~qP2g&wwm z6B#x|Zhlfk57pRMFHeX;6%H+Z92xk&JgkFvhwd)>{G2@ffkj=mOQb9ZC%$D*rqX`0 zJ4)UUntD*F&)5bX@UKs}p8=R%TX95R$IV{R048=1vb`(?hlrq`x6_c_W6g=TI}eI5 zq~4<`4(9io4ki&(cXh-R7L!mH7i!g$h`QVX2WrbY4YaM=lkjf;ajFiGiihimcqj@U z0+wZFeK53ScsYpVamBp1c zowm$h;E;ILAO0$5!o-F4#o$h!=PJ+22>%>8r4mwYBhFfMY6b zokZa-gY9b>5#X2KE#DGG43Bv+WN3|6aG71HM{K~&v( z0|AZ()BB7;v9icQAb++jwxAHj*2 z9WYl90F6@TFY8-?9F?J(IlwV(r2eBK}N?HG`(R_YH!f zla0^4VVobz)UKjs5R^>yu_+x4bB&O!*EQXTveyNG?!nh{i%iCxP;NV+2R~yPzFMyX ze$gH!Z`|U039f&~H{Q#JLF3*H-%MD*t^>C0HFS^I#+~dUbGq~GBJK@*#$sfC096MJ zo@nYe(wpzHHCok*z^B}@I;}n`-^%t4GAh4Wkt3=7!G2wR~)(#1+ z-jcQ7?*242IF23P&g>4DvV^`Xq{xGED27~2WaP}uVCw6CN7-E7DDb#)UDl}$N0G5~ z%R!Kmb^eZWge3{l+`cEkVX_afcp*%CtPmx>`kF4P_8e}g3t-H}fT>)UM{+8-nG@g; z%c|!{6kA2t0VIgpyvR^42E?V4X@Q&pht)EZ`j1yPyGP7munuY+O{nDzI82t;$7T8s z>#hTy`7JpGPV(DZnp3Ol6@63Z&LR-tqy;l!=r>cn0oGjt94DRCr5hbPOjdxy;|G0t zl{v^41d;GL<(dOVVJko2FvM5w2 zy5`J#vrD@;pEhDMrvjg>m7FX&A!{tN+tfp8^@h{tR?2{(lGDk$0AM`zWqG8vX2(L# z<#Y5ZIi0QxAe|G$<`Y9KO`;YT~|HZ515J0_Mskf6{2@bKe zbbgd2hkC=W#21Ido;mk?o&Mw5 zcO*7gc+ON%1ITsY#5U|OmN+Am3)vcK&74*R&qvjj3^UwVjwo{#INTl1Mq1G!@zu)s zX;ox$AtetJ88AVfuH8yMvGA<9d`s<#v($24-qWgb(^^xDv-KXW ztwa~Cvqs0wSZ>&<^))!;6se|}gIS?D*R~vgdN?Q~32=0Iw{w3+6u`>rnEKqyqlNMg z1cPU5`wATLgG;71=l~1r%49lj`G0hy#D)z5to*}m`^iW-L)+8ffOvr)3EsA?Iu3j8 zz&tY@2w*_)^bCPjs&-J5rz$?7lE#P*;Ccye+_IztA^zXpOaKvJG{k4l)k?c*#W$7d zM%wj&5#TuCOrJbYidEEzHaAWSoM8F~rKP2U%UM{!cLgwjOJHC6hXn-%f>T*oz;^{W zfJ|PLAwN#vO+sCHJ0I#{y!;z@>0rZ9;SnsB7$+YP$b3Qc`2!tr^Mp_ X{#uCARp?Ne00000NkvXXu0mjfy(RU( diff --git a/examples/resource-bar/assets/Playing Card_Diamond 09.png b/examples/resource-bar/assets/Playing Card_Diamond 09.png deleted file mode 100644 index 9586c0b8dfd87348c9707719249cb6d27a7848cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3486 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 O0000z1^@s6x0_U@00009a7bBm000fw z000fw0YWI7cmMzi0ZBwbRCwC$or`l5RTPKQ@?QuPi=g8ZL}h%S&<9W|kJ19t@&4h#mQdLz&(6qP8%1TLZ1wg>Xw8{U)`1p8IU0sc; z>1Z`IHInW!IKahJ=l^0_S{kaw!9aHz9N=QI`@dLFP=HEtFwk8F2e`1$x{Vt*qEZ|T zbXSNw5x@~eV$GUOtgpZAb9c>2RN4q|+@~6e`Jw)dJ3iQeN*e)AOUbSPIKrT5sI(E_ zSVz4V0LR=ViFlgLs5VbH9-Ez*yQK!gq3-$~$4Ok_xQ^5*f|26Rl69yyPdE_xgTWC} zr=r?C;Rwl7g2FL(9zZ-z_fc^ka6ErEu`m(`66^4pY}`3qfr|5h$ZnC!^v#;8^-(F(AaoOEi6R5z8Zk*|>A}9;&V< z9P#{R28^Y5rtdx5*!S7EbLbeVt|y$9t$W#cGj1*s&t8<=KEH^0&z@h5s_O~IHgQ4l z6k0ys=|2%w*9{KDm7ZxK!vTl18%+l|?%LnN0wcwp1Ldf^9&j8hx3S5<6T^tmcMRi} zr-rj}XI>F1uLm6Kuy@$I;z(WK-6dOq6J8yU%4-eBV-|?HYtnzhcT1I)4Fc(i#PV1= z8+UHsMfJ6W<0`FU1c%yzpc&ox`OIgX`+r3BwS)tO8;;dGeD10^5j=6IZV36aXev+N zphX)TQACA}2*-W$9I;JZgbEuCj>lpp!b{l?mJYUjiz*ulj(yfgOnU7;eIAuI0vzYw zvcSpCSH=;KU_-Te!V$0BAeKjmD9)$B-Gs&qj>|0-t+zGd>HMY?73Tq`<D|My?}z-rYuCodBq&(7YBpiHP4MAo_knS$TeHDO)m(9(=|z2ltbeT z2Ui+pxsVC>bGD0rSu^9;tnB$YJ#PZ}Y;<K@0u(4GMmU<1@kntb+%^;`{>=Cg;b@uz zY~Ir$FutYp-G>p5CTa7T3qdzR3e{ot7FKZ)j+#$1o1F-+O^67LFaFT<8`5xuqmtR@ zu2KbzuXJnST7;uY+I*-&RWQD;ywWO!6Vc=B#%*aCKnpm~&kEmY zPZsx`6{7-9DXmtX%EiKrF`Jf--~eCd#v5J5aER}`aafrkL12;8a)XCY=Gpy zTZoq4c>r-&{(=cXI0h-ME~)e~V^r!y*C3P*4&~b+t3C)FI>RtEZc#UVBVM~1u*s2X zafW^`d_PX#L}1SEe$r;*^WagO_%!0!2bLgk$w002TCfq}gaX)%*Z< zKuk!93{K)eA~ybM$m@�+01yMpodl^MGNmE&5BNV2x*VUdKwKrW^bG)7U5~ymd!v zaSSWY^c^Ej3n3gG49S2u+6}EpBsq zhQ_C8X}yoV=BdU@#Qd;w6{zLu5mB|DbxgJ$wrty{+;&)gJgTlEb{lplu$zoK3fD*7 zHNrPs&mA1ni0z8;nT|CryA9rhiKR>SS`5e^!Z5{KIZ zgm82)*cG@VJwOOY>zGHA5&r`R!|4G+IGU!5E@B<>R)>3l5RQfhJ5?#p?`6CjQV$Tq z(a79Y4bqfR(89%)+Ykq6#PV!b#63U=N2{r$UK#DzV^=pI94@)Qk-D}YYa#5M zh;Xz_2nyFnRF92tG#!09i7@cZ4%cHN9IXeTveQw*smDe*dfY(X(^2g6R^#-IA>+@A ztzp+=BOC)8!cp_?SX{!^#}$7b^s}KHq>gaZ9NU!Duqkt9ZjiYhF`zpSN{SJVmNNqu zE4u|uLJIL%?SX8db;ZAKyWe57t*6;0FJu8EO_C0<1&5vBnRt_5jBs>~ zJKOgMJv7~xJtyS74-k$9CjN0P;M^YRSQwX!Sb7X*7TjQA4&mr*@`G%}vlofGo=p~n zBRbRq;b@w&Ih5P(yCe}$ zvl-#=HhG37#hXFXLi$;RqxDpd!j@y9w%sEfjm>@fd|u9}HJKgGV z-drSb9R4p978at&91L`qfdMY26aFuzr>CP*91L`q!2vF&&HgWT>ePwU*4Cn0I$B*_ zous=A4sbC|kU#4Z6BDH$K-1pfMgYAP;tg;y#Z#}6zX>E$Q&UNPe!di}(A9O&74%iO zV~CeWyotgCKs~A36h4HmzXOM!5*PTx3n+)W6~*D|0`+Vklh(g@0rj9>fg*A7W7HEF z9{&IE0*a$Pmih+j_408Lx@zw5>I*u*0lLds{0lv(v|F~luNVLT002ovPDHLkV1n$D BZms|T diff --git a/examples/resource-bar/assets/Playing Card_Diamond J.png b/examples/resource-bar/assets/Playing Card_Diamond J.png deleted file mode 100644 index 45027abb55c6bf9f702b049b84164f72c47b6c07..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3105 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 diff --git a/examples/resource-bar/assets/Playing Card_Diamond K.png b/examples/resource-bar/assets/Playing Card_Diamond K.png deleted file mode 100644 index a741a984e358c080f6748c4d858ab7febe4bd56f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4261 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

f`0+{Hbkf(=9qG76iy`~39frVYa-q7nbgql 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 diff --git a/examples/resource-bar/assets/Playing Card_Hearts 03.png b/examples/resource-bar/assets/Playing Card_Hearts 03.png deleted file mode 100644 index 2b8b36e53b95376ef8963f8ab8e69f77154efb77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2651 zcmV-h3Z(UkP)z1^@s6x0_U@00009a7bBm000fw z000fw0YWI7cmMzj4M{{nRCwC$oe6UkRS-qX+ce68@-I?8;JKa@H zk)7FOw!fWu-LGHwD<6H^~scuuBR9IL@h7B7=YHMrBk|j$} zO;)fg*ca@q0ccyCOTk$6!Q$d#(%RZeP^_1>wl-2yQlbTD0>F7T^~Iv1BC>t^cC?y} z(%## zO=8cznN+c@3*opf&Pf$PB+|D(CpFgCjBwlnNA5n7(OZkmnvd3ZBb?9$#I<*@K)C02kx69yJ?Y~v z`g{1dKJ+IX;iFa(IQFuvQUqdox*OK<*Rhh4VG3C`Oj{DdTad3 z^@ag)4=>H@qNB4PH})kszMLiXf~Q_(EXOqaG5@;KMgZjt1|)ReSi^TH8)poj8$9QF zf5$n(hR+DMxLH&A*Wb_kg5gfcD(hN&c~Dty|hX$*eN z#{7cNSKl=i4*%wQp9Y~HwrGFofn_8#Y@%hEP?&iz0}S`TGya{v5w`5i{`pSFjr?6V znL*A6Ol0c)bU>8+3x`GFXIz_=QG{)s=6nL4C*jd|<^(2OJ&VYZsJ~~W+1<0X!*IZ- zHEW%3U>YjFDJw9c^T)Alt?yF?NkH#!C4oU@`j0b}n{5i9?jtN6Zpbq`c@&ZM{zlv` zrU#+?nvc`YuSIUG>z&58K)~SYwF+93pBV#y2v%%N%KSE8KdA4vTCTM`&NQX35Y z(g^Q;LcAiDP2a>`T+{n}A2H3=dK^eYYdv0LOIH#viKTOEux>hZ(G89aybx3>#=5$v ziPyyPiBBgh*kVt=(mU3P62ftt#F|zSIUM!mwfi29mj&S<92A6ua8M8q3c^7+CP<3Z?Mb3z62q!-$KxB(F z3>!R)LMvF>ARMnrj7K)@F+x;ZA_!GVs18Jm1hnrmMgL6%8$ z&ce*wKzASMA8?>D+R(b_xsCRGQRv^%UkW^h?Fr;-IBZL@Y&P_>xEX7#vDtX(33LwD zs0;E19AWbg-Dcx=rcuXN}LZ-SA>Yy}#f{ zKmV%Vf!%@D`RR(gAjXMIyia=^y!R>pz>)ttY$(opCPv=uEFS_pbhFfA0(hee6QzT%te=)^sPnSa3JNK6k$H)?f#BD++dD zlP1$2y}upQu9~CX8GD=xg1_RNaP`gBR8x<-6=$XMou0|rJJZv_BVE;;$a@_;4jjS` z9nzr)s8c zV2l9rrnhEr9xZh7#2%Qc+>X_CqDH~!0rF;?0}bwK=IFNPO7!}K#Fk#QHT2Uls~iz_ z7S4Jj*#%8LnjxUywD8!w(t2I$zz$-gbY33pGny%{k~N&$l^dHwzfnk=rz$spnG((; z%X~KRN!@C`c`ZwzLG>Cmz5~OgYo-c2%foR(rf zDhS8paA5raEZIt^R(yqUY=8p}0>64gQsrRSr$ML(gnN92DYFm=$0A3CweUwc?i0Nr z8R58S%z;+?u;MeJMpvF99EZF$gyZHoXK`~+XZg5t3tvDu7=$7mgyR{9;JmSHm#b8T zDg%V$fCwAgSjr-sJru;wZxD`cfMDMq1ArKqonNB2<~Bf?z#tquW^(rIW&NwQ6qe@Z z66ZuyUzj&<9$MJ}X=rFrgW&*9d+Li-RaIyy2c){XS`B9xzq<&WNPBxbTFnOO?Cd0^rKMWq%_M+RMD;WEK_FRPUe3lK7_3mu zRj@1ASL2Q$aUMkl6dnL7r5e#V3DtfD4yB9>{1XQ>o@xk<JSBw)F0x23aO5XdvP6ce;bWwzJgslsV=2D4(zUG@joWxDx}uMy^{a{002ov JPDHLkV1jk036uZ; diff --git a/examples/resource-bar/assets/Playing Card_Hearts 04.png b/examples/resource-bar/assets/Playing Card_Hearts 04.png deleted file mode 100644 index b1dccdece93ad916bb5e35c6cc1e1c270bc04d72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2648 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 M07*qoM6N<$g87O6H2?qr diff --git a/examples/resource-bar/assets/Playing Card_Hearts 06.png b/examples/resource-bar/assets/Playing Card_Hearts 06.png deleted file mode 100644 index b4c7bf7ca2d17d1d8dc08cc80ec8640a1dc2cdb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3358 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 diff --git a/examples/resource-bar/assets/Playing Card_Hearts 07.png b/examples/resource-bar/assets/Playing Card_Hearts 07.png deleted file mode 100644 index 5b1c7615c38e01049a9024da09fda47c796448bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3655 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 diff --git a/examples/resource-bar/assets/Playing Card_Hearts 09.png b/examples/resource-bar/assets/Playing Card_Hearts 09.png deleted file mode 100644 index b37970350bc762f61a572fb69b88b42e6089bda7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3990 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 diff --git a/examples/resource-bar/assets/Playing Card_Hearts 10.png b/examples/resource-bar/assets/Playing Card_Hearts 10.png deleted file mode 100644 index 52344d0178737e18071713049711d8179c450437..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4130 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 diff --git a/examples/resource-bar/assets/Playing Card_Hearts A.png b/examples/resource-bar/assets/Playing Card_Hearts A.png deleted file mode 100644 index 8d41a37089fd86a67710d987ad30115fb5dd9539..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2514 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 diff --git a/examples/resource-bar/assets/Playing Card_Hearts K.png b/examples/resource-bar/assets/Playing Card_Hearts K.png deleted file mode 100644 index d00782ac4855b0b1d48dbd2e9f2de943b6604d1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4275 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 V4JLAZ;#mLy002ovPDHLkV1i4|JY@g? diff --git a/examples/resource-bar/assets/Playing Card_Hearts Q.png b/examples/resource-bar/assets/Playing Card_Hearts Q.png deleted file mode 100644 index 2e0b19d4bb2688379870959f52ac84815a1886bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3335 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 diff --git a/examples/resource-bar/assets/Playing Card_Joker Red.png b/examples/resource-bar/assets/Playing Card_Joker Red.png deleted file mode 100644 index 099547623d3d9c9aa8fb899e0dcaa5571358eeb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3733 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 V!-V8LKfV9}002ovPDHLkV1hk}ZO;Gz diff --git a/examples/resource-bar/assets/Playing Card_Spades 03.png b/examples/resource-bar/assets/Playing Card_Spades 03.png deleted file mode 100644 index 60cfe290b2d6cfb6bf8ed8e3e0b83621108fe959..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2707 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 N002ovPDHLkV1nB%Dw6;J diff --git a/examples/resource-bar/assets/Playing Card_Spades 04.png b/examples/resource-bar/assets/Playing Card_Spades 04.png deleted file mode 100644 index feb64ba10c2126dd62c888447dfe0bbd0a41e198..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2793 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 Q7ytkO07*qoM6N<$f{mLL_5c6? diff --git a/examples/resource-bar/assets/Playing Card_Spades 06.png b/examples/resource-bar/assets/Playing Card_Spades 06.png deleted file mode 100644 index 51d1f4d9e9d0d1c09b9b86bc29893c47587dccc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3494 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

Q=8CZP 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 z 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 literal 122466 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ξ(AO9 z15>@-FeSoqW6YXayH+A<>N0Tsi)zdc#y||ji&sFGTw!+~5L9{{>TJ!hTuBQm(?}Iy zWy}OK*C-#c?oaLWAJYKiDknPlL5JsJ0Ecw(xTYAiRzK5zJ4|yv{V+6swnCnYWon+w z{vM4}ms|T6@FOYLjqiTXYZ%2(Z8pB zUFvb#l)~E;^P8eaG30EMRY7&w<2!%D;|FhQPO`4I|66HERuAc=vD-y|XQHcL<{ny% zaj`3_ufinraF(ubkt%T2dohW7Y}cw!Haf{^h<^M#vzYJJ=1vrIX0^sF%E-99)^%OH ztk$TfrqUJUR-Z!?{1@1iBS?E&OzJwNM1s+r7lzgp0oI7D87!FaiU$T4y6tSWgbmzH zAbyqNb#km}9@wb#MRJ3LA*(OA5tKrDM{-oP#H^Yn?7{UV(BXOoyk;D<-;tWqpBG^N z)l5&{*DT!&%zMo7SDGWQ2Ko8` zX&B%X7ZUKtW6amh)?YHEiVo5~Ps#VQ*t9|I6cIbo%biQ4_J+Jd1G1>+k)`w_w^c;8V4=;Ckk&6*}=G)Hl9M4 zF}DK}y$3|R^7zeEqLW`PG(K%C24@>pxSRwuuyB2oktYN7JatQ*b3WqX;BNll`FcX^ z_{MDaHzHemz8v9vup6l6>b%~3#gb&fIIA%&a^;~??xjS*P4K){8?w%nQXx-PM;GWW zq#$&QPpP`{1%k(Pph?#OUL26MPADEZ5d%XnzJs3&b>;|Ex4XF=-c7#ED-)vg^KYMi z4c`dZo*f>;X1QNWi&G^X@>ZYAYXZe5RQ_NVxHo$cYWV{Gla zI~z$yc{?N9G$V-Yu?H~*oq_|Z(1R=huT>w9gA zv&C}2MfkY^_Gs*DZ1r|l1vuNuj93t1jGH^Kh+o;N?@iW9vg${dw@SMzL0D8K5!)B- z_j18Rph<~TRqk)i^J~A==Ho%%Be-+D&FYsLUY_a>IJuSIWfy4+xSnX|arF~0VVKO9 z?wRcKAV`flN*MRY?0MQ@o;!iFsXEm!?=`&DcgaRFf+66>M@7|iZg3|Pzq+$BNLXom zIden$fMQ^J)qA)QJB5zFh`Qh7&kHi=&5o{)0dUo39e5JjcE$9K;Uyk|iTZETdl3d# zA{7?x!0ZTDw#sW+ej+J+*6Cs=>wor^fjsZfIcV?L*)n#rL)$b~+qJSpRIjWUxt|{Q zHjp7uZu$DV!*bn%=ru@Sn(2`)bVU3y;#gdaelN<>9rZp!-ob>kNne^yQORqczYPN)Y*VjS;2Gb()SKtn!$#*oU=l_@Qfxs@$>Ab|sVgyI>FRW| z`lt|xL%waMk%=#7tGIjKb+LYyYaRN3O*~zv7~E3Zsq_#*t-DoDN0oSL#u?LEJFzpK z{NL+&ac^%EI~QkFyP+$ky5o6m$*v&zf*hH#rq|^;VV}E{x1;>M$5IAgGjzEx6Nj}x4Qiw5BfQLp4PW=E*5e*tjV!*tw(uMkxq3vhY>pc*9g#6h2$ zQb7kV=FqHTg)2D2nPRYnm$csc-mTJ9Gx1`N@^u8ao97w>rsY!Q4_9p6{fCUbwehlC z5)?c10I6k%ha=)}LW2rIe{&*qZu9o4zV%!|L~*?`5cu9h4(GY67G%BDFdlyV3XE@* z=DpI*4S|SUHcC4(i4uer%zx9n14SJwbfOxT5Lt=1Rx6uRy)F-_MpcR(aC%65!NmD% z$ev|cZMkHfOtg<#N`D+tHH_!7ofG}uGeKp!0ipHf`=~r}Em0z+#6jQi(-i@XF6%+ywKS;|_K4B+tDDM74zTXdY^T*SeyRIjR&r%%m6wTlF zm(Ds)`-5m&@Cjh{z3yE0Cw;wEhcFk1E*?+$iICRM$D(*TNIYx_ny>x7ZFJLVQ{-Z$ zEm?klC0*XUzK>#9`|78ZDQ?EbkT-bazN7!@Ki8?dc+WqV>&I z*}rU9vvyow58HIz7*y;)J}38TKOf#*a{jD;V{kl~Y)1WQV;)#4I%wfzjKIoU-H|Yn zq}!v8R4Og$vSNC_Opf;&MnO}}uCS*+$Jl9ulcxl%e3}x*4WS^~$*Y|W$Wgqv z(FV5_I>1Q7!xQ;f-R-oVpCwNjvVuS5b`KTIu27k|-|ux$!2ZHP zR5;=BhgZc2W#ZPQDn^7ZRhUQ%wt(uW>EP<(U9B7<>b@}PBp6F)vej#89DY1} zN-mXKU)G?lZ?2|N^CHeC%|Az5y=BYrakS=T$~416Q|5Sqxu1pgj~du8RU(Py zZ9JMzZ`iGfV94b-L>5b_m@6s4>De^P#nOIA`v(#8RZ z1_y!hxD~vz27a&@p3~d5*_$BEgM(e&v6w$LZyTz>5q@hfbRCh`9p5&ZOS_IjE$n^O z|F#8;h=T}sUwfAMyg_2h91gOAyYzU+HQ#d!PWn}$(5Lmo*$(5aR@qGl*z?BgL13nw zGaC)OdGujMkq3dxCjXTRuC#Rx+1O8ojLjobgZBaf@=)_Z4{g2q_^SA~hvKFnHbd0M z2UnxSp;p-w)5Ep@Xu3Hqq*wwyb>Xj(e!OeWc$PWUb_A4`)?5nzJ~Wdld}_sYHF9Q-}xfW+7uRiSN5*ZG=%LHSkO2BQ3zWwQ&q&oA#5 zlr{8+vrRU7f$8=c?pUiR^<~V($y=OAR}sm7LpW*{mjX?9CvLtsisQ0N-0Bb@Iyba8 z{0ji>^W=5#Uz3b{!w0uDJ-es+UNUY_geigwDLsz{8J*wj!UNHs6dB$^ScQMcXjgwK} z^LO}ykCfB7_|rQD%nh>F(+zQl13Kx-5d?n%mk4CVSsf8K@QBLY2T3^T!_@kZ&B zn9`f_Rn* zn)BR`AR5^yk_uyhrQUk)+LV4R)j5Rh(C?21X^Ohh&;Hxro}Vkl2czUw75-zTp)oaP z`CO|kUkUWiF)gOF62B@4-KofLU1PK%@jo-k z$ zELoTPCz=;At5n;T-uO`t^#iy-Y@Ud39;|MZP-<^0pU3I+)A6Q8{#RMZ*7bL?|N7*F z1Zi&``w^7dfa9;RQz93d@Do`8Uhgz_0U)E<P#X=`my(WHCHdbI&h>(DTV1h5ieI&`eLl5-Rd(z)D@wg2bv;8{ewp|;I z$fT!TkIbT{6^ZwZt*ldh%H{Ix9Xszs_Q=LMAW^5EkKYHMs#e6!_(lGxS=vZv>jy#c zit!rGkm1qx+>VjfT}a;HVA%G*0;(&r{TTi?x#Yxz-IFwQzz~I(bi+DP$r{o2=f^ME z%dl(LOgY31cJ zCK}q`n{_$C=DG3@X>|zk%e4(vpeH5f+^#xggJbBLzxAm;wJOUhsQ}6!w zV6Xps@TTbnU!eYF$)R^7hRx%~=n^+AFAvnZlx-i}*Mc#c$;|lncO$FtA7OW4FWHXH zE|!!OLzO+~)v?IU`M-lPrY5w&Z$PL8IAU$-VtMk|!>FqWvVdc{goepWV7jW!z^Tda z{Z&R-{LP990prao09pK+^ohtg_Q8uH*jVI}e9wxrQd*=lnp$ zC`S`czDe%0UQx!n6VqsDBDp+$J>Cv6kCn5s~CNx<5Q zQ9j9drYr;6X!a&ruIVrzioiubBTmF9!~Qw{l*{hUE3`Ppz@WcpcgF}-gi8s!S7Jo3LoSR z$Tj8mM)`zAaJn?o^jR4++F1N(tDPL z>$?_zPQyMP_--rFLAGdi4_Y=cLUHIyd{m50=7_ID{cY=TQ~Y_kfZ&jF9~1 zX5R1i&*zjze-=o8D1Ug#()-Vcd-z0(MqatijO8QS?K3PNG~TC~w^I^Lxa#raZbl%*sH*jym9za>d007aJKf=RP6~A z_wP`X62tpsxuf$veM}Q+X*~vnLM8CG|BD(8%Pn6>L0Cm!^XI26mBPB-OJvyz&=LXk zoexUp*~jnYxCGZ_BQ(wh1NE;-INmjHJVFj(Mj8sBjILKaWXTQNhq8Hps`gTc{yzAb zH5qQ!@bvqNsBD$}N0qUu+%^T5dq$cg``QImzmvr@VWL;IR{Jtg31z2^7|gGQjbnGA zjyWmY4ZkY)whuSSYj(#@nN2>RACh4)H@VrRBtGeMi=GlpW@Rmpq(>*52?3R5;`aNk zlRJdnNd&X}axa@d_eH6DM#!@1Wlz)oFSa}lqegxiv~BqyoO}Pn0ipX7KlL;_bK|ge ze_!~O?EVQ3VVG~ySDpr2x`sK!&5x1kYxf@>3VhTA3WAdIG%U+Xjq8^kgzCm$nUu<# z{G&TubXc<8-G4<}o-oSdOWD&W@}e6t(K#$ti0fqTN()TK)t`vnF1xG$Iv?!NmF|~4 zU3tj0;F06>^g084Y|woapf#D7vh*~N6D@N?#eZ9NEGBAOZ|6I}PP~U=_+#>eVoNyjV zO?CbHxVi6=l)RRuVT$$B-ZGywNN}YBki;YNbtQ=_ZNn@1p<7}Dv$Xi^Q__=#n@I0J zuR_}U?z(&q%!EXwZ}OlTvplA0hsrOooy>6$q=U*ENpMRDL9qMF!uZUS{n>jB4v(|v zK(Bm43>#XzmiD{_o8I!*Nt!x6HBM*$OR*#ZNZR{=d`i2e%ag;y@Ut?IWG}${rCy*t z;HRs7t;D5D;*;?wO=tLs&n!tD6U3dx;QDe-yIlb$%=VwJCMBj(CIxmIhy3gOaM7Y2 zAf61@ne2NH0Zgne)XgF5K>5SIpH&Vsa|>we&`PVvEhbUWq5&;xw!4+L^EnVjCt7-B zGd(W2fi?NCH0|7h{lKV!84@Uheo$r7j#0e0Yhh<=;fTOFo-ZmjqPJ(1+n(1 zbw@b4PcD?#a~$r=j-xNOQX*V3lvo2_5$;Rwl0Nt*J__FYEC!8cJCYzLRt+h#n>Lzb zwXnI_l4!BnMae2fdWR^mM+(0wAn(7gQRtA${P^H-(&4<4;yYgD!U}GtUnS~`E zzWDq3?2XVN8pPovu^!pobVRYYKb7Uo_HMHarjJVmyR*Mu2X3I$#nss}C5*=0+rEwI zx%K)2xB5OKRv!J|4TzVzQR+ewcy=`NSxp&yA4vfWFD%rHKd%^1nii%a7C+Y^WC8xH zO^9Ye({#GxxNey|7e9gJ(>}ZWco9gAj3B97@LH{7QJ-T)RaneN4RwjjB0&$sol$|EJp?K=!}$HwdmRNQi>0+&s4s=+fO6shMi_f{CDZVsqX1 zX)J^~RlT)h<#R3^;eLbtK`?*!Hv;<uUq~fRb;)6v>=Yu70KADSUKBg^>uWhR@ql(_*odH*onLUi{&U?!eY zm{DXSvPzX(-(U`S_c@=L8`mX*ZKnmyA_tevFb>}xpD(|fM->L8m=y(1YsA0PBIS?< z&t&P-^X%De_&@$x^&z_N)AetW1@SL#2dl(VL2!BKtrTrFv^k0_I+b}>C~}@>lOJ=p z`zHWybg6V%08HWel2hg!8_Haq0jEcW&49AW2lG~3Y`*X}9Wj(}(m)LqLcGW4r)%^y zq^Xg$tq_;P*g;=8S=G;DEn~9Q!h6gPvmn4@)pvtFn>x!sC7P_#gT~PE><_p+WF2i~ zd)9cqyX}HN%5F;R5_<)d7pnbqfjpjG-U4WT+I`f*xVrgA%MmJyR?8+|+mUn?04_A3R<)gUIAFOyJnFPIS zvCPui)Z~8REDl_yHd$kWX97J>aYIw( z*?few?FlqZMmA#L7?pDkt5+zSQT{P?Xd*-FbYbO+=N&E@Om3DUjUi7Z)RHN~Tojp@9RDq3yjwuxfF@rEX z(WSVP_D&e1aehYD;3g69?%%y5LJEEn;(xJi3e6+=f4x4&706xu2!c{IG>@rv%w)~} z)Ou8B{?!SRKOgQog(NW^5A+;INR#}m{4m|%Z80yKCZXyn_DiH~CJ18hPW57v2_)qi z4J&%U{Rr3ICypu+W3Hpm*i20~xH{&Lm6yItWYbgiw}Y7S$Vz>K0Y|IR_Ix4~p2$Ao zD_}bBLDeDOZu6Uni;-hXU}DRbEhRS-6H||Vsm*$qP?2X%oE45uS-rXd1dLu5>n14X zKf~LqDhYy~(L%&eTq{eR%TkjGt$SouqSPdfaDt*EfPw7N=Q)~Szj#!6}R`Q+F zi<))AtjJjq>Zj-px1Y0sWH-#u0;aS-bF{(e14x%IGV<1Rk2+F`+C^z^tPC{Gs~i3- z8HBn<^pyVlj(L39@y~N$n>9=NElNq;kME!1`C?&oi{bu-fV6HY9`m|Z<+;5~9yq%7 z^MmvXtXHvrw>GpWNc%@(8V%h}@$LD2`e5nh(cgzrYA+bPMxY@l0zq_;d;8slygN6x1;0 zm}{}z+uy8(Z2oL&xfS=H%r13#kC#xNpyJ-4W?}^<6tnRgn_V|nudUk#8CRm3+XPb* z;dqoC|AW<7$7K8`Z1J`!p+ic38TqeoO&84PWZNn#{!iZWqWKXv z+B}zN$eVY)(mUx$n^&pnsk8P5Gdnpt+&e>T6ikyyv1!xj4;}UmY2Pab=2~%Uq|m0u zQWz9~?X$%Pz2p9J88f{=%k|kpHDLk+hM$KTeKu{7!h_?u!KFg@()#L30u%q1Tm)8O_yI%nB~SXc9#J)SYqDpm{E0({HEK>^ z8IsYgw7c_R{{y7oRY@^&7YMc+q10r!TdkBTk1Y?%{`!GHzs_rlk8F%sXKlzNTC90N z$*0pRO|UQ9V#$7@B(q*oT;S_m?7aqOz{`-9p4AO}#?Pa4rERm-z~%3@LXMkeD&ur* z=zcrWv?vJtx)QjaY?d>VsFwB`xA%C&U!mGyuPt};AaP$X<%OSbNPy2d#pTrI?X+js z@?{$}GO$Q(FX;Lr%Fh<)HvR@pGQwT@X~#4MAYyRMM+bZuh*(~=-@ zn|1cZ=t^OEqe(Ot$#Pmg#VL9R(HT-_V_QLT(>Q<((1UWRr z<usndZw1EG6=bovLY+YK ztHSOKRNt(RUq_uYa4D)w_J;za^VA>|$+AGRYO|-yYe*1+8h!FlWNg{`wyA0?I}HwB z{H0UGlU$C{5nYK6iXp>zIOXqyV1z|fBjTvD8CT#tvp*&oXcigPGO}kjUnNvYRfiV0 zCAk=t1(Owvn6nqTF03C#dhPf@T+kAs>7;iDFwB<=3uQF}8SR2sns!it>BXxCjsL>l zCO+&PfBj)bc5Uv*C$mOhlM+?mFx6evlE&qpj{9`v%5u*YpA|e^wWa#=(}3y8KEUV2 zoU3y5)ED36Cc?@A!XgWADD3y(b9K}AE+z|@J=JHgJUK^1N_ZvDZx_oPwD$$iHb);Q z9@l2@b0K}VrCbLBH8ceUDnuH7pYL1gkZTm#xpWQ8vAT;SwSI~WeLE0WktU6im%UEF zunFN`qFP0#!JfGfk5n#*1jp}mr~pzC?-B<{)xGAwdmS`+3Wr#(MXwK6<3Al)8WU^!ocEyxZG{`^Vx)(CF*8v5$PR z-k*Er%AQ*^9v^z_<--GSXk^oj%eqrpANQB1wO?O81UiifPG-0ESlyy`tftLR zPb0As0T(dGnc=){sXRj$TIHM_J}ja0TfgCsw@VruPq){zx~mOj?URKye)W*%y;!1l zS*2nkdd%3d^wxE1wYVX7JHNEV?wyX}Bz^Vn)V+SY%c|b2rsGMG>*ABhBjd0W@&Dl& z&TZpwLNjB5_(HTGZ7z6@k~W_U5H<(p^E1nM=F6UGt-;Znm|m>xo;9Cr=~nluU%nC@{qXs6Lf8rs0=icu7roPx~8-1zJr=Jh98>;SUReDgX ze+_#v`t!_Ettr1p#a33UR-vHyK^9+>*23z)+JM9l*FsIV*|_bYlx8M z>PpKnVJwxqCG|`{!MC+$Ub{ikk>@CmBcGCBf4qNS$M&cX$?ymWo%>|k43D$jNnmq#ByqR)(Qiu13 z$ge%@LqTQ`HSFQW+vWd2%9kn67cY<|4&m=K!ue$F2LUC6p?fvwYh?-K$5Tw+h*H`* zI7@~uf7A`krd4Kun935C6`1b3*d;HBDAVQh8^qJCkKAqr`!XJuJ6n!TZ*MWYtExc~ zFAqe01`9uHDE?5;{Np_h$a_HU-r&TFtG={9l7j$p-e z<+>W`NS+*6MG8&z{S$`9j@9K@t>@2nym%I^5>q^)x@{KlrpJb`ato>TUJ_XE1+~n& z!2ba-Dzpc;U1hOkhkdN^#~~H)>h^1X6pL$|Slqc@&g`D3Mn!$)D*Sod)i&VFo3-dG zXRCX4U66ask4m;6DKygob1vJETwK52V_&5YT%X^a`3iDOlk0fHVxB8%QF?bz;G#0m zHiszpJphX&_@Uohgzd(4$ST5ER7vbD4ux*r6QjI;kZx3d0h)-D%x3%5$<{w}E5l>y) zyW`bsHkhp!O(eUm%0(ksO-Q2Oa7Z<;g_qOvpv0$jKM5tYFmIl;u6nVNW-C4+u#^Mq zWEqYLnA*MhqzJBeHt7-l_yN|VDF}Fykoj?KttR|$XP0su_!Q!pJIgnqzMwyzS!A_8H_dlxCCTJ$ptC z?s6MnIt*fEA0iv?V=Vk)%!ZTR&-gj1=0b+X&@b;cb96x#G7n73?~_OThuy=8^Z4bL zuD$t|xh_%X2`x!SS(umXS1P zb}~`_GN!CCdPffmxM=Sa0tpxJ{<4e8dI^yO<*f}`uBUfdc6*Gx)W1&y$?cQmmAHIQ z4m2JWiT)JD!owT&4|?D&Q}X9_;X2}%!)P0ccx;afLou6aycIQJCy_tZg_^KS{P~Ii z>yM|icHN+UAK~SPT_jw=Ok!%jKc2r@yPMPaRFDf~-uB-rh`;_#sbV|XGbETu&p*5t zfUH@l%ge8)la-0ZfVFcG*0;?=b|NJa ztw!G&lVS&`$!`5m+KKvFuMW=sgo9^>+NGdSASY$WIzwvFTYDMlc-r|NR4vWXBlXug zGH_VJHseecqOVdcdAOT}6=KF)HOQJb_@H{|mBuIfgV*`MP_?g-Zw1g4H-c%ot9J6O zVh_BQyaXb?MilSIj{0=^$?!?to0WKPvdN)Iy&oh&B79x}KYqgVpJS#$tDgk6nRPB= z82Twa4zDRDK49K@{rzO#y`DA9Be}8^=y_zfOr@R-e>Sqt<(#J>57#e{f8Bh=7dUr+ zW2E>OcGpt2K@*)Pg6c+YDK-VB>S}5^uQcu3C|H#(Rx|XF^z1Y{S#AljX|1_0f&8rj zNt|5E=@BI7fHS%(!{h0;liI2mwom@1s@J1q%o(1aXB+gjvfh12+vUAr2PEowJ5dLE*$7Xb}N%P`gkYCCu;8J!{bgxS+8b=J}0Ih5UvAc zQ>cg5!~0^J)IQYw4(GVZPw}Kl;6 z*OLq6ILmaS`sh&GoJUBDC$c;bgM^Z%)yfxCb&C6mX~MD?sPLgk!If+aQB z@FW-pC_T65Rw*a9yCp{%lm=8Kr8Y>HB%YWIB3%sEC(oW!Aj>_l%qr}xd@FOAUQa(o zZxuhIhsI9d+r&Bc>Se+Nhi9XDr|mOjXpeinC)}I_Rj*8Cx90M$v1edLKHkqVfj}TQ zE+B*#6SO&Xo)%*#_ATFyATQ3Z^S|hMn~(HW`l9qPeJ#1XFV2DD=@fUjNtYLR0@F=% zgLbVgs=5{W`s{ax@_UXukr3#vvqP43kBe$aPVqQ$nGGx&MYe}}vrM3O#q*euUnf;N z&o7#L`VFcw!5Nnvnp2XLWv@%|MS3Shpns`9ps!~x4eO^(B_Ee=QCvx|VA{d=*;F zDhMPZJuTZzkhgm-$J{)1Knqju);uUE8HZ$f znyk|0)cKC};Ey7*B+-nF$%#0>PPF%{^4%Lf5nKdsY5s&MZ$TdqOu@ep9-unhUdagy3HxiROTNghp-=^Q4eYyAj z9U(p}-{Sv=3+}qHO{e2a6K>IXh{-CQP%|{Iq`AxSG=NEz3=;~f5av@ymR)B%UOuoK z+6S!v={E<2@OBvw>(yHSh;n9WHAl0t6O>WIpEXec6#^{Bq*-N-WZ_vO5D3P^y~^jb zXFX<}Q0=`C>7&IAuyXrUoD#je8=SR0j8`*H(R0aj9hXVVar*Ae3-sf?5B5JZTtf)- zAu!~Ty~RXzr6#65iwSQFncIl!DQhGM2`ND`tPe6``RYQb!7Y#e+VTJZAOJ~3K~ygY z&#ex%m2d@a1o4{-Oq?yNvy`d3c3Ymqt*6I{3cIPUR_^Y<-?H{-L7QbaS~SYXjRLsu zoYH1!kqM@#Tf`dCWQ~iwYlYrMRr_tN9Q5Bc71#RBTRznrWvMDP>Cujw@=8!*lPC?7T1ksEk|!M;oS=_q%P10 z<(sr=)m-Q8fMm4>(}mmCCKc>F_wKS>i;ubC5}#yZKFOY=h?&o6^E}z9V8{a9v3JOU zD|)x(@E@s^GH$O}jJ|XDvJQ=7c;WMXZ=!7;)OWF+0vVIEp=G%oY_P?J|r)zTQs9`u2 zdQkp?E@WP!M1=big%lyq1p>jyfmpm#zS{QrYUMg*lpM)Sa9%IIOS9S%UCz8dffhyw zgirookN(%b;=&=+&nKUvE1BnMLF?Vi_0N`nk95!ELVCm6qg7*zcI;x?axhwcKlf_S z1|W<+zL|Z7{@_Mg%=^Xn=#kku5iZ>E|JA8~&%?8h zGeZ^VvYe*ys(LMW4iog7JYHNH^GSep9HRW2*~?6rr+H$nsKytMlT+F}e>DODzF`;W zp|wMMOjPW#n|aSJQI&n(=$@NU;&gJ{4ITpP?6)C#V0_Bl#1Vo37x$u5W*x3UX(rS~ z40^P|gSg^Wsp_)?UNVYk#X$%b(O9pPSeH23CgzAux}OPb82>EZ5H%~$|uR9 z`wUSfjr9@YIuQs2!{u7>9X!A&tIknQTV?`$j<(EI_M8i@xOB7p5%)kso$VcSjlTyK zCr=krFEH^L9`AeJ z4vulbsnB)(0bMQM-52XGB+t_cE!WrYxRf|WvucWT*P?`1Ce!$wPAVxn6^Euc&=nb_ zyX!lQrN>>IgQ1S-k%1jIYOl%MIG)Rs!;O=}xgH9J>ea|gWT#nI9ge`c-85`yLoI>cs z6Ja-g>9xyDpg)s56FO-amk+vao`;}^2cBTG*sei$OCM8~4SY_fo{pT`rp^8#J~1wd zPzZrQFg!}m9_#;1+A}w3m9A4#$?~+iVOVZ+ob;w~fB$cD$l$>c6m6K#GX}gN-HyzRTtQ^ruH0yHN26k)9y0eD^7h|mS@!V&$I+$ zvjMz-5W|kR^%-^g!YMnk5ar&g!Bly zu^|wuj=@Vy;rJia>Xo>lzzd=SIRRqqyo^gsrDT*JLh&JmH(Y1eMPka_#BJ{C&IF!k zaSQrUpqKOC&owe>aqffj)9QWFD$aYs|2-%PxTww2jFO-^B}Eyw{cfQe5a~r&d%MJd z3HnE6=kiqQ=}9*u6j)afgC2#-ErQ|W)&Ge+1A@Z>_jB&L9s;UZEXB{#ndIf6?l*5e zrfu^PPcRqeiHoG1ugrdLsQaBXrxIs7x~GHFu?6mSKCfnZo*E>EP1VD5;Yo?HH9}JJ zY)rn1uvBx4mrQo++w9eVGwRV&P&<%k=X`vbR@(lA zT2#++(SDQ}ejRiv&STL%w=&%A4v|`x@-h=?B3^eGAeR3U6AGZ>>Qr*8^ppHm+8Dq} zhZ)4!2)r9$Wjv|QaDjf5K<00BbP!!ZuH2YaEwOtstR&kY?%xiwkUJGh$;rUPbm&oZ z*I*BwqnTa4(=jX8W9U+HqHUSRnd3plIe?q`cW0hs59`4yV3hl;u`cKg+&)jIpP>XV z9U6V25b_}yE|`4rU4hGPkq`I{_E}1rj%!jdIZ*B_rL>2A&S*=a0^O%Io_rkan(OqQ z`6J$56<%ZPT3?Qzr^VRmvA3lYj`e^E^vC>f3EoRe=ZS@LiHjWtIx?Sk6X>lZ*jW12 z^i%XQ6T#Q35BgenRA5Z{MB)Vf-s~$(gALX{d2HP29&vFFM&i#atBd5A_q#7R0brqp zoWTrW^$3fIaf6ak5N!w_KsW!rnHRXr_*=!#XwBH|x_%?Wtm&LmVqBQd%10|X5(FM5 zGjO~Sx0S9Z3WIodc)YRA%ir1cQeK|y1^O-_3w)9tn{FB4u|2ra!!yE9W|j;&rWLos z+mNKAd2iu5hsQ$DL=w(P)z$e6-{ZKVhAAddBp$=3@(GMV#W_f`K5I~M&f7nMLDf+P zgVZhk9<3ywinIkCAZ}EM^P@q@E%5v!$aZXc2a|57L5y0;{BOzRIT11lJroF9$XlEA zW$8U8aL@4!>W$24E3~2CnNZ8ZX^eSy9GjQ9T#TKWV2j#u?1%f}9N5-9_UunE{Sltf z^|<#qBRVyS`U3Z>LA zU_L5|w4w&$VV#yDdx+=${_HEXZI|fBdmoX}gDBB>d4=I!mT>#F9EnWHW#@nTUD~;| zoM&!tK9*&t%3opN+^8)xju4RsyGLPBn^iiyy+X)4Ey-Z``xcRkJOhZcR*t~24g&cU z@Ec9X;>jjky%PL;074zh8PwbdBB|dbB#d^_jbf23-Srzy~7hfhWGpM7KBj()^&^ZMSlJlJVR2F@E|2I&LMc$ znGm1R7HM8PD3&|R-XkfS>5jL`(jd(AkeqB>K$tt$M)Qa4zO&7{q{WdPJ$M8#r_R%I zd?nP1{s{5pJjcXzPp}?VoC7Dq&)8uyBqd~%>+G>>u*6=tnLU0%PMVk;FnSj?)ZRgfRc7_ zD~dP#Y=}o#f&nb;hHSF$!>xZop)hufU^lttrgr{eL3g+lQg1>X+sA|f_L7!+D;u_J z7r5s@w~z?5qv({_xlgxEQUI5yAnC20xV~!%5k1P=MJCd-P3yKElUDq4ga}PQMM~Qp zuV5+!lt>f|2UyY{mao(K%!`q=QmZ7AqfQ^vzWX|Wh1?*W_aD80XGYm;&a4eTLI`$< zcZEL@kLHA`AQ)UvUl!kMvPR!2e@e5tC3ZE`#>?o#RuUKKe&vfvHM1v>G%g`WW3tJ0 z^GuvS4E)Y>t4zGFk)noYD1R>V3KQsm6ZoCU#tsk6Ejkxl8cJKI8A}?jPKYXpQm&q7 zkZZ3qalYGM?eh`CYXdW}s0v{|RuC?L*kj+V+UK*%DwXWs>RV<9j7jOlnzKh|ltrpK z4u36ZG14M#;cd-`k89dGM6G$ar?WG}|He5gwoIhpy{f9Ag4zw3aI+fDGX#IJE?#|1 z*9>)ohbYE2A!xB3tdDiIkXoIs)JlihTqG;pLngNGQr-%d!?D|C4^JFNBx}7 zfHrj620(rVvtg161K&Ni|5+x|aok`%4?0eP?e}U)P!1D|J_x%VyetHVN8;IZE$((4 zHDq2bBYN!;v;+6`IC6YYtt=kSU31^!9cswsv2FRH9r5b%4z9O?=?2-@k;HOFU7&^7 zDT=Y{>Tc!Jw)k<2J>OtSPb;%L`CG-wH%$yh6w1iTdc!N7CPK=UUu4(Le>(+wF`7Ck9`FJG2KfNt5%_m-&B=! zn&WQgO6amU4i*I;OKiiEEy^kF@tT-G2>OjRkzSw~B~zaS=?{o=oL?NrP9;``fys{T zr`5Y8c~U*>C&nk$5=Sg?;-tvMR%j*pJO#*RrI$8~6iKeHqr zHeqydWj_pxC^>tiDcQTcY#NfQ-K%~<^V$mSSix@8tCeeGZr$O*WYewkNA$wXcSq8{ zdAJwt2TW5WNRpEzb8CIObaJfwY~d~*aqJlnE4r#(;BO%{H;hM=XXiul42m<|@^bnD zy`BFgaP=GdBYJb@g~0EQ3!hbP^D@s%vHlX~O(W`{B@!fb>Jby?fDdxnMGp5@h=ZVP z%7WqIyC=iK*eEh!*@WDk+49+jSeH>}DBK<3U zjdsjJ+vm8(aPPrgKf~@z(O(Y69vc9gZk0}_E=NxEAZ}S>Z4x!mqeG)8FSxrrR0id( zkdd8#&-xWu(h)2)%6`H0kTXPNd!JTrl|QDUy~Cc<22UD@z9*q%XjWU|$=~qVKI}TG zl}0;SRM@y>)3{Gd@meA@+*`U+q6&L1XSI2XNrNW|u6YVKCOVdCLS307Sw-x-N*?Z0 zr~TO)1U!znDNc9F*C<5>or%rUf`aEoZA`q|Ay3FI8{e#3yS!fbapkkhJu)iy>5o_b z4S%j3Wd{Crva(37k|)mzwuDU*-zo)*7_4}RQ%xL`qypo{k2`J^X}$*o1{RkRr&uSn zKyv}^>xqVeEQHmlkn8Tuu%A*(9H!0MXtMUF6;=FOa!-yYv4)DnsZ#a`NZQEyqw9hKRl{GLy zu)_uzJ63_WVL_Xv1$9;=)Et0{ou}3E=X5UfV$XREMhp63kGr;u`15Fhq;Dm+$i)(# zlkjXn|52;J(VB>JH2py%ChKDrxi%EE*}pgwGp$}og6QHPCqcsmvWt>?2xGIhX{~yb zCl)&n+^c-f1v$J=_N;ZX>tlq=*{@SfJ4_Xy)_c(7WuzUv>@_CRmzWOfT#l}Jb&q88 zF1;Af1%93AGP(OnA;{5$k|?%NY?(P&W*bL%Rx3*;DIMkZT( zBS=!^$8AlEMW{9Icv9Qw2Z+cZk;cVk-SQfjREjIXb3uN*FT_AjttI-9xX4AUutIX( zmWziBgq`8l%82y}%B;=HS=J{?+~FfD$6$|O+kg;r$zY<|WG^I;qn1GlguCuKJh5CD zhF4o3%VC?ds@8S_s;*NL=t}Pc_Syu8H*&YH@vucFv4HZ1B5B6_bv8=gpbt z_#{G+9luQoNn@K`o6UVU+OW<(-!OM*QOnV?HYbF7pXltG-O}&Va^eDi@6YlNBDNYQ zI&1G`Zdt9rsmbq_KB5+D9%p@9mD21U@ajTP5Dk!otJb^w6M~a3dsuZ31RnYzndeeK zxDh4{B>rAZ@I(`2Ux)j85aXEOi3<3w>-z1s&+Rr3I+w?byX+;wyTJ4NS$1FYvdhim zJ+ISv6Y8t&}uNFU~%b6G0m@s&v z<0#O-1)V)i4zjhQ%n~lN=m~TT=phnO{;OM-=cq7@A=J2sVUWQqX?V%OabV~e}3ciQerWsZ=e)@|rtx2@o7)ovN&VnSfoHo0?HN>M`F zleeuV3vKImFbPm_teWe7A36sv&*MxU)(RKIPLXGJKg=Y7$0s>-E_e%l%raxy)`=gd zF4BAP1i-P|@$x+0$-2W!bdtP`N2}&G zx2$hi%}Hr^-Uf4*-7k4M5u2waEjKk2os%XPJ3(g>moTE@HK=*Ue)d<%2~Pae3I<}h z<5F^lTQYU8!aaY`Cne=H{|s@;*d~^7*|+#xcPrcinv%188AVoVqDq{$$Wg0ZK6zmt z1gz$8qewZ+N6zCqg&Ng}M0!OKUX#o~Ejn^G+zmkJuV+R4V%t6`W z`zhTtErcC2h%Y4GLcf9-x_*Qutj=fR3-qnb6-xFvk)pEWYIc|z*4V&wg$*VgulKIi zZV+<#YnKUcr#?U_*f!p7P0vi(Y=PH!973NF`l3}_u=At2!lwT zpMdnfgnpQ??niJBBF_Ewf@0jqg57xCc7>!GTfZmpO#QR7|6wBSJ`7#Yxa(|@XKnC{c3MFBB)RT-tu=@~ zxOXDP6LGC@w_Q}*XM`~@?^F*OKxkooohL;Lj-5u_>`cHQZ5jwW1|=7RcaIGs6Wj&e zpMX%MS{WF;`nCGbs~P&<%!_?Z239;PG_E+tI^h#socAYgu(-*+E+lqSn@yH*xUZL7 zi86BY?cxN;e~5B?YI19@)g-bIquv_lj{THfd*9_Ai>DNg5^Ah19&uXfCk9+ldq9se z9zBTDv3b^yrP~C$5Bknnk0tPqJ9%VV|3zq5M#+D^@C`btEp*i) z$C;dxrd;X?_E(uqyGmE9tMv222V^m^ER)-$-NT6IC!DtKBgnh@OuyTnUPb*hEjn1xynNc;thA@*x44yjW%Xu?3e#0Hp- z?D7owjX*fy7+P-4Rhf%&96_lzDKbd5@%R9F-9n31AD$?7YW<*7rA@0qYt|ln?b4a}^2jPI95vSTn=~I=X{*c2T^GA_P4$TLQ8i64Ar36( z)7h6-y)qLjwd)dMJtd2*?~|nL?9poFOUm0@k*uZ^RZ2{x<>cg~n-L105%cW1Aw1Rk zBgWL+Ysu4ePRr1b_dcL?bGL07uDRt-`r=TLuzy$?fHmdU3l)+aXXf34!>1Kl{B$0TUcZkWo*v0k~@>TW8qu zv#k`|;3Q$E)Om8;!5>zwLb+|fu!yT3rR$b-Gi0z8B+dZ@JthED$**_ogzgiQ3?;{; zge>!zWPYrtbZ{r=j9D{b;GF6@ED~ z3v}FPnn=nzFiZ7HKS5Ys!WL`gqN}_D0yGfx4<;ky%H*nAbTwbjr>@XO=~M3Z3z42a zWGSj)(U`3q0tVu--e zsz+O1k#r%{13}57Sis~c=qk{KI6soKPU=rP20R2w=i>^LWD~g##?KS!7ufh9Pew>c zk|3BoD!@cMQVW%9a_X#j8Vmpw+#fG|lj|MmuRXg`uULc0tmb}LXJY(r^%gzSS82<9 zOa(h18h!+kKEpHyGRB`toTp3aXGi~Is0V?rNJ*McT%c|J4i^Ve!M}JBt7#7)&H>!e zAzdNHTi36$8yVjvTZC*-4QKAoF4=A6pCD3QrFo{=A(xl1YTaLJ{pBEh(Thm}Oa?$u z!_wb4yW^L{!uIgJ(UM^w;?5+Ci|)n&Aq03aAa;_wyHkJ1*R0o}AN0I*;)bzC*DLpU z5{;M~_8Q8keJ2#i?1o2XUo`n|nf5c=q>ht79L#>>T>b?Xl}?p52dHy?mfx z`l%)Us!gIrapDD6S>tu?dJ-*2GvuibZLk4i6ekrX39`1M{%-KC-A$m&!nys3f&07c z7CV<}no`hTRlG7~c$JfA7;cU-u<-4eYqZN=Rkt*ixeO)^3_L~GplpO)$T4m%JGiez z7)ie%WZ5r2hdf!CSd!_31$rfQk=;E8S?&fKdzb0$;&r-HxzY1D+CXVqXPq{Ub)E?O z>2V44UIqklZJFlDCdF-zcj+Z7br@mm_EX23*V;aW2yCpg9E9(x?u&Fcz|9+UD#rwi zbgIFn27))Ny*k^Drql#F1US~6RkB=2+uZ8jY{kZQ@^*=fbct7V^m?vY4MFZ(-!U$y!LQ}VhWKnL6@6DG0;5J_Kr>~qeDiWr@2`7 zOu<123;NMRcgsgooHtTtVi8pZgv$6L$slOt+jJ6$a3E>+BjRJFF*fXrh9$XW+%!8+?Y zJcf2ji#H7`5SJV45UXzUy2!!n;&Zrr_7dyv*9si<~>9uV>n=-6km!=%AsfJh&vyZeq^ zqO-9DUSe&R{q4Jc|D^aKy_UMfv+_qs+YAL<=PR)k`(2L6hJM6B&I+DOL!wAoM`jd_ zw%q2hlDyYmr(QsGI{9>{&=xN4$B(4Up508O+f!5pr(e{DiY|iDphy@;O;3sAD6{KS z>6GfQ@o#jzK9JV|<8hUTr1I3uVgh`Kz>tds;6BhhPsUI18uRa$Zqlcf`#o=KITitd zZdi|L&$vf+-Ex9}dEKd5F&lM)(~$HEWv9aG`s4rrAOJ~3K~#{zI;*Jc!PI{7BV#q( zgTvM>I5wpfr6+-o*v)YzRD$a|x6}`C%lPi-xaCS+WRET z?b(ICV%=bc#*uGz%O5tryZbQC)uNiE#Y}epeVK`d8~Pf3QGGz~m9A4#iPP6om$_@u zQP8rAERn{pn@zLA?u+1iN^o?r>ZSQG$+@5*G0EgFV)S}#xe_Ei?8IQPmF2{F9)CV4 z{-m?u=zz@aM_Zh0l$3-k?y#}RYN|b-Rp;q+@-jWBT%Ta8rWf?BX*ouTx&YR>fok&O zsdzn1vr}lR;P5~%rj=Av1uhN~3a_P~o9u;a(NtdF2lM3ce z(`RAUI}9rE<1vuiu}r>PkqPa%EVsF^w{9V5T_oO0hv;*^zBFo_)0ndzAI1t?cB(y# z`ye6Pi<@{*Y60g^(*E7N+X1yrclvA~i9x8(AB+o=}wPEsd%hG9yiS$WDCF4%5uznm# z4IA$vg>~txc6$jE0nx6xLFbasgqA((_6(5VIuU_M8NqPCgt-w?apb6g$p>D(ND8kk zBj^tpV=8Wmi#C7q!(n4UO^Wj>5q5`=N}C9BZ$1|XPKHn4!@$4@2%p}ouA&#SSf zTcR~?*IyUQ`V#;qFWuD~pN>JI&P!CeeC!jG6|O9?@F$CL8Y_T~CZ*1MB!{ zEyu=y(JQG2ah_E&qPL#_aXC(QgB2Z~6>k?l?|J>Ri6=(UtWcT+IxOe?h;x8}9A2$P z1Jr!pwUK4KCerb>?X{-44_MbjthT#f&duiapqs5YCR^vRS)paER?en1d72aLw&1UkNk>u1n% zm;k7vj2ZjRWh0wxy%xG)@?by;t2V@jHO5)r65H2fv)oofZkkB3d!-aoV>&+JGKW#N zKpzEA#ziF3yF!MI0qftbr^BZ#eKu} z^X4WkC!PrHbFeSOl=iS?;oyG6Kyt66Za}a+lUsmOQfAUki9DFF@%sYw7Yfx9g8@wB z*bRAviuSe;=L51~7bvGB*fklObW_^Em>A<@7FCdJ44jOJz5T+g6geRU)|fRNs{O!h;2AKE+h zOz&`Ox7_gA=X`@(eSr*GjG;#K=rg+uI-}G(n{iHB4#}C=xK*_|zdt_3=Pqh92UG`g*>hmMdULGpJWAjY-!XUSN_?4=2==A? znqYlBk~QORlv9p6-R|#R?*DQ35jeJOiQ%Xg7VA%(qF(y9vR4Avk2QEWT**8?nnrej z@4cko9cc+Ch-jzJ?e8ITaF3UP;2rP=_9Kh(WixCjKZ;T=q3C6(}5SRK^_n8@xVu$z{z=X@~hFYH|F zV8yk)TDEUhiuE-acT~U`fIIrU7Hdn6>4W2$w_PeoHg{>q@l?6DiNptPYRCi(4kxN< z#145}as41yNJde)8253wrweNvzm6<^{*=0vIFVQ(Mb1!0o9BWQB-I(psB`Rk%QEqr zrkln0nkGdRS)-@2uhF*gkhb*R%a;sFN}c6y<+@X9`!1_3vd@d`_ZjW$uz$K;>tp3yp`rEI;A*LY_CX4_!cLDncudAw zzlrhZ2J7EXvA#ZPILN;xt6U^bORe*6_jfP%|G4`IJU3fQJ;Q)lt47wnFIMVfvRQ48 z&Ll37=N8$EjWfI|dzow-{&<1i-4OH0#xEsER_56M4siQ=+s*7 zu^Dq(f?eQ}aBq(w$d-s%LJ2~BMCS*R;*P%CmVhoLN6)pX8%PR=-# zdIX$?@|1Wm=$^Bmp}!L;CZ=aFsnT$6ku(#7z1Exrc0<|9;5OR)nkuk1%BsX&>TByY zpV!6-RjazjMEEw%GocHCuCc+ynbb2}IQnF@1wM#eW)HCS>TUKgTjm4y`S>X&(jN>j z2Dd@q%*Iae{U($&pA_0LACX>d7wAj8^ck|ZR(PT%Uy$cwD>TD?6ND2)H`<6vh?2cS z56iVuMz|MOl25U7P#fT#&%DTf-z|23&JXAJbin1wQq6tq8YU1R)rDZ6J`kfFW7nw8 z26Yf<+$H>ojaNMWB#y|~ae{dDe|)l!(8t%TcLr4`A=Nx=dd+{4P%?Bb{Q_+nt7Dny zoMv!L5pzDLq$tatQPVJ81VdJgiS(E#u{KiB_nP&v5``NLy`B?R<37c;^_|(*$ThC9 z55hy$YGNH@bSC2E3|sH;l`Zzmtfk`TC>cLZW&JLdtlj7c^$tMD>{>dz$Yow9x|jOt zg7E?CZrQfEXv=AF_JA6Gr@3n6+Y(pdh6?NSZ1&JphUkQio84i9ldy6bjoDdy+8$i= znb=jC_(~!snU}fh?Ox(rvKy?I`{2(-MKIQRPt>~D}r zL`))}JmajQbrhMcVBfg^Q|v+4%UW>5$Mpy+a@c+#ru(@<3|_LZHsC%;j;S>b5;}$I z1OYdATmyU{-*Wzu0FlS0ODMe~aaVN2iI?kH*WpQ#k()yu;1N-7$jXjuVwSZLBH!rJ zHp4MVcDLvx6SYYux|Np1HcRmfBqby+lrgAO>h~V3KoHTs<^3=q5gTu}xxx3blDydD z298OAP5mDKZYgn&9#+2OR&I!MfWI-Zuv-3%TdK2KO=P2Vk)|G4FtX|b_W-~>cPe#> zdkXmA_nb;zI`nTD1WX`UtS_b3KTdl2#Ex?ANQFpW=Q+_yFr`U=0qcGoI5sAz2syV*wujP;iAJkYYd7n~Njhm<4- zhBCpbUS`)&hL?tG9#^(jxax$-t~r!=o>ON6zpGUlnVw_j6Lt)6%z z@T^4WNI%*Z`}+OamuQiVwfdQVl!g>u+tjNf`Yn@qlF|v63e_*EY_(e?qC%F5^J3k~ zXYv87NsCN)^fS1R8pDY37-ZQ|z!Us6l+WAa?!WOvyXiIp@w#WX$CqeQYo`V`ZItRW znHaHXNy`N$bkaSO5dV_UxNI;Q6k`K9EpraGSe(`<3*i1-bGC^hHGr>fw z&cs!i1$)0;UQOuw6IHOZ7VYNA3s^??8mcP;x$kPuqkg5@;}UM*7)T)= z8v-~HaBds7hvl0-tLNQ7IDual&*)(=j==^j<_KY^BE+X|VaLNLQ_n5n)_*hqn};~C z7d3Ai<=PqrI`*9pNIb}^9msA^;UL(T#I7d=ao8=_v)16E7i;+r!uhZQ9WM1Jl27tj zZ=LP`O#0cjfei%0nbZ~Tx{mKIq+i@0IQzhQ2`e~U;XB26!|I+^a!tQ0YWNAI?0vyr z%M>pJdvuxB#HHPkxp&9$6zFhYZ;T(8zr3td0r9K!!$YUwfxPLa|~{DozI=M@2%D93jE zYp^i~g8#n6o}(Ehz3;+3O(3Qm$1Nc>Kc8JbwlkP6sPgAv?O7<-CPnKB;razJ=qI(g z?h7^`aihR+lK!=wWydYiUiBs!PIPN7rrC{IY#DIIy;t7!og~KHZezQMuEH2`#{L^Ia(%>}zrnk^*|+xFQ( zOk(>u?yz=O0_wDbGFxUQBv~D*GE|*#_f81sWCuaqh|y4@5&!qy#v!y9Lt?=jt;G=1 zuu2BxW#icO-?to-1GfcnzFQabt?&|Q>==LRi*)S3FUN=S4E3_4+oJ5>$ub4@d=?0--;k0wzUR{R%GKzEMKMy<&<`- zIKVjAXi3`2(wV2)GlM*UbYp6&BI0vHm)&AQIw|f zwNoF+VXTAS)_7boCajfwwny(BE(f2RL1;RXyZUV^nVXSzd(ik`w>^PeCo7j=GQicg z)FR?`ES-t;#L!AJ%_|AYr4qDZm1x^4^Nz>$6PtyAPO{O;?u&C!VB&jT&4vy*TCH;a z_8LLw0CA2%GdhXZ8O%G3u7{ zPF4|og?R6>WOqGx*v_`8vwMb#Dp_U^@#b@Y2^UYL&`FV2eBs^dL2+2{JIcmmO0)Z} zml!KvN=Q=MldtuGI)(WpCQZ#H9x?2-_l-&C)MG5Dq5{r?Ov=>9qT_dH5iDgjE_k?H zk1^%_pmDFf;0hUn1Gc?9&ABr?gsV0AX_Oemf(tR8P-<4<#v0!EyejG3mAjQ7&kc-6 z)q3o8fr)d!9Y~y(?%>_&Qcc8TzgTuro9p=8z}VF<9f!ns5YMg4W1D%qNHM-lj4$I) z9#^=FdM&A2kOoEji+0Vc8~0n@De~<1zDTz_^raa0xt_(JgV2zcJGu%p(hxK9?~i!5 zs$bD6YA$-j574ZVisY<2tmIXws?{^ZtYo#}A;>!!_E}EJ1a?JEKnI8zcu%Q`aJb1Ac+#nZjPlrDkn23$ny^2I zyQ(_86ZAWoH0ylPsiqZ;$E5cPcI)(Lt_*U;_T9!i(M|m0H&Ky2EC24=++Mm=Kh4>o=e!FVk8N>34n;v)t2(R38vZ;QV)t2`2cOaAdv`^%W zii%@WN;N3v#mS4%RoEC}s_|!e{~pP(G;>kP#-puPaR_#JN3~j_gSb-rdG~5)TD9!k@~7EtKl< zzt}!DDTlbyV<3-#dongn=_YG=djGytg~=ojn!jtf^S%ecT=|54POnMb;FIDrxMKuh;%E&5(w9Ki1(`7 zT0#X65rYx|6FP7;YE5wG1EGIHouTrGLrof8u~T(d>|u-t%XL?H96z^y{q$!`-Xu<6xYu4`orqPaWCAE41mOE$PBH1j`8xxAT_3}|+z%NSac_39f)PC2N!-HEVpeNhZ1@G_&BxxVqDcNkb3}0>Y`{tLur_J`~(x{z2)nd z4{)F&rabfOvdDMXK50 zsp1uT*o#yj#Clv@V;@Lx<{8sBUT6X|De&P3+K^y4%<%Bfu z7*TaQyK{0^SjBHg&2sL$$6^4VuP4k3Y3p*irB{OBM}&cZf#k)N!0tblsjd-_LuXI6~wr2k@VN;R-%cx z_^w&OP}>^?%&W{50BS?Nzib%pvUQr;nNV3{rR#T-^de+7mA8*C>>vjW_f~)nF2je;{C$Yh@ zR9~+q&Z9MHI4)|(Y4lzLs5F6>;D8;wKo5+^bUv}dy&IR+89r%+@rB|^>>2IWCmCzi zVQ`6REyhL|c)~(nF&4$x+N`e|Yg@PW98UDm|KXVzCYFbZZ$VBg$$`9{{mkd^K7i=% zHX%@PDosMW>garc)ycF2aSf5)kC6ld9osDOnEBBiM~HKk=@WYh`-ro#%D-OtHrKic zbA4p)(k)}1wyc8*)NON<-ro5;`l#?LdU@t`dOH0~$K#@A)LC}W^`;Ypg98zP&oC?E z&x~Z*ML-P$CUoR`{NhOP#svXkj~HLyH8{vRUqC`Fe5dqhxv$o5m>9P-QK;*wTX%oQ zVc4r%gByV`!RLs@Z6&Pa6ofKFZy_Knwa$}dwP%&YiQBE09&2rb?m9gQbhOp0$LadD zm;HLijri{PR)cFVj*(wZ%4ui=temJn-3r82P?;`RB;oRlnZ!=zqcDMh@Pcjgz-0y# z8#rcI-|*Tkl8tY%ECf1tk+!Y2?BcbOVYO=j@ioH~=RPja)LrD)_+bQk&8@zcFfQL= zmJ-&9Bj1I!y*R%In4U2f=k^2>pigFBr3aO3RJD8Y zkT}|GTX`NIh5%#1)`Y~sZYVp8@oc4D5d~w{R$0WuWE;j^?dv)< z!&H~Y8O)IIi5aKo8%nE5J$T>-!M!hK%KuW$5sNj zsjj4-r=`@>^ssn!|A3U8;PM|UdW@cz7+y_*Y=o5Z!SF*mN3iDmK`ME@liD(SzLjM z-7w+h)Mxz~U24$bq#Lqf!^Jx&!!`u3Qjh=k39|U1UA1G-lKi2;!=Q2BK^>mIo&0`w z>hO!2m%(Dk6d?(E!?tP@3sTp*-UhD=sRT}{G@`SIrapp%4~>M~6a9dRs4y3KAK0hx z5U{1T(iaXiFC?#sLpdQAqOOve@fxtHP`R8wlwSnqZIeSgI!BE$rNGl#Cg-z=XcN* z<9UFaYtip}@;snW$=ApHiF_UeY)d0@zONsVa{xh|k24SGtC80n1A_)&+lIZ3!mdVO zXWSByv)Y(;@6{`nrY_M8%@ zAH?6He>iww@Q6ld#$IuU9%esxCg}K|%s;#x~=5s+hJI)&(KYZ6t z`Ws_m(rY#F=Fe^iH`f%4oYzyKkXQ_JCKYNo?V@n_{TA8+{2FfCkZbvxK|wom4q%Kg z74|5ugec|>b=IePgfjz9Cl~8SCkp;20nW-PX|$WUOH&b~XSFBao@3}>97kYogp&ar z&|b=B5eeFJN|>|G22Dd|gd<>Wgf^6u_;arS+y6Ubukktpl73K1 za|(P`jGM2--*bFlgY_e!&PZ&oPTmxF8j>u*-`xKf#Nx1$5hO8EkEG)jcESOOxFZ^G zjSN8v+b>yC=*8k>M{GbQ-IDVI)IC}N03ZNKL_t(ez;)KbC`KDFMD@EpewkZMl_>0$ zSb5w{izJmvyq9ZtjYxa3<}`?c;I^oPHH7j|x7|%GalTv?#b_6;?glI#$AV#UUD&Tz zKx6f^sw=7Ws%b*mvdd5e5TTb3(P&dYJ+2ftxAkd7Z}kUr2pQ z=f+-dOVW>%B0D1J!-u1mZq?t-J=mpM9dtKH>IwSk?!Sn&ut5L1^AGfw(?6oHOQFIu zjk<7)!=DF~o}*;qQRWj;g+2Hn{UP0qzB{lj6|sh)K3}YUCq}q}Qj{)5UZ?HCGdff^ zPUJHO3CK8HRkt1gj>!5`ab2$Z7o87MAxGh2Bg@nv=|$^(b$D;Sd_>Ukvz@)Il>`y< zs_bO-K(a>(78m@^i~MtOYlB*mE^z$bbxPq zUxW4YEcF2;wbm&$t?F>$g@BL)#IVrAS+gPXfK!iZ?gQ;D@q2+}$)0riq^fsb?^B&F z_t(=k*J<}os7Aai9ra93*bsR*4O*$xo6$+HWHZp(DvQh6$KJ_sI!Im*m2CRh9|tli zG^ND2&IRIYXNjmIeM&n+-)Dr@aO)5}tp-OhRE;&gP%6@9`YtU*UvK-au0L-i5;yc{ z-Gkj7VMp!nPxtPUwDcsldA9S?4dV@;PmveWSoC8Sbewg`) zNxGp~fsO)$5>>|t&R0&3oSTu;6ZM~EuTR*$gXg&I20`&%#^o?a60HEwST1a}z21)m zxtUSM>m{$90wf&)DQGyky|<-WhN|SLYEU@=C8FQ}Dz{Db(u5ok+@?Fl@ez6lL$tP^ z;&X0*u~QAY7APb3vxwj@k-(LPfQM`dUaX`(YD>=D0OSbadqn-ZNgF_f1_U3q=}y7| z3t~d{IudJ#<3{K4{!YmGY2qaI9i$K;?LXI#RIv(is|nQ$(Y~{>fhpozMKO=gfMDDR z?t$oeSW;TH**h(h8zP_S(osoCR?pKx?jcQtZaBWDTk#rT6hS|Gu;0c_ zyBaf6dXoNa_a6mG|DVLT4BEbL1i*75!e*TysqfK2akJsMoSx!z_sikeXf6MM_KWL+ zu>TqP2jJf74#B3AKvbEc3BQkmQcUa(2egxa#!=Z>Va#tAo(yGV77@iSg)URr>*o$R zOX_a@Z&)3k6*gQES$y};^H1sB@GD)P3$j%0w4GW3hXhE>;1d| z_W(8t>dv)OEJ1)!p^+7hb4V8xl-EC{>ByV)*Rb`opMOM$TJQQT@`shWs|!YS{eaSr z-i@lUH+&1y2uJYrNdPThDV!N{4lMfOr_$bQgwsbstbg#j_bW@N9W?IVp>z8cGrdOn zlC@^*pm<0T-y!)N+OHiaf;S@QXCIA(-NTV7RvoVq_j{R7X+@9{JAkzR$L{~2AI$uS z`-P9tjMI#urv;$|(GE%xipUcb79m{~VIWND{x~9ivWtL))bVWx6ltYX>*_OMutwp;;v)ZpmN@u|2P-aAz;A8cp}m zsoWcgdZUAu*~Skm6AiDCA@8!8Up?t_Yl&8=2e_~h(VF%}Dd6#+O26n4ItSFKC3uYb zBzjf$l*Oj*+*^FuFs1~#zG;N#6G)>&om-~Q1U*|WaE)-#LT(`Ci7X~$H2FLVmmT53 zeUu^kX0lIU{;PV%k)R(3BZB_Cp;A>9M%%Co^lDP{QR4S4-+|t;zu5aR{rU9Y*pg9+ zkM{ibZa+N?w3Lo6GW<2>o9|y1Bj|W(?8{(QImaI1RW#jG|0IXXuozP z@>YFajQeJp@NVUwuvp_D0p+gPJCJoHn>u-bkWW~&BX0PiVqKwI*{9qxw^KYUtkJwO z)pD%Ed4ZN-S+S>~{&-xBr+xwsc1UDqN@{~(^az84Tv=nm>Zt4&_v&OFTPR;OXKDK- zABFrE8(t%02wfd}jn*>vxgYwlV7G_`K23}Manc8CT^hlHu_t7TUe`6DLfL0d+xw}T0zd+=t-crg_r;9ZuTH<34)F}=*D_sg+5IDmfnqjqv3g(G#V@KQ_&No zj3?Hw(|qoLjE6!gN5yik)_Sah2BGAWf*jd3gdxk8GDp;$@06Ci`pi;8yIz#CrNrkK zI0FOGV+hRoy&9rDv>%~^;6Pxq2qEM!kr(EguJ>9*)zLuqZ%F?_) zPUtW^$`(1>05K1WO*~)LgrTx4HVZFDA5f#G*br4j1M=k}1=ujHM!BV$VT^7Ycn{ty z+w>ua@q$Q&u|Xun&rvDFgd1qp6V%JCNrbWLEmKO6a#F>Esx^c#&=J*%`{wFmPsgc$ zJx&kx5r!Mf`6sm7LdDsNd+ASU*1tfPgV*?Xkn@-z=N@6t1S(lEUM0$V&YtRfyV=!` z2>NR73))lHZ2yJ~o47JdbHS@Ut$l|Q_Fi#~)8I4up`$bYV)$j6@}0N++i_5}H3x4G zP8D|tE_$w895dV^*`v`{!q-~9?|ZQ~xIFf$AnKiBxwy#$9edJ>SU0u=VRzEOD)w1u zPZ49q+@1|X)#vSAEOmt5!!PcKLC|r3_OycF5CQV`nWUG+@iQh3HI)30hpvcqGtl(f z2CFaOQkY>-a8hD%BODJ9ISWaB5{EOvQ}M8xCu*BOTrxwH5z-2qYE{K`T8W57#Xk~_ zJA;UzjiNAOAP{G?u|$L%4ksWa`J0q#q1S=evZ5E8|vL=wN(2zkBpkL z0*pJiWD%;_pQUbh{29MH_&LR9<1~&`>Pm{qxq)ywO(jVYv!YoUypwYqIJBEz$LvO9 zhp-%XBQZs7CyIdadn-UDPO&jc<}RGFl; z?7fC8gVThyr#SFkLB65f-U`^K{$~6g`ak!6DF{=lqtAqs`NQnz95ru;Vjr(lMDmG! zyU_svGT3dV+X(#ul>5^rP69jSKvQYT=kKeI0}2HdF&<#YGdT||lH#yt$%g+mRa~Y0 z;z8d|s@Irf0jMpfk4f9xt3vKCff#(6@o1uc6S);AoV@fOgU8lW!pX0jWvxtA%{CjpVM#cCUQ{pu3 zo24oL3}-)C@l1@JTo<*dni#te(x1>@#agz{Psx|k14GUMYbn4*G0$%X&bfLovcCRy{9XF*yFYJo zBDaGZat=7{f5$~g_OX-Q3co{Yd$o;jg#w=5Iihprk{GAXpXVK3S7cYf^#B>SerKwxd3DNDyF-j4vCA&qm8O1#|9TNg^B~OLoVovy#S;u45Bj_npn}cD%ww9y|{s}6U zE5~k!HbQ@ah+Yuw)mkWXf<)M*@wNg|MbP&g%guxwsn@+>@g1g25Ifjy`g7>@UK;N2 z)efCZ!b(klJren;b^;UAUSXTLw7Dn_&VU_OF9rnmgD3f$9c#$p!uL^=( z%@TQ#{=BQtiAX{EX80<39mY5!>P7V-{bc{wP3u9noS~r9T|ed1L_30Baq$`_AeB9( z@6*lbJA&{YX;k>c8U*5t{^f&)oZi@x2))DS0#|yLZV!9IUrR?tpY~$q^fUF;F1sdK zf&B&Tjo|>+%O$qU;M8Stc#u1fhimasHifpfLCI&^8qs{M;TZo`?6r>0V?vJ7cVchQ zzb8I9_II*FsZFVZicSLJn&!kli)*3PRM+#?qk%Qf-)UsG`RX_qk z%F!QPtyIZlKx!uFcEry9yHr?J9_iW;7RGymzGgy-&rawX*TTzv$f`L_q(Q1Bdm+A* z_|DJ(2naIn<9p|=e}6^%tXWE=bG2i26Gg{6P}@Es`|9U{dxLZEigUo{qm&W(S`(pb zBuis0*QGimIv0J5;@TE%WFJ$02x@q-xh@y>xek3^iSytb5%s}>mqnx$%8NxFeJ(+u zQ7emRo|%l}t|8@C;=lX2z7?-U9TQTK;8C@J(hrztK)_`Mn{uG*6v)W`Lj zytg`LPouWOo)$2IBa9lgy;5s33n5Rmpy?z6P$lL$+sOQJkkwU+$stO%A?c+ST{&7| zM9|L;3Qi6sq!kwT_;Dw7ixvYHxQ;xnci#3DM)Qv*zDi?lNcK73Bz;Mc_>VJ>8=lXI zJ!D*&bnL}GsHpTwg9ok9cGaq67oyTv!*4eHecU%soB79fZyhK^_3gYO6UAjHSx8a*kAIbi;?K7IdROF<9c9$X5`LG z9bOAvqA&8Rv|MYyW(SmhEsFU(r;O9I_>8z5ruWnL`F)+@Q0%>%+8*s{2`1*9A}C1u z*CMacgc20{w8mL+^w})-Ig?|idU+bJQCLTs5(dQR(k0~s;YdCPl@w>_9+ZtBp=z4sPa$=A^OW$!!p&SU*+MyT4 zjae@3kyjYEs7W8@`rLN?!8_?6-mhNcZh=h;1Rb?FAj=q>P=3`hNjxgIxKL_~MA1}p ztCyNvrJFRzFR2Is&hxd-&3|B|gU$LEzD zYj3RpDTnuMUE8HaWmd(&( zG#8>w7^iFbWqx#nzl?uL80zlG*w>>k(}VmvXJ8p9lyhQkR)5D_M2UsBCcHSvW3k)^ zQ6uy&-!3fGe@_;7=s?+|2|>yYO!?1=*F0kt^+Cp%Y_A&L3k*^j4ixP5F2&D4tepha z>@Y4zguOk%4+Ds_Zwqp}CrG<$+Hc;DT<_|ffbYa!r~iHTXAKUJNhL}z1uxLmz`QN- zACui=!5k5+ZT)~A7uGnt>^Ojh3!64A$QeYDBa*_=Shjsz*hC;*1FxO7Gew(Tkye(sg^Q`=sP>w$_>N`c0Kx(Bl@jy_K1hGAB;A* z=Ie;;gnH_>AUKFWa2r3KBpDnVbWbF&USFLruwpsVF9J?px1mzj&l~`eoe>^-8Deo&CV1!pRk^e`KD>NuuMU(-*u~H zwy!Jz%`!;)D}q3yZQ7&!1})myM{Y4Cj|nnw!3klr;@*f^L3vY4 zTa++_z14_*ngLG~U^gkNeR>9*GPe!iPd zgr|!!u>j>ugS}BaZ$RA+l%efvYB6Y$){YiYnv1A4>S$%Lq@>I3MOg|gL}#C>rHaoA ziAkxO#tM{0vsCQ|tw@6O>dxZ`OWUSJOfe(Q$!}5y#suHgcLb?D%Y@CW$W8+XaE%aE}O0~tlitpq6|_+?!ePu#$GS{i9)oV?935Gpyq5CR+p%vu}@eR^tjF3in~=L0v7{TBf9l zH4WDytD#j}k%{Z)*(KX!dDxH)3S%@vaY0aG$~dR%Pb#g+#Bot}k>1{Fw}iNuS&e;6 zkaQ21Y&BnZ%)>j0Uk;QQnHy}Y%i?~__AS+&drj2K@)}j%@jU*HYu1nQIy2zNyfOA} z{dd&jgP>#0JRf?Q()vE_fHb+7k2nxp~_MM6e$HA@f;FLDWt$E>{UUf=E&=_RGSr-iocNy%~tKLrtmRK;l7S zF^{7bqN+KxE(Wp8qAN_P)MPK?SCD=y>E+11W`8|kuY-J>iMCy;ciwdV2C0SPbD~C= zkIt{uU?agMwX@jaAb``tdaiIV99kR?=J)LDD!)f zFDf=SA3R!J)+z!{(I*(r6^r~7zH_16yb!Q1fX8`& zc9MFFjV;w9Ar!A^kqJwFN>y@oD+Yub1|RBc?O^w99*a%zmB6(s!51_8L1CE^wK_1& z7hk|Rbzbs#YpR+R$`rG7d+!U%YX$nw#rGPrSh$a<d0dJTy&k$uHv)_NGg3GA^c1ZX_i0JprlrER zt*Y~P$KI%yKXn3}(N`ij=-&=MZg?)Q?~*QTotXF@@AxN3_E*z*aV|~-o%b^6Jc!3$ zv05{$j4LNV&|9y21+n&T=bx|=dx@j|9&vyCV&98#4Y@V?j_7zR3>!IThN=-l#{{ADbKQ7=76RwRxCqei z5C7oGiQuzw)b|UM;(K%wgLktQfU|@!50n7UT~_87*AO}_-D+7uC@xvbGUy#`Qc4cjOtD|K4jih!nd=eY{f8#alm;nNciB=hL=OXQQQb_~+Ik-`n( zH6#6At3}VPDA!&)ZX)Tq4meVoNq)I*L+Q2SwXzfOr&izp=ru*Q-zq52G}+fl7IkaA zXW{)gk6vYNBa)uUKcYzRs3b(TqZ|{0jAPpSW7X%eJ{MA9t^4?8{kM$4cMG3QjS4}B7!6hVYaFxJbXz6MpW8<6mP>CjjTvrk-Hu zz}@{v{M^shKcv4n_h%IIJGaU4+K@?*?~n3d&=1DmsYmQV{{NW0$HvEb-yH3il5{uq zkbV?eXiKtno=U%KFYWbl@^YwVFa>N6iMRLz0&~F zYti?2!oSFUfJbl!jCZ8@!uSVy_O~Glk-P~b-I;(LK`)Q*m?gHT?=&X5Hx_a_+KVJI|+%*sC_Q;!(IHf?e{S3KMl$N{F~3 z9%)sSwgbpE?z>NnS-ECQ=WEBn{l;fwpDT#}E{9*GAX?FquzAFL7KJVB^-mtfJ9Q%N4vXyFjdxz(Z$UL%J@o&mf0&ra5 zT;O*AS1npH0NSC~Wz|_R=7N=+xVP1H*>;r9gl^it86LSrEgcMt#Fep^#d8yMA^JK! zO#IQdZoMd$9D|$#JK7=5$yLG(;+L&t>3(j7+cmrtxY{;y1*17xNKnWhsXqtf*qU~1 zc=$YAN85Z}5CvGuZP9!XzBy-436|Jpwb84b((@El{0)NylOVn-&Znwv52ftXnmkWDzPLMjy^4U_&%LJ0NRyuGv!r%bWW=zC%CC}|doM4dj zT&Y+elQ6KB)ot6?gS_evSrwn>mgpzVMM;w_PxM$VRk|?PjDZBpr+WYj^7rsFu#lD``s{V=V^?vp) z-}e<^?9I!wyrBJi>O;Qoz)mT_-yi9HC0tjB6u7eZ+dr-Rk~D|Ke6MgoF~7U0s9$_9 z1f0xK>J{JW};d3-7#d!gd~E>}M(kTSv~GmZ6aBrzv3! zVA0?0LRoi^fw3GY`^0*1y0w>x1|d4Q5WI1!=W!gMcC^50%+5YuJ+_uOG zi25Nd9gpSW4*e>5hig)g10*K@-PAX^^ru~nAF20lvuk9r&%_n1W0jgfYPn(G^q9!H zLEO8kVQ&{f4~lVPPPuLXQc!!8l{O667vm5QGxSRTf(NpVd99dgOg**#jGQ$@zBPyL zGxhg~dx@yaXd_$z03ZNKL_t)1nX^%k=5El_=xD)ljpq>0_m|zR(>R-$6ynD<|2%yo z`idY{X?BWzChQo)h8YHT^PF#-Gi0D5FS%Sh@%=H+@h}7@@4HZhACn>tzfUR=%9flu z33)i>8)@rqGylvmQn>xKU|6?6L>>`vM2p=L=7go@8^CwawD#h_#^Zxz<79;vangz->SOT@pIqA$_2^u4C^ zn6gD#0A9Is%3SqleV5j1Efk;v%xUhH6ekmpv zdMGBAB8={!e3PPdL`H&w%z$)%vimuu)eQaJmG4uLXO^vE3OZcpV%^SQ9YTnqU$}DvLA!AalR|w?Ac{k|*q;+u0|!-(OM` z`t{Z)^q&^qZSrzr&ivmizo1f!YxSG$TlB+=-)-19#HC652MWHrwqF$XeMita23b zeE22q}9{@xH6qx~U%pF8XHZf1CbxPlVZ~1vz&MI0=d_(!3{7 z%iZGKK$uGgy{_G&YPxcbthR1nrR*P0Ti z0jwc^Gx1JO>fcc|n9$p+yN^jnSxFO0*ipF~HvhO>?L&@eazb}so@YiiT7SHI02>P; zW}Wa+Clccklv&OMtxnFr+rtrT~JLELyDc68Kz9T90PjvsCRi4F^?rejnP zO{|e;Z>{;fQRj;k_fOV8Bd;*XWnrlQrt}&8aQy2$AibUni#dVdfSdz=|MWlTzh3=I zD%mW0l8K<>`=Dm%R^~BH#-V5}h?3VsKS_Pez2mP3&(V^)MSj8mzA^iD)4<1}bn&{p zAo82JUHUBXxPjPRj9zH^d@FEm_q8lPpb$AO76#PPSUq5pZ`ZdhJIv5g0P|i~v7`+YDq#FcwkdYE3 z0K!e3MlM08YpZeJ9H;loHmzBpu#JAm?d+hUIEU5j=X5FZMw7u0p||DSQ&;B( zha-&mN%4TXbC7GC101z79NZ`?LVafj_3B!Z+cDWW*jqV4tvC(UbY$?^Iq`tF9HChy z&Ml}e2F}wI64(|-^hWRs{rK>RJUy!YEh&hRm7p-h_xgutKePQlAMD(r zD`OWMJW(LXX5tNFXG<72^}`9WvR}@SDr$>WAFFdx9OePH+ciVTz;BdqG#z1S8xAa<_>**>`f-&e-PJw zuQulYzr#P!58_`D$CM~n$FKdr z-LAQG;CTen!0s28m~dP=M(uAuuw8h{(L$*U!LWX#P|ng;?lDK_jth|W19gKE#ci4r zL~z`mpIR`LA@_L>Mnfny>PgB@;l=;zf zO9mct2xYw)y3XQQono();3&FUDbUl>CP|7+CA7V=EH0?2%@xx0G__h!d;iJuZ|Uoc zU#357-EKPW&o}7U&P-Q3v2Z@ zL8uMOfOQc^nypvyQq&XTlx7h5O%suChg~gA^U6`3E$Z`;*4}EPK-6+o9WJlDm(xTQ zu0L-F7?4{o7Uxdzq~J_Y{ed7q__IqTQggYM(e++pH=m&Y*5r-g_-aY7jzt<}R^HbZCtj;4{1 z5SAFBGc46ga9d&8(!LKZvyi1*%}$L8qONlw(NH_L14Q5UwPM?LY$Nm@2)an(kvqjQ zLb zR|IKMi}fg@IrY~-yNIDGZbGZq{OjuP=#`0U^!mh$ycmAGewSB8I0_^|ynVqSr}4G| zqNBI=AJ9wV*SQ@5>Yo2?^*3$nlz)-DO@B4{HL;AU^y9-%__=>id?XB**C^_Z(C;#z z(Seo`lQ~Q;1}-JI z3Ne;`vH3@u2*l{~1Lu@@yUzkX%{oW#%;X$c^iA2Oxf^h5nb!$=88vT5dfX7X(-Ja) zg8$Xv@oW3~g+y_Sqsm_D-XVi1cdnG;6mX;wS1MKUL)5AIq!5LqF$%b-MFp8ds(G^5 z-pD%+K*E+XpVE1;sps@Y#pMMhMsv0Pym4<({60n-S|e#IiMfN6`+%vA((m=NSlnJ4 z19iOzsnc+ty&b+zFNyW`IF7WF07%*oC*GwOYOUaoi(((XFUIa#wtE%+5tvZd_^Rby42K{QcJCSNdMOHd$`1>D;IoZgyxg?_U3 zJ31(|k7$=A5B)NIi?a~S_;u^Na9#@9*7QJF1iB4W@z~bgfl&0~GX@Q)D`rQZ z#qj|V(6HoZ<7E(ms4~RQVoGNbeyBMg7B`tpTO-hRkj2^%^UZL2xolJ8339%Xd%)*% z62LjHWbd$8o&iM8=Pc{poIED(9oh&ruJctj>qbNKLhy21f{yMfy)s}rZDV%Qz&-u1 zQ{SZV9twr2$8aP$0S=_NZHfqp!=x*3HoOX z&(y89j&RtNPJog-6xUIz>UW{70d**}D?8NAo}la?qtHei?j-VNWHd83*^=w|WeWNx zNrp;un|O|i2UJY2HGZzte+$VW`iq&rrH7e&^dR%OFz)(i#K~xSAFCSiOq{b>(glg` zRg^I=$nKwNVp|Qs*R51Il8*=O9-`}hL=$VooFnYw`Fn@Y_~8~R>bV`n-_4|b);Hc1 zG4#}OpGsZUvE)jst>^AE+YWRKK4(iiI1mk7H!IDw2- z)-+>x9kD|5lKWASJNBxFtJ46yYODqYd~V3h`(Kkop=A`1`I|!O6$Bp{XcXU z&iSVW(VJp%ENEQdTFQMO6}?18J9JIZu}&Z@9uM1AR1N?k-Y=|iEjYxZ@Gu+C+xe#_ zM$Qdjyc)H%Q*xNo+U;=BH$h(%wi_HvUK<1QV(<$6DfuxwJ)8iCFnT7>$gyLd{on)l zx0mD`=p{i%rFw=nPEtJyl#EbCNX(PVJM65L^c|9mE}{jU zKo*AFOVQWpYWN2Ic;}x;E%iSli!Ck~4%Y(!h`_1YJe5nGi>h=Car{zIr(7{jO3+_D z52~g4c1W5~^XvDwk0LBUskkP-1(HxM>2&|#F}*zbLW9CAj4q^VJ1K5TwZEs;G-dQG zO@ENiq+X}dT&+;3mPR{KR z2!;3o=(@(^-cGZj-$0wU^kIU+<8kuJ$1^%1?CAQnVvhfG^>>bQ4ddI~D_9Y~`m_?KUhf&bM!w{(=X|kTppD#pR%z}QAoY8N z6+w*lX)*L73v!{w8B*;}3sK2W=N0?04ai*o9j7NoJ-P=e?agVLKJi^H1TWE2u62pZ z)4~?bM9w}z?=>J0SLgvjhcF-Dv^p z+~B_EBeaJq_QWS`2s(PjFZvqS*+a3Htg3tB-wZ{(K5oCJbkLash)Ob(Zev>q5r?=O z%1{-H2mzP=jtKg(A$23}-~!olp6$4}6s^x(*ov^ViZzY4YPO=cp+z~!`gHI@??vJa ze3JO!M98@v5PehPMs&SI#Z0~$UALye_81yexXWd(A4U|t)FDAdj8chlWsDW4GnMYf{p6v9|DE$+rIO9M?6on1mecEkh+pEL;Q;!0 z`_p=d35lqs3yXW{ibr0IzmM||>8;=kZR^bLsZZ&mZ;rb&XyUxfHgf}618af^UiK|i z#ilAps<9Gu0%|G#wx1=wVy2R%M6I;tcK!jMm!WHsE;p0b&Eg(slOQrM$k59wJ7rqc zp`*?mQL$2wl&wMXm$RSJZ15`Wv?Yoe= zkDkw{v4AmR7w)@)%jrcsb($*dgc$-U`(DrydRJDJg&ru@S zobIy$0o; z1i=kN!R_W0oIJ=(1`?EJwSTYpoLHg9wf@)h;b}qM8jWfU%(98NAsyI=+97fda*p+BFTYP?fo4%Pj?QyW)(Wi_ zw`ma~DlJa`skTlF@)SjcVF)5&UHl%XOH4G7_EF-tCuKG^5gouLXqTFfG(INcw9mET zlTw_In=3b}v>%GeHzr7Yyo3641L;zZGN)8~ejHde8{p6>=K7=AU znFSx8h`Dw?)+n3?=TTBm(uQ7bt7itrwc5g%#v+Z55ufWvMDN|m%VG{Rx&bz|ecCP_ z@&kZV5dEk_o&asAdwh;~?oC0w&CV;Fn^q~({oG3ZIXLo=(*AbjMXtAhP*`m`FC1e- z-5qF=I0GOnUIziLqF5i$|GU?O2I;Ts+50^`rqM^-t#HsK-vmd<-C$9PF+nej>u{)A zqD5@DjM11_*RO`J(Ua_B`-2FeT^fuLe~b}TYtzni zQJLua93qlTQ5VTI-abWsp9e%_ALYfKozaVIqhXKDQh~V*>?osk9xFXvK^DdOzsVUxF=1SdEhSxm6RaqVR0<`Ib89S=)>#-`gZU_T`xj@oc@SC<%%Fq zLGk9WJl;~F7RJqH{t@N%#x%l^9HaTrbzyw^#iDh3>3!|s^ZEDz^eeg!^3ZK7y^=7L zB}+R7sCdJv(2iJry7vWrb^gor;nttH4V{7CZG6J*=OpQ90NK@%Y7m(#sr0L@PwUU! z-n&QNIsf&B2r}x6Z)F=7FnE*ZU!B1CyPv1KCE>%pO8FU9l&kwe4 z*&gRfa)qwOFNsCjTwX%-Sha7fcTi4JxK@vYv5fhokgq-;R2#M34+Nq7v+yhR2sh@` zYOYbht6VPA9?!94!*g&580Ur!9g%Z0IX45{H$qatw&TPE+I9J+Y~D3^sMOkZW%UHN zoI-@VBsNWKs`z(UqKy+`{kfowbD0s02?)HU%PNcXS*O{gSXZMRWH$r^p^i&I?vD=S z$_25;YMdfJ?hT8FhsG*73i>AmL3ch544X${{e9&*>W_R}V88rT@0`$UxA({Hb!h3VaQUmZ-j>+_Y;sr`90aRWTc+wR z?KK>x-AmoPrjyt87Zny4E>s$o^O3E1sAmL8kFXGAL5u@)fCE44mYhit@IZ}UVceu_ z%I09-9q7*Gcbd%@cQt>wNn^D@PPaUP6zO2xlk|6|j0uyaA&JyO+Mh<0V~ zXPTo#h-6`P0Ozevm!hznotKLmIugvqH&6eFnsB2;iVrHiW!FXUp zFraRaD4-drWAfQ-wY^)H z=jKGt4g7NL1FlIQ4^8so{5WAxUY(8uk;nsxJ;@B4$?Dm$Do_V@HdT2eQ~ z7@gqx0B`N>!lULliSPb?_HLb|XKYf?ouCosx|h}Hmx~*;RczhM-5T+aiH&Mb%ps(A z4GZ$646Wzx^S(CBFxrlxBLVK;m^VQ4gx=Z0h!EdxSFCvju^(eyL<_Y}F)i-x6G7@? zg4o~iPuq&U1zp^Cq|c5Bx_d0EJCxN6^vA>B(f4P5$l5*K0PDqWVVOG+bRu#%LT>?^ z7+EN|4-lxF4qO!Xw72W!nz+yCloSOPk6;0M0oqRqNDS=1CKLC!dr>pI(`dzzj2I|l?U86!e+wVg*P(9^2XhZK)@#(A-b>{rC?e+dTr`OT1neSzRmD>J>&}o$seeSIzB9{(z}9mW2AkUYcsb5HnbheiS=?{ zt46!gt}0c|)0{kR8@*H)rQs@%h%PqP6YIHBZOs@y8(#QGx&d0U^BIYx`aq{=r z&^!rj+N?Rl2q$w3Y3$Qdgdc}uzeWn4(uLp{BJN+0+~8=s6Z|g7AMn-NCfoz!i5Gxm1J$AHelTJ|30^uZ$x&n?6njaH4wN}cIJ`GOgng*AGbJ#yYc zMSjXRP1C+PS`dUXZc3?^Dml98i_s6Ff9=Y_Ho_6YHW?78%e!sp*qlH+J)f zT$gSOkB4<7WS=64d7!BWF6x$`h@Nn{psy8oo7_fOF<+kOHT{GZNCtToIwsTN$L{G;e30(6`54 z@A^ER7r>EWZsGJuknAhr>l_j71RJ@BBXT~VfNl=TXrwMPBkYhbHEQcX^J1&8!4G7s zBRG0Z001BWNkl zK#@ra21sh*fx||#WEBx|fZj!)@qS=eOv-)`bfm8gb1izOux6DMlG%>hpbaH>Zg@F^ z#MfqS7=Sn3Ejb6UmbRSg1K`x&(~>kRjJ=WSZ+C#U#*`Em#)HfxSgEzOv;u;d$R^5F zG)k8WlqwhMn|-gce~t_8lWsER;&PbIi?J~y44-lFbHp2{wu%w|S)ErSG~y5GFPdr^ zKTCc>U!VMr>ti658a>ZP7)YUaMuW48Z1b zh5@JbtTIVs;#%j*xtn9E93&~y&pPOs&Ie39H5>RW12+xYJQx3F!nh=J+-FptSJ=XI{h}Wj{1f}&9y&ip;)KLU|U{URG z)H`)|tzutZ3j5%P6Ytmx|BlcGv%A1xxgZOjqM2f+v8tjaf@t=G~$b)D>N=P zvUzcwF*#0m(|>9r=n-KUeRbkn^v_%WPhZ4SWLd6CHJ@UgZcCs|PAn|W^X#Um`cZ?W zjMI*GU`vY8B5l$}^yoOS3TQ!u4jUwD)1mnOD8DL}i{^8IR}3xWk}lKZ{e0Yz80S&0 ziF%M*wk7EJ{PTesdYo%^g!Kbn@jXy~eVX;@#{te=VlwVO({sZOFm^z)vX<0IGt#9I zLGKn2^Fs=|+qP#0KzC=vHJ_A2t<%a+5U4}{PW)9m@0()76i&fGiS7>*aLsNAyTuOs z?EKXzOA0%B*9*(EnqQ_Jb(7Wgt%&*NDIB~)YuWqa?}HZ!dY)17R4D476ZdXM*bEuU zm-E~r4G+VKC9#d{W7~L4*eS4S{oa7%F^$d>uni`Ky@A%T{#q~YHC2!k|M9y4jNl%~ z7Rr{L_s&5F1Ou(L*(j;v)@@?n$!J-+bNGawq*m#r@yqn;#7k|D2_e&^!Y)Z(FU=}r z+=>oS`jQRV-qq7wZyi?zHxxE>wJfB<^8?ZC1Ma*OCQrrVn7-~4=envMIVnNX&-o|B zzFEyo@_2^JPR*Az@<~#?rEbp&I@H0T=FSio?_yw(w#UE<*p^DE} zRhJ$#i1Q0i#@Wytc0fTIk?Bpfxf=lV0;ZH0O^OFd20WQaK}Sm|klB7jl_5Nb&qL%0 zYTc5>YYoz4CGkl8ycC${^F;){RjCNZ;0vLPO{uUrZo%?>a6B9r>e`%MdP2s$67X|f z`mn(xc_}*n{HWJr?toxBd7?3Q*!6s8b;_n+Szi04%LR7|I5m+ zC{=6@BHcTDMsH5O($-;Y^aV#mdqb_(=uaqNv2XYru9Z&^`K(&yP6;i?4?CoEu^!3+ z3VWJ0RuI`=Rh!Fv*2Ht;O1122XMnQM+yLu+pzNa}RUJS5&F2(11pU(S*ek5ir2o8l z9C?pt{qwYxdm_k%L~qCcj9aq-3u1wKDf$}SOMljMNWau<>`eRT>OW8Vrs=)O?=Z;+ z&IK;EBX63hlwy6H*R}%Aao#^geqj_sMRT{OP-;BOYZ-g$<&ys(lCl2#>EB}<+0F5wMhzlEZuS)^3j3D+8 zGN1F~O86puD{@oVreRXV1~xZpV>mF#aYlr5N2_5#-V&8w%dFdya|2l|Lw>nx|H8gl zDz4L2!RNHHkrCpd9h(kI2U?b9eX_7Qr8-IP#IDE)k{&^iWNBPTwoI96YABxXB zB=`34pa2eei8HgSzn@saCB)+(HkZ{8X)%PBT?$U}0N#&dx+Um{ z*5f_7a)CZmvZQIlvq6O?+?P7Q`2lpQB@h-Qw^h1$6T~_U$Bi}Pq8C8la@;GFUX%kB zS}klhy(ZxGH$8{3>X#H6l{5ARNikOzskdb|CkaH)oz|og`U{ZnRt{lapGNa^;83X? zZ#|z-BJ{1XS2^vsTrN^l*uf!T-OI1ge~!OPI=b$NasOfVF1;SS#sN~Z{j^<7(zGusY*2+c z$a=9eflIVX(@SOkH&f12qBy*D|8{_VUh$M@L*Jt*&yl@w;yZ6nPjc(F3*lF2&VP=+ zKQqU~!47Z5-r+QO5NxBf{fsGEZU&;}icR_*YI>&862TO;M2d3Ep zKP`w)rcPq;J~OGGi_Xx}!K#aI-haq`9|Z!9q%|N2SzMemNC#4(&5JxXe>ViZ>d262 zUKss&Ai{?99=o*jh}cLD)iru!>}`5oJW~20Z5CE&TRaevL!=JZ5Rq8ah}#hd0Fm=? zODfl_xQ_wJM=RnzsQ(!oz~}+4FRnTMJtxMFouctM|14Lb9omp|JJJN84jn1UV{(`l zd{a#uH3+v;=EBwBBHu$hptq;l>EQ%8Rt$##NacmGMS8No)b@RYfM6`bnF;LxhYGT2 zP&R=y#e=eY0Vdp=Yr%8ef)CLXHyb#{$hF{k@tzbbrrQy9EZi}%CMETB%XC*WFczkj zBjw-;F^{BxmsZrRhIIFn$T)f4Q7CJ|peqTIJDf}k5f79}#H99OcO&!`aAaTf&(PJt zoY*f*lo$K%p;!md-f2S^xK2?hI8}0GRjem@eowI`Fv{h7wfbjtX7IApR^oLX9S3|K zU)4qs`o_jqhS*Xen;fA0lg z=iL_94V=M@Q*n)}VzF7v-Di?+N6xYFR0T0SbTje_#f7o?!NG62&BQr}G#@*14iw5+ zLG%!P+})l=_mp(qLk zqm51n3@oJM2OKsGkh3+*-~-VpT2go7O5<^HJUp;C?N~fvaB!ggOH$im-GPcQ4m{!> z%$n+{_^2b(I7JX?wmoM-?q3M`*-%jiG_rHW65X}})cS%T>3EIx`n4iW zAaja?p%222ak_0e-h_D0iJSv)2!MQ>$>F?zlB4nF`eP7RGZvz=^z>kP;A^nZvs_V{ z$A7TqM8Q3%8l{1TOb1*urz{6M821f=YIwjPMy3Id;Uo+gVPOg-U#F)sv~otPl)*SzOxsj$h%mTRJgBlI5$L6l~OSZEL9CGRPS z`7#04tjHxP3(;7nnS==*J;v!j(=ALiAxlBI0e3FiaxI+j^ zJ-vDduh&a&FTO$dvr7#TR5&7>$T@(hIEcYP%^QX^>Pv!L?iLU0QB{uGI%FFlnhu}* zUadA9o036Pb_=M@uh3S$wNMH+9fQDN6S^QaDyQrQ0}v{*68=GgTgL&eAMVeZy2A^4 zbrW_b=uYI^00iuIh0$hg4j|sGoKXg5gfX^MswUrMC|@U{9kI0gpnZ$Qdky z7*!7oJK(=v{yzVVEPxls&eKYEhaRR@X*=&c4t334$=|p#*1$uM(k}DZ^|FAo8E)FC z!R{^Sd6J|?F2fl>;<&{Dyv7D#Ljq=d4c{5*>{3N(xK4`rJx>Ed(1Cq*jly!A_S995 zy4nF>3?!S0w)lNL_kd=DmxZCwOgwclDL@R9+HO51-T=h8kVfEUk*oHlZQi7u>cP&% z7wC&^d(TqeA->L+&%MFtjOhMGE$w{T7kAZSY*xGnb>$!nh}7Zwz(FBw{Me^qfs2vA!Li#Zxn#b9MWmdJ1b5tJJ z5q0WLWX%jXqd-Uzfj7zq;CMnN0LB1_zTI&yjGv=Bn_o0NKL}7Hg|1IuVdsYxh(@;} z=K$st?v2^t#e1MB0Fgg)c7f3n&knesxDQVRNjIzT!uK4}CW3LKgpwVyA z_r$v0S&e5M(8ZAK%dAFlj|pX*108OGQiPAQPw7jc%T0en>D8!v!f*kingQ9z(ezw7 z=dP#sDFF7ult0FgwZ{6wo-PN6;N%{R-&R_q&-3SpQKkgTK}E% zUv0=ZfVRnMdW~iy_GQadF44V%N3@fxu4Ui4__aFG1@S$|?a^dlf(F@dg+A=6*!w*u zu@LN^f2?V%fq$L%%`yk5*kl}>DnW;E+fwG!j^2~j_9$0M&|>f=g-iq#Db?Hgr%hsT z2HF|q$H7!^f&z;FRK((5p1oP`g*jP^pn`BgRLu>r@S}FtN)|xwF=*V72t;5J`R#^q zfDq0KVh`tn8!~wo0Wy6(c;0o5aVy|DLWJ(Tf3~AB4-#nw7H^O~C&c|@BzYw&by*YC zFJSTh%K10>XJmqyy_C2|@bAgn9Yt{g?BOE^%<hv=E-7lFiUwNpIB2Ie@0dnz)Xzc@pCJKkeS9mnN># zOk~#ad^iJJ*k33=(95mb8+&=(Lp0tlI}yt2_as+;-@JtM(jZ;0RnaC8a9Il`2 zXO2zNMBvCt0W%6@yHjtg6S3}uaCckJicJSm`sW?E4!v+9Awp_Lw)=&N&^Ya8n#BT7 z6K^iOT6gv!8)UsE5Q)?)WYV|=$T+eJ;03?Lx&qbvgKLZhbxj->X>1cN`qEZO`XUP) zLQuw<-rfoD-i_iOlc$S;xlt|ofI=3=83b{Raf7;Hd4S0eN@xBNgh#@WJpt|yveFJsBD~*?y-HDUkfY^0dXl!Z1TCw3 z^=zyg!39o<#ym8qMx(A7dj_(!{6n0D^E?4!j1cxiumpN9!1@Z@) z?TvgkN1FIstM7UD;1PXo@hjru==777-_)P~`RX6&dl$dXLYQW(Wg6Q{Y9*Bv$w!Y8 zPiZMx$B^(_DWoIK5eMUVLNC)p=ro`>kAz?BBa8|=M@>ME0S;CA*AbF*>p7^Tb2 z3iPY$Hr)(eY6?;gB|!%&l`?JQ9#B{rr&Q6ouk=abGz^;gXmfOPlnOP%N#aucJnd!o z2SzOJ`t((?CL9@=AlS$%fp>DTMK*vF&`khy+q!V#Ih2H8Q*k@@;h{y1xOF4y6j=O` zAu(2K_c+4f0Hl0U+?R1N-a$I&U>GS+5y%<=i?xUV&W&yM-r|(HlGYK#M3W2RYzl z1_D8g-0`W|jvVS)4yE@&Am_ko(39Y(R&0b*2I{P0!7)nYniunv#&{@BbK%AaImk1j z-Tp4gQab|NPPngE@3CV17!mjpdJo*wIVDO{LnP*e2uaY}U1`z?g8`5=L|CnhXF*-5p~ro&8f2>dnxhvNx8FnB# zS1B48BTa8E&B<%cj!3U8(P!#Y`cn8sE+;`Rb}KnIu&W=?gcRq0m((q~=%1w-d6M=^ ziKf>+%&*ebzyiO1OKYDY`c&PZOTGn8r~f$r1rvEYWKEW7-34-)*+ z$wy0M?{GwDMmXEx6s`flbi}^Kw_9>P!U%3KA&2OKGJF~uFd&N+jRNEw)g2EhkV0z} zd;}TX*B!cRc%Wes;)g28-nMq+SOuXRwlRE?Kz2+(*j#?}jTduAVijpGUw_;IWJVRa zy(U_1X?!JTeN(hr*yy-?4Rz>F(bs@?Fak53kZCus9d>dKphO4+-D{)XJq$=`S^Dw% zhtB6Mp3fwbRMz{WJM_`^9hwPEG_@ORfY(F5V1NR_nln*cYn?Q%PrsXMu6;M~M9jlY zd7pAM^1rNZ(~f@V_*r=UhP2oETxvjs9$j|URCfVmlwQuc(4-j*%lZr;AfIp)!ZXm~ zg(EyiaI5awZ;bhdyOq@l!-)bL!(+>0`M`B0qwT1_%xy+QawgN>UgOgH( zCgg~?w;47ZFZriwQ5c0YN{j`XfXC`q13^EIF2?hK7yL6!&fNfd6NjZ7h2$V@75BvI z(D@z-a&AY`{m)san_&WkHN7=~Kqv9AK?YL3|I3B<_}{daV^#N+j3BawT9mm$eIw@v z%))TkR=twAo{Az!d5|Qpy(1Yl-fmze+wI7=8**;IEjb5Lr7X?Sh@hVs0?KI79O3zd z$3{%#G~km)b8v){M@|^fn|g{CT!;k@8Y(s7fL_|DjYGQophW0KXa>}Xv!#4Jjn)b? zp?foYnbST&&g~pX0aIoXNJUHz_vfU~2(sdu`z3cKGa~ELQiP_&BN}^!ev`c0)n{5s zy0=BDe3|3;mFF%Srp({j*#<$Hx!mKLeK^RRvLf(&aR}?qfw(Ei0Y&#~(M9^&^edFq zvUKP0DcwyxBem40?}nhG7i3%}U%*eY>@M@sTHezNgObsJ?ixAXZ(HxRBZA%|_)oYV zd>A7(Bb-h6PNBTR4)9u!Fv4kIOG{ByY_`!MBex)M5afYMbcv&~IgZc``~K4Fn%6<8 zkL5Z`2XYP)qF0WL=L>B*R`^V%Nzk---iTeN070MVP(%+SW>JpO58`ijJ%*|zU9OSB zW|O@v{wr|5?E=N5C_7uMfMdr?XR}=*)-6@6Urrf7iBg&cFp+-V2~o$I=p@E>s3+Nx ziO;kWbqF<=Jr#DQV7``)DGECXh$&%uZ{}6{%G6D|b?}Hj*?&m-G282U5E+*xQUn=S z&S-!$Du*du6PU9iC7uuYMg;vtaMBCkphPW47{MnGz~VZZ4kMg0o)z~yN`oB~AQjW+ zRXFMcL-s5f@x88j9h7V0tEJFdqefD#*Ka2QBFPkqol>fzV*x<~Biw3F;W}#tufbQZ zfaH}0Ni1`nH3$*vtaA>|g0qNpxwD?~X2g!Ej*mGC2Q>c6v+h8d$seM_<`z?Bhg5oy z0jNcv#WEIr|7<@o-Km%8dh9a&c>NEwpKlgea|6XM#$t5%OA^7u zP#Sco*^A#@2`sSV>`+e&qMmDTuI9>l+xM6;T$aRu!`d37pOC!ASArg4gkHcu5UJ&Z zVL*@Yd;qHLF)2V%Vep1(z0PYqW++jtMd?QMt%DDUUgj%DWD&&8AR^r$u0-g(Z-S=e zFa@0iHEotx5Y|T>)Ljlcpfv&Kgs%r(I66hOmv)5-A(6AAfJva`UZqMICXBgqnWMhF za5l9{@iwEvu7rx~cA#)FSxI*LbJ2P1C-n>~Vw=<5OBP2~nU%haEQr|ZI-rMn^_Xd! zV>S|P8JI2M;Rp}oB$${pJwGK#T+70!#oOM zczPVlL||m&@4f854C5V!iqC-*c4Mrc6+m6z>AIjM+32MUl7xHHNgbvEkgPdhoW2=- zSs0O>J7%)aQS{tEs$Ae!iYEm)Up#^y>MjMxG)r4AbK5VB5ok?B+nhhr+BcaYWO2ul0Hu zKt$W?uvjD7ZV+i46C^#x$Mn?Bvvct`kbRt|QK~Q~wa{)M&X}?#IC)BZ6@Ib)L3ald zc3LzZYx}ZsrRo&f*W9)5{ZjnT=xOdD9TxZ7zV=*ThIWey+fpIek!6?nCIDMNkaIYC zE(aE9sj$hJDhBMvJjNw5S-#(s+gq@2001BWNklKm;D+$1c?!?@898?HE%bDahll{QtA}=1-2C zXPVfHJaMB6b#+x&-_2(8lBkoSR+KfP;mq!M$DSX?4m<4i|KrFPO;{iBY{xwDirDM?oX(t6Hc7V$HJl52!#iRP z=bx9@9)2U%ozC|_{GEMjKKl#;yK{y}X3T0`AN>EUuW*`Wv3p`?4%|7pOGkD8e&)Vl zKQfi?7E*=N0@noD9Vs?0vr>xR_fs~0gAjDIo4%2{MK@E=v+wWI)7oP?(DrDz_Qd16 z5-mwN{wlFGw%8O$g+m5oHYLXCqPjw-jA&yFp7^w@#5rG!uea7^honE%4rot1=I>>s z(aKu*`HsAY2vY%1nTQZ!2B6G91YMc|CqabyM4pkv6)DY(hxvJ2x?2G`DVs2e5%GfI z2m=-di`)3Me6qt}(BivFAJttDQlyT$(@w3JcjOo3of}O;xKaCA0Z31gks)GZ%ZsGr zb35W$<}chE7_mak7W(4Cej}#KssSA;Ucg8wjZl+4>#%slu*%0a)RsYX9n!hJl%cGU z80+!vNUJe$zz64txl`lk>rL$On;g>X27aG=OjS((8d)bI>~_k5;3J*BGX)$Zx>F#} zOE9mK_?p}~VedRB3LHqfiZ$)qp~QTzz=i4&_rDKo*N2w4d+=IM|3Q2+zOcr0gv~3 z8RcFgM@V;djO1PsVS9V4t0vTIpD?POC{`~eWk2*v5AQlB!trB)YGn0>9sLR;qF>@Q zu67DC`uw_oW5Xk5-Az^;OjCTS%0%=#@+udxUcinSpgvmN-L44M0pMwC-6Q_H|pzw>hhZTwU+7JF+sGrb3 zZ~tzneO}IQQc2Rh@gjvNv7gu)%g%vh%hIZvO-o|jxtIj zj0Z5xP8vnZQkwR4qNF;yPFr>ndPI6=# z4RYiF|4s%-k9E!uMm!8E7-B){*KsZEI$4#cSoYcmWT0SboFv3~+Ijo$ETctTOzkV4 zh5a~29~YuBi@ZISWAp_z+8q)%jk?xTcAe)1h?XBQ60onI^qd>0PelsuQ}(?oyN8J$ z&ZuD_v9-mRfWrkt1!NNuVTbf;J%rA@fN`8+vlB!FjwY=~$piX6$0e0tYt(eZxr2G` zjQeVUYz)j(nGt$tej!U>*fDRoqWYL`1+y5q_BbqH{k;kLjJG zU(t5;Ay1u83|OL;lhQ2*0qWv6)zv`6JFK8pM9@RTBwL@!QN%DpgcdUDhIFhH~&?ejp=2aVeEdBaFES26FSM*u?X z^lEpa?9RByT&V_d_&DER@tiu=HOfdbTkG2Au*vpQGz=;d))j$0H)5Q~C*>r?*t73e?gl-- zaDyHex9IKN4||@gDl7Ez>ht{XXytgIpYZW=J+Z-^oc(|@97Nf%CMTQZ8f)z(b&YQi zg1%M$l&+*-X1}-F1_Vj}e*Q1$k0-w-d5CNU92a76NO{jo-SzY1#`&-^&Iu-|Bs~jh z#StPnz@pihVhBAQm3%}PGj@#=+LV|0L;t))&)wvF)S6|08`)Izjg}ca8f8buxjL?2i{F48j*D|xQ1pz_3rZX9+{nj+#zU~l* zdR*W4C6*cXTfUjPM%UEUiDgDQnh=vl)vWP3Hte=R(dn218hujHJHfM=*gQcbbkuQP zX6G~MsJR!ow>!HL62y2LX&&M2JW`Yj;Y8c4qnL5CVUzJFrqv?M8fU;JE} z+n(){t$QAq8DF`azC@d;b^7P+-%vs8zPIQI^6iVSw*C#ya#2~~sqI0?xr0@C(ewS4 z=KB_V=4_WgqpRsx*&OQry@pkz%khhJTz?w)m=17NZY3^FYz^o{M9@RT#BSpGuni+b zm>3dKMoEMT;IVN;S7qi z!}KR6RS$w*?i2OW8(Le07wNc&l%c1w=z7nOEEk&nkDX_Fkl)>Qd=M?yO$<`w3IwSi z_5=0}!W=|cX%u{1*=jo`(wFfQSOF_ zD6iD|tZlzO#{)4hn)X=3zK#qC@X0(aULSDX5Evo;+si+qUp@UjJt^pbp6ZEqKWJU$k=D#UmjYy0X*_)zs^zhk(d9;ok=V?Dsr6C_YTv`aCg}wp zNr!5CrJAIOSrN|;8?bL=l>Fa}lx1=IF zHD7OL6-*-i9LGQuy)&IVEF81zhzS3Jlw#wt)|FMz;OVgy{(6d*Mski`&Am=(DMw!w z-y5i9*f2=2dz%ombX4yq;BiI{;sPTL`T?&eJ=X13QMguFF~MF*Horw4-J2vi2aw(2 zv^$LO>;TR*gH6+Y&2~7{U3J|MBu#dd=~O#X;qgpBEjdbrIvoy}i_RM40N+K8x%;bD zlceWFg{_r?XC+`?KV1JV{ptxL>6J5*o{-1e>7Ww@ZJ!pD3zTH@zslC`gZd*X>n9UE zhp-V@wIO11HRw?YJ;H2ZTn1sVgHPwM5#}E-n%BeyHpB#Oh?wkU#GqJg@KiuV92~<) z5xR|f7*rtL%d&q;U%}KF={ehvD0Zg^7fplL77jwtQF1k@nq)5^ihSHC@TiHO+Hz2! z))izK#MdiT)_a>8C*mdREZPpTe{2*uaqpK-jL#tsh!pN&t|QW?u`ZUH&Vfk*zj0WF z=zdrfQ}jPBeuw`Zzv$R3(WCkSeOY_T3A-D(emnI;`q{xx=yv86$|-p&)b~O;4+KM; zs90P~(}lzh9;ru)tHo%@vG$aI?tU(1q$OHXH)$<#otENH=waz&+EkWkLtbRWe7dGE z)U9!@qxQCsa6W*0jaF-zqx-sd=M0eVxFEC$Hbz9vLzt~<+I8n%(5wdAhrK-~=epLG z!tMZXofufJhWkC7q;Gte{^`*#TIue&_~dng4r&kC97@oswmb1-j{^}w4-u2%36rdK zj}RdUrkMs5A;LI-I@DY&Z3{QK-iJt>7mNE4JSjMYcvQlH2z*Vb_f2hggGX~c$h^~EJP7)w-}geFa0=0b z0HZL^$ZsB@wsW^?`FCpY+Xo`zaT5451(9yDIH7;%44 ztvW$qk$+?5&_!U~F%WS?WJi5LJa<1+1G34Br6E;uc zg5_D3GEG=KE5|NXz#=e>KKBvA1?(f9%C6VQwCwSx3s&EnZ>;6TW@%Gp2uC5F7ph=! zqCbh6`xqOuKi+tae!Bg3)M+XNLat1Ynv@qbQ>!LYP=)c05QiiZ5oR15yk_Ie~7TXX0vlV5HFhAf~ z5$wMkN|HNkD`xQWle$Ok`OE?tAYFN35r#oT&_l$e2)YubjzpL-OtS`Ej2u=GLO`4m z*-R`oQYv7-O%Vk-)HPmL$W!5cqA0!ggBo~8EDq#c?_s>*yK2m!8Z-Ju_PAFCq&!Cv z^?8I%%mrR|Zq5+Dg8zIll{ zP7Qo5V6?_ECafPHVbVa!0>s~9BvW|+l0NHzuWPIHn0~kS0egPMXfuCl+NX5x5fSur z2vzb|1db448t7HtA%GN&(E}_;1U*6sSczr(is*y^(`joX$)2jb{eZf3q~_LL;&Fb! zcZz1L`90eh%tlK~dJA&{>eyNK42e%Eq7DHsCzFPEd|>A!^EOE}=X*cE_@$_~RpM9@RTqzHOS8D3;1!m|ZLm-9l3GGd$( zG1T1o%eiqC=!QiVOQTb>MkfQb337zm{>|p=^jv16>lip{MvBv`3)ktT+!cCj=L7ou z`1?Vb!RrpLGO)vuqLpKQ97WX7jk(aZT_nP0VOk*f5tV=r;3A&H>B; zmEBi&SreW&Rm&h18Bs&FbDSoY<16&{SN@WI{^a*`Tt91X7L^@_gNUGqh)K0oNy-sH zkI)+{Qihhr6i=563XteHGw$MIg7WNT(E=6BI_;W8DzpFg!~c5yOpYYRMEp8e6~s)79_h`qO3ovUj)Wj| z>5jlb1jibjsMa|Y2b2Ys{^rsf^vUt(^wHs6{+=>}-4V_sqN^ApCPmPd5xvL}<`=6{ zme!;+Z|N~AK-d?=IDeHbowkh=U!wk_wQmF>=MG@3ys`Q+?N$%zN#$Uq^UTCkBW)ic z0szsfZR?PdqC$Bg!-a0nOGModvLJCq-DAB@BBGegZ~{?^5)kJTJOj!!TP>XOvdYNk z^c_xR%jk-pmm1}P%BqAIdKZK$YoP92t9gE=_DHqI za)f)VMk&OefCy)=+I@{@n8ez;V1$W&`&YU1r8}J+HR(Ln-Q%-ahe0M)j5;l+*XVUQ zLvQcAAC=*TgovPrh)JcmN9iLGI*}4px+3R!1bi&}7i4-~S)n7dN{{qo?(ubi$m5N~ z+Q9q7BkawK-=+Wa%YPc_+~SeLDnf`rU0}sLB!!LZ)pHzC7rCKtF%o3YRn$Nh44o{o zF_ZnD!^9wUuN3gRgYJ78=v4JT((AOO#A#Y89U!_GbDiRgjhIO%MrELViLr3UEF$Tm zc*qz=ffFl4GIjPsgcC$>L6Uj4mjkpnM9q3O1kDpZ4}H9UUe0x#AIe%#FOSbv$(x{K zk2wGMGioD3j1c$Dk07H>C7eaLK6oiTO8z{z??b@RHuKo<-#`A2GDE{d7!h^o2{yK> z=cpbX0&yN_SY^_U zB59^ZB@ffh?6_Vhj8wzt6d8*}lb?W4m|XKY?dA$(|(-vkZxiXgIPpSIfk7JWFvkDmx4V^Z%rtAV%q*8)3eI zXjUc`r#Le*-VI<^{zB|;u!i=EnNN+dFURsZXH+s`#y~9;BXlDo=pmvJ4aNvAAoY7q%J7J@8X)z& z&K7B?r|+3X_8{o}kjBFPyt2l<`O^TNWtZg~fB24C@19pO;ha>22qPjJOVTMLGbzzF zJkDbjD#;ATl8>?1tG*S0Q9Vw~c-zm-IUiM2NQz%1OM5!h{>1>#I^C*K#XO~|St8A>vhk+1x)z{@9r`_aQd?yo zy@0u(^VV2e8}R}`21#F(+6gfFs^dE2=U3SCyOXPF9rhv8|D9Hg=!cDZ{LYLQFJQm! zd1^=Z+uJT8dW+|BG612*Z-ecD)a%aLcE{;}NI$-(D!m|W?M8sKOtx>C<|zx@Z~09XTIyWu{ThD>R% zv9YcCJfkX>o!yualz}pCc{dY}?`sW%jS-!lvr3&K0IhU8^+(~5NV0iWq-x+}N9aaG z&_jeZi5m3CZkc&tQM@ECQd$_ygAEeDDy3+Jy`Y}{*f?Pi9q+~ama;lEa_+`OIk+&K zAH-1zK{OvCgoK=sWW?4sYzju1%CRafOSvhZ)nI@Uu+}32=jBX;NeQDG5h6r7S7d*I zpZX92RgSP#wJBb<%=Rz%7~U{&oxar1B5M zsfaWyqQLia(&0dGfI4@W2!8eG_2&I@vKw&UG&Y``-(qle@%H^{KK1Q>=K+!)l%Sig zYltiYys%8bae!+kv2m34v3d9!*5Q=Gxg6>mcM@RD@|qK8-^Cuh&lCGOX4k3n5_j$& zW1?RYt;DWzoc)F>v+IT><_;ig%C0zDE0bNHp^rm_*^nix%I2ZOwG$}$&in-^3)QgI_hm?W|;a_-T96Qvr?l5t;NO@6Q4dc`chJPoeh8 zB5;BLARBl&1V(D6664x=-FE;ruKd0=KOZ(z0a0btNt;a}H3!adLCW0GT%40CvCkT8 zogYEOROm=?XY`Sd>QCsf{+JQT{yn5GO8HRBR&f1~j0R7ot_LhngTj7N6nP4^S4kwJ zf$Tf|i5rfMdyc4XFS8T#DJOZiZo@gd&w<~!KC$E~`%Wi8w}^b51R%`~l0C}-I>(+D zfyOT3w9}ghlBAfYgP`h>vA{P0xn^q?bT@iMx4lx|?e{HC&i%?)-TM#X_(A4|6+?#r zflQaP%HSCcgUt;@wRwBC0L(x$zZe`B?KR)dxqy>s4V|Z;gPen;`=P*WO`YxY#4OW- zm}(>G?i77|NAKYTR@gknEh<`ri9kl^Mnup768~jllQ-(d-=Cmw+$3wztPZj1xw8Bp&C0XsXxm!`4pZ7li86 zq*kr79{~c1K|8aW@qiNY@a0VI8g!(wKds#5DeXak_M_wI#^9t<#{!NWIAE&HOqEWg zB$*065&KS9&5jH~fcs^Lc3r$1LDK0vfo)74JGFnWQ=jie&H*l%)~vsGP~f%l7O&xU zJNhbS|MMxZu_+5e*SzSrZKoJtC$LUo4RYtB*yFpm10?AFJHLzCd`GbzY2}ATftN($ znZpTgpVd!ql5?PJ)_ARVmXm5H)xP_DdS&>Q**tQD-tgb!Mu`@rRO>vn01hyuy6=|u z=+B3D=#49{_5FT?{)h;Ah?taydxY6SQdH?VM$X4oH<@4y_HAX29_q)Tq?FGZZe};> za{2;$_-k}hFVS{okG*y&NG9Sl9Bhja0x*6ovpYQxse6(~$|H;^7&A#BPQytVbpsI& z5X6L!LjbjZ>VOK?rp3q}qisks+b&?68o|@ z-%cUb+9JR80R^d?G<`&N5mCwqa3DCaqhuP7%q4khc7Ngx(i7u#q;@-{&XIugsqu7R zA<#H+RKlH0fNKGgzR*Epw1AOX0K{BkFQiW&X*Hht;64+LD^6Q2q9!&|(hXi0Yo|sp zbktdMve#&@b;dboC8?{%y6ZQxFIKbyZOTjZ*f<9L-2ea}07*naRNQdL!a;qD zy&eTNxZpgONg11cW^_0{dVzn{<4h2NEe9mr!=TJ-$nBbNp_yXumub-taNxix1BVi# z$A0A8eQakgW8HAn&21q!nLCG&Z4=~ttVW|trM(((+kU9I)+IOs1|i*p!sPAz44&$y<1+8sGHOXDOxC#86_+bdY;Csc=e^^)0MD-MExXcXCf zPVo{%y@w_e(&z6SeMwuz9s7;QC<_e{K@SrXh@eM9f3|>!|2WCH0~n1rm8G#BV_H~` zFP!}&P4wNRTXsZEE7P6RhxGo@7i9Surcukm2%`YTk70C=Ef^iVB@eHQG`VquC<0zE zeh}#pItV>zEO5pfVBuQX)5r|DK;^9PaaO>vpF zjDuhsGy##fr`0d%R2wYg3bnPd7@QHa`K-YGDo>#IHOBctvu1jj=(z(&fX;3?*8iqs zOko}2nI5h&ZZ(}y8A;-09YNu!v@bTDaQ#&8g92+BoCR2q{KVwK1b%;woxA56)3A8m zH-rNbnReHXWBsW$y2p!6stdl+cdw{AYSa;d_dY*d=VIT~dvqeYz4RPkPqs_D&vc1W z*oX*vga`qV7FEg!32wY&350RDAjBiZ;V}Tl|FV*%AFRAY-&=lxJ}Yd|FL&PSYDE`4 z3?htzimCAyh$)Iw#nM`&1(A$>>%@0EL@V5ei$l(_T_sjyWX!(|1(_nK_iNjqhjK=xwV;FmpbhFuS*z??w@(jm8Q#j5G zT9b5p8L!y(v`4fN$E|q~e7|ehNjfdAY7MfAG;_7f+^uz9lRjzY_#H6*y$HIO0(a+c z0WnU9c1nFeLgYkeD<0ya)uvMgsm?*7gN{%bBI`JZUZif&7PDr=MymAFG>rvASOtPi1<_h5u{gg zSLjw|lYY7T0eyDzp!HeQ13kj1fZ*Y=Ntx&(jDo+NCQYZ&K&9P?$xoM zXjTvdzib&@y_|8ZVgPbk=^*G%jXP3_-Rbp+B>NfoPU^iootE!=h=`pN?RPtK&88?` zkZ2u`?gvmn$4`L*IMz%kwpTmO)k$>@Dr$y%fa@@hh+?B5(6X4J1G5jwJ_nDufLMY3&n;oO@v&ZM%mBoD5Fp}yF}p!*#Rzr3&oUx{9ui90WE2a7ijhPZ9ZOQ0Hk-Y^ zBTOHtsr>8pZ}FP-|M$^v_EJGC{<*BFsOy=7ywD)hC;R3%60xj((3YcH#J~G=d2$4g<`qYuT%0#0<~pT!g_8 z5%iEy(n`}lg$NJerS*Hdfs?{54J{rmfGMG^D}p#udh23K14H!u)=;30Y&f0L14?jjCr#AqaX}Omy|JEtut2vMfY4Kx5&TXfjFeiaT7$d?IZx-e!2uB@dhds7GtJ%U z@jPzu8do+pRCW#O6FA;5fa?YGqux`8espBm+{wk#+-Wf@D480ic#AfJx8I8J>;dsM zI8b+uQ(toK077m0h|%dubeh8RD@k!GQq*Q`R73#D`J5#|V}9oKjoaDPLnQ%ScIoTM8?Mh=pcZ1$f;#M`f?ua{CTfYio} ztKTgIe*DNeu&FLigq%Cz3d@YhiXmosfz%>Zy!H=m1_AB~98C}jG-rsMacIexk=DY&gFvr>vnL=vXr!p6a2zp4UPf&?7!uW7m zUYzzRL>K_8YKEXUwbMsH2&wQXLE%DMBG*HW@n~k95vOva-lYy7;n{*J$fTLx{bR!b zh&f35D0|1bLF5YR@kO(D#uoat_iLvX;n@L5YEn|DGG#jjV_0Tu@Dd}*dq!cb$HJVh zcg*QzkM0WNLXdnC2>R9fWY9#IAE4&^va;kW40j$;(<=0foe$`0{t{hMBZ3|VB7z3UcwJ(I^M!ReLnl^+3wODJ9@nc=R>a5Uc{_*P{J#Gj>%og>V0pYp`lLI;|Y^r(Mt_N>5ILk<@8Oo_?O30IU zg3T);f*um02;BJuBCB~ZML8i(X;GQ>=|mU;h)`UX^Ylf1m;W1O3L8?6k{*4B{eT|B zi|CWfUiF4aPmKZ{8RapZafDeyQdCJBq8INhqo7x*Kvh~*aukorJ$qP3m`|Y28*SxK z+dM1e+>NqTrI|7L1ClkfgHFzE5}UIS4sg8=}(zoL*>2sCGDUkzs}U_;J^) zCt}lUw-#Z#FdIZEN$nb|=Mm6WdF{eC=)gRg_NmMbB7zjO zoCxO|X+h?_>Q{Kgd^AUk8WZWNyhy8Jh92mLV~g-am<@m&poN)?9_Z%m5t&i2r`e?+ zm*Y!R54mS>gxQ5G*zM&?efrJ!tB)QR(1+R4V-OlKJN-VyxmU0%l#`OYRicx*f@u1o zQDC&Y(IrgBzvH?P7VlAC;!*cJdk%~f5DY`#dLwE}^~^!VJe{L;Sz{!9mDx@x8;meI zB7zo2F3-YMbI(#k-#E}B5!XP z7ET#S7Z?G`#NsWYZu!`1cI(5lP75ICyxRhsHsx523rP9_(RlPThrUVYK9MC57i5aZ zyq(54)~;40D`wHUyuh^rqEz?!hsvILWvfaLYV(t&C&mO`hpxxOsQqn7hzNQJI4DoB zO+vJI4-M2L-%ysLI`asDf$WMa%y3d;5r;E)7F{3`4iJ4S(uQ_=z8M)~{%G)QCw1?j$nwkV5m{^9i5F3(_kJIE}e z(@y50$>v?W0TuIbgB@`C?O7*uulAT;P_MA#s-A0Dy`l5qhtB?s=)RjIm&__(2@}m$ zi4H)_kBlN;GeAh-binUHzy|5_&TqrE@s9GjYD42)7|dqNMO=$wOe0B%QAUhfuFWHG zkK?>$WR-U7^V3=lqNTb~r(f^9PnxOI8&_YO_9@K`B7z)?&=Ivj4%@B}is0|mbI`83H9WebL`T!^&kUX4Z zI5Nr;GRiVDlIwI|Kb&|}U9x0utj`NBu{94pzau=GK;&3qq+r~N{)hyN9wKX~@vc}J z??2ut(1w4z=NhtBkd}_fcbIro+hyxYlAS|>T?cQi36SX%v*`PI!L0DLFYSt?BSLO8 z2{zWLijPwf?cFkz;Lc6}*QC&)Z-V33+4o|W!q!%etGdr(%QZMx2aWK%9Wi0=`#b^9 zw}mmxBYO0O`-swTmzcHslO5wsdC5 zg=;`g11V9ZH8IQPhBA=T3PwhX5qZ4ew5Txy^%xNW)OPlHN-v5jx~eP&IvTVgZVPL4 zr@k{WqbS_%vv0je9kjD2cR)PC^BrR})9R}je;9h4$eN{@)fl;O> z#;K>lfq8gESr}*@V&B)~WxA(LrdKSYfQSeBgwStV8 zW3xhrY4vo%A>CSH-|$i^M;dpm&#VRMbn3}*;Ea%HedeA^7>^pS^=>DhAnmd!QqihX z*nR{B>zo-*i$egv6Y1+YM$!=(4+_*9<66Rz;Ri(IOYD0qVwz@?o<|rJURfsR9V^Lj zwSOXz01fm1S^AUL0y3B9fjF;}fY#FIhE0=6yDnh+@T+YgV`>(V2AzWyMum-Dau4*o=gZA^Vsh#fg zxgY$}?XiBCY%VwW@9XG*5Eb5z4G}>f5ra;EQ8DjnKw)B&5fX?{MTih4vVy`>#LFS~ z?j08(j(Ag9=BcjZ29AM@l_N7j541!3J@!x^rS;vKl%1Gp9G2J9MupcBA(eF=`qKiI z)u63rYUS1V^4!;@!#Nx1Q37;h! zGlP$d_A!r0ag8)Cg64LzA>w;tmb&a8q<$YZ3XIUleX~)p7YM?AT)j^VVur57FO2%r zyWrIeedZCfZOXQ{Vs@5+5NptmeoD)df7>^F7h|9{=kwbSY=o1@u9fLCK}B|f9_vT6 zAun(zlm=!00VZ=l0xq)aZ|{H6bN`qtaAF@=qj!a=Hfr3dhU}lNR>B@1m21 z80b7B43CJQkBF1%gj+8SxaJ~yl^0Tcfj~+OB3zw1&726Z{|9ldauKX5ouX!Hzy%)1 zx-Ktw8`Ny!M2%ZQl4wOr(Y{fpZGF6LCXy6q4>yaFLKH!d5I)St=<2K3epSrSLQ_G# zpYz$`ZO9BdFiUh~^zR(8B4ub(&P~m!onS`HZDozOP8$VSuh7P5(u(era3qcsUSo4j z$vqS8o5smaW|{XO^%+8InrZkFG!Sfn_UBMHXjREFLflQFJF^pT4Nvt7EvWsS$WYe*&F)9E7|+s` z^aghVbnd^_Fu0SY!tCb{Dqqky6VLPgpOU|`3U{)XrmmWL91AnzNcK&sUcfx4xx z^8NHX76hdbUH@{7b-bxqoEZ`Zdq{LUBqBr@1*jv_tp=&2P>lvR`tSfnJuosn1{s_1 zzo*%}Nehd#DdlL7k#xVdZ%a~os^r`ON=#I7bSGJCh*acJfar&2cpIa=YX61-B0q?r z_^C+SDVyOq3$X6?N^c)`tD{(RK=wMsd2Ty2ZuGl;xOeEaeB3967HQ~OqcG5Q#x_T6 zo3KR`vEMXX3yVES%&7ZUV)K)QqqB7a_4``$K48vL3{l~;pa;rXuEtjasllUe8<~!9 z0M|R#2E32YPs}py){bdi$@g3za4xX9ko5(D%An`q;135M(NX=BestkGq)Ks4@PiJ~ z!}1)c(uC+E6>;0s}HTd`U{y%PeCn|AD z$8(gEEJ_K9mctYK_?P0J+MXLIP3WhAfbXERS7yT4H3qJ zh@g)M&76GC+^SynB9u|0p&xE7CaZ;#Cwhv&xR-zh2^dgG9s};2MHB z9vDT+2`S$m&$fXt&TN~hNuZaL1Zm(9R?ABnMm)VEZ4h({LcE7@f{d%f0p?7Wt!0If zd!PgJ);#<9)eLAKylHou?8tDu>Dr` zb|R>-<9Y25=Ye}y(AtIY1{p6{TRuN|$p8Ky@Bh?3M@gj@b5}W8T~xDdA@N=ZF=u{x z@IHwtl|2))bho5cT)c>21;9*7mKMt?Hz(6SP)w9STQ`%xBN`)eM-qBl$=z@5Iy6 zK7ZXWY|(4$-)c)u$8Y_xcE4+zyVb{(l8z`ZdTSKy7{|0Ot+c%do4u2qyU$^_dPuhy zu90QVf7aD3A|mJ`;G{m72Rba289`r&=i1&w#O$J+8;B$a1)^YAzU)WLZ>Gp4kv~5X<7iO3$j=5J(f+o(Ww1 zsrz$Wqk>W6FU<87Mn*86aJ9^aLp09cwSxm^9A}M8n2I^ME<2OLE?e&}Fne!HJMwp4 zvZ3%0QEb&m6q1qrn(Nv;srN6}^dj6?N8ltVc(fZvJ$zowcG<~Zjy}sHgQ#ZI>Al0x zTmSywZ~j|v4Gp#}*6Ac$LmhGs9O*^+FUP;7zs`M&?rV1Xzit|Q{dL!FLqw50G!U>> z{^Qm!>9|&Cd;h`d7HwoV7-`pO+c@9>r$@CzDju}=IRE3`$MjcM-r&~_a@)7ZX$ z@$^04V*?=OpB~=p`JD*kLqyO=z+P!Obs6yBIj{}#<&jj9gCfBUffv*@dde0(C$$z6 zJuk+G-sc6jc;5?AYzyd2XT!q@5C3dL(j$z33VX0tT!xNF!Be+ys;gZ6eH_5pz9?t8 z0iedDk)!jo29QZyKh(oPY_iJ8Z^5ehri6z9>|5*6jTqP1?N)TiIiL$Vi4DP5kjF!G zm!9Z{bk#+|5jh7rKh*4X_Lh1na7{dnzH+@tDK*n>P&d$Wtvh2$Vk{bUlZfiT;1tDf z;~54uRD*X*`?R!>X5Z^i(Bag0QtLMQMLs?|u1(AqxI&t)$*$i;X?5sY?}5|wks(Zj zrPYt46aeJ=#H#R`)r;yPZwcOc2+5U-3u3mTO;`gbWWatvmx+2zr_(V+&q0RJrcq}^ zqpSY-9HYkO>4QGC>KttRJg6Pem3Vg~{WL(^w@y6Pj@h$jsik6$d4SYuM3cP$!8BEF zkGi9uz`Nxy=m+Vqw+J$Z^>23H?|c0Jw*4FW>&+juuTN~--|qgI1kwMw_mk5zVr7P1YL3vK(A*?#}ySO46KoV)SG$pgBYyF_KJ+?V7YRS#)7u|z-Leus@i zn^^yB`?vI$o8PC?+G+3TG`lcgmbNIH%u!NI@@M@=)e#7D%;L|7C;C2p5fSg1M<@gx z#zX>w3G5F9fhH~HGcDAN;H`g9-+dvOrzJHL^AXZp>bCNP~Me7LXA5~`PIjQXq zgl0$KerEa&Hb=)r&fS2v!#o0ge-&3&3^f&~btpw!b=ozGoU~68R_v_qFv-?1cWN%k zeNs}XVKh8RoY!gz!Jp@vBpeaZ52|0b)e%}gDd9N2Ot$K?#-1mSOFMM;^b!B;&C5Rs z^jn_j2aFi+lOnR`iF%PojZBw8&C^%SGA9Ly2;udAJok50@AJ&^N~eddP`0XVD%8A$ zKxoi5dk*67pH&~xmFxw6e+L1a2o=3VCA~^ZiRHlC;rUr)=Y;YTq>TsR-4>(Iady2x zFuYR!V=>!_Gf2;Qq{!|xQVUO=}qv}b{A!1fz*ZsZ99oo>B=+)#c z{(gns>t7V?TI*jHKcF9FUTvnI$7s8>+xPGXwG;aI=nlP6LeN1GlqpDCmc_v)< zS?wV`pSZ;A%oX7-fPLNu4!X8vX>;1A~ zf;Q!aHX$-cTJj~6|5Muc zh&s3dj~*Uu=xsbL0kj-D{`2Y@Gqy%Ej72U^XSbsW1E5TP4g(mJ2YQ{6beYsSi!w$S zA0ReZ@~Me+3tAxxiI!q;oJq|#Y1h0)1^@sc07*naREQQ%f}B5#0I`CgC0=Frta;3g z@X~~onoG?1gs_z$$(DLm{iO1M*5y1idhK+32>k8nCtO{+Tt7?m z{10FKGyTuk{+ihh{>%#3$PF0npVaPAT1e1063;h}AEPg{NA!7Rn_fy@qjW66(>G7* zCzO)2Ub}5=hZP*p;fhhE`^9Z~|Ilv#vyxb#zf3L%CVe0pTxnUi6~EE_fM-Zp-aV3W z4O=Pu>`}8KXDBJCtu%9pZQ<|8R>;dK9>GPg;(Cu~T!LL^L^|C-$}zT2#Nw@p<#B-S z4d)5v<~#{Y72Xffd_d3j7ZX={YAlQcK}8SyeQ#9p#HSjYQ<6$cs8Nm$zaLwGZkd-< zRSj?Z?~(R|9nVhpexe=H%L$Ekj3fH6d{#Ss%Et0P7T%$Mo&65|maTbmT;;Xf{qW(@ zU9Q1&Gk2ZO|6lI>k-slW{WB!t=+rAU(lwndI3d|(sFGdY^WpIq^fgBOKRf=iEvqB=*Si{Jgp~@}b;LU!J{^PEqBwIP!iYj1KUitPrPUOyT8|a5zit#$$@E z&?40sSwAu=v}YE5qv7j}n6FFeuJ;{ru@@NezsDwKaRhJAETd4v1KRt6`@+IidTr%J zMg)V^o8p>*a6gw`=dTlHaQtrXBl_~xdqU>b%v8y_1GH01hR~xJE!YeSiJQ|pj1mhxntf&rA}ioe)z3NkE-{l>N!j%JXT|ra*sPiSq;h7wzxDJF z^!Hc(%99`?`uBf-^}mMzkd#V(3NA-PjaLU(l=T)t2fR|u0Yq~D>+w7M?^ciQ5}iOG3r^76 z*{igL$U9%VylpvTr`D@gG8ifE6)paV5&t`<4|t9GxPd6S)Qpl(%ZkT!3E~imFh0O> z2-|T{OnBOlo+JqTboF8mVAj`Y}j2_mgwX9(}^qaP6CJ3?mph= zkN9slzt6qiqhNs%`@h}zF6}S9K>x@Luv6`CQ#m-}u^a`)h z{GYD9NxDa^wAgIj6pJ;wvI2fx`j87a`2nI$4P@YT2r*)b{`28yzU17&e)W)Yj9{N_ zhzx}~o2!X7hXTmHyFHZ~NHf12Ut*-a{fGC`Ch)_dQD!7tZFe}tsLcuD2fH`+J|*U~ z8ws2_b~~!^+KH;5c(zWo1?pn+SDM*FTR~_Dyi8+MV2*ofZ3K|0=-$Q{?0h~sy2oD} z9kv_R*jl+lhOU#Rm(2%bBj+(h_$5+PagwGyj~fs^t=34Z)_eE69BSv`?rvVeTkT2< zv@9ii+NnJ)OOQa+H7+oA|9}}hPWm9!!h-XF*}`9#rq zur_RRU14MhipY2&nigbMg5;xJO4YLZMk_!-7G-5-9Ay#CfYf(H(;sNZbZkyHB^aaV zUiC2>lU4e9@&-NChZpra&`#;5a)}y@@ZPCCpjcX=R3b<93Nu7C!_(OM!|q4)V*Unw zdUPfT1n2TEx8A0!nTx(^z#!+qFCV|#wY?jNr2k)c|B?RT+K)+uSZMPUjDsOrIR|2lxc*}2kMyIB*W2b|v3|-UUH$OWr|;7La_!&n^&Pf*(JIof3m;Qj zO3;rp-{cNjpv2Cv!v5rhtY>X9l$qTm-6r%y*fR}eJcv|lu2YVJKK36Je(A*L6>u_1 zqQKi0`baEv9l)dhgbnoOVdVcW++n>POC-STaw!cL=OUHV_dxu^afh-Cx zf^IN-u5wzKI$7jVaz!R3l^Q@!cD#V&qI7&3J~59F7$|wViZZeQ*}H*4KT5ODHCp)` zTNU2gCn$1)+W$-E4261;>aK_78y8-sZ?Xky9Kb{3&Gm0lPDxWziU&@cKQBOp<)Xa6 zBMWu5yhH4%I)Ziq@0rZ@Dh?q92XcnA_lR_zFCfz0nP!XU57hg)f`7~=ZFW>IMovQ? zj1`PKr2C?EOHfs2AtL8958Ron$|5zi2Az1+h))W8+7Tz`z@ICltLA=OyT`_=!BepT zQ4}eeIqQ2{t5$j1qC1t-i(G@4f6;XM_JbcecjG_Ze~Z4i`U+joUg7iVXHWh>6^NN) z&dDM>Pl=R7+&2xi6Zl;_l|$Y>iJJC?$q4^HZv7_E_6@FxUZ5-^-jDSi`k?$3f4^i@ z>7NSk(%)vk%PYnI+sU6>q~k_>gBHYG7YPB0hG1KREAtN@b+k2k>^|>DW^wL%a}NRx zgWs1w;d%r&5}Ok_W}T69g^k6MS))(bc1Z<$U9{-+;Md}?M zkiF_5?NyHGqXWCF=3lLUlVsVu8xNj$f7<(q&FxJ}#WQWhx5lpJR&j^F0C0|FHBT8e zMP(^?Ifgl6&O7=Oz(!R8ldO z2T2k30oSNC4DMtMVm~6CeM8O$zD$90Go4mGS!=MCTJzTO2iPy4dA)zQ{tf!Z!u7Ep z57+*+rRS&Z5F88O>{;t5mjG$6GQ;eI8MX&jY2XMu>e+`O=$K!KrY{5#8;LL*K-9a~ z=i!d~itmLLf5P~P$ocHUCh2+lQZuKL?vB*<6C+#!o{~?GTLbY>-y1F#{fiUFKw6lKjmNL9$8tPoBI@f3x`p)r|`M zKM#Hu_*@XVLd1MkS)jd+R%A$H{V&JANMAic>$3?OyS84z{5c)x6}VH^aCO04mMM>%+=WcXj#XCc4z3_tv{yc)vJ8&e_H#B3dUL14fDa6yx+l{92#VDvLg^ zKsb1dJ%<#!1pSkkO7U2{O*|5S)8M^>v-VzZZT*hEcj4=lRMRAQ9Ac+(KsVIxt_hZ@ z^D-F+f7<(muH`oAM$_(nSnw9SY;A9_>v4F>>#tKe|E>&!)}ME6Z*##rhHb<4nWqSaF}DSeKz192dLq!H8je^l6}AD zhg0@Yf^i)Wn2s4?@&GwMGPJ;H>0u!i3BsK_!0UZQ&eMIZU5pD4;8ih8IU&v;uDu?@ zj)(lzs`2h7LEA!N9a)tZX-Uq}0b9HFwd0AC5(iKWc6#fYY>lgxsU=T%U2VQ;G;e@v=#Q(k9tp!!q=3-jxnhT=r=_tZ+ zCao?WCj732%;%NG*K7A$jqfHHx#XP?CWr-QJfq~K*3ljoWV$Gq=nJ1#RuDPtjHH9i zKdRef^VllTAAIVqKd*0b^6zfP`G@LfT*2G{dRr@8DDO<8fD7lj#>6A-Y#vlit#z*G z6!EqAt+w(D5hY%FJ7Ili=g+jBUh&K>M2h-z`J1h=iThctm-sfFxPQ7$Ps)3ABYVm7 z_jZAui>Vt_I6NYWk=kUYo2ZOR6fJFhEuGI}l)M)(4w13Y7?XH+gBK5-?{FfV^>FM5 zsT1#n#O;j*S`ZTSm43i%Mun%f4}-B=n>g7Q!ep^1#%YH=D4}s73nEugg=akI5J;6=_>8UUp)n&%U4z@g8V%o1 zXaWQsQD^i}h0sfiEo_K}Zc>iQmQFitkt~>#^`Hg;A}eU06!kTpJ>Z_apsq2Je$X@R zwA`rDLTvDq5;sbw!O0*3J7H2Z8yLk&{Qor(6ZQ;j=#AiSdi= zcRSu||1Kh(Z*9FpD~UyVY2}5!=L*D{(bXW%ArQM>Y5M?3BUHSHb$G%N@m}=~-~P4a zi*3iVn(hb?(mRz${O`yn*;H32qTKEUME91Y9Pf>OY!rEBOEq8#%LnDVw5}}CWo4Z{ zt9=#tn4hrkz7W4kzps4i+h*}z?Fqe>Uf}8Whx#dh50U%tq;Jy$&3kM*cv#=1xS&v4 zNb^X1QPC*7oTqxdMp`)-A$wAKN*n17dUxl2I<1GRozVuA4pnMoFtVs76EhL4<56;1 zA|;cYizs;~5HUwh;ivkP*Q zEp#PD)bHzuGten-~oe(Ioj<-(en8M^i#srP{F)MU0Fs@>8`%t z)6jfW+Z{;(e3C$)UMXi^C!DcXF7ul1Nk!K+X1rVMSb`vq)T>#q_9y6-V$rTw@3E{P z>iE*q^Ss*wvM)Z^{iG#=_4CJX)0>yx@GRx?YWZ0;DkO>uC)t`_rC&UGkH3#dJtE6` zquUO`cLlQh$|Kr%j}bWFs=U$jw}Ci=;9X*5ctc+1#-|slN2@vP69iI?DSVAJo9(iS zjS?+E*`96fWuw7f+R~r4BEohm_)9Ilm_zflYa5WyjFjYc+tUP|;vnh3mKnT^0+DRL zXtp0v(~byyKX`rTz48}<%3?mRZqZeBoleX`t3SD_#`z25rjC*p&9KL%$9PA?yjRpb zY`|$yD^;c=uH;0?6Y*AAO(!t6`{|aP7r+5AsZyreIcW#EEM;hwJ-=r;5Ign!T@dvb z)it`W9nC~E{hGWKk@Ir^7%Vp!NxxIyYqqcHMu8a~5dH}RFj^|y2x&LOK+qSNK^sxI z@L@750>m8GeGR0#vo?{B<6ICt)I$Vn5RUx2|hE%FS!M z$2cXqh@3Fms@h9>!Mvcq0g-$-XMeu+ySDUX*zZ5zeuw^I^Yt#Fu8Q7m&wOxj zhrV~=8}#sWtE=}s{@V)eltsd|I$p06$ zZQgbdM6eA_4S+9co2RIMJ$|b#0|W$S*EnnmojG{7^a;I~yh>RiO?OL=Jz!VzhbMTx$@`U+i3uXCXuu^GiGn;JbV@6vDgKIHYU zf#9)zpijJpmQDlSgSWQ)mFac1F8|B+Z|KJtUnkwQW3N8*#d?W;`taAD`+1lBwjVK~ z?+`LPs~+`8ZPpvO4)%J5H1!?*fL5e@Yx{>D+rHDGNRD)9kaJJCt`VFPJgvUzgn*HI zUwgvH?Xl;kpH?1tzK{F4rsQc^o(-X0^e^^v@Xs?~tEh~$sjlcT$`R0d%c$#I6`jUd zr#uaCfx7f$oI*|pgBN1WwtQh{4P&3UhhC*B{Ft(2XA6xPwHYSp5?i;BAw7)v+cYo} z1Rbz@)-IB!8B^(53tW_PQ#o#g;el+2%L;nS9yR|h(}IxU!VE}Jj0jcj|{aGsusP1}Ev`5WX?VZYPFw!~W+j!doznp{{#a06AY^BeQo2>A*M=s~!Wva!B>JF! zN?#VX>5J2c1J{}I7ny^^~^FXk@OI|rZ9ANM~Cv`-KXM9Xxo zPStV+9>9UlDJYPV|IhCy9wlzXO9e^|Rm z-;Cep|UJvE--F9*DHe5KBb9me?7IzEH|v=*Bb*41U&sULD} zhfZKjJ)gWnNBSv$4g}Rd03c?G4g_9WCTP`%XAH7aPS}1s+X;#hL8qJS`Fvi;IWSX} zKB$df&ss#cvqGG=J#*Tf!6<+-X3?zCsZ|+j?SLTMqLAYIPMm|3hX~zR5|gwi6xqWg z##7os%2UiJ3px>HF1jO8O0e5^RV;(O220^Y#P>kgI7tt)Pj-#XgMv%393p9ss`$JB z*Gr$4Vh|C}N|>kX8DVa%)gU=F3@rQ)$)s!lhgFplRxzR zKGf+OhBZ{%wPEn~&ik~Pxj>5^J*B&Vlv_onL?+X^${$p}tN z*A>Oa-wS4iXE^i%YMn1Ivb^7;Pkbjntv;aV)JybU=}zEnfHh@_R=M!f?5(k7v*P)_ z!tBgE8~<=B+^;@n-}4ziG2(Umb?bc8-3|(*#*17)(*Ae7R-<~!`yT~*MI-FE1>^XrKNIXiQ(6Z0y6II8v0|b4m)~%U<{lbogh#_8gPae>I z<%rkX!{O&AP8c=@aokN3c`QS4DXWQe+huwfz>*g~TXu&9AVA2E^+2SG-X z0voqpfTI8@?RAgiBbvShA*VSJF%zfwJD}8_5F*Wq2;pHxO3{H?VuqBzp>p6u;HQZT zN}gU%-{Q~PQGraKb#;OMZsRp7ti4L_7VglUgZrMf>$h^31Cet#US`|u*H7rf!!LV& z&#X`0Sllk|@K+a5VkHW8Pvv;Li!dO{4AT8x?T%*~E-xJD-6Cv=$W^Hs#cI}(dtt{X zJ>3uJz5QWjz}8xX3^jcw$vF^X*PM&VGGc==0Vts-*}svA=RoYCNwlFX^AeVORqtB+ zd4tNvt*Prg4gNeqj@zmH5;_(HOf84T0*LmhQ5xu2aPGhnt1vtAT6}|d?{EhkF<#sN zvBq&wLei^sADl%=A4fW8`^NP6sAAFbMKuoEF6kwA-Wg4Hn@maz0cw-w4x3nztAUPY@L3H_u3LnJqR& zW3UAW!e%wiGWF4g<;oTCSDN+GJ0v2UKQI{zdi`T9?OD;*}LudUNsX^!3bj`g!3aD(O`! z9i2U&|Kh?ohT88BR$iiykMB(^GBgmHD$%I>lp#tLAbRK2tOh0L?rnTA0~yIkH2To8b~d8J8DbDLx)Lq+qH8a+f9XAPSR z8=T<6@$yOKejpN=WQ6x>e4Td$!Wb@_Ra@+{&zxFt5kU~|n~6=jUwhK3IY;)C7bKqb z;+-CzVw`A0U2gq*nXT0z^pEO0t?bH-YrhTlr&t?ftGpgCM`(>1CJ=;0fEOaJ=g~d| zW|E-eVxm{=u-iJVZ@$#_+dNm0)!&q}W2qC4FkOu6j-~{O8Ce3I7}~%k6r8BD7dSLX zI%+EsEp{TtAlew65JrPg8W&3ocnqsa(ica}7#Iaex5rD7g^?TulTv8!L{gYVlQF_P z01iWujV~`_rD*u4h-RczQxq-SjsUwrM87785@I1LbsYP$x=KIHyfBe9WR*RC{~`Z6 z{igUieOM@x#SDDZoyUhvJA{Gy?WGs!_xqoOe5L~;h7{Vf$aoNi=w}Id&Vjr-EzQmw zQaq!iJ=*{^#;Z+o4qS?_QMFRZ z^8hZ#FK~hmMf+NSbp6aijtYmz=b|P(sU+y4veNo@R!q^6)t!0LiENW-^Qg5F=YNNs ztTPl^7;GZ7*T3ykRmDO93v0~`?< z2QY4sng{}o$P50yRp0G0+?VAnCj`sPU`NU@IvpT|{?I7Uo^jHp9Pi$5jtji0^jO?Ol7&+whe&$;VzGG0Q=~A{34aDs&6I+To5@y^n>hK*$`|tosG*fBkH@gW4d$lh#r;(*FgE&(sT62%F7-?o+9OyG<|pJ z7QLFk!N&CyGN!=KksNcMCN1DNhdRAb^7Yv=rPCxkm;-X3kXcBTOGfHb>Cr(TkuX z$^|udq%?XNYcSN268%czDqU8VnW32MS?YzESYZbIQ~iYgT)EHYXN7JjuXZ`j+=k=# zGcVBd@e4E!;Fr9Zx=8Y+?^9M8&1s&ICLbk9)b+l{ z2T|PhP~-<0M2&MN5NXY^&w4pb+yJ?EuS0MWbk;LJ(GF<8L$d&+EV+=O%E@$6se=GS zdp+HL%~L{xJ0vP*jYnIrvTF#32^>w^HM=YcjtaSt&?3q<;B0lPu&=nXD!hPW`yu0U z1o3^bdAH8if3KB4!HD?yu{MvDHNsp3bNE}&Zh2NrKi2KC&I zG*CYSA3)^m8_8?5BE1q=e+A!4v1i;(X8hxIV3cX!DsxdUHxkX1zwf1QPmP?r@mzX+ z*_-)10jk(= zcy*>3cLK!rIn*3ipLC^)r-lp?K~27spo3su=`n}%Qm%`j!^wd8(i!#52WT%00m*_< z>WZW*Y%b&%H)#9#N#A`;1G%_&sVwTbAJ%rbgTu)@SYp>fPDorK9nPkHKrjT`->Yu( z>yno2Oom}$JA%^O!HSZJoYqYv-&U^HP5q2-UxOgoP zId|hC8@Dw!{|h0PYx&{koRM>2t_ixq9uo6*!y-%<5EX-f+bkL!I44B6%Q1sJz-@K% zQ6uW8i-!L8_FBsPjK+@|0Rdk_| za&dsxX8!w0(K4mzh#5wY^y60K6KS(AC$G>8iS?28A0|efaoPk0iO@$lo(vxGUz9U} zqnHkm&J4qO5D`Jt9wVAr8H4a3BEEQrAf@}Nx=s)4J6&y~;$pYM0^5N2BuMT0>^!1h zG}R3_EN&(*@fu}!pLH+76?A_f*XV5xfCOGmZ1hyd=PB=u%sJ8B1vVBht7|O>gG18c zfXM|=x5lv$Y5uah)s{&Ca(^+kLZw=nPO7t)?tXb;)AM~qveApYGlL1^{C4VUU_nES ziyQxcdvEq5%bBM4eHlw`wb$9mCfRJVNp|>jeob55m>3^;N&0c6LJ`i$%KI4u5%{yWdYfR(-L`BrUhz(gm~mjnI1U6h zu4*>iBh3d@CK!RZc*@9#rfBoE0;lCC?hAEpmn&w_)`h;rU(CN#lhD%wy{mpS*zQ{0 zB;L&TQ$mS3%13A0d#JI$A$VZ$1%ZlQUN6VkAqXpo;+x=Ji>O=u{P7b({Pa1)_&NT) zcoM97PG28e5FZeES&ht)4PSJI#`pTPgRxQH=zGk&z{omR>O%$s582gky({(2{EZ0X zb>?7Mc(3)T=|NHORqt#73k=d z?Q*eADgc>jh~I4sr`k!)>5?opgn&57>r1iKiF?%|6`RUHq(azd733@54njAX13yg0 z%PoBz5&g(8*5%y3j?{1uJ_CKuMJG9dIDe~;{pI6&+hPwT?O$|XYVlmntr+LvkMx54 z7g{7>^jq5|m>fHO^*2BIJv9yH>ejngzaD+JwoG$p^d>vLT-{rW(M{+r?slA{clYrE z8{+jU%pOEIapHyMnSCq|l#0W&>ubILmL2$?JV%Q+Jn)>@;A<|y0e!U<5do7yWclWi zudcL^|7P}P?dO1*8HC+3_&%QxKa$zb(_kjwcT>y8p@VIXZ3ffFBD3JJjWMnZRWMmW zum}5U)pO#{HOTdP00A3_bU260vA>Y%{mUQzj{0Z6{1?Vl7d{(4J$|bKYpK5FszIkK zViwogKpfu#HIC+D=(!88oKy8Z_jIpUZG8T}_0fN>{`u=a6$8%CPl^R~FZ6L%r9dBc z`qEZ**20mwtrY0EJU|3o(qWZU02blKi}MxWBg;6qir?qmc)5;b?QwGn3yS}JfRBd^ z=)ex8m4V?sk_8wYVhrP|pwp(T3Ib*j&x0K0v%7%B;%7NBWliFF_e37=eh`mBx|)yF zpWS|?{?(g5d*X1Pm!pf-3uI);Kj^(!@tb!b;|b%mWfsk#QV^^;St^6ZzJrMRxc8p= zS@_kH?Dx9o9O>sAtr1@cCZOMToj`{<)%Uv3SN;w_EPgTgNQ}cM&bNbk+C!^&bxd9{ zz3n->ydFR$#t-%W?=AH~$7<;G)QMXxJKd`&_?!YWR(K=zWO7Nn zk}Itg=wg@^h7wgds`%g_hsT{ErP-zv$$WRSMfoalv7hSe$B|S5I27tF0o5d!7;s#o zYyU_pLcF!(fTP5?!O_RknKe-Tjw7N9b7N6{UbQ$+X`?t_2ZX}2?y>sa=RZ;Z*|Q(1 zpWT10{qTq|#52l?7lk!Soncb-i^;DamA^l8 zPuEsBz@Q8c;Xj}J>d|v9H#}z(cs*pl9~qhHm%+SfWJb4vz|-PvX>wSs3pfnz-pb(9 zzH#(5zPG{~p$u^S{y?82m*Re(-N+MFQbX%ly@C;3FjHUoSNgiJdM%09uS=XS^3(HA z3LAM=S+yl23KJQ7qp$BMcW+bWbSu?sI-eO?^sda9Y|joO^%9qio9E(A$|Xuhup!9T zlf|qhZtra?5k4faKfT0T;aFN3cE2y+Isl&sf6J`l6S(enPxmIo$z$MJ{o|7l)Mv-< zt3P`Er|SQD{ckfr_r24X>ecYM8V2J>0v(G&l=)`qRmIf;eYy|ho3x<*sP|F??q`FK z)W6pv9i`|HHP5$39@SJU9oi>4T_-Wz}4#5sraQ2gvqL?7itGZ7=)91_w z?wJ-&yT3l3c_y9^@2T(nk@}VQczoRp=R`!jDHPq3Rkky_3lbJ@123U-r`wvTJgr+b z;82(+i>9<>_0sJYcE%+HrIV)3K_}IMYsfST9)f-^y4mKA60^V*0x$7m@RO2sTQ4Nx zm4ENn+&`+e(%L^sUK>w{ttiozptEAy~uIzNPT|! ziTpeIZqcs`!#9ZYPX`~YG;>mPYK>RM_Q=&)z9bONj4qx z%|CRvkG*RW<1HqsMOZe@6Or!CrSkE_E)qsD10%1S3hC*=dO-(xiGItXH+AJWM-Kz6feZ9+ns=#>*#|C&qsV?}n_I z090Baice{79`E(f)c^3=-%$VHKm4z1b^;1#Uj*r;h{No*G57wWa-eS?BSB2|);^AC)w2xGs!b zY2NEaFr24n;Ye^Xi4z8;@g@$Zn+K+=Q9kq+W1+!SyI_;E>cu zmcUw&Ofi_LV&}N47jqX{ob%`~mm|BY{_dy$mHPYt{-0=({&aRY+^CoLA4ECkCObQh z8`|XH9gl;}f5eor=%hF&Wz%JHVL(be`ptPpz#b7*ABPdcfQ zXGe@Y&+I|v;ymS$?i&b5K)B=aVRWXx(?b0l|9Y+2>N>EGvTQi40U*?$HEgn%QA!mh zTi0t!V<5263t9y1{QIQz0V2I^mi&i|FJrvIQuism4A5#}+RScJFF4jWOwy~f6#G7q~mWw{XfhTpM+k#NF;;^ z=Yuo#AFqC0>t}Ft2y_^~z0?mHdDa8k%HG%8|G7O>UwPN+I>=sqp|8H#|5l51c+m_R zr2C9HA|cM-dixPWu}P4p?2a!xtIv|v#*+qKdRDNLcflg4%E0TPa)ZPK`V7tDT6`#= zqT-D=lU`$9JItbvsuyHjh8*eHIKDr8u6}a<1NCpOzm)$@tMiaedu|=ejN^gjY%C{7 z)!%(MS8sxmx(z1#_}GLP%fQ}kzIvHB8LDIlma9JLKHpo0oNNZ|$DejD)!Sg8zMQ|w z^qe3Hl&@E(j>@(VZv#*KW|~s!Zp4Zr%}DJ#QyC--RR`_SuJ&KGuB5ZgqCe7c0;MtXbr=B^dJM~Jo6MxvqztEx`=l@6UnUu_a>Ah8>U{>NMCB%GWg_SO{YQnYGi?35H06*zo zQkokKs?p$V|EIIxY!&IFXsV7ogUrbztjiF@pICw1!x3CJHBeKF8pWc262@k5CiVA@ zFo%$tutsqgcpGOD<5$S46?JFcCw>&jIZ|ZC?JCeSnddb<{W)%ek(3dENjOt|n*x0u zD5;*WILTB=1 z#8)PS?24-e8O3=sKavc- z6imE4%#=0M5gTF-+1Sg5IsF|f7^^pKaG&^fa4+XY8oh(@kT041P}y40J$KGZdoN_a zkqPfxT{X1&Yn_S#!ULmVDuR3w%&weSp3KiB*+D-vdey5I={O&7EcHtoF=Gn2haixP zb0r;z=E=Pz+*{=p^mtRs;z)j~SdQT}VSd!>IO@y!>k8h15L2l)h3?p^*C^k2E{zdi zWIIQet3K>rs$b3DuKYb@HP*9(PEV$&;O?CIh%8pgZey`}_6j4pOA_fw9u(<$uUw$x zi?1p{HWdUDU?7KaImBEbMs6E)TrD$==4uwM|NMdU!=t~sxAt%HaG#hLO~bi7Y%S1{ zO-CTW5?A6#-qVYG$>6W!HW;f*=VWKYI9vt~?e>_CW<%z+DhJU;FO9C%E-wx7DA6~~ zy0DV*X-zSfA!cz2)2!~Z%*IEAG#y+s>uee9+fUa`n8a|p;^)L{Uf4r*Wsjb;3psj! zerR8a2M{XT)(L7Hg$U-O$`1Zg+XOq-8*lY`MV!xBQXc; zvya_N^(VpC^4}Pt_n~tx`!mbR0MCce?%I|*u^nl79clfrY068Gi1eZUd-#&&S%JXM z3Vt|grFbA~viVMHvRnckaR>BiA0NOt87z2T>m7uhgRB=%?D~Ni5s_nPi$oUC2Y!Rn z_6*VGD2ff*E}WB{14YQx-zIwY!RS6*TX0<|QZ6mmVto_9^?3PE!uf$2;Ad;f{F(-Cj?l+- zBxEiem*Sk1!h7zCx{anZjw7uHW6t~bY|yeh{SDpdbCxK9bRRFZ6n^ zNXQMqvlucYNvV#LhuQz~Xw1(!F{%i4oI?lD?~DM@eLlAt+H^o(G6wj5ymR zV~zK_%aEzxg*20nvN4q5L#Qu*XGGAaT8KkLZz`K#1^V6JgtwAq$9te8zoX)F65A3Y zKMitV`<&UwrJL$i#o~1ZBE7F4Sxv`0X?=)GwKkOyA`pOE$w|#qDN+xTs!IE-g37*eS}>Z+GQ)Bk5aZsKNIbSJMEcO~t7EI*m|5-k+>3omt^@$%i+}nJ zum#gmfL_i~fCy?Kuv%9pU3$m;x%7t(3RF1YJM8=PclBpJI)F+svR{zRd*PgLPC98d zeJy-$r~5s|QTqJ1KK=vse*b*0?@RVW6{|WZH&n^p1|7+kXCXDJ-325o-gvXj{p}l9 zAbzrdoGwKd?tEW$-R{;6hUbsN=JpD2BOZDm_j^`7c1IkGm186MG}Vi|u0*IEF?hrAkQ%%Nl3Ct|Fkb}%5kZZ+Y@9gH zBZz?>_okG+gZQFf{zL)3WMxc=x1Trup4i7lgqeLE&^FqD{q7e;bjLUj-!ZRBKdvcLE04%OfJjmX3o0o@CQe8Jo5_Iz`4+1<8!_8~wuRaQH(ODk%M*TA>&-70sq2 z<8+sp@+~rzMR2DzC73vB>YkaImq5(V<|5962Ad!r3U!WqF^%|UFq5b)Mu-#*kU?-j zn2&?a^F?tTyUpn=pFXE95YX6lekmcV!1x^`F1j6*;#OneNl4u|d-6T`Z@>T7Sk_KT z1NVAl(owNo2XT`8UBzH&Dz8Zbt4c8Y?yVMYvB^+ewvaVzge?dGj*?DqL)HjE70l;7 zs@WMCpLbrMbhT+*hatio*~%cv2&K7zk>-dEE3r577oxd_P$?(J#ohg;s#ixA`3$G!F^7oVsP2A7q; z4>>I2^^j%6IA`7^DgpxgT0c4+PqOKc9hy^%{^+5#U@j(KVdkEFWY?7w)#fyek9n2! z#rK@u1v*}*DZw3>uN_L;M%#cG-B;ONlX#d=kq8G%N~~g`j-n`Bsp4}qF|t$HuTiUj zNSS+~ITecNaQM@K(81qW|0k=RZwP&l6v2cq$FdXi$_1nEa9Ja!CqFcA=&6i zMm#XY!5-3Ts!O4Ne)a=3 z3VkuCu6o2VIV@ntZOV9X3iK9$2>lzqcpTdCT)is#e~{_E4g8gnB^cj4bMgxyeD0e6xab{LCE9BB^S4li}27*S%1Iu_JDLK^ta}+ZMO#r={SZE9}_gRbeGRiTL z9mhgrlNl65J4E_P4rh5B|KgNr$cc~@WIfL8BQfctNN)z{^<=h+lm)JLSNhzCpd0Ax zY_G#CPLshc=q?!#I7ourMedy#4R{|soxrk8*tDA;Avvh(p8MYL#lvg+Nrg(AMh}zv zn1tr|-+;A>3OA2y|6WQ%9hUSp2CNAnsPTXkVPD*tty~L8h;j&W9H?2#Pe)0nAd5&3 zR6LV;+XBX9POYK1gTpwEn2pU$C#e8`p_d+0J9eoeBK32hh;uMWg53R%En*$_&MbFM z+|wY;C;GLr-q!;5pOY42>uX|Af!KN8zj*ZDSf}3Tx5+cYlaOWNDq*wM^DEVq7y0^t zABg~&gmZOd_4oa`ND07!I2{#`x-&m^XznEDXYm3fp24@fQ4>Tu#QnPRPkfR|h_b(+ z6^3hP_E5cvZX4r5f2c5fPO1i3^&(yzq#nGaLhKRxaz2gXObYIkZZd@>p1`s&*&w-R zV&CTtHlsR`_YKl!Y?&}rzTi3S9zXdR0&7SnVcG_-z$7oRk*Aki`{2*h)g|r+(9SUb zbUV8xwdawipX)rVSse&8{0Alldva5nKPue~^v_1&lp?+1r0&dB7iFjApO*CV#SYD& zsQ5P#oQOCtU>rvXIc#oyUp;r3MQ;iS7^9MF6S!X?@G>uX3d<}qD^o*A**I1;QhDgC z)*?toz42!1)N$z#LNc?-$aC}aJgG95DKttwBprK}tIqAGL8NU!iz6`($v?2V`WWsi z=UeZ3>l5#_0I@r^>UXx6kobw9#~Un00uV9As3W`vGg|Ej2m7o|YJ3d?Ezs}v@!p1t zfVL8`*OTl41R(QzagcgQJy7bJATW()wY={tI#O8|3mRmBf|5rJo!dw1xpSn~evVWj zV2jT&4MyKLzX@(je?MXdu1roDmHxVpwf_2w^ZCk~YmsEBW80M^5orf#J#url>u%$I ztC7&wg5>}JAOJ~3K~(2zkkE!%wEX+hJ!BSoYG!#_VCQSOxDO}EYei}lO!b*F&FbUL;MxxN@7b%8UX z-|4D}K?^SO7>>o;4+z5A2VP)^a%oFn6pl75B1yeqHG;Y1^O}SqL~vah^uFb)3oV$B zwRr04wH6k<%U$-^K4^J^h#p6CbsbFfVl;o17?L!fbe~B-|1uC+L+e<*(8B#|?@s;3 zzuomK5d-P!{rkHw{(?GlhFUClMbO-NWA%%>U#ow8^>Y=4)dt4kp)}Ka1l}MRiwVJA zhG{aX2VALdMMy_tf_-G$g{D;@Yks$*4;CuTZ-RR*rq|y;kO{xEPejjV0or*SJk=1n zRuNG3WBo!9B*>1(sr^Vk@GP85&-yaUnMEv?Q5GOkTbweTIP;Kx*_ra>bx!PICF8;f zDI1iu-~=OPf@{uQIDWWpEt4*oC;9?;WcPDNK1m$?1q`mnV_E_`()TczcQC_94N6yy z3*8r^XtLL;9+>>TXP>HbdyvT^0mm$AA4Np#e|xUiVz@@$1#|UnaHsz{-TE3Q`n`VG zz1+Hn!|y+EPqm10)tB=(S-%p=$*JBSr&eFKGXgVqVt)AGr;xND&LUrp^jiK(-!JDo z%!0P`>;AyKRA+Yo$(}!R2I|AXGxb-saQ~;@{;~QuZ-2Jack%S+>RH)ZiEy5$=Q>3C z1&ur#38rGCS`tBU%qd6U1&^$wF~h{jbDYD-Gff&x8@QYwo@B_kfzSF@Un`+w2c7lD z9PR_Cz#Xr-rsfXwkfS9*P)JU>}f<05jZHv%Db zku^$2>H|T5^RaGv=`UZpGEvuj2fsvQU;-K8U&nYNI z0MobI1;_R}z#eIK~`xckt#(8BzwSjvkf<3)S&fYIx({hPH}b!1OJ%^=Pfxzqx3 z=ANssGqhZiY+NL*1xH$xZ`&8Pcm`Q&pd|s0mk-pbcrT!O0zsK9V%^pI{YTxGTZ2Fd z5d0Uf{!{hd;8OiBzy70K-w90osXBJ@ulZ+*nIlJHHVYhwxSuY9OE`Xp2NK2Uq$+#C z_X-*lD?0?9yu{2i52y$nWe7&D1Mh$9kJPw>mhYbajE<~3m5PI5(6}&R-;{|rwhj+B zQS`p!;Yh?UE@{A`8VhP)#ZKV;jFB`#s^ZYgdYeGnmV;{st{rMk*}LC>(MKp3oQ9rU z^vhgoz$3)XF*81rtlH$EdIXgUp1g*!x0Stuen@0%?T#Db<%UsV%!5FPeX3-l10-85lj688YomSAsm?cx51*zan`qlH&h?Nw+Ap1y( z$t-&<5OY9q55h4Eve+~v-ZG8m62VR9xJz$n6g*`7am;NhpUTT^Fp~E;N-CGu33Z4| zM1GMuUv6uHV83)uO8ZQ0075;^06e~jL7+c#yKLpE0362<IXPh%tg6#DV zyU+D?q57rWiM~esR_~Si%DYi-{QHOZKiM&9f~(y7&YAj;^S32_%EJL=>>s)3s#kJF zAFfWPdY}G8@9Qgleg8@e_2ujShwjBr@B5dYeWw23>z}K;d3FKwdU~ZkJN-EKdja@P zjPx~u9wFuvdxdzl8F`v8X`}H+DIJvD$U9`g(?u7ez39C{Hr+v4R`L$<+-G0f1=ej(1VZrKT}$25S3LyD8YHtZsF`a}0YWtqhzbWskdX zV)xaj-Di8P%E0mTu@;3#R!RmOCre6Tog+v2V)!jfm?lJY=boR`z=23f9CyVydrC~yJYc5TD&A%;&1_I;z* z>MnfTPYMB!lJ~jFZxn>AKNe5O#OEQM1Bw8^KwPF>8UNH#ao-j`Cw_+;C(Qg{GTL;o z0D0@p)rH%wOjx0;6B&HZiqyH&E(1g{3<}Jzu0!_xSf3Bi?4gLzP36at{JpR4f?4MN z-*f%CpL8#4yF)+M0?qBdkaa>4+?M;fpa->=jGF`KMO{}mo(1>}eBOPz(kZ_xU?BLz z?lbip|6cvMcdgE?VyzS(4WH-w`&lp-k^cVh<<9SkvS}E39&;q7ahPD_IX1-fx$#FQ zvP;PR^sM!zg6J!izv;NL=p*^S;sV>522iWXT0Tvh0Ww&_ngk#gxF|Kx+W!RiPvp1< zJ7%6jxf$MBr*S}d<9nyo0_hykb)ftV0f3?O;jeyun6RMazH7OKgBVqU ztnX_r($7jZl*8-Z1n(9)Fi9JSmfmLV5kcsA9UJZ&fqi;upJ(pR#nFrs^?~C^5AeOd z7W}z?tyKWo!K7VS0|$6|%ou$7ol3UkPa zGkeE=7#R~Rlwb!tdRN@~zw=I=7>@SvxM~w!x0f*oUW%TX^w*tc4g1xURK8|E2#% z1q(tZo;6;-I8Q11If`cBO<`#F)c2e->Brx;P4Ih&?9?S6W9M%4zW%j;y|#J+z5X~R zoSM&Ll(q*Y>@%1>=kaIwdijICqx3Z$iHB|5 z_7b$bpe%Q4fSJUhf`tl>OMhV@1HqpDeAh^&Dm}ck^u`QZ~fLO(A zBU8N1MIFa1BE%54Ro{prF-V)Lv6?=NxRaTpC4A@f^-+Mmlj;JUL$Ub6p-WdKc)rjHrewgg(r{B-A9yd7Kb zsb6?+)JO|BluN@9u1&3HvxcnE)&XyU?>m?3!p;{gT?G3R&p)@{Q?KciszD>Aj|<0 zlF&+~=wc^tf2L_*=3UkvV3SIb@ma7)wmR{GH8qLB&ynppbB-kIR2C>7g;+VZ2U{1Y zvC-4?NoE-Rt{3)kX`iVLU>}+iZ96m&ELxReNc*ReRV^|$4FM{M%CgF%A)wJ?oqk4d zhyLzO;9CARyc2=mvs~Fe>GcKYJ~GSLUJ$f(9J3E2?rH+pR|H3J^F?Vqu7jp#)UjZh z=|w9tIS|t6h&J5s(n^tdpT@>$5cXN!Zt-U@;5pX|&$=?{FmZ!H-l^^A@3#Bvl##tF z8}zkS)!PbDhRo@Im|y98@u2n~OWEMq{J=ezV;R@*vA$Ln>CxUNFzNfmy(~>QL%2VDB-W$G9pPqh%I$2d^jvE>Ft0bUV^_>D0PeZHR z#GDC)iIq3b?I4)}?uC)u1L`bgUj_->>x}Is`@)PcK>=ihQpO;II5g`+!~}C8h}})* zFX+MSmo%?Y%$}0>!UEM6qY^iEXznaJG{*)^>naWKyK!eGi(3+d5<`d~2z5UhffdrY zuyT+g-)5dvM#T)Wzh#t1BU^nROt$}F2_V4c1?B`JO#}Cfo8;I*`F+_{5@mw50h%t5?V!-;yeXcp-;LOty{>0p#;w!CjmmK z`0>?MFwWecy>Fg5$Ljm;c_sS<=n!0($ekFb+XK=qh-f(Or$_{M44ux zb%VbCCJ1!ffW+-GjTY!A-^|;`2t&D{>gVpqE(?fMWXCi8Z7`8C-6B1c=%X#W_x{Eo zDc{cS>K-ORg0#;l4Nk=6nu(#G%(IPeKFCII>lF=UPV`u+0P4)>BdBl_+&}sm#26NC zs88h>!16%}p}*(tiv5V=e$<&JRTJH{*AN_=^JJbe4Ft`mW3b8CzL36mZzh@aBfI<( zOI+2FHHT~Ra?mn1`}4&~IWMCc+4qNdZ@fG88~=8%?~gSL zuK&oT;tqs+(T5d_^N07A|8M{G3g2*Ochx6HFXb`O_s~DN{-rwYUDP7ZQ*f<8)e+8p zR2~%xXyU3hT4Usi$r}jv)#1)x1w{-`_la%b_HKkgPla40&g}0N=DU;&nikV^JebinZje~W2^!M86dck;qQx6>C=-C-T;#g&eZYGo(2!nUQq-m z@Y=CMvz7Ge2eK{E&l@lH=JGy8N5H`t0)dP?!H{{*yLSebtNzmE zXX3SiQt)}rl@rJYPrX29&ktoXRQBr@zQZIj@?3XKj6Fg;>3er;7Pm0+#M-_oBD)AC zenX=LI!cAbSV%I!v5<>JPh8r*>qrh{wU7xbT0XuEvZ+`8o%F>oIyA>_(z{($@cogw zn_Hfg*e;iauL8pHRttz-M@(e}LIlAMJYYzbj=BmH!@HuHdpti&-!6g$2z;E{M>|zU zz%&aPeq1ooPktm$*z0e^*w1NzViVW~IEF)m%n93oDWVGJ^qgY6(KKbU$G!-Yj5Z!{ zlE>(wUNU+p3ni z-%~%Ee^-f_-22X%dgUHBrsb~9KqSIZeI(U5-jmGpUWu@74CGpb>w_41TAd_d4`M4% ztPX-GHb$G}F!Gday%>2GAJe!iv5_ar`n#$~T~*faTsJ0uN@E3jS6_Hnm4`y~;E}~7 zY7-EChzylg9-Yn<#)$<%R<=VkGSL|4)$h1cUh5`VD^KmeHw7oEo84o-k#~Auj(kwXkF#GIV7+x5u~FT zA1R8Lj8$R5@>5cw4R8&Nd#*dlpu8Aylb3*O>?Xf!wGf_m<9ljq1yW|eYEg;>BeL;p8kZ$-Stg4{p6HM7+q>T%o07yZaXo3IKzA*BYwunK2%&tJX6Lz1hHFv^t2yx5pnzv%2^27(u-co zOOXUbs+)4*CuW0t&480BHWJF%tLiUe>3F#`Ab=}(sEUdIBES@i;@o_Y;rqP%LjB47 zn^MZ%zv#XaM|ol<2;iZr1p?LtkzN&P;1Wijr{W@CEvt+?QI3DSqc@2p!VEEU+y>SF zXrsl5X;U@mYEo~TkKJb! z=MBJ>))QAoptXI81;IS`LJ`VU_+V@@^2D_mV-9y2$9Z3ak!KNxR$tZw*Z#_tJD<6Hk$`i}=P0&Mew4MmYCB}b;VNe3UPhh4oA$YvnUQ=f|P(VXbG|BH}q zpp}K??PL}E8kt7Q13l@loYR%=?&tPUUFgS=)m_`ytK~_dep|9%5R^d)II_%H>2x{| zD}*K`xu7*}efVej(guXG_o7ECR!y;y=Vl>&pBQ=O>4%?5OH%U^C}?cGbdI$qysurP z8+Qj<bVx?P6lxy8il*PQ9!7o1bo%3ZK;&7Vqpn^X?Gqg z44EUOcer4^rTym2=%*;CsPG5{Q|Sbvl%IPR8A8ZoYzlOu;Co|<`BbljtQ4si z8NsGS`CTxR8Rc2#Ne7A1VO@^dq!^e>KJ(s*&8+7$e&>kag{=mdyktXMhBBYrGrV^? zT5ysF_Og*@=iT2e8hP&OsxBfunFEgu{;H`KUSj0ADp=AqP+5l&*O;PJ7sd&6Iy95E zL6bN_%*0}r^q|4D8RkpuHE$Qs^uiih^G&4YgE$5t<7{3F8jCFxnH(wCKGou}U!YGL z8R@>&l@e`as+%$9IHY=RsHFdO8NONhAy ztZ%8DFcC#{8o(}s+2#X^^MhlaWX;Vu3Q3c|h_Q~-k&<_EcyzT$pGNz4B{No_1Bi5p z9P3fElQx^ADI7)#5Ft$kvyU+@vuAZzy5M4Z2WBIWgPFQ;PI%|pf!koLhE`86a_V1h zz)Xtb{P2J{XV#n)0Tnla9W`=v7%4_w(_ZSoV{QT2^XN$)l6gr&2qDEl`^jA=5D_Ue z(L3=}blhQ3z2z?i*h2k3&P>n8T{u>=a4u#-bqjQHAGVBN@{p48D9%YqoY;;8drWtD zC*@+-bp7DniV#A`!2)3pm)2!Lz6^d>*Nr+Wu`{(VC3$6n?c?SU*!Uc`!AOhqxFmF< zMf#C7sI3CQ61R3PcMc7VPs=j@oRF-X*{*sM%`(joC+(oF_AK792qA_|Vq z4vuVlWeWpoH*AO`WrJDc80p4R_rswMgE&BeP6#37;6PS2k4MBb^wfy~$v7C>K>%+u zPaOqQb+Tm+bXG>;MBWPlinn?jpbY@!>Zm-xHpIt3`9A^%=;>egx$c9BJTFfszAWZp zsE!QScVvIC@0?Tx0)FGrZ%q~*L0ASb*Av!cCQE@%2qEO)fWVyR7=ef^Fq~ZboobjW`ErM>@6#3RhL~6x;{v zfC8NmLde14NBN`T$V~T~ZY{Y6WX^B=kzOoh6UWzj(RJyZ>}+g@_rq(H2}%Xu26yVj z8mfVnEzkksjRhpcx6+zN8DM-XO3jCS#(i^*SACcns)EuXFf!_KUWt{ zmmdu1mN-y>QM-a|cJY z(;M$r+JA7Z-z3!W9nygB;yqAWm-NpER&VWd50QP`3)ew`P6#2SHN;tSYo$B8h}|f5 zZ!ZF}%g9WZHQO5tBM5)sX?eObHCzBJGNdoP(^WmojSb!siHiPhKPeqYk9{54f^8%2 zc4bwsJ7yTa@n-6hnblT;x#x?AF!pyEl;PecMYz_-QIO&KhydfJiYNRW*W)~Sd@ zdk-GS&Uf`a&hEt1E24#9@1~6KT{w|@BYV-`ap9cEJ@PIX%YUQAY+v_C3UopUA+15? znr|_G%Q{+Z9k@Zm@C;7rgMy}U_j*yZk0?Dp^CX%{FyK&FH@6;(?AKbPpV+P%vhT80 z_$wCAaPfaDBHg81HQ9-qz!S5{ZNx^Nqpczi0$zfp1;sG>qnEGg$kKZ|^vTP8&A%5> zn%BD|HuAieYc4YR2wpE%2&BE-v5{wUvh=uK+y}Dw9Wq1?t##XeQPY)@3-6Nq_Cl z)tMIQ+}9*4X<2)gzH?++uk}44OEpj`hA*Ador6YV99puGXOOf-o!Up@50ZsNBTp}i zGx@+0BhNU4zc@=AS^SeNuJIV_c^^#0@H6k!k1|0ZWibE}j~w--(xB?K1_e4HgpgKX z%WU)gz9&p}@Icl8{d=3r-my@bB^i(T8uK%|Q$I|Cc8-?scaX(r)@{*crt z5aad`l;M7E4*{;Okt%hcq8bC4b8k!Ld{-mSAT{!Ij&f(xt2FWqli)$uawXfnPN=8Z z`&5vxdYx7MTDbSU(GR>nUfYpA{f=x$d@reIJgW zj2TUVIImiyQ=k(<2q6VY`~OmdIxGY_op=yfY7m5sM_rDvhsbK5_tjuAe&_q@PWck( zdG7XD4BbGo^a#rsHvQ;XmKtCbn?*N*ri0OE*r!7+nh<;`vOjSIjr8k{wD{U|IKi_6 z0yjMfJFWV@u zu^vP}{9O=8!0lb>BUJ7CA7f&SZIERUV+k>~v9H-i6tb2qH8P~K3*oWLZqV4qE)ue2 z4~ant*_EYGwyaYWG7tSm^!yFK7vJ;hyg28+?)!6J*XMk$`&{Qfdm8N&jQ6$QaP5lK z>=Du~N0*_L|6rSD{2R$d3t6QwN7zHNtk3_li(CNXXOUJZ?n4?aV|q5@Esw>0n8OvI zeNOVf3B5A?cf@eMdvymK_X(qHKomYV)pnv`IdGZPHYm=%il? zlfM-)469t-WR8RlwW$UI04x{ubu`VR>pW=q=`>*&`ypp4hfIJdk1lI85s`m36KZUc ztU^>iW@t*bsgm0|LV;7gR6^3ScU2JRkG{_IK0)drK#jvQt2*i0du)n0zLK${1!Vhu zzNnyq{P+?0Lm!rL;m048(s7-IWh7vg#&J`qd-o`nY1N{Vqka3zwQqC!t?AK2#Gk;Y zhYRUOW{R+f^UQ>x^YEUCp0Q--+P&>h>=MXgAhQ zNoQ_EiHZvO*zpPs>Us6b49YP6AtCTx@j~|}2guB4FGC`YqaJce9&&FD4;>f5qk2Uu zhSOg!1iqO>tMAHZiz(pKx9$}%2!DIPxM1(@MvRKt*W3@_m2RLDt+kvrGDQR$e(Ssk z)IDwZe1@>9NQT-FFrw4itx{qSKKjh0gx&4?WQjaesUp{-V5+zKVwmcYo6vEQ0r>cJ zrAIO%X5y0zV_o1uh5T)rOUs5*Wh8rOxCZOQD}HUOKNB2L2YE=}&RywrH-INhr|6dA zr@k&3WQ<7trE7cmpgei$(xyg5NpPQyUvBe*Po`xu@}Gs5(_I*-G?w>~{mPG%{dSy! zCzx-9D6Tw!J`S5FzUoM>Jnb+&bY*3?dd+9Itt(V7cwuNfX0yyLCepM2u(9{+lf_0u zf%(kIb$ZPUns|uJY6<_#Z8e$$n+7S7@C8dzVLIl8{sDnoeKQql78OaKXw2&gnY%Vq z$Y zfnU4Jgf#frUVGX2W$IP(W`5QOZYEn;OPw~yWb9Df&{P-VA*^d@%WH~J7;C1Og>{LE zjrnCtBn2|3lm-N+pJ^~trXgSu-Wfe|rHrR&hZU;rX5Tq;SVxxWT16kKQ}4eKn0~Q% zRgJ*sZe}l=!BBxbZ%w@%nzuS(V~hWx@#c$p_s~=eE&fGKOb3aw*il9jN)d=rYH9_) zAogg&t7@@a;vYx4O?(=H*o}jTY)9Oax{gGW<9nYZA?;&bL8e#Akq!hRHKOXW?uE(uIN zSv)lM%n2*M*tJ|qR4aALb+ z1A0mt3tZCqXVF#)ki&$-?@*hC;Xb+B3~Cz+^qIk~oHDKNZUq#)Y)My|c4OKQ08w6} zS+fmCK71!+VMtezyLO|pd6$^VE4Si>bJRKoyA!oz-+@7}lNbAP-QX|I(0BM;UxFXmYC%E1Ak7MTZc`V_-^P4g{}yw}77nGFvqn zK)#!PwR4+xy;QP3s$_DV(7N5RZOsnWFVGMsBd)g)(?#*A%A2aWw2KVG^32);jJyh6 ze>rA=wY=Xr6so&MFr1A_n8E@fQ}6MttB{}*~KxkI2z`HpsGjyb2VN0 z62z}68(ei<8Y$%6u|sNAd-+H0J=BNfO4|k9D{Urw)?6O+x`MR_2$_)GYLLbcN{S3$iS0DY3lax%^KN__W_G!6 z^p9vvRP_OxctfxGWS2JDe?QH3!r`Ms8v;MO+bT$fNogG|9LN4-75dixJwvJ@yxqXw zR)eQ(M!6Jp5`wZkm^wwL1Za&U!Xc)XgjhTaG?h4IELCioW7k=}i1NY@ zBS2e|e4OWBpsSS!@>sNX92JfrIa7X$xXgP$pW@?d|YV;NOl&LdFHNOJ7geW=(993#@+5p;eh}=JeHdKbv>` zYG0c;H0k9D1v?Z!lp|2Y;{-@if6c^eiNo)#$#cYcu=s1+akHa(4{;U{4ZOhcN^(^*SA28Q_q?@*j?I?`guvW%zr_o;@)WeG9Iky?Ux)BH zoHE5VfF_TQNAbrQW4~CGT(ldNft4hS-#0J+2FE zaYw+84123bLPR%3!+2X#N(7*k9@xW#1$f;%n!XHR!@BGf4dJE#h>wEVK{hsgUyiUr zr+?G}fX)95J%gzl+FUT5W#ni3!kgImIR}&7k|qZG`2edr4H#wsgf>3-p0kZu^%i^JJbz#R|h#WE~+Vn=H3H2q%}U**Mymc z2nt)g`%tjvn5g?C}b*UQ)Dba`nrPFGv89wZ8gze@IPV&=eUF!zROSn%__H~`HnK(p1NB=zMYS=)=ld#^6+#1V1z_kd5g3T%Uosq$^n4F$5z zWRV22e!Qn;oSy}{Hk{~o-hwMm6YrfTCXasL5S+}xOuWgfhUF#BX2PcEcOh(aP;YLyOc`nVBvIJyIY0&XgeNo+{ zz4``TvsVheH88EcKmYUk8H%JwgUyGg2H-yUdb55u<-b9WeoxIs<`u0$w*xDE#QM9X zAKcB`kforQ<06QF9IjbV&vT%Ri?_<+Rp$fXFG3g2=5uz`bC-s}i@>J=2qGTTO$bys z#o;_fTE}s%>6_iIU&ku&J18AGYF`zHa&4xSz0{aU*G600Tv%$G9W5<`=n(%`nLbn8qQa;9e6B8=FE$oLQnIg`@Nj+YNGO-`ZCS4l?{tTcid-$q$Ns*8^Cp>K~HnQ z3Gh|vS?`ft$MPsEFt7EY0Y3`?kP@1XCwH=IBH^Mx^d`7yevD5sWUgY}Vd&oj|8+lt zeF2{8{&o_TgV8Q`3gLARsTltr(M2NN3`4e<8!eU&_fo2}@5)U}7$>}_yv}p!m$RYN z<%sgx=VG^!%zFMTvzLq282S`VmzdvHpS=uI4^vYt?#a1Pi6%@FLH4?>iQ6FU+fgJ^ zYL9$S)H(~+TFd8@%(`nTG3H2D@+#wNu|_LrOQUCXqgIkkD^NbKw>Q(Wns|h%ZbHw; z0jYFi;N2uGx~%|RFVR=>2`~F&DUM>^Z z`9436^unpZ#`BY(x;iwdbO>-ezC7aTIshKL{nR_4zg|?TGV)qmaFd zL5*i*N712oNXS%ldLQ_o!EqLf30Cda9EJMUd7^Pl^*cDj44?TP&-mdhHha8>hNEpcsPQyIRaSHxv1vdtW0kn6ugiJhm{ixYher8(sLN!?c=$4>@Ny>WCcc8EQU!WKS8|P%0WEu}}}iWOK=W zNtC5Lbye!icMiD=$NB&aAF4XJ-gfX=H;H$0swfV1y(kw4Ho5NBpBvl$+O$+^FFx+; zv2&?`HOzgEq@J5Kc(iQMRdK#WWg?xv3W8xj#hKe%$tAqboMWl)f@Wc1s53;Dx1u!i;d+5wd0P%INps_w3qzT6$jR6}!9pjYBVlyxZ@^r{y4o^>Gh zB{|#7glbf255w1EkL*?FGq5!n6&PjOk-E=kMu^gP7A-xtzlM8_8s6^5V+xJ}#rajy zj@c>NIjI^&O@G^j546ZyDvO|fy7TGovY0+1bmA9J6@qSIAu7p$mIoP z&Ia&A$HwdU2dflB%SU@VUYlXul`;6`)UKO}1+mj&L4r{!mS?vrUc))!rXlaZ27BcPNgpu2 z1L6-xIOPUvO$zQ6Sv)Klj86}=%UdaVNTBA1alfGEhKYV56r6U0_-<3+z!9jPA?C~n zsMUtq|AFd0kmdtWJ%6-B=QF4tV5j>9RP%u}pMq*2!UF-dKtwuKc^IJ9B~1hjs*x}e zFsMet2oSUdNDCHdQ6WG;fRMKUc@UtN3-oyI^RDKRhnoEP-bY#Ms08T5_fqp#mgP4V zD%tw&H(6u1)^|||a9e!BVzKzaVx@_!ZL`k4L|AzER6K7@3V#9SBS7(X&#D5fC-JmB zAq1G003A;%0^B7&1em1&dx@~ggzOR_0?aB3?j^oPfR#@XBEUQZ=tF$onh~}|hyc?UpeOP9?S_#F z$pk%34B{-s`F~#Hic5(=jm;%RwB&|X98v%1gFQ`VqAMT0fp+NWmgg^vT0}x(R11dFOUeyKB?EiRK z4XEz_$Ol5ep2ACBSPgOH|2_^H6ChXv!oEQ|1_q=m+J6Ra7zVU{(^dfz4Z~1~wu(ar z(J&0!{n9o_N<)z3bIV?kH)w*d)XR0zbX5o0i;`E+A%>@jY0$7hzE6EfE{Fx9%SGD~QZFXiT&PCIR7wyZB7{7}_u-Bi+_7KvDfp|oX4_Pv@Awv)mNla5(r$}b#hhgQLH53Wv)cBiMwi9WS7>_6lEn_ zhUwpdYt3Dh;z@QolBS6p=AT3y+MTGzX0Ycsaz-{pfi^bvxiG5@F%tQ}MhtDFm30e*neXJ*x_^p2XAkgb-j}0(3m72ymD95MY)9>?OjY=VlZE zBESvv`TTn@0oH%)z82vt0z`mrFZf#X5Yz?BAKWEE1eliq`-rc15VA{z2r#QCxR>}E z0aiXmhye2tpbznRYev`>Ap%TafS$zXw;M(#Bop*BF^IDi=X;GSe=a2gH8z(N(UK3U zE%{u_3yOQnCC4&B_gE%3@(VM+Gh3T~5UHY@i^(H5XKZZUoE~y`UNa zf4C=_hXUaP5CRcU4M2EN4XD(Bc~uugv;X5|HK4lxBOeF>dkQakVKu~&|NA&-On_hw z2>S-<7#NVMXdAd;e;CmEOGz>!_+A0niM8hy>_e!4v322Z=tF9^pXf7`So#Gq>$g1TN@F{ry< zTrmWXdg+{oAmz3`32GWwIpwB0CX>ktRT65wszd62EJ|KMhZvqBra{93`9Ad_xgZvZ zE*EV}NWGY3bD;DZS35b??PlH)TX zLQ74pZ6dTLKGkN@n1*y$SaHewL}*ET;(4NLr-~pr8Ch}3A4OuX zPoi9`UWX`|15a2z_J;O_$6n7W%#v-(kz*?5F6p424x{i>L#-z02O<@NYgiB6;r$}1UG9havsZG(XtqwRbP=x zNg!}>*U43}N3oKCm$?$jChn?bkzHCxQ+t~Ga2iraQc@0Al~)hEh!KU+DP z-#f;oQT`i$0BRepndjtLlmGw#Ep$a#bW?9;ba!ELWdLG%E@EtNZ)9Y7E@N_eaCC1j lX>DO=WiC)oM=~@;Zewp`Wpbznf9?PP002ovPDHLkV1oD8@S*?! diff --git a/examples/resource-bar/assets/Transparent dark joystick thumb.png b/examples/resource-bar/assets/Transparent dark joystick thumb.png index c09763aba5e458146fb9deb52b3081bde0727388..7a2d5a008017093a430cd769b77e46c2ed977e78 100644 GIT binary patch delta 40 tcmcb>v4&%UvM>W@fk$L90|U1Z2s2)~TlZ(9;#+1;22WQ%mvv4FO#tF23;_TD delta 77 zcmZ3(ae-rk@)} zOqr50Wy+M4DP6jB>Cz?TmLM!7A`}$l2>I9X6KE_UUQ+g2W5rm;_IhXMo5#7*DFe&S zmwV?vX11!Z5BBu*^v!sAc{zQ3ef?>?y}gZ(VfF9rXRUrNZ+{qD+G4Rdd47KWz7p8` z`+MDR9)jlgovj3F&+z#8_>~nYKyYhfJCBgMdA5;xOM6yUEOC2yc=%$AX^R@tyLlGm zu=yK)*x$m6CStZ=5qr5VVS8lZniY;TaWHR@o9K3VM#6MFA@-~g;cfGZWApf^A+Yc) znMibB*PB;Fh=1XPhv4=Ik)*|cVsVPcYgcEa=qB^*gg7BtIl`_GIUk>%X`xXK;E>o`;B0fNb9rt|na}y`oa9q%ceD)-lm>@nxNSzP76Mg^K z4Hd9h858Y*tD9bCkqS6>5}gR`ff%PMYq&L<0R~s=J7ZzWJCjVU57afnfjZ;moGzKM zCNp+3eSa(h)WK&7ZQn=I0qX;;q4#|wUOY(lgVg&#R-`8M!oK<-eO}0Oe2c6X4yBi@ zn8{{nbDuR+E+EC*MM(5|L0TK6-3GELYRWDkEz98jK|0lKFzv3*!AimJ!qS z0O_Ct<5nQMXU3IYcxm8$a+>4=;!j36^#u!zDmi90!c}8UqD(9WcU=Mi3l$Q zWQmBo;hq-)nki{AV320QWWXTJgb^S}1;_{%2s7a^0t5sI1q+ZD0n%Ea#~*glaK%f_ zo_{O1)=>%29%$AuZ@6ZWvgO*X@ywS9E6?IHZdj;nxmjChFCz3Iz`M1FLV)E6aPHP# zD!|)~2SR{l32^Q-AQ9j;@gczS1lUQ0RmaUJ0z`l-euWg^Wy3uJM1T&{!ZdUUo_-=i z1Xz{;j~1VgBxIWi5nwq2>?FRW06p}AH-ANl0Lu_yXYu(QMpzdi0?c24oyFJ3G|bdJ z;FN{R7O!i(6d;!pfp8*vz(_u5NAkIr7gU(`IFu3D z3D>iMQh-A)s03{W%oV*L&4Aa9mjaRmghT|S2?!sm0Z9*-Pjx{w`#(Nb1JeB;^#(u) zxc?jRlMDnpe+!!6%ln;GZH*a02%3C+l8n^6KnU*r@PZJe^MMzHo~aKmz3lLU%n8Er zS8sGRydWIA_v`Ha*b73?%oi^R^30d+2n6qXwCIlTZDH`&^KEMktU~W)7v=@wSZteC zg)pY3A!z6&6oWkU5{e;s*30BH1ZlT*DNr-G$|*Oge=Qb^6S^eydZlK4KNh8|q{AFf z6_YWrK)p|HRtsW*m~v5zkbW`6=1QFz(MqQkxxgN+=|6iZCVd4U60FWtt_gM3{v5 zEX&2~waAh=@PyZ6Zkj z`zch+uSawjsMngE|Xr-HyjsV!CIeWZFY0Ed}6?42UgfN?!*=UjN6;l?Yd36&V zrIZX37rRa_fkRTY72xez$z(GR)lQH@r6}!p+m^xhu!L4bd17JPLY`sbaN?{xdbF_< h+Vbbx?;xc9w|~~s%M?L|H--QJ002ovPDHLkV1jln*dYJ_ delta 1582 zcmV+}2GRM!4CM@vBYy?+NklPV@q2s7AMco&)-)9dw+kg8_q+}e1G5BN}%=(kB^UES&;$+ zw@ZkJ~yOve*q&k7OVHm^7~kB=Gx3(t~?ME7;Qc}0X6PIw4zj}S>({3jNt zc)WIXMvC4Z%zv^zgx5)k6Oxr9%sK-(mQsX591@mW)ba3ogk_c2n;;gvAzrV5y&+u{ zS6Xqs+7uV^qT!F@BE`SK%36fnbj3Gom^)^vim=F#Y@6YPL++;dauDI9n3=@J?GF;) zL)~r>--=t>c@bL%6DzyKmxBn;vlL17tFfO99&iO?R1 zajLS0Tca6ZaJ9ZO7N)#2$<+ElT_YT*GhWW=k{N3i>sB0wE{meBTnBpt9m&>DK* zH{!*EWPd+My$@tXYC*WddZ5JY=$=XSu^DVQoLP+M6Va5wL#i# zAe*A5>;lrV4BiiOj0rDb1S_|~}VHXWoywvQua%&xx0PTTh4fBR;7Aae<-5Sq) ziGQ&2EI#9gh02zjwRQF)LLUOWTYD%3SdIYaZtbN4yxn*p1Xz{;=S~9>0d5l?0xVB} zokUo5+>9bX1i0c?NC93p+#^5)=rAozLxzE$<6qn!nDWL9H1M==XO*O9!Q#SJsT(mIOKv#&}P6~(F@WHc-?p@ zAW1+-L_nH=@Iy5q=>hXoT@cOwj~}Z6>Hd#;AOzh1jrhT8h@<|uX$&SnumOY}VUsWf zD}NU>!I$?ttJ)eff)F(M_#_#rd4Ukz`{4y4Naq7D2t89DTzc8z1(_3s_{(Cd|&_5E0svXTySJXK7_zykF? zxmhiU1!BrYEkgRm6q_q`W=y99@gYJeP<$IABpjz-XdYB48;J=C2O@-W#fJzHA0hZW$J`=i1?<|_|g&KD1Rdn zCM7=UFlkKY4!zfji!d4SS>%asoJwtW&?%viyeYzz#5XK%zn5v2yb@s&;b=#LPyEY_FKI7|pAj=qRORkhs`& zatR!gs;vNT&q^knd8l@R94bX=-)&n4+rtuC5#@=6Z3}sZiNlGr?RPH4-|weKLL z{gZDD6+ gE>KQKGBibQV{c?-a;OG>?f?J)07*qoM6N<$g87KzeEW@fk$L90|U1Z2s2)~TlZ(9;!S2w22WQ%mvv4FO#s^;3&j8c delta 77 zcmbQiv4>-V@ Date: Fri, 13 Jan 2023 19:30:02 +0100 Subject: [PATCH 69/98] Remove invalid assets. --- examples/resource-bar/game.json | 249 +++++--------------------------- 1 file changed, 36 insertions(+), 213 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index c6fd98e2e..a04df40da 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -10,7 +10,7 @@ "adaptGameResolutionAtRuntime": true, "folderProject": false, "orientation": "landscape", - "packageName": "com.example.gamename", + "packageName": "com.example.custom.objects", "pixelsRounding": false, "projectUuid": "dcdbdf13-00be-4e01-88bc-1cb673a81d14", "scaleMode": "linear", @@ -685,218 +685,6 @@ "smoothed": false, "userAdded": false }, - { - "alwaysLoaded": false, - "file": "assets/Round joystick (outer).png", - "kind": "image", - "metadata": "", - "name": "Round joystick (outer).png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/On-Screen Controls/Sprites/Shaded Dark/9107191a2da493741d738b99e4c16693cc745c252e9e1e5ebc8538426afd2c1a_Round joystick (outer).png", - "name": "Round joystick (outer).png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Round joystick.png", - "kind": "image", - "metadata": "", - "name": "Round joystick.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/On-Screen Controls/Sprites/Shaded Dark/5221fec4269fd470b6f8790be2d062e52076c11b356f9b4856bac92275ee0473_Round joystick.png", - "name": "Round joystick.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Round joystick.png", - "kind": "image", - "metadata": "", - "name": "assets\\Round joystick.png", - "smoothed": true, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Round joystick (outer).png", - "kind": "image", - "metadata": "", - "name": "assets\\Round joystick (outer).png", - "smoothed": true, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Round joystick (outer)2.png", - "kind": "image", - "metadata": "", - "name": "Round joystick (outer).png2", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/On-Screen Controls/Sprites/Shaded Light/85045f68bb95e617b91d7af4e68d0b2cffd3f48794b8dd77dfec638e46f9fef9_Round joystick (outer).png", - "name": "Round joystick (outer).png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Round joystick2.png", - "kind": "image", - "metadata": "", - "name": "Round joystick.png2", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/On-Screen Controls/Sprites/Shaded Light/bf5e3145213ceaf239d5b8d5f0644f383c91a414d7e725b55cbf122c032b5639_Round joystick.png", - "name": "Round joystick.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Round joystick (outer)3.png", - "kind": "image", - "metadata": "", - "name": "Round joystick (outer).png3", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/On-Screen Controls/Sprites/Line Light/9e6fc0192ab50caf7a8e3040dc440f4fb20a458a23c5a9a7853f58013a9c3229_Round joystick (outer).png", - "name": "Round joystick (outer).png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Round joystick3.png", - "kind": "image", - "metadata": "", - "name": "Round joystick.png3", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/On-Screen Controls/Sprites/Line Light/e668253f4b3a7e813c1370d79c5f0b3aaea7bfc51d7cea25544ef6e2895721ec_Round joystick.png", - "name": "Round joystick.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Round joystick2.png", - "kind": "image", - "metadata": "", - "name": "assets\\Round joystick2.png", - "smoothed": true, - "userAdded": false - }, - { - "alwaysLoaded": false, - "file": "assets/Round joystick (outer)2.png", - "kind": "image", - "metadata": "", - "name": "assets\\Round joystick (outer)2.png", - "smoothed": true, - "userAdded": false - }, - { - "alwaysLoaded": false, - "file": "assets/Round joystick (outer)4.png", - "kind": "image", - "metadata": "", - "name": "Round joystick (outer).png4", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/On-Screen Controls/Sprites/Line Dark/4adf1f71ed4fed645588ba2b377e030bfe517e3aa9b05d62705a284caba4a662_Round joystick (outer).png", - "name": "Round joystick (outer).png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Round joystick4.png", - "kind": "image", - "metadata": "", - "name": "Round joystick.png4", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/On-Screen Controls/Sprites/Line Dark/0c1cc9de9ab56fda54b1cd12ba03b5323001915e5b56cac641a6fba8d9661ab6_Round joystick.png", - "name": "Round joystick.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/White stroke round joystick thumb.png", - "kind": "image", - "metadata": "", - "name": "assets\\White stroke round joystick thumb.png", - "smoothed": true, - "userAdded": false - }, - { - "alwaysLoaded": false, - "file": "assets/White stroke round joystick border.png", - "kind": "image", - "metadata": "", - "name": "assets\\White stroke round joystick border.png", - "smoothed": true, - "userAdded": false - }, - { - "alwaysLoaded": false, - "file": "assets/Black stroke round joystick thumb.png", - "kind": "image", - "metadata": "", - "name": "assets\\Black stroke round joystick thumb.png", - "smoothed": true, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Black stroke round joystick border.png", - "kind": "image", - "metadata": "", - "name": "assets\\Black stroke round joystick border.png", - "smoothed": true, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Black round joystick thumb.png", - "kind": "image", - "metadata": "", - "name": "assets\\Black round joystick thumb.png", - "smoothed": true, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Black round joystick border.png", - "kind": "image", - "metadata": "", - "name": "assets\\Black round joystick border.png", - "smoothed": true, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/White round joystick thumb.png", - "kind": "image", - "metadata": "", - "name": "assets\\White round joystick thumb.png", - "smoothed": true, - "userAdded": false - }, - { - "alwaysLoaded": false, - "file": "assets/White round joystick border.png", - "kind": "image", - "metadata": "", - "name": "assets\\White round joystick border.png", - "smoothed": true, - "userAdded": true - }, { "alwaysLoaded": false, "file": "assets/Shaded dark joystick thumb.png", @@ -5365,6 +5153,41 @@ "name": "doStepPreEvents", "sentence": "", "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "HasGameJustResumed" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Resumed!!!\"", + "", + "" + ] + } + ] + }, { "colorB": 228, "colorG": 176, From 7e34b000f482db869974ac47d9e117016ee040e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Mon, 16 Jan 2023 12:15:40 +0100 Subject: [PATCH 70/98] Typo --- ...der.png => Flat light joystick border.png} | Bin ...rder.png => Line dark joystick border.png} | Bin .../Transparent dark joystick thumb.png | Bin 1068 -> 1048 bytes .../Transparent light joystick thumb.png | Bin 1048 -> 1068 bytes examples/resource-bar/game.json | 94 +++++++++--------- 5 files changed, 47 insertions(+), 47 deletions(-) rename examples/resource-bar/assets/{Flat light jokstick border.png => Flat light joystick border.png} (100%) rename examples/resource-bar/assets/{Line darkjoystick border.png => Line dark joystick border.png} (100%) diff --git a/examples/resource-bar/assets/Flat light jokstick border.png b/examples/resource-bar/assets/Flat light joystick border.png similarity index 100% rename from examples/resource-bar/assets/Flat light jokstick border.png rename to examples/resource-bar/assets/Flat light joystick border.png diff --git a/examples/resource-bar/assets/Line darkjoystick border.png b/examples/resource-bar/assets/Line dark joystick border.png similarity index 100% rename from examples/resource-bar/assets/Line darkjoystick border.png rename to examples/resource-bar/assets/Line dark joystick border.png diff --git a/examples/resource-bar/assets/Transparent dark joystick thumb.png b/examples/resource-bar/assets/Transparent dark joystick thumb.png index 7a2d5a008017093a430cd769b77e46c2ed977e78..369cffebb83d15b4e5ea1a5050c71841ae8114f8 100644 GIT binary patch delta 1005 zcmVNbqBMA1~)JWzCp%czvf2}{D~m=+e>f> zy@V{mCAfrMLN6gpaB?LM>GnY^tLmOxIe`nJBv#H%?(h&)ILu1f zH{!NOHS5@lZMH%tC+rM3;1=Dq@Fv7 zO>7(RHx!Yz4uAale12N5*Z*a;TAgOIS$mWq_D}Pv+iW(c-EQ|yoKhkFlv z`3rffDvf1hn05ufUh@bR zS*}l~{E|ONsidq~%1*}gSQRHz)TZiYjL`I1)3YaV-c8Y-j@N=i=F_kE7Vzm;ehb)O zQSKdB=I~hJ8r>~56QF3NlsD*tTk3MNP{+heF)`Eb@wQREwJ(JUOi-emp?6k2QL3a& zzI2i@hJT+3;i&K%35JfGxuq<=DHrFMfGHnT8DC|jb&J1GF2B5sKq@6-pdKoPe>jduz| ztx&`*P~)BR04o%6bZR_H5!wt17UPsNVYVZcyMJQr2Pl`L$%p`;DH06Dj#x#?Vo6#- zNJ~T^>2gAzGC!2m6o8qNoEs2Vu4c+GBUYZgO)~^AO^Iemd7>UC=|xdM&S|P>^TX(j zBbJ|=EX+r+0@r@H2sh}{PhX&D`{@gmA|DG&Ra&1D?7VIq+m!)|ZVqn&oGC(EJ^iUA z34dG;w2qktYP^_lZ%Y^>EZS{}8XsgOb(F4|1!{b-4IL1Qb?DUi;5+bXXUWLa_-I>P zX(|Dg8XtXsF-=Y>8Z};R<4-nl6t}UW5&*zYeFM)&aX#F}p4!`6nNG5}qbg{mLz4t- zavGYXLjvF*piNGb8j{6DVP(uF_mh8=xMo>Ugp5%wv5Ms%5NG7bn9SLE4?ZH-bk>z~ z%}v{QADe`Vt(Ep&3=>tEm=F2SAe(MlKdSCqRw?B8${Ql*$~EL#a?M~{&9>nXhQ>2u b<-Yy_)BLFPx$i_X00000NkvXXu0mjf*mT)8 delta 1025 zcmV+c1pfP&2&@Q@Ie*?sL_t(|+U;HKZQ?)>rGqQsO1KiP1ecH!QUWDVLQ0?nO5hJd z;tvrLzny;|#D~x0GZ7I7=h(aZ-q>#>ClLg^JF}j7Gdnvo8j;iCaQJmR9)F)sr~l3a-y&0s(UX;$;M`5w6XSz`Rt5;B#1uf_bj9_1qfnpb8yG_{eJ(` zP)E@dvbort+@PA2h$ba+qDM_k$R;LYqV!fh8QBm z7m&=~?RLd_y?_3^Hk(aRs)XSP!So+;)vZ>mVzF3!x$L!)5wI~Ovk7)1q|VRt{Eqq8 zYrEY-Z9;S*)DG4M+v>l)(1tmh!)5_02B`Ur`Dg)LA!?Lh9!pHe4DKW5+j}fAq|hGj zga!5)0$MJYcg(lf>^&lnc@iw5Nr=5G_<3c%{f$IGPk+Xlb=Lbs^m0QQur{@Bg zKMXaCJ!$BlA#0|9+W?I5M2;7eV}{=29U^_%zO+nWu_U<~dR5dD>k~|G1t8}O;FJk| zGQd&GZ+{dkFjVE1D)kvXaRKa?@_2#z?7k!a`ktecPjy~r-;X*81rtm58xq1JO;&> zcPkj`B}F_m#h7<%Kfp_hcxVbeZ-pYT!kjA@M}H8C&~_wCuQUjCw9PeK!X7P>xdF$^*=tS zr$c&4(9fHWsRHT0CCy}vqptp0qr!Y*RUB$uX?F-kxG7h^YynXB%NBr;kB3r~&YiCI zb$>*)T^U3GS=XAObgGE0dioR96Q*`3+m4xs)Ob_h!Acl26z#r}ht&8emDE{w%{-*W zM{DT75UgWQjgQ`e5A7v0r^Y91afK8DYifM*{$j|SQnu81SmRG^-~iiLNeBeY?|TE! zXE>j(u_wB{m1`$U9aTw@j#Lt{%4w*Qrg}YK{*+qfG>IX3EDCF5cG*w-a!TLNnXGOQE7_6=V0xqBPy~PPY42tEq{p vg)UD>y~1ZT!(XDcnjHdJhQ@a;FZ22X7gJk$Q2t&P00000NkvXXu0mjf{vPjU diff --git a/examples/resource-bar/assets/Transparent light joystick thumb.png b/examples/resource-bar/assets/Transparent light joystick thumb.png index 369cffebb83d15b4e5ea1a5050c71841ae8114f8..7a2d5a008017093a430cd769b77e46c2ed977e78 100644 GIT binary patch delta 1025 zcmV+c1pfP&2&@Q@Ie*?sL_t(|+U;HKZQ?)>rGqQsO1KiP1ecH!QUWDVLQ0?nO5hJd z;tvrLzny;|#D~x0GZ7I7=h(aZ-q>#>ClLg^JF}j7Gdnvo8j;iCaQJmR9)F)sr~l3a-y&0s(UX;$;M`5w6XSz`Rt5;B#1uf_bj9_1qfnpb8yG_{eJ(` zP)E@dvbort+@PA2h$ba+qDM_k$R;LYqV!fh8QBm z7m&=~?RLd_y?_3^Hk(aRs)XSP!So+;)vZ>mVzF3!x$L!)5wI~Ovk7)1q|VRt{Eqq8 zYrEY-Z9;S*)DG4M+v>l)(1tmh!)5_02B`Ur`Dg)LA!?Lh9!pHe4DKW5+j}fAq|hGj zga!5)0$MJYcg(lf>^&lnc@iw5Nr=5G_<3c%{f$IGPk+Xlb=Lbs^m0QQur{@Bg zKMXaCJ!$BlA#0|9+W?I5M2;7eV}{=29U^_%zO+nWu_U<~dR5dD>k~|G1t8}O;FJk| zGQd&GZ+{dkFjVE1D)kvXaRKa?@_2#z?7k!a`ktecPjy~r-;X*81rtm58xq1JO;&> zcPkj`B}F_m#h7<%Kfp_hcxVbeZ-pYT!kjA@M}H8C&~_wCuQUjCw9PeK!X7P>xdF$^*=tS zr$c&4(9fHWsRHT0CCy}vqptp0qr!Y*RUB$uX?F-kxG7h^YynXB%NBr;kB3r~&YiCI zb$>*)T^U3GS=XAObgGE0dioR96Q*`3+m4xs)Ob_h!Acl26z#r}ht&8emDE{w%{-*W zM{DT75UgWQjgQ`e5A7v0r^Y91afK8DYifM*{$j|SQnu81SmRG^-~iiLNeBeY?|TE! zXE>j(u_wB{m1`$U9aTw@j#Lt{%4w*Qrg}YK{*+qfG>IX3EDCF5cG*w-a!TLNnXGOQE7_6=V0xqBPy~PPY42tEq{p vg)UD>y~1ZT!(XDcnjHdJhQ@a;FZ22X7gJk$Q2t&P00000NkvXXu0mjf{vPjU delta 1005 zcmVNbqBMA1~)JWzCp%czvf2}{D~m=+e>f> zy@V{mCAfrMLN6gpaB?LM>GnY^tLmOxIe`nJBv#H%?(h&)ILu1f zH{!NOHS5@lZMH%tC+rM3;1=Dq@Fv7 zO>7(RHx!Yz4uAale12N5*Z*a;TAgOIS$mWq_D}Pv+iW(c-EQ|yoKhkFlv z`3rffDvf1hn05ufUh@bR zS*}l~{E|ONsidq~%1*}gSQRHz)TZiYjL`I1)3YaV-c8Y-j@N=i=F_kE7Vzm;ehb)O zQSKdB=I~hJ8r>~56QF3NlsD*tTk3MNP{+heF)`Eb@wQREwJ(JUOi-emp?6k2QL3a& zzI2i@hJT+3;i&K%35JfGxuq<=DHrFMfGHnT8DC|jb&J1GF2B5sKq@6-pdKoPe>jduz| ztx&`*P~)BR04o%6bZR_H5!wt17UPsNVYVZcyMJQr2Pl`L$%p`;DH06Dj#x#?Vo6#- zNJ~T^>2gAzGC!2m6o8qNoEs2Vu4c+GBUYZgO)~^AO^Iemd7>UC=|xdM&S|P>^TX(j zBbJ|=EX+r+0@r@H2sh}{PhX&D`{@gmA|DG&Ra&1D?7VIq+m!)|ZVqn&oGC(EJ^iUA z34dG;w2qktYP^_lZ%Y^>EZS{}8XsgOb(F4|1!{b-4IL1Qb?DUi;5+bXXUWLa_-I>P zX(|Dg8XtXsF-=Y>8Z};R<4-nl6t}UW5&*zYeFM)&aX#F}p4!`6nNG5}qbg{mLz4t- zavGYXLjvF*piNGb8j{6DVP(uF_mh8=xMo>Ugp5%wv5Ms%5NG7bn9SLE4?ZH-bk>z~ z%}v{QADe`Vt(Ep&3=>tEm=F2SAe(MlKdSCqRw?B8${Ql*$~EL#a?M~{&9>nXhQ>2u b<-Yy_)BLFPx$i_X00000NkvXXu0mjf*mT)8 diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index a04df40da..365d98143 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -750,10 +750,10 @@ }, { "alwaysLoaded": false, - "file": "assets/Line darkjoystick border.png", + "file": "assets/Line dark joystick border.png", "kind": "image", "metadata": "", - "name": "assets\\Line darkjoystick border.png", + "name": "assets\\Line dark joystick border.png", "smoothed": true, "userAdded": true }, @@ -817,10 +817,10 @@ }, { "alwaysLoaded": false, - "file": "assets/Flat light jokstick border.png", + "file": "assets/Flat light joystick border.png", "kind": "image", "metadata": "", - "name": "assets\\Flat light jokstick border.png", + "name": "assets\\Flat light joystick border.png", "smoothed": true, "userAdded": false }, @@ -3286,7 +3286,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "assets\\Line darkjoystick border.png", + "image": "assets\\Line dark joystick border.png", "points": [], "originPoint": { "name": "origine", @@ -3503,47 +3503,6 @@ } } }, - { - "assetStoreId": "36fbfd4a39a5f564a47c5d3fe62a7590ab646eab98759d13c5de6d5da7957f52", - "name": "SummerBackground", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.025, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Summer Background.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, { "assetStoreId": "", "name": "FlatLightJoystick", @@ -3567,7 +3526,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "assets\\Flat light jokstick border.png", + "image": "assets\\Flat light joystick border.png", "points": [], "originPoint": { "name": "origine", @@ -3704,6 +3663,47 @@ } } }, + { + "assetStoreId": "36fbfd4a39a5f564a47c5d3fe62a7590ab646eab98759d13c5de6d5da7957f52", + "name": "SummerBackground", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.025, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Summer Background.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, { "assetStoreId": "", "name": "NewJoystick", From d742c0f2e75129f1a9a7fcab57ab6bf4fed49d81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Tue, 17 Jan 2023 16:26:59 +0100 Subject: [PATCH 71/98] WIP: add some bars --- examples/resource-bar/assets/Buch.txt | 1 + examples/resource-bar/assets/JellyCat.txt | 1 + examples/resource-bar/assets/Kenney.txt | 1 + .../Buch/Bronze bar background.png | Bin 0 -> 1228 bytes .../Resource bars/Buch/Brown LCD Bar Fill.png | Bin 0 -> 134 bytes .../Buch/Gold bar background.png | Bin 0 -> 1208 bytes .../Resource bars/Buch/Green LCD Bar Fill.png | Bin 0 -> 136 bytes .../Kenney/KeyEmptyOutline_ByKenney.png | Bin 0 -> 600 bytes .../Kenney/KeyFullOutline_ByKenney.png | Bin 0 -> 782 bytes ...SciUserInterfaceGoldBarFillDark_ByBuch.png | Bin 0 -> 646 bytes .../ShmupBulletResourceDark_ByKenney.png | Bin 0 -> 182 bytes .../Kenney/ShmupBulletResource_ByKenney.png | Bin 0 -> 188 bytes .../ShmupHealthResourceDark_ByKenney.png | Bin 0 -> 175 bytes .../Kenney/ShmupHealthResource_ByKenney.png | Bin 0 -> 196 bytes .../ShmupShieldResourceDark_ByKenney.png | Bin 0 -> 199 bytes .../Kenney/ShmupShieldResource_ByKenney.png | Bin 0 -> 202 bytes ...paceShooterRocketResourceDark_ByKenney.png | Bin 0 -> 7961 bytes .../SpaceShooterRocketResource_ByKenney.png | Bin 0 -> 2317 bytes .../Kenney/StarEmptyOutline_ByKenney.png | Bin 0 -> 511 bytes .../Kenney/StarFullOutline_ByKenney.png | Bin 0 -> 555 bytes .../Wesley/Dot Bar Blue Border.png | Bin 0 -> 275 bytes .../Wesley/Dot Bar Blue Fill Bar.png | Bin 0 -> 212 bytes .../Wesley/Dot Bar Green Border.png | Bin 0 -> 270 bytes .../Wesley/Dot Bar Green Fill Bar.png | Bin 0 -> 201 bytes .../Wesley/Flat Bar Blue Fill Bar.png | Bin 0 -> 170 bytes .../Wesley/Flat Bar Green Fill Bar.png.png | Bin 0 -> 171 bytes .../Wesley/Flat Bar Orange Fill Bar.png | Bin 0 -> 171 bytes .../Wesley/Flat Bar Red Fill Bar.png | Bin 0 -> 168 bytes .../Wesley/Flat Bar White Border.png | Bin 0 -> 241 bytes .../Wesley/Flat Bar Yellow Fill Bar.png | Bin 0 -> 170 bytes .../Resource bars/Wishforge/Empty Heart.png | Bin 0 -> 1736 bytes .../Resource bars/Wishforge/Filled Heart.png | Bin 0 -> 1383 bytes .../Sliders/OvalSliderThumb_ByJellyCat.png | Bin 0 -> 14614 bytes .../assets/Sliders/OvalSlider_ByJellyCat.png | Bin 0 -> 14567 bytes .../SimpleSquareSliderBlueBorder_ByWesley.png | Bin 0 -> 275 bytes .../SimpleSquareSliderBlueFill_ByWesley.png | Bin 0 -> 228 bytes .../SimpleSquareSliderBlueThumb_ByWesley.png | Bin 0 -> 198 bytes ...SimpleSquareSliderGreenBorder_ByWesley.png | Bin 0 -> 266 bytes .../SimpleSquareSliderGreenFill_ByWesley.png | Bin 0 -> 224 bytes .../SimpleSquareSliderGreenThumb_ByWesley.png | Bin 0 -> 202 bytes ...hiteSquareSliderBorder_ByWesley-export.png | Bin 0 -> 249 bytes ...eWhiteSquareSliderFill_ByWesley-export.png | Bin 0 -> 193 bytes ...WhiteSquareSliderThumb_ByWesley-export.png | Bin 0 -> 132 bytes .../Sliders/SquareSliderThumb_ByJellyCat.png | Bin 0 -> 2855 bytes .../Sliders/SquareSlider_ByJellyCat.png | Bin 0 -> 3627 bytes .../CircleToggleOff_ByJellyCat.png | Bin 0 -> 8830 bytes .../ToggleIcons/CircleToggleOn_ByJellyCat.png | Bin 0 -> 14614 bytes .../ToggleIcons/OvalToggleOff_ByJellyCat.png | Bin 0 -> 16473 bytes .../ToggleIcons/OvalToggleOn_ByJellyCat.png | Bin 0 -> 16819 bytes ...SciUserInterfaceCircleToggleOff_ByBuch.png | Bin 0 -> 807 bytes .../SciUserInterfaceCircleToggleOn_ByBuch.png | Bin 0 -> 831 bytes ...SciUserInterfaceSquareToggleOff_ByBuch.png | Bin 0 -> 678 bytes .../SciUserInterfaceSquareToggleOn_ByBuch.png | Bin 0 -> 702 bytes .../SimpleSquareToggleBlueOff_ByWesley.png | Bin 0 -> 225 bytes .../SimpleSquareToggleBlueOn_ByWesley.png | Bin 0 -> 277 bytes .../SimpleSquareToggleGreenOff_ByWesley.png | Bin 0 -> 210 bytes .../SimpleSquareToggleGreenOn_ByWesley.png | Bin 0 -> 262 bytes ...leWhiteSquareToggleOff_ByWesley-export.png | Bin 0 -> 164 bytes ...pleWhiteSquareToggleOn_ByWesley-export.png | Bin 0 -> 186 bytes .../SquareToggleOff_ByJellyCat.png | Bin 0 -> 1556 bytes .../ToggleIcons/SquareToggleOn_ByJellyCat.png | Bin 0 -> 2855 bytes examples/resource-bar/assets/Wishforge.txt | 1 + examples/resource-bar/game.json | 1272 +++++++++++++++-- 63 files changed, 1124 insertions(+), 152 deletions(-) create mode 100644 examples/resource-bar/assets/Buch.txt create mode 100644 examples/resource-bar/assets/JellyCat.txt create mode 100644 examples/resource-bar/assets/Kenney.txt create mode 100644 examples/resource-bar/assets/Resource bars/Buch/Bronze bar background.png create mode 100644 examples/resource-bar/assets/Resource bars/Buch/Brown LCD Bar Fill.png create mode 100644 examples/resource-bar/assets/Resource bars/Buch/Gold bar background.png create mode 100644 examples/resource-bar/assets/Resource bars/Buch/Green LCD Bar Fill.png create mode 100644 examples/resource-bar/assets/Resource bars/Kenney/KeyEmptyOutline_ByKenney.png create mode 100644 examples/resource-bar/assets/Resource bars/Kenney/KeyFullOutline_ByKenney.png create mode 100644 examples/resource-bar/assets/Resource bars/Kenney/SciUserInterfaceGoldBarFillDark_ByBuch.png create mode 100644 examples/resource-bar/assets/Resource bars/Kenney/ShmupBulletResourceDark_ByKenney.png create mode 100644 examples/resource-bar/assets/Resource bars/Kenney/ShmupBulletResource_ByKenney.png create mode 100644 examples/resource-bar/assets/Resource bars/Kenney/ShmupHealthResourceDark_ByKenney.png create mode 100644 examples/resource-bar/assets/Resource bars/Kenney/ShmupHealthResource_ByKenney.png create mode 100644 examples/resource-bar/assets/Resource bars/Kenney/ShmupShieldResourceDark_ByKenney.png create mode 100644 examples/resource-bar/assets/Resource bars/Kenney/ShmupShieldResource_ByKenney.png create mode 100644 examples/resource-bar/assets/Resource bars/Kenney/SpaceShooterRocketResourceDark_ByKenney.png create mode 100644 examples/resource-bar/assets/Resource bars/Kenney/SpaceShooterRocketResource_ByKenney.png create mode 100644 examples/resource-bar/assets/Resource bars/Kenney/StarEmptyOutline_ByKenney.png create mode 100644 examples/resource-bar/assets/Resource bars/Kenney/StarFullOutline_ByKenney.png create mode 100644 examples/resource-bar/assets/Resource bars/Wesley/Dot Bar Blue Border.png create mode 100644 examples/resource-bar/assets/Resource bars/Wesley/Dot Bar Blue Fill Bar.png create mode 100644 examples/resource-bar/assets/Resource bars/Wesley/Dot Bar Green Border.png create mode 100644 examples/resource-bar/assets/Resource bars/Wesley/Dot Bar Green Fill Bar.png create mode 100644 examples/resource-bar/assets/Resource bars/Wesley/Flat Bar Blue Fill Bar.png create mode 100644 examples/resource-bar/assets/Resource bars/Wesley/Flat Bar Green Fill Bar.png.png create mode 100644 examples/resource-bar/assets/Resource bars/Wesley/Flat Bar Orange Fill Bar.png create mode 100644 examples/resource-bar/assets/Resource bars/Wesley/Flat Bar Red Fill Bar.png create mode 100644 examples/resource-bar/assets/Resource bars/Wesley/Flat Bar White Border.png create mode 100644 examples/resource-bar/assets/Resource bars/Wesley/Flat Bar Yellow Fill Bar.png create mode 100644 examples/resource-bar/assets/Resource bars/Wishforge/Empty Heart.png create mode 100644 examples/resource-bar/assets/Resource bars/Wishforge/Filled Heart.png create mode 100644 examples/resource-bar/assets/Sliders/OvalSliderThumb_ByJellyCat.png create mode 100644 examples/resource-bar/assets/Sliders/OvalSlider_ByJellyCat.png create mode 100644 examples/resource-bar/assets/Sliders/SimpleSquareSliderBlueBorder_ByWesley.png create mode 100644 examples/resource-bar/assets/Sliders/SimpleSquareSliderBlueFill_ByWesley.png create mode 100644 examples/resource-bar/assets/Sliders/SimpleSquareSliderBlueThumb_ByWesley.png create mode 100644 examples/resource-bar/assets/Sliders/SimpleSquareSliderGreenBorder_ByWesley.png create mode 100644 examples/resource-bar/assets/Sliders/SimpleSquareSliderGreenFill_ByWesley.png create mode 100644 examples/resource-bar/assets/Sliders/SimpleSquareSliderGreenThumb_ByWesley.png create mode 100644 examples/resource-bar/assets/Sliders/SimpleWhiteSquareSliderBorder_ByWesley-export.png create mode 100644 examples/resource-bar/assets/Sliders/SimpleWhiteSquareSliderFill_ByWesley-export.png create mode 100644 examples/resource-bar/assets/Sliders/SimpleWhiteSquareSliderThumb_ByWesley-export.png create mode 100644 examples/resource-bar/assets/Sliders/SquareSliderThumb_ByJellyCat.png create mode 100644 examples/resource-bar/assets/Sliders/SquareSlider_ByJellyCat.png create mode 100644 examples/resource-bar/assets/ToggleIcons/CircleToggleOff_ByJellyCat.png create mode 100644 examples/resource-bar/assets/ToggleIcons/CircleToggleOn_ByJellyCat.png create mode 100644 examples/resource-bar/assets/ToggleIcons/OvalToggleOff_ByJellyCat.png create mode 100644 examples/resource-bar/assets/ToggleIcons/OvalToggleOn_ByJellyCat.png create mode 100644 examples/resource-bar/assets/ToggleIcons/SciUserInterfaceCircleToggleOff_ByBuch.png create mode 100644 examples/resource-bar/assets/ToggleIcons/SciUserInterfaceCircleToggleOn_ByBuch.png create mode 100644 examples/resource-bar/assets/ToggleIcons/SciUserInterfaceSquareToggleOff_ByBuch.png create mode 100644 examples/resource-bar/assets/ToggleIcons/SciUserInterfaceSquareToggleOn_ByBuch.png create mode 100644 examples/resource-bar/assets/ToggleIcons/SimpleSquareToggleBlueOff_ByWesley.png create mode 100644 examples/resource-bar/assets/ToggleIcons/SimpleSquareToggleBlueOn_ByWesley.png create mode 100644 examples/resource-bar/assets/ToggleIcons/SimpleSquareToggleGreenOff_ByWesley.png create mode 100644 examples/resource-bar/assets/ToggleIcons/SimpleSquareToggleGreenOn_ByWesley.png create mode 100644 examples/resource-bar/assets/ToggleIcons/SimpleWhiteSquareToggleOff_ByWesley-export.png create mode 100644 examples/resource-bar/assets/ToggleIcons/SimpleWhiteSquareToggleOn_ByWesley-export.png create mode 100644 examples/resource-bar/assets/ToggleIcons/SquareToggleOff_ByJellyCat.png create mode 100644 examples/resource-bar/assets/ToggleIcons/SquareToggleOn_ByJellyCat.png create mode 100644 examples/resource-bar/assets/Wishforge.txt diff --git a/examples/resource-bar/assets/Buch.txt b/examples/resource-bar/assets/Buch.txt new file mode 100644 index 000000000..a184b48af --- /dev/null +++ b/examples/resource-bar/assets/Buch.txt @@ -0,0 +1 @@ +https://opengameart.org/content/sci-fi-user-interface \ No newline at end of file diff --git a/examples/resource-bar/assets/JellyCat.txt b/examples/resource-bar/assets/JellyCat.txt new file mode 100644 index 000000000..572605b3b --- /dev/null +++ b/examples/resource-bar/assets/JellyCat.txt @@ -0,0 +1 @@ +https://opengameart.org/content/ui-buttons-5 \ No newline at end of file diff --git a/examples/resource-bar/assets/Kenney.txt b/examples/resource-bar/assets/Kenney.txt new file mode 100644 index 000000000..d0208b3b4 --- /dev/null +++ b/examples/resource-bar/assets/Kenney.txt @@ -0,0 +1 @@ +https://www.kenney.nl/assets \ No newline at end of file diff --git a/examples/resource-bar/assets/Resource bars/Buch/Bronze bar background.png b/examples/resource-bar/assets/Resource bars/Buch/Bronze bar background.png new file mode 100644 index 0000000000000000000000000000000000000000..1313a75ad24c54aa7940d00ecfc50ed645b5e3cb GIT binary patch literal 1228 zcmV;-1T*`IP)X1^@s62HC;q0004nX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmP!xqvQ>7vmg?12e$WWauh>AE$D;B{*X)CnqVDi#GXws0R zxHt-~1qXi?s}3&Cx;nTDg5VE`tBaGOi4rtTK|H%@ z>74h8!>lYR#OK5l1|5+2k?XR{Z=6dG3p_JyWYcltFtJ$bV!4Z1*-(jRh$D)sQNECK zS>e3JS*_Mt`<(oS!GgAu;X18RB(Q`eQV=1djtZ)<5T(CHiitGs$2|Najz2{%nOqex zax9<*6_Voze}mt%HH*_zZc;D?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-KxD8xfcQknqxZDATpLEHP9LY~hC>DYDGkT^x5V{5W*W9_a_i_3FWNB8*H^9Lm zFkYhUb&q@Zby{D4^000SaNLh0L z0GY}F0GY}GA00|q)c{6E+L000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0007`NklH-T3i4+(zRBAg^ zT^OrmN&nDxX_YZc)gg)0f#HZmZef81^{fIT9hyhqIkwL}uBoE)Td;j6+k8KNcec*~ z9O7m4Vh6_<9u4sQ$0R^a<0&)?TsqV5b)7mhUo7DRD5IMT$iNlg=y-r+mhRIO$t>OH z>H2)J#M{@W`+GWZ8$YvO0Dz0LF+P92!o}J6*+aVec9YA~e*}Q*+X=XKDy>LUuB{8m zz!jivB(u~Au?~3-u}C|e32Z=yRRSChPn6}IxQ$NS#`yi4TIJ=Zj7}d}UrP6TT}mFsavIQ9y0UR99y$*$BvwgDNM9-$x4KRkj}1kOV>yOHasGK5NJ;-CW=ssPIH_DjG{5K5mrGAfwS>^u1O(eHID9o!sb z2mqN7l~hdiWI`ZnH9ftDh+56cG?ujnfW}I!0|2`?iVm)r>Y!h-*?NLZk17F*&33<= z(*S@!AeXzS)vT<+sz;uWznXG@x!LJTtOM_y{}0F&;G=coO00wVVrlIn@3!)wWbNc9 zpz2-~K;@1NIZ_9RmskC)uk(9SrFSMoAwU3Vs2ZTjj;b*gxJ-y#xp%19fuxnKZYF?Q zh%!hOKx#0KBJaop-+!h-Uj)zyk%Oc)pU(0eGPgeu{;iGDb;utwudo3KI2_MVE#Adu zYh2We%{KRCzm9QzJ1MpCVGGb2B7vmc2ZBd#lgs!uA8>}~0?-K}2k8>Sqd~0!PVZBc q(d?fbSp-mc)WwZU>&zYpMT{cAys1*SoM9O5>^KY+Z X{H$EYe5IpR4J761>gTe~DWM4f%J3)! literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Resource bars/Buch/Gold bar background.png b/examples/resource-bar/assets/Resource bars/Buch/Gold bar background.png new file mode 100644 index 0000000000000000000000000000000000000000..80ac1d6b6dd876aaff2361944491459522455784 GIT binary patch literal 1208 zcmV;p1V{UcP)X1^@s62HC;q0004nX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmP!xqvQ>7vmg?12e$WWauh>AE$D;B{*X)CnqVDi#GXws0R zxHt-~1qXi?s}3&Cx;nTDg5VE`tBaGOi4rtTK|H%@ z>74h8!>lYR#OK5l1|5+2k?XR{Z=6dG3p_JyWYcltFtJ$bV!4Z1*-(jRh$D)sQNECK zS>e3JS*_Mt`<(oS!GgAu;X18RB(Q`eQV=1djtZ)<5T(CHiitGs$2|Najz2{%nOqex zax9<*6_Voze}mt%HH*_zZc;D?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-KxD8xfcQknqxZDATpLEHP9LY~hC>DYDGkT^x5V{5W*W9_a_i_3FWNB8*H^9Lm zFkYhUb&q@Zby{D4^000SaNLh0L z0GY}F0GY}GA00|^}(ZkBui000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0007yNkl z3Xy}PHJ>TuIbM)b|FreL*Za&X+5iMv{$rC&&JNn*JzE#nMSaupF{rBtZ2`81 zNFXWuKpmrKll%BFFE~SV0q6vggLKj5bUJE)&)Y4!c=jc~ECOi!*TbZ-{&)IaetiH% WBvdQz?fcLG0000@OwTZ zmz&glSI2OMQ#EG}0D-}!A3i+FGCgbuG8k|WCs=g&_39l2B{FLmYLse>b#rg!1C3_z MboFyt=akR{06lprv;Y7A literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Resource bars/Kenney/KeyEmptyOutline_ByKenney.png b/examples/resource-bar/assets/Resource bars/Kenney/KeyEmptyOutline_ByKenney.png new file mode 100644 index 0000000000000000000000000000000000000000..c5d87673a5fd00c53b600269a5739c2d597ab99e GIT binary patch literal 600 zcmeAS@N?(olHy`uVBq!ia0vp^sz9v7!3-qdyFTayQY`6?zK#qG8~eHcB(ehe2?0JK zu7Cdg`TO_pzkmOLB!mqlf#B!QpKy`y-@gOd5b*2QFQDx2-@o6zdk0nsQV9`(DERj6 z8_=}ZuU`Xg`2YX^;kbmIK$d(-kY8{_+4_9{`S%}a_opwBZ`)jNb;zFoV!Zx&&#C)m z-t#i-x_#v>0|R4)r;B5V#p&8Bx2H83@URBRh`Q{I=bEzR`Tze#L9>+3FjQXN>U&wm zbkp&R*|v9Xf6%mY(~LRtD(LHh+#ah5y8?Rbj?LJ4;QUUZBaQ*-UTaT0(eR(5B+_(- zy+8TrirM?KGRjwZnz~2jO*EXFzUY^P;60#-dU!bG|l2!h}(kgmYrQY zGW~2X?md$k;&5ygORR!1v(_fwfLMiKh;ptHVZ z8)iGfgIoR4(@E?0Ej{zq_L#+uSt@t*R{Tp)-Qlr2+~!^0{`ocYzSJzP2%VfY-*eu> zut?G7Meny2oDTjSzw_n759Jk4TWX))|9<0MW^Lw$Q*zqR+gdMdw)|25lXc&#cEcj> Sc6(rSF?hQAxvX{Qdp?{QUg={r&g%_x=6-`}_Ou?(Y2j{Q3F${QUg> z{{H>_{Qv*}|M9>7#t;9?FaN|Z|E~c5zAyjt&;R-F|Ld>+zYqVYx9* z0ROfC|D+H9?9czkFaN+V|M0*6xiA0B5C5qE|H%OV+fV=Pum9q2|EmE1|pa1W#|I#1-ssR7D0ROH4|KDH#^1uJ(fB&KY|D6E; zo&f*#&;OKoADt00}v44r*()t=ej|MS;9#gyvD zz_?t*-5}`MoqzuLb~GAt1iFua`n&`pT86RNdNMc}4G)ooR;jNGq`IBR z&DNX}SHEmkGVv(O)=!jaQXlk*B~ssK)f-Ap_9bFs9ovW8%%4%V63dycgl;=+9oAJB zV^i>w({Pz)J()DC_vqr?)Ce)Qx3em07zs);TUFHVYKVnB&(yr8XjI3yt2>!zSXUWy z!7nO9?;c+EUdirZs_$@LaI9wj_8!AdQoS^!ENfQM#fl`opyB`J71CX1^@s62HC;q0004nX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmP!xqvQ>7vmg?12e$WWauh>AE$D;B{*X)CnqVDi#GXws0R zxHt-~1qXi?s}3&Cx;nTDg5VE`tBaGOi4rtTK|H%@ z>74h8!>lYR#OK5l1|5+2k?XR{Z=6dG3p_JyWYcltFtJ$bV!4Z1*-(jRh$D)sQNECK zS>e3JS*_Mt`<(oS!GgAu;X18RB(Q`eQV=1djtZ)<5T(CHiitGs$2|Najz2{%nOqex zax9<*6_Voze}mt%HH*_zZc;D?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-KxD8xfcQknqxZDATpLEHP9LY~hC>DYDGkT^x5V{5W*W9_a_i_3FWNB8*H^9Lm zFkYhUb&q@Zby{D4^000SaNLh0L z0GY}F0GY}GA00}311AYh6B000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}00018Nkl*y5d)R%g8%>k07*qoM6N<$f*E2D#{d8T literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Resource bars/Kenney/ShmupBulletResourceDark_ByKenney.png b/examples/resource-bar/assets/Resource bars/Kenney/ShmupBulletResourceDark_ByKenney.png new file mode 100644 index 0000000000000000000000000000000000000000..7e1915965a04826a88162fb3fcb328467b471c66 GIT binary patch literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sEa{HEjtmSN`)Ym%P6qOY0(?ST zf%Kz=Z2y5^uY$8zypV|0S0>JUpeS2OkY6wZNaBB0<%54f5nE3e#}JRs z0|}E22@Q=`8N!cnv9)}?;LWTpByrVXRihB^7XP&>*%B=aO*l*wngV$jH*hd8C`{p9 UYVOZm0W^rg)78&qol`;+04nGyQhm|h(~8~f&^;{qnL_;gvo}4 zhQ_N5;YWDbTE1TJW;Pa*P?4H3;lK*E7%8^IBaDp75)&pwWv)pSXuG6vrGeAUw1-KF Zfx&qqw_~cI`dgrp44$rjF6*2UngHHWH!c7G literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Resource bars/Kenney/ShmupHealthResourceDark_ByKenney.png b/examples/resource-bar/assets/Resource bars/Kenney/ShmupHealthResourceDark_ByKenney.png new file mode 100644 index 0000000000000000000000000000000000000000..8acd40645be04d139bbe1a856301864cb1b4ee8f GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sEa{HEjtmSN`)Ym%P6qNt1AIbU zf%KmY>+{EU-1C_LvfF5gR6_gvk<^We3yrh!7EgMtTB9D|LG2(xaoq)P6UosD~d Px*0rO{an^LB{Ts5sn|I} literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Resource bars/Kenney/ShmupHealthResource_ByKenney.png b/examples/resource-bar/assets/Resource bars/Kenney/ShmupHealthResource_ByKenney.png new file mode 100644 index 0000000000000000000000000000000000000000..2aa454a31fee1838891132b6e9b187abbd9c4c39 GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sEa{HEjtmSN`)Ym%P6qOY0(?ST zf%KmY>+{EU-1Co~yggkULp(Z@6C_xV zForE+tTho>FSV*YPHM)121)jY6MSpf#0(@Ncm+gz3>v0d2S`O299YqIP^PfippyTP mQ$vLVJ8$y_CrMTp28Op%k`FufX@3D4%i!ti=d#Wzp$Pzh*FRVQ literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Resource bars/Kenney/ShmupShieldResourceDark_ByKenney.png b/examples/resource-bar/assets/Resource bars/Kenney/ShmupShieldResourceDark_ByKenney.png new file mode 100644 index 0000000000000000000000000000000000000000..2c03614e09a0abdf2a307f12fd59123a523883fe GIT binary patch literal 199 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sEa{HEjtmSN`)Ym%P6qOY0(?ST zf%O0X{{@#`(K-6f*(+X1L`v(T>s+8HTS<^#Fi7tI|EkId|9~QXo-U3d9-VKmXbUkY z@Hijj+VOwtOh*HU`h=j#>fYCs4$aF>Ke&-=#?%J8+wQ-Y3cTRpsB6r;CM;2LEY`Wf p?4%UakzW@VnX<&F#XB$75Tr@3p$bSEAwWV*LRXL~MUWzu`uq@JnM`Xj%a_REzJVu10qvAT?igH5Y3N_1L1rLE&zb5s*`S6+H`JzT!0mK64Fb18WI zWDYf@t#xMe-kCtBW8GIQf{xBafg%Q91gdeX?$z-F8&q{KM-|tVs;4x3fKmOW`>VEr zRtC~%d6)F>yAd*MKI=cF*J$L8&$a|~e{KD=wb5!7sqf9zyDVMZntN^a7=|wB%U!Kh zZF%q50%z2u`1sxvqEK?c{!2~UV#@)fR?1h!prD%5-D3EWmlI~|!aGGwk(5X4$jO3MCEN4L)izUBm%s6HoK`QXYxm>avwAZBjwbiXg@6pyA#@_-nK>5m zsUe0h{??1ve8G`r6m@1pdaAMZCfMkRyWubFPIJl~v+rQ1Tn z-_A>!_JrK+C=EV!2@t44J`x$WEG9p}+;*XDOQ`Z7^Rh7&7d*!O?J#=!lTM{?aNOuk zlh64`N=Pe!R8#dAWN%TtdBo|1jeWt=k z`2i#qV&z^@u__J$Puw#vs%RMS$Mt_*L(778sURoVHaX# z!O+?PxF%_6<49aNs(^e$pgT4!HjON@mS+0)JuMRUD$4Ty!CL<*`D0bpHlY4fwzz;q zv$=ZlMXMDxZK(3o2%$)Q4nSo#3z}yHx-6eB7LkF{RnL{I;lV19t)U$n(2t<+Vcg!_ zl(^Gd7syn58PbxZQt)jDRV zWeRZ<(q_}@wibuJk^JMTjR%HRG92?2KMYm8p7f5pxLz}8q%(L2pVF;j6O;v|x8Aqefh<*$K`tA)5n z+i0{{Hi&em2i(3Nhx0f;1yH@Ok=zd&%T4VeQqSHY-bs)%% z1e=u2DjlaEE~=o2Z0yNNy&IrnT{tDLD-qhMMMQa!lP4*q4qe7mr5_L`4RoJ2{l}i0 zss^Rg5??gbSTgSC5iO3w~M1nd!Ln69&(!DijTrmPzeL~XClDEddDn8`NqUQ zA_opUJV>=aG4aIDcLI9|8{!i%^{h#HZ67?)?5%t|xEP3USl!kqk!J%M_EODme+q|R z8+AVlG%=qNcF%IJp@Byxy z#ie&%TS;`l?I;-rwUV+2)_OZNJh?8VeXR>74NX;pIgfwdFg|o32L!{{P2JsFBUAkZ zo+T`I80CCv>>*?s{zItGdN0q6ZG6%@+oMew7pmEm1f!BG?%#du$nYvN{KH` z3qBeZLewqP$?z zJL}NNVXy0VPrz|r3Da&NbEkJ51 z_+&e0f8r1g>2J6&u>9gv*qKDb+IIi5h?0ZLT)KHbQk=-OUv8XleGwd)We{>e&232i zh-GA>dxwarp8EZUJTGBY8>V|*l#xn426Su;~9aQh4~ z6HeNQzudKAH5aA8e|lMCFwbdX==g#osZba8P_bRHLHZ(>hjDkqUL!q`a6oHkplt9E zcfi}mo+MZR*J&-SV`v{%lTkr4c1k2Qk2^%m^J!yZj1Na?q{C3G((-dxy^(?W-;g9hVot1qXT46pw zXgL;qwLsn(%0oh4b4i>POiyl)i_rgkm3Oq?V2Is9-o(&)%A^0sT4ry^bLXf65J#IN ztT#2jV6HbmyhLO_CUhpZ6Ukg&vUU9}u^GT?HPIkP_Q0L;K0YUv^B0Z~?3-lQ$ zCxX89`z)q!WsfCtK>;extcy{``*JjAEy9Z;mB&Z-bv_*Md+V5dSiyPal}n&Vrp^oT z7wR{A=!Qstw@rl{dj*#NWJY+Q+zrpz&E7qjct+PoHVvin~lOalL zwYFa5iv#`bRy@o>8V-&bK*#)!^+e4WK^fKYPQP!$1+HniHw)>F#~pKsW_>@o6^_qS~>2Ldsup6NwkqLZh4!f{aD zeg}s}c|Y#Eqf9KfX;0&YpPCw;0$%wB`%x$iC3AkQyhnAkZ&7*C=!3hRl+N&6DXjB^A4psMam zMq%7>G!PnxCy>;@OU-Ry5CN+Owvji68k4nft^_@Q3eM8s1c~u?$0%dL>Ss7qeGv=* zB94Xv`4T-yRD`b@co!GJc-|4qfI+(^G7B%!CMY|h6AKZ z!MY$Uv~_<$Fy7R_t~44MAtU4C<0I_@llG+GWn`6=m1UrEGIDYdh6RM`N1~y8AtdVY z9f+S8+BhnPLLk!!o+Qu?CJOE8MNWfMH;zO*{#OVr<_~|e7sX>Y9V|u$=Ybd2MZ?WxYcGLN5APo0EaQ|lgd+xi& z3@c+}gtjNfYbQK?Z8h-D_z0{ghJZ!vK0;kEva)Cx27-diDnsBnMHmEyl~aZ&<8TVf z@-SH!Gz|L}D18!@h9Y5bJ5UU8X#xXBPEHP{qy&|Pz-3*q5IEWe2SLkYaS#|3rX-J6 zL@Ox5q#M^8091oQFxpTnS|d}>=2GPYo@OTmXn75DKYav(Oeh~j5$CcVLg4Q zf2xoKBF>VA+Tl}{5vr0BjFAgW87`+R_otCHjzVSh;tr}TR9a4HSF=+X1S1^=wWys= zWdQ8T8QCDTC^!_&lY;d0^iTuu1O?jh+--1>>d&(15vU9cznz}{)%BLRi$C9fP67|Y zt_lR&ZCnHj^K%d?${Y8yCJeuyDvT?NgvT*v_^+1wT~7Ef<$_|-@-Ap78lntWc7ec^ zQ4EfimE<58ITwtw5(W*$VBouH{DDsObfNj6D7dqDMy8Bx7%jA$4d~P_G9~_Q@8gQw zVG1e-gD|>6Rskt1hmeIKNnbW^#t19z<_)y(7_{$=|@cSuaEG~?-O6HHn z>K9)-6#frCzv}Qm9DxD-?;!t(-+$@)m#%-rz&|qnx4ZtO>mM=jkBtBAuKzc>IQ~5D z;7E)ekPqW9qt{7TVH|{5(1z!<0oyy@?3SV=hJ>B0XGaA9IC*z2Ccv!>L57f(rf;mn zN@wEXmf~wVnzQrwj1W!7mZs%N+}Sk)cDHgkEXapIa|P{e42g>+y7!Ny&=c`7H*t|Jfd?va{OpM^q=A@3xbf<9=&qT4M1e#VfZ@kAY0t(K;O- z2Q9vc9ReO|#!rEY`baj7Bm6P5N5krZ99OEYS28oDl#P*&$sdkY5!H_0a1$@s*jig# zYy6n?fIolOW0eUcCiC*0Qfr!#c+l`djDn{d{BR=&4*+oN;1VLUi-3b_MrM7$9Rq|s zb1t@Wt3MpRUn+Q(hDiPD6A%y}od z2yc!gf{->cYOMw?cuT!l9tb`lS<7|#u4YGzg|q9pnJY6-wOOp@`LZ5XJYe-1#WH^C z5Z|@i(}fgBUdS-e#F0e7r9n+$I$ohhpPfph^W6AK%pIOjM-PTaCX}RJ$xG$B`I|hK zp^RM>HQ-i}71#-NA?Cv5t>KC8(}{Z{%8E zczU_B#~XIc%jqZ^Oa2f|C|tb<>?$~p5*0Mzo|3!o-lUR9_qz;m&Ho_h@sdr{x!yiF z`ODPD)+Kf0qF1*cCzZv-#02$;N`zgRn!+5nF)p&SJ7Y(BB65~_HL`22~2`mRaORQ(OBIYF@EqqvASXfBjmxSXRdG9wK_i29R2ZS@i zzQDSSFGT-`vs>o;bk8tUvTW$?Ild2Yj@cX^XP(ayw{9MJRye?P<0S`yhJ8D*L`=Z59xPX`Ah}s=t67jW=|Ojcj`jt zSN!qZkCtDP5-kF&dZcPs{KvY((z@x50BCuLSlm?l)vH&7sAb-bBb%0N2iZg`Uu8O# z^;^7;d9m{4%bw@&6YaMMXKqiFNH#Wby;8{C0iE@ojipYKqK0?&P~ zW@&Lo5!xBeypU@iH(hFl`eKa(oL_ZIn^Q}rUU90^qtpAh-B2Ed+``%R75s3g48*y@zznmC}p?qiFqwPpish?GIxan)PH% zoqw0=dx^{@ftY>egYJ2*;Psc~S9L6&F~uHOw8)PvVobN&15k6|e%i^GobF@o*HDQ$ zpP}`r#f_j^VBS`ss9=ATlK$zqsiQNEjg7&aH(N_cz(rx~3#TNHdj`Zn5;T>Kn=3-4uibwA_BSo`tM>(Fc6D(iesgeC2 z&7qQSS0AMt#`A7UYwbPdo)vR#ST{QX^Sp-#&oNPKD!1v~qHm)le7#e5JI;m1=NlNf z)$3Lt5xJ%U*eDFm>ZT7e8iU=cGASv^(k5V&Rmytls)uxRA7hmT=EX>4Tx04R}tkv&MmP!xqvQ>7vmg?12e$WWauh>AE$D;B{*X)CnqVDi#GXws0R zxHt-~1qXi?s}3&Cx;nTDg5VE`tBaGOi4rtTK|H%@ z>74h8!>lYR#OK5l1|5+2k?XR{Z=6dG3p_JyWYcltFtJ$bV!4Z1*-(jRh$D)sQNECK zS>e3JS*_Mt`<(oS!GgAu;X18RB(Q`eQV=1djtZ)<5T(CHiitGs$2|Najz2{%nOqex zax9<*6_Voze}mt%HH*_zZc;D?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-KxD8xfcQknqxZDATpLEHP9LY~hC>DYDGkT^x5V{5W*W9_a_i_3FWNB8*H^9Lm zFkYhUb&q@Zby{D4^000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j>A00~#LUh=x=E000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}000K$Nkl1t_zU5MRlUk3Mn*BOt9n3 zo#}#@%sunEGaj2w@5Y+(_|7-y@tyCSF@dD3_NX**VseQRr~m*s4m62vue@0}_iNHE zNm3w_CnxKK@v8f@5Ta=dapmp8xyMPirAdA?eqwSC0|5YFjG2_NrQ_G0l!pd}5ts`6 zjxn>H%TtqO-8Z4OFqY`6G z3J{|>dhm(jhLXxa!I+a1($i*K*2v(v3E`qtz+nDxyQb%^ATCNB4CW8FHMpMj1hF3{ zr3MD`2et+dV$4aYg2DXJ3*N(HGnA831A}=3*CPM`rW>K0lo}Y!8`wpDZo-_D8W_wQ z_{JXqj(Fq*)E<>m2ZMP77e{yD4CAI$z+m3+vy7kn;%FNsFqkiT#nCsm5Xd;%MhT42 zwaDNNAtfJx~zaS=zRZ<0m`63en#_xMoZKDJxNW-YQN>$tNs0)r?ds22> z8ip_qT+ha`3{W*Nk(R+dkQU)0Kg&@?fgTA4^MnyVc3}lnRol?$3xYLF99OAmn@BK( z#0%aacVeze1_tp&RPY{NXM}Q9Y%rJ~a1jh!xR9!78``giQFW7wwxMA?5->WKBzOS; zD9=c0kTGT+x%KQqBGS8FZq^xV9g-cT@b%}%p-^;`0sZ-A6aLxQI1FN9FEwhl`qSm* zZDq?`oxgjQA$}>AN7y%=jg*2AeI;?tmcHwl0n@DQ0;&Fc_1Nnk1Np(%D z27+OXns|dW7te51uZY>#7;TU%RCYGE{*{i8ojMh3^LMQsXl);oZKvH<2P1^tbh~PM zYfHM=vaDEOc3Uma9#a2qJIz2hIgVHvmP>@No1IRp9tdV_{jWJ8#EW5ov2E+h!^Oq5 zKsOy!(=V^xxqE?7Rv`cvS&WV_+8Wl11EjIG_G-zma{C7G{n?w30RXNq{#XTo)WBGl zz4GAp&F87i^aj2D2a^(-j4dn$DzFsDv_CeLIvEw%>M zk^CTpCIiDcpO&OzJ|EjD_&1EPsUZCu5i_#3$>s8iq9mKk$*RxDS7U*>JiBn(&AfzC z&~!bqo&0Sb-UakzD^8*-(o|f}s?-D4$OZM$>hvRbh;pSo?;8VN5oq_v!kx zj$!E2icQ=P-{F+*R|{jy5&$(Yn3(#tieJnz#-`5KYNbdpn3(#B7kAH%n>b9W9x#_? zX3FjoKqyVEiNg>3)!rs80fDYU`vtbQA4!na-~5;lxDoRQ#^wNnww;4kg7|AUlcV?RRV(v2y2i* zy2?$m)Q^A$;i8Zf|ET_`UrMJ@kK)v-9@$c?>KNyVRbA4!>5(n+M_5 z7_E2g*iQ5Q?Ds!;#%Mp^x%CnNUb;6M_82YVzYtEtef0PGI=p}PPCc7;cBJEd%W5Vb z7TLDF>OOwIs}7{oZo~fmzRN|TabW#qU^<;$35+Ud0DzALoz=d^Xb%?`*W5#D+qNU; z|GkCZJ6M)g?{}sLjw8DY-^6cqyIt7pbfj||uh&=m1|x)14>!M0;39VlAy$LlWyb>Z z;P%buLf9X(V6W4GZnqm=22h~ewo_Met>PS54!$t!2q8Qvz1QuorUu5gh4f@$#kA#h zQDjQT0)taL%rah}&Z;UMD1q@y@gUB@KvhyYX3Tg~eAkDKTie@U+ji`fR;*2OigOMh zU&3!~Zo<~)X2fsQQaZL}aEdDiek`37@89(?RG|>!MemK?K)~FaxiP=D*O`ubscKpK nOO3Tx)uGGAZ_k`7r?uCAJzG3uoM7``00000NkvXXu0mjfy`n@+ literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Resource bars/Kenney/StarEmptyOutline_ByKenney.png b/examples/resource-bar/assets/Resource bars/Kenney/StarEmptyOutline_ByKenney.png new file mode 100644 index 0000000000000000000000000000000000000000..55074461792e83f679b56b1c95e9c07c1be797fe GIT binary patch literal 511 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX3?zBp#Z3TGEa{HEjtmSN`?>!lvI6-D0X`wF zzkdDt`Sa&rF!%!oKqiFo{rh)_`0wApA%g$@{R1in$^yCX-o1mX1d2e^eEaqdCa?zLy3*mPQo#IQLB?nX%e(-6lZ*v6 z4;M)-I23NF7TLl3{aB!L$n{l~m9jq05tkzO-YN+A9V9ZBMf<_dZ4Z@J?`%)3b`8He zLn7h*2G*o+HSN!5MN zu-WvstX{a;i#dM`kGL;eyRFVHm#-n`+ V!G7Uc;lNO3@O1TaS?83{1OOG#3+Dg; literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Resource bars/Kenney/StarFullOutline_ByKenney.png b/examples/resource-bar/assets/Resource bars/Kenney/StarFullOutline_ByKenney.png new file mode 100644 index 0000000000000000000000000000000000000000..f00ad9db2695487228d273344076ab688ed546cd GIT binary patch literal 555 zcmV+`0@VG9P)`}_X>{{H^{`T6<${QU0j?*0A!{QUg= z{r&y@{Qv*}|J5)5+DiZHp#SEG|I;P^(jWimkN@Fs|IQ5mP01$LiPE&7RPalsz z@2@Y<51-$EzW`Y{Kk@(o0X#`WK~yNujgsk-gCG!uiMJr^nLDl;5S#aZ!37B}u}szW z4{MySM(1eq7AehyU{#zUQCtr6aH7WcA_WA2bBeF`j1mSOd0te1%6_%`wE~Uyh!AvHQ2(rHt_R=QQ0; zb0|^T!Dx-nY^Xy`=d~2i&4;$#;oVYqcy8~pxn0Ki!hj0;kKjq^8+iF+S>~Q-Mg!nn`{@ BY(D@1 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Resource bars/Wesley/Dot Bar Blue Fill Bar.png b/examples/resource-bar/assets/Resource bars/Wesley/Dot Bar Blue Fill Bar.png new file mode 100644 index 0000000000000000000000000000000000000000..46e3c2afbee0b1dd5bff3c886622b73008de7e0b GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^1wbs!!3HEf8anp_so9<`jv*QM-p*Voc*sG3;rk4W z0K+95SqB5ySOb_@k6dP8bC=g-;^8vkkodvgy8FzVUFY}Rp80>jCxedPc5D5%JSmYE zMY}bQerJoVGk0|BW#rXh6JeGLaPwp~c(Z;-k9z6&*Fe9OUvaJ z-fK*9FkHZRv?0mir+Gs4olyBxTlMyHHb5I4NR!)zyGOsMB$BLKg$0yTpSNOXKgk zn}*hZdbWN?+=b(xc2scf-7bIKaT427_Jj2;TUNH;-TOu7L_!d+>c)-RlB#x?PA@&_ zIKk8OmPgJS-9xjK)@ULVUC+M-R41{C5|b#qeO{{MRx-@nA@x@X?5 zLyHxbUol=He)(-r^-;E4p~6e%`y0-F{gm~^bmioEPTuQ)eq!)+^>bP0l+XkKJD72D literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Resource bars/Wesley/Dot Bar Green Fill Bar.png b/examples/resource-bar/assets/Resource bars/Wesley/Dot Bar Green Fill Bar.png new file mode 100644 index 0000000000000000000000000000000000000000..b8a39898055fa8a76106e41c48dc4fd51088d70c GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^1wbs!!3HEf8anp_sR^Dgjv*QM-p*Xe+h8EV8qe9o zWSt;TVRpb!ypQ(-2M_au1jaN5#aB%n` zRWSSegG2U@-&m`AM#kE4A6_cmx{blp)z4*}Q$iB}5A;ea literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Resource bars/Wesley/Flat Bar Blue Fill Bar.png b/examples/resource-bar/assets/Resource bars/Wesley/Flat Bar Blue Fill Bar.png new file mode 100644 index 0000000000000000000000000000000000000000..bf0a2761bfdc9913dc63fb87f56fe5617402a097 GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^H-K1zgAGW|IAI(Kq!^2X+?^QKos)S9@We1 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Resource bars/Wesley/Flat Bar Orange Fill Bar.png b/examples/resource-bar/assets/Resource bars/Wesley/Flat Bar Orange Fill Bar.png new file mode 100644 index 0000000000000000000000000000000000000000..b35cdbd2d4d732ac5bbd76be687ef91809b519e7 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^H-K1zgAGW|IAI(Kq!^2X+?^QKos)S9YS5YR%5yNN4E$YQ<2OX22oIA(g3R z0)yg~|NAWD*B_PHzl~ literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Resource bars/Wesley/Flat Bar Yellow Fill Bar.png b/examples/resource-bar/assets/Resource bars/Wesley/Flat Bar Yellow Fill Bar.png new file mode 100644 index 0000000000000000000000000000000000000000..aeedf823dbe150e550e47d303f7d8e6179019959 GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^H-K1zgAGW|IAI(Kq!^2X+?^QKos)S9l!NAtz<&u^Z~IwalYYp^$#XyIW~Y<4`6AYeo)b0NRj X6Xw#ZJ5m<{?PKtC^>bP0l+XkK$J;c; literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Resource bars/Wishforge/Empty Heart.png b/examples/resource-bar/assets/Resource bars/Wishforge/Empty Heart.png new file mode 100644 index 0000000000000000000000000000000000000000..c2312de5011a14ec394f079ff706a90e2d98f923 GIT binary patch literal 1736 zcmV;(1~>VMP)EX>4Tx04R}tkvmAkP!xv$rbokCHPP;1h}Gm~L3a8^kl4 zmd<&fIK+yQLVQjM*<>bR8c}179zB3q?kz3dDO!{y{D4^000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2j>A00wFX6L&}W+000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}000D^Nkl8=16h@D%GhFfCoSV zu@GWj0;B)zvL9)dj8qPl1b)#L@UU@*R(?VZa;4;$k#QEXPhT*cNzkD``8BCG@{alH1uQ@ zhTX{s*@j8|3;X{59^fNzXv27bO7w0@+OSfG zhliYkWmI*CVMUkD#D0P!FilR@x@B6?vZGqkE_3%88r>Cc~ za`UvT5`5IuO0nX|UMV)^cpYj563{XgguOjHlj*c;=JOFz6#eb{{sN1)xD2O}pQV%^ zvR<6)AW9TPv4aidJm8ocw1ce&Sqt{H;|{~7Gxq?Etv+*|t$TNFhfeBXbA<-6r& z!9F-Rh;MFge$>5hp~Hev6wTWT`{?Kh&-3s+kMr~MtE;Q4?~B~Cl=inU3?&WOHP_Is z5TfwXwyZtFA)6-6w&|{{mwuTIohNKI3*NQ}a*(zC&KT$&*fGs_`xd~UEXZZ1j@?py z*l=HD#iqB>&R+1n$hM`qNXx%SYaq1-bVFfR2D$Xqv6n_-GFph1XjB#C!Uao)g6300 ze37vb;*Tmnpz=1d2AEJ|A;hfe4>8iOr(k!mZ}Z?6A;dcqA7rdCGKwN;nJ;oFgfO=8 zY_tQ_A`|LT2x0U^ZM@aj0@%hOSGv4Q(S&+Ts5@#pr_!nG*{#8ZD%B)v3~0l!YlU1p zXa&2^#__AFR9~@i;*vV&S$ngP0uWG*S0U{!FQUCxmFkxxXfTjYI&9*&J?JsNVyeoSdAToSdAT eoSdATis>IX2*&fcV^c-|0000VnVt2cmT9d<*F< z^(s`mTK@+zY@fS7AZ)I(iWEBc0f`VWYH}(JE*v=F#2DLWh1JaFhek8IvzmD`Bjy9w z%*wjAAMeiYynSzPZ@F9|VxKF~F%3~P5m7V|Q8W=zG!aoW5m7V|Q8W=zG!aoW5m7V| z9~u8ONp=H3hyNS`XaV?Q?Nd_#7XZcpCddar3EyLoQ9C{2u@o^C@!ehf_Bnv_RV*x~ zad(zpn2f<(QYp!L0E!*DFKnx30ick5jC?RQ5zeTc7E;TY4ulU>b6UjIou$Vn;@Ms_ z6P#{1YMXMl`o4z3x!@w6Z-kA_D311YTj9+`Cs}KC1e)8Sbxr^bkq>H}!lQOtObOou zcpz*vLvaA~y0i4W$+tBVon%K`a+6b1hxzK%&j%CLzZtdDLq7GGI;&(XxNPlfivC>( zn<{bw$>8F~{6BUh{6aS-kPN=h`KX=tge?{59nnnk55hPN->%QwTypLxp1#h!U0<|Y z$>67Lr<_LkbTKA6vt-nkT~Bn9`LI(cWsiP)i9O)y64)0$;UJ#wELC1Zps`?~xbW5C z;PudCiA-xSK;^%No@e!z3GSSV=kK*^9sSJ&{~;chpXY!sr_6se>)2 z&pkPsSN#0!54^ur#O#J*3Tdg9?Nvu~)8(r*u77;hFU5=l?n+9P=*m-qnlEpC=37W5 zN>}o!gDtUt7sfr{`NbRj`utBHL%SneqN|Q*<*DG3+c!SNSGPa+F*K<&mFUV_7MFM` zTk1?Dx+RQwhKI7H&Qzjpr9X}0nQW;umFQsbc+UQZoq0IxyX>8M3huLPmFR^q5&({6 zOP#4iSEl}a#i4AeGnMF#E1XbpB)gGlBlQ(7aUi>qXsgvjR1nLSI+KfL^%Q5qcz_Ve zKHVlCZKNE^2MAWOA|ARS>maJH0P7SBlUH2zEdq!KH|>I>t6 zvxV$ooeHHAz3g2+IF7PcXcai3QJOT$)|QOM`DiBlu`nJuHDo_-+G4R?4@;6ATWn=; z#->Hht^I40uYY-XuW3vsnuT^!_PfjFO8Bcc@6oz>{m1<$!|#L-X<(-PEy>2JC%}Po zhJ3K~t*xnNhDW?fbJv)vs*iLqBl_P3%`VBF@>UKb9kga&$HwZZCp(bso3F~d3`vIZ zasw9FQQ&!z1@CP%+6!*Ju7fSrJAumnU+0%e>=e+1DchQ4SgllI0c&@dI;3YyGOU+` zv4;jBYptM_?NlaWYTA?Qv zoBJ0$6X&$B-hHzW6JRSZQsyt5cQ5$Sm1QRhWi?5pi$CpeOo+)w|H}8}QQ}vhA$#4L ziM&YP)H_a1;a@}N_DLv`B#|zDcFs1J?WJUR-J;Bd=`7Vxe3cCEd%^4HMV#a>bnw6F zzFM~TlHtY5ur5h9+3=#nDe{5z^*TNg(rY9-`~o@WKmCx}J>nmZBqIKK5F(;zBBE#_ pqG%$bXdL{0(JkuX@Y?3OWD)002ovPDHLkV1lknnLGdh literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Sliders/OvalSliderThumb_ByJellyCat.png b/examples/resource-bar/assets/Sliders/OvalSliderThumb_ByJellyCat.png new file mode 100644 index 0000000000000000000000000000000000000000..32c2400972a0359b1fa07031e29730dde8e6ab61 GIT binary patch literal 14614 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Sliders/OvalSlider_ByJellyCat.png b/examples/resource-bar/assets/Sliders/OvalSlider_ByJellyCat.png new file mode 100644 index 0000000000000000000000000000000000000000..040399dbf74acbd45b5e7a21fd0a929b5e9c9211 GIT binary patch literal 14567 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 YGfO=XdA&h2a2LojPgg&ebxsLQ0OnR#(f|Me literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Sliders/SimpleSquareSliderBlueThumb_ByWesley.png b/examples/resource-bar/assets/Sliders/SimpleSquareSliderBlueThumb_ByWesley.png new file mode 100644 index 0000000000000000000000000000000000000000..db52f18758f5aed2af64c6c8706907c8ea711de6 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw{1|(OCFP#RY7>k44ofy`glX(f`G#-f1 zzHuLId&%+{sL~zopr0O?FeYybcN literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Sliders/SimpleSquareSliderGreenBorder_ByWesley.png b/examples/resource-bar/assets/Sliders/SimpleSquareSliderGreenBorder_ByWesley.png new file mode 100644 index 0000000000000000000000000000000000000000..65c65d8e0df4b0bcd4d0f5ddacd831ff427c78c3 GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^*MV4+gAGVtjjaYrFct^7J29*~C-V}>IpXQ!7*a9k z?QKJ@LjeLU4?FiLM=TLn>{aKScSJj)iq&7J;Vy83P)2_jUM$2tDnm{ Hr-UW|w-aPN literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Sliders/SimpleSquareSliderGreenFill_ByWesley.png b/examples/resource-bar/assets/Sliders/SimpleSquareSliderGreenFill_ByWesley.png new file mode 100644 index 0000000000000000000000000000000000000000..4f092fc7df1fcb4285489fcd1a6030ad562a0035 GIT binary patch literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^*MV4+gAGVtjjaYrFct^7J29*~C-V}>ndRx?7*a9k z?X88pOok#257{l<8f6XCKjbtd>&ZyZaZiw7VCObq=Gd_1d7p{z$?rSEY(Fpey~P34 z%Fxi!5xH;U{+#=!Y>n4suQ^`|-XtLQ=b80}%Cn9S=67;)z5LYs`)6n}U&g&n@hY#M zJP{J}ng0E86h~_ZHk44ofy`glX(f`w0OEWhFJ6_ zr!+J@dA#qxqy|f|uDP+10T2Y8c1UTSxgu4&&yU)z< zT2077h*KfgUcc}6XZvRiVUPap*gH2@$l=#5m1UW`{?u?K_^w;eKAUBN3zLTuqsl~v zNgfQIDh(=NZJopjXMPjc2*`n{e|GrY6JMr?l*tU2gePp~?enio2>?2u!PC{xWt~$( F69BtQO+o+w literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Sliders/SimpleWhiteSquareSliderFill_ByWesley-export.png b/examples/resource-bar/assets/Sliders/SimpleWhiteSquareSliderFill_ByWesley-export.png new file mode 100644 index 0000000000000000000000000000000000000000..a62038146cdf089c2e3a6f58b081e85d7614bb32 GIT binary patch literal 193 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/ToggleIcons/CircleToggleOn_ByJellyCat.png b/examples/resource-bar/assets/ToggleIcons/CircleToggleOn_ByJellyCat.png new file mode 100644 index 0000000000000000000000000000000000000000..ff63da41d95b0fc4895bba2e0af2aa1e52e351b3 GIT binary patch literal 14614 zcmWk#1yqzx6y05xu0^^#M7p~h=|;L+x?|~-kQ8YIL>iP%=|)1jq$Q=B|NDXc;Osdt z!_1ra?tS-8th%Z^CK?GE2n51ZRFKgGz6S#@FBBx;8MCdU3<7~8?WLvF6{V%AT;1Q> z*gIK+Kujq?DZ&c9>UdEvrAo4Y5ss*ek_&|lVEArn%mh7B_HVxbHFKXKod`Ms*8v^K#SlOnEh_g2rkg;@U#_BKk7fu?Lar7}IXBgsAh5Dhw1^ zFtjlvnQTgnLlX-0EJ`WVSW7nzOmAjYya+c9)`CKGlRk12Z{Wu6Wx440k@j(a&Y1Aa z7wC)oC>5wG;xdI8OWDHK_Bhb8QQOTeEhi+XMn*$`?#$A}`G$n~ACH^92JZ+V7u%bh zCV`3_X2-SEE{?1jT}`7h-UOlym^_5WN?SvUn1JTH*$8@$QY6*>&orp)xup zIB2=M-%C0520lt|cBYt#F`V-FJtC08SG@TB2n3-?;wD?TX;)B{63#R3aEBxy03AR} z>p1y$QhnX>v^Pd|l-2i?e(&sT?cxcNcDFY7w6>!1vG=s2l2=qw z*9*lW1c9hPiZYVgzDvg)e&3DfgD9?#x!3PHaj-$0FgOT8CYhY3ppnKBm-_5`8Gghel9}j{jN{1V({^VcciC z2c5#Xe%Mc2M?q_XKHU;v8ihZ0>F2HxI!x&zR8D^?1-!_1Qu|>R1=4XY5!p zs5^S4BP8#s>9m6V^a<%Z+k36G#=!3&{Ya^v#X8Huq3!K$yB~&Cgz^2~wghxW>(TV? zH*-8d8*XILd3#YS7--BpCoN#rqB#=6Y#iNTI8oKhQi*y*| z40Z+Kfzqx|*SmH$qbY+u0|Nuqei*Kruw|CT_5aCoUbd!&Zstg%q_ojDhaa%LB>LwC z<#IBJOnMm48()jOuU>UAHGKCjVDIu^Mm~{D&>aj%??!-KqJ%f=M8a2!x>B*albzTQ zm`)cPY)82#MJ`r;SG}YBoRxK}P_9j~lY=`zRL@_6m!|1DQP_QoALe*Zk3!6Z7XgDw zP0t(6JM)lyz#SbOeGmNU?H56>zq7I+a*%O3vBhiXBi~u?Tr>42V~G0GzPz~qyxPm9 z+RIhdyCyNiia7@SDGfa8IGPCa7=c6_SsbR4m@OhVvKz2C#@UghK|uqkVlTT?a)xKW z70YA z7yK{Y^zl!gXh2?WR@TCZAR{mu3goskUo6Tz3!?UVyslHP%Jj`>O`ktvpe|^(*qrDf zq~c~PCtkP0%iP?2vqaA{=xTjzeB5{fMe@-Ey*mK4-F+$!^fyWDe!nCC<#F$&ja=AU zq{u#-SQaO6J$lb?-@DD#m>*FDz0tyZfTDQS1^DW{2~trY4_OCZDQ+v5)q04)gYUyo^1C$bqls>Ub&?Sd=+hqvom`nWeowDmps4 z{=0Y56?0*Gep6neI+KfoYr^P%sC4o>SVpBvG$nr+_Ae|D$;r!`XYZw4E@4h;9*dez)%=8jY=$BK)0~T0Z5fR;4?1GYS{C%w)YOG$H`=&`duNYwJKs;u0YDwGE1Ia&7(?6l0sGO9$*DTNYO48?6jWw-`yEx+9-2z61) z_(Xys9d5oqg^8J+2bRbjo5!0;t&w#F({$Yp@bo`&CYGc^pX*Tvy{B&&BjB2GR45y* zY)12udwwXruncSShwJ07^M^st5%+K7p3*ddosq8TdcJ=@J~q~lSn&D+bo2!5u=Cx* zp7_h%q}a>jMVBcHf#b0^X+=eazJY;c!(zl?YfKT7wQt!>PoZ?Q>*mi$vR?cK@w6LYXg3z-OcN-vt0oLe(7 z2tWzV62j|b(zOO8EaR@FA}-z|=?9|kPh>F((Bs9+E;M3Fp%gKNahc|-B6pq^t23D` zH##$=D+T$5nOsMkF9h!8`aG9OM`Jz74+pcSBDPzHPJX*CU%$&;zq{W`5`P|bBRl*c zhX5qU|L5Pfs(RcEgGj9fWI0??PZZ_X1YSS9*qrfD+$!1D)n8HMDEbRS` zxsZt1W>&bd;EIODG8kq}GKGmyS}uL)c8{SFjzuoSbN4d*60$1`_44rI32d8>j}UofWu=*$8_owgTI&|H!9+^& z#HKZW^t9V zb0QQMTLO~?PN^i!%-I%M=Fuxa?jpdA6zH!|w;>3T5s z&C5g(IjlWsP5hgdm=rkDz0HQ+TGCVRB_N9%S%g_;*ZX>*))_sjyxx}X=>s(Lz!1eX zFDDa)`V}AU_JSNrfqg7?K`?fiS)n>p!B>0@DI8fmvmOW-j4T@iV>4<#+u$PX+_Suw zL9cmkAP~wVPe}SuY*N$9qXLY4;Yef&Y>YAq(sfi?+><1Xg-pcvEb?M+vWso&`AiP3 z=0dekn}0uBM)9yT-+8SDB&&{Jc4p@0U}a_H@-J`R1>axVw_h(g205%YIs?ILJg-sd zxbP1Z*Js7Cr}oP#8xd2QQ`!h3p7Qx=c5G_tk^A{j>U%j9*TQZB^%FzB@Xy%mznyEU z8O7k{`?b!bkzwH$E%15(cUq@uNTDJUaY*14qZ6v|{E|Vh-up9KQE}VTWf#snnw6C$ zQKcJReF*G;zKO}e-@nYQt873{ud|;i?ObOZePoKu1~SpZQY>9o641KcW>?it5o3%lDdOH5t#Ds;L8z-W1|IhdB|B%)KFUEQPSr8$S4N4ZOE08tU zhvp`|Yre51OIR`g>5Z`CdWjNpmGEV zbst0(qc47>@;+r{$PSr$rp?X$3^$TGP#nH|HTAD;f11sx0o^oS0)(d_MedbQ5J#iL zp@Kjw?7Z^iiOS?B5a3Ik`va6=U8q}8Xi`(=-MQ#gG;>g(TX98xZ#99M6B`?A`*tSB zSYJPDg6yf2vHQ)GeAihd`{Pk&*W=E6hiqMaL&Kj(M=Ti`8B+(IngJA1)SVZ(ryGxV z7xr%}B=pwq2Rax|9{kW#g;n$sF}-^v3N4C_-V_+I7HYejEi&-r!o$P4GeBcHB$T`G^wx3XLwT;E%V`>mn+d4P;ki%G}!c>RlQR1QZlJbs2Kr zS#?P;mZx&>b|>Uo^xaRx;#i+G{U{h@$DNp#me#(gZ28#2+8S}rfj4vWa2T8goD($y zw8)Z{mX-@~m#<|nLQYxKB|t?vLYnqaD#bVQ4zGHeMI(!h&P$rmcvaTy9t3|iLL^D9qix)lH0C zf}ue~jq+0l^cK4iMI|dOR>@)`F$wR*=wIpgq!Y6mlm20(5 zxAnv1sv1r=?-_oH9`@6SHavpLjbKX~0lKeFXfiB|k@za^t2vZcTS7v8>8s^UnX>QU z%jf<-JKHOThE+wn6+Ijn>PmI(?Fj;j8dbW;1ko_5qq@4f{J%f~2FiN+*uN7M1e4U^ zPvh&4yZkTzGnNMTZU0Zf2h;TJ=Ob@gl85VA1XMqskgYmwhUPbDknx)flA!JMg}#|b zV@fB_$^frY5$`H?(=W7kPB^h5;PGrbd*8PYo?y3xj&*^DcR9}H@TVZl zm@t%3!tNQ72yYa0hHuk%+y&A#AfKSdu!EU5&8{qh=9SvaM8w3Q_SpczaCCHxT_j3A zPUY(o5EQ)YTUl9Y>g8xZfhGm#dar_OH%ZrT2VNQjZcgL@P^Wp?F>~;R56H9|K#f#I zr_*jO&1qJ-(QiH^CRH_vHlEU8`OGv=ru|J8Z-ftHM!~7!z8)E*%H=JH_>L6o9JY%g z5Zx8V0pA{z_=c!J!vE#R1z_{vyQ5S$BA}*sz{D*m`N$(?zkt3Mw|e8_|1S`kxJ?d$+0V?(Wvs z*1`eo9Yz5Kn*{!og-Ry-pBhXxQPkF6aFR9__ptqCN>fQY#8R4jg+>olG37ax0%BsX zY8<%_k zo=6RpAd*8l0*#q{ElPMLryhnGM?~vGY}X_ta2LL#ef;L(+M{SN1r&)^7XMU+Bu_(3wV!zHliYD_q8 zgA3&8UZws^!>a2#AS-tz6nzb1Wj5`S!xz84stI`tX+G_I$aCWRob~y0FTlJ+CY2>a z9*&#bjuz^!C@T-`hj!C2j~*%`rF5c=XE)R4CE3$hh%!K82Um(2m}oH}o6&9XF4K)MLJh6GP4nKU>GL^dgt;9H3(NnAC0CX4YQxsn zRtwu?(W~Ecl&|*2o-`d5*IOf8i%;X5@K#ntO}V3(TTZebho+ZJ+DUUh6C*BB>5-)m*Ax?ii!YJoQAgXYa4i~3lzeF?kg1T^y zg88Lf>A^#F;-V;Tvrxet8FOOavIWz_#m<(RnEHkzQY%Dq%(QqEdB-mqEqjJYvO=i`|r8HvmaYFFgw+Znm-k;{h-Z zId9)Sn-4hB%MA?;;vY@KfCQv7)_K4ma>4(C-OIrY5FGpcQtiNsxt|p^o!P-e_^k#R zkxO#8!jw&Bf+R=vp;ElDbE8*uw6^-Ko@=iLY!6YHIS_>+;DQ4aj^^roTRtcczO#3j=TW)s{69xfxLo<)<#;SK2Av)q9lekbx;g4w z$alS3Huc?%WItZ-da3ztSf$;MESU^>T5_z}k>c;=c-8oh!8>RrLMwH`NLIdNw?I?v zC*O=}y*p4Bv5af{=aJyS=(UfAi|b|g+#9w!5gWs(mT!q=3w7*>UOB)T-k15J&$s;bw1cbZ>wluD#Z%gRhM6DcUu!pQvxp7)EBo-uXs zm!0@L3fNg$H~;j<3)*Y#j9b3L#2fS^VhBC3V@i9A$IN#WhC1`R@DRELoBEXsZ<&*% z9C@z%JO71Yh#}v~+!jyEQ`mT{hV2hm>1J;)ksN0fXM!{H)-U$AQusfBL+9U-n396y zI#E|&KRxKHqpV*uAF@_oiK*$4>IgPLP=B7z?7VEi#l`*Hw(4SdlXq+<=zC_iPD&C5 z?w#iJx)IvfrGB06j%M?x=g`pqYY}GMfgs}vf#&gi|Fii<#g>`h23; zZgxWtYEswn9IF=ir^1}56f%en*CHC7NFg!9cQtbDeabYg5bLH&P52O1DMyS4+5}Sk}{|Lo-d3k>rTPM^z5la2v z_y~G$mCf+>U2oJXl4pE3Gaa!|o7M1Gj#V3^gZ*i#W^FyG02@I(sOq#mUjhYdgh*t5 zaKsP+T_1wbOEjQ9&wSg*?jmI!_oY9(wR%rK{}?oJ4a+VSbo(DR!0wioRR&j$U)yP82LU?XD>(E^JdE=*H6Zrz9ekSrw`CmHRIPss5EpdkhXyKCm5H^%Hgc%X5O{Py>;L4k;7Blo@>azm=Pkj@ zMRk{g60Z!5$OaeN+_nacr-x^dz%^i|=aHJn5q5(N9d!g$?MN2T z*yLpK@-fzT#?-ddW}_yaEWS`3j!irj{YKQ)se+qtx02pZ2uSy4l2mui;=F#thiRP6 z)zLe?#E$ymn8-TXW`cZqX_clxxb68d5yUfPj!t=z1LQZTTUlOh8R)qaCXc-WV8MIP z*Q4d8Q(K)Ey^Ld!>-Ev1So+7=e8;a&O6SK>B|Yw*3yI)SKJ%<>mM_UpgXubt$T*kg z*PWB2@;~pVu!ef^1HGR>`-N9r5%8#(O-OOtV8EP0{IUsd%;NX&4=J>5fTtEXoNr_vhu7|(STQK zcWo*kqt-WHmC4_gHw_(`sFbA@NmnEi$!RXK<}uz4;k@6el6jo7GGbSg^a_7E&3l<= zGoVF6FnWg~y$v={sR3f|i=>F`L3!3MeA2w-ru155QW^$5XeUMttjSipALZ3%NR`g` zGN%}>!(ldzkz1W&lwv`-JdB)wJU{3!5!3fOATNo}Fa}l}13^PX_E|HHHkK2@Lz6%Y z{5^5=ai;P3X|Y!IwF!cReQy+Iz^onTTvPRVmjUU=^inC6@J)qAW#0Eo=iB27tG~U} zIx~+cr82OsJB0k@GzSPGIfbgxDJfX=nMe@z8$-#Hv|&-yK;z+$fa>VnoJ5pKj#W?} zRxii5SB^zQ@7FvgMSZlH(>Zx5tB&ZQ zjS!b{qV%Mh9=-qW5dAeSmnd(q7#$l*636tjUggNIJql=?7U(=7P%D14ML9ffJ83=K z8kwjVo|v!|yZAKeJ`qd8nxS*y;o*VM;U|SMlB!6;2Ntb6jY@y}Nxd#WHN9}X{GryA z?(inr3wMY}o+x6!2pug7f>z6lPU-grX&mpMR$dB)Wi+h%5J;}%L%u3A0K*k8{Nsn% zF3QV$1t-}rMuL2ERR3CFPjd7sR7Z)~+$;Rc@tERIxm3z+G}YDUv}0*;k8dYnn!}4? zrm({R6r7(CsLO6<_!v$B1<;aQ!M)dK;i^Zot|&7+H&Q3iwUm|ZzxzU4hK4{t!jtSFU)CE6tVMh|i*(x?Jx?dq4ikY_As2E%k( z2;UIPVQVLK#a~oVg+5DSg=F{Qmk-&*!U{nPJ5YmuU*1548D8R=)X?Gh<$2fNHTmWe zzxOzy!6<|j0s<^qQ#_cYK7_MV&_1`E&qZ^ejmI&($m&=spc3;SqQot{_ho4QrHHxLe9&~Bsi z^7Syz=L4Dj3eL6K6k)fSX$BPce%~hmuryr+O>)`qle`2A=KkPiU z9vL2eWrGo^f`QbzmW+ zu64Rw;VA50(Hl2mkda9ZWxOUm&^~5y>DV-y;HUkPJn%2d91l5EEa6}Buu005g2%Dc zQ-@_!&Edt-1yr#;U;=le1QWiQyrOV*PlPYZ(9A4Ps-y*@r4Y|9vTm0mz!6a&eDDI#}<@9iM>~M z0Udukef;H+OyjIrsAR|n*J@c4zL7WGAfq6mGntD5kAk|t)d-bkSJ zG@v{~8$24zVR6a1fWbMEkF>7p^VZYhYQ$98$}L=b z{ecOF2q*5K=?vib(e$&BPGW0aoL}Rgu_SI)=M=lEBoIo`B@jXq=!->(@nf5YeG`xM zKAtRNbe$j4;IiX>RL>j0<0&#rqdlK*@M88F6{L(aK=LgGo0${wHS}WE>z%%x^ISAd z{^~a&0};Y^&;CBN{19rgethVkRWnfG$_9(XDT)cxjGB0*GMtUr>0>749hnU)s)CmR zDnVH^>%wtvS@ySd^?@X9ct0c!Z7M5VD-SL%Q>26E`an{&7J2^Xf`THYL|=m_Tn;bC z{X5}-#DE@iy4Y0uQ&Q3XE4V%a?By(4Jn*vzTYZ_p-;u=m5k+j=7zE6>kVy+H5=IYW z=oU=mj_!}QzK=@bl9@a^*f`Y}P){THU0cfmGr{KnUI6MMCZrDnt#3rgeKJ;yR+WD{ zeH`>!ok8<$Y;Rw=4C<=-bIo$w(fww?V?y#N;vdhe0&00O*FGEsOA!N-Wb>wd16211 z5;}xW5m_(=LWiMHKQ}V!%U&zYB_*gT?o1A%2}%k=r~G*Q-QArf=xdafn9_FZiF+f+ z)Yu{QoC>u_3|tIx8^S?`xb?x1G1AUwd%Fl2cN;C|x29s>+A%r{5K3$eo;|@dhHCj5 zT-F8mS`6b%HnhTG)#zCgQPyvEVLU z3HUZ0Kk_d56!KZyZ6wg+Pf23P3GOCFm)lHKEAgvv^MmRbGiwNlIs0#2ot=*(l&;E` zSiPKAn%y|gszLFuHn!ljSgBv6@EA7bKF$u8e(qOS>~dbO%e$Xg@Co~3@rgTe3L7UH zk7YMYoVbjr-z^6s&dK?!X;_I>tTfF8o)c6C$6gD5I6nQR-&-?aEQoGA!tW8FRUxl+g3v?|H>#_ualoJn(*d>@{^M^GQRn#67Q<@y%sZg za52yo!cad_WP6^PEU3 ziTcuBlS)CbS^ZEfy5U*c8qMD+KndwiRI-{wZ6KeaL_3s{I+4i`9bQ)q^_dA_f ze2V4;^H}`WtutNt2jbc_N_G%bK8fOq&+;wC`H9cT%3|iA9?-;KtP9-cgtAHRYeG#T znABC*TJK2)?y*^yBQNV^-0w4LMGsyxDlD9|P(#?I$lS*$uxC=rzs+lu-vO%mC9al` zcivtQ_V60X8hW7b`S!2}(DSrKqIU=UA`*;AnrL0=UmS|zv`6kxW3(>i%>a!*k<)#@ zwAu{C5-KOlFTqZP#AR%oLfeV?D0zppX{8>|GCB3eUcZ1=^O;7O7gy(L=hO9aNa7gJ zAYjQQ-)#&=uBlKodDln1OLljHl0EX?N#}XZ5rb|5)*sgLHI<5w zl0^`ouaB1>>V5xWu2@4zP$Sr)*KJUQFihTss#&)rD_A~={oaxu@YYdHHxH=sA%p@W z!@E_AzG$su77pauF0w^*Pviudv8ap;3_dyXkVNAjHq4O$ zbo6ws1Hs_*hb7dR3QHgiD{{W*Y?-rNHD)RaN1k}2@Rji5_Y-8T9c+l`hvj~u(Uw3c z4mD<#A~UU2zp7OIIXn{UhOtGWro#x0yIRg;ktv+cc`}71CXx8 zwHze_8hme7eN0`zCb~acl_5M9D8@)NDm&!8hYaO%ByI*(4b{78vmvma$*{GuKQo51 zcP%YLUz`wsa>#8U#n9QS1}!7^-76Y-`}X%@i?7Jbl;Hg2c%*=LMk01}dw@&wRHwz`dx<(L7A9)lsRu?3G8mld^B${>+x~B!TDC#S66($XA?u}C zZyXz9qJUiB_U})BNXg$Oe}k^~>z$n{3QDiqM#(gWaGEhp;(t18`c@IG>Y}VC;j-tW za^yWh`nuWopU{Fs78rCyPWAqwJz8b3N?2m8qi?i;i{L=hK zp0|)yD27(J3qyE{r{H6vRn(J2a^Yz78he#~M|Q6le4en+Ntd_r4cW&lx<5(@YN>*0(DXKk2)r^^0iJo z3gW${1l1hyb<`lXpm;$kcB!VV-a|Q*pg5)tfeWRDy{X|yX~ERb+3y5f8RClcGBYw% z&4*M;f_yb`Ed2fbcdOe@?)`c>;+X9V#4xC#fU37Qk$b4;2$|x=m814k4-r*d~v z;$oDaPsI^A_?nisxt(Dw?9IwDS$;z?CCd;rUe2OrOJ**y=^f;`%oT`E#72o$=gL); z4iG+j$Juafu`C9sG-*O;Xtt74Sy@@v?*mU&<@e9oP3mAp$8h-;Pyow|$iF^ZdnIGksBB5Hs7=!xA+Nvr5dG8? zl4^8c&>x@*a09#X7~#B3I!kJe%LcTd|2J6N!wIF}NFcM_YQfgdoC z#nIiDqyo`Vy3;|Eg6;?sdpvcAJOnY)Xf?P6%UBy;v@&Ah>lOm%r$I6%e>iM)+F=mN zhlRoE$Z+N~UEIN9CI<@f;Kw&^WRn<{4|8z6P4cod)%R=dcODTiayz;(+&Q&S1)vk1(Wkc-R?2e1BuYt5D^#j>CXJnIpQp71gTx}n}}Pd9*U*~w~oQ~2Rr z55WXv251z=A4vIKSP0^8uq>WtXSG{DR}%(KKxLe|na{48MRSeWfA8%LE&BPvxc>$v z|9wG4>z)HmmV5tNS08C{5K@##k^+{X2v`Ci=?FGiGWQ&R!M+j1Z1hpQ{jII7+c8_Q zRIPswrB!==F-7~^o4wIpSZ1h-J&0?pXRmJojA#oKvAdbLF*%dJIS%wApq+jurJe$A0T47v#ztwQEpn$(6OFuQQN zFPMlcxjM{yqb6TTU0$*C=axpWzH9tnXAe>V8ppNj6jz1{Z(JJ)WF>|QW84R@6w?u) zvmuoYA+Xxs@7)ECLEmP1gAtn1HY`N(a~W*2DqXD=vdMa(o=vL={zG+vY(It9F?SO0 zm@;!`yvPAT+-Yg6fY~w4_$G*Q)#c`MnOgqy%o{<^dGz-CeNTIPduu1Bu}a+vO7cGc z(RvPE-bjzViL2aZRBG5Ad}kldFs&|k7RX%* zTjuE2noFdZoA~{S0#VUTsp+_Q84c!X0ey8j!PWck1&<1CelEbf@(5Q=Boye z84ATf@+Egq(m`iLm6D z&sJeBqw-C}H2c%gOSq+T;^u8r;B9WRS_eY+)6IGkP;A=R2~Yj<&i@c5kqckTDjk%V z4`)*n`s!5T09|o%pfR~@%d7GR+v0hDpNXj?sDcYFvxDdi=!k`%75q<`rrBA{(baZa zP`5t{?c39lEkwRK4>?_3y6a>yvRP2ewjUFCujIkW&}~g=P6l)m(uCa5E~l(xAc-a1 zc#O}}(i;Ooi8<$=DMB9qvaeok9**5qtg=h9R&kNLi4i80BO?G@gM<6P3 z)5$Qk)gGJUpf_IZ)`#PdI@&f4TGa*BkW;(9rb(j4LS*Z}*<5iH`xCQ^Wirdl#}`$W z=g(XftxjvpJwfKk_c>&5>=XA3BRopPyMG*F5`_QnFJPge-k$F3>$9br*W1;L#c^8i z3=+8T(=3)3#f+jQFVeqSVr1<}VEA#D!08v3j+pd?RVa3x{%`@k(h=Rwi*$_=m3SN4ol#JuV(xPz5KUTRY>!4+=dTRn9Hl;=<4qBQ)rereyN-Psny8wa?@6M zS)LLy*=5+tL+8Gy(7H(QQ=hv@a`80IH9amvpeiyr* zcgIxGNpgx>fLsgHe|cq)W7Vji6CuH4v%w?mOC6A?rkSK{1*H`|KDKTra=j2~Xc&*r zxv3ZarJ8`of!JKXmCFHcC;sUud)9_$&aZLo628@EdTTcpg>Wng5&`U6zDIR~)A~W6 z{j;DKQ*u%NOYG{wPi-3A(u)s(7&;30Rx0NlDAj5i_VM9$b)5e@Bxh!3f(lKzhGTmj zIa{Wos2ezHOEt7u1pj0r2guysYN^x)e`yJxPKV?ve@T8DRx+q@cwjOdmLo>^cR_nd z5>}s2RiKDmLHhF;y3dEuTm^FBmZCDC@FU~dwwvI}@g0`6WgRQ`Mr<`Fy4_|Jj}3ab z-XRl2^lw^@Jbge3+vw+C54_+9vlNx({AEOJhlpqA=xC;{DF_)SC%ms0YQ1TQnn z+Gm}2U4Eqk5u@g+%w)wlvSf91EElx5F3=iM22Q^>5zA<)e>72>-8aG*`Xj?}COXz4 zPcd!$0JCkwq*y%AroQq!HMpXH_Jjy|?oX{lYpFziuU$eP+(Py8f&~DvKGAvk0`Sh@ zM!<^sdy4-&0?@v2)dkz@{tvvkZKV6B)#L|<-qOOqy=vNyWOSC2H2E|bmNH;zGWzlC z1b4sDN&~?m>#@>jHiVZqZEA+@~rb+4`#GC3iD#zbwZ$a#g%2XrR0>GjiN{Mn4*vxJSd|h;#MH}Kzn0zF054)VGB#j* z`xgf>(-->RWlVh~l2wA67f%=|}H>c|wd` zrl$P)t-zmVIjyk3hoxZ_tKnrdsKVA6Y-j>Y7Z~xj;Z|(p$>vjkQ376`pB6d-d|WsR z&sQ1>2HiwNfjC?T{D7To7pI#aAWt@+n&8qiFnT%gZx?A7Ducv5 zb}@jOm-8-K^eswGedzhu*mGcRm1QNyQRUtn!{hp;NTTTNiJn19s?Rd-t3^ZVOQ&nY z(4pjsyJY=KP7xDIbkU-i6c1Q*(ln=Sr(!EXH>>uHni)GIv8nPEG#I__DS`V9T>#D- zO)!ce6;au+$zb1C_^q3Cy4rR#)8=#fESzDj@_MdjVf_s#O|u3H{9uov_C&wYv8pDRJ;QgXskcp5q1H_#KK1cPGtM`Bt(0LYoi! zN!QD>=f0V@Ql!$x5C^6k*~78-Lx|}A85yBA$L&wwxY^!#J5R~Ia>;Zfa5d!i{fETF zU{%1A$B|(4-lPTu=);u2y$b>0P6j?d+oefVd7(P@2A-EbJtlApbZ9tKM2&6p*xrt$ zc~@+KuGE zZk+0d4!ybqNVFIgg}U5hV3s!MW}AeZydPkcwH|w_fYL?Q+u#6nOg!YmLrWEAlPwXtCOO?<9ezYMp$r>ux2|&%Ba`-X5?6rF23SSYL5L@r&Fw3?% z@g_t5VaV!ZyFAc0@kf_qSKzonwwTuNmMwi zO7}j1#$JvV78XKuneedoTV3Alz5(y^B8Fo{4q>wVFlPTupa=b2@|o6-z)9}4=&|2g ze!hs`c~UWxVFvt7)Wywtd>1|&J%|DR3hvNiv{no7deg7E6_bV;Kjf9G$!-^8Hk86# zt9~Y9@5xX$G&pvqHIzCv`%e(zCe*c1p>zfuOqYZJ9)+UWmdv`%N8Q_>?@Qtp7}f1V zY2g3g)oFBItlt^dEWiBfyd2$@pjf_v`I`7paZTr`#Bp@ul{ut<_1O zsQ}^-QHL(Q+?yy%nwF)6I_rT2K(V&f)zj;S2 zd$$pzm+61(_5YQts>6E}>Mxat{-0o)G!b~H)Q$J;dT0oduoT$Ot(*WUluXXwn>kI! z^P=Ly!T~?MRvWF{=qM5Ha;)KFf-Z%rgt4UWx*_U_?b9zQ0R-^G-`tv>b` i5O`eTJ9mUszW`0cRxVceR|mlDIFO>Os!X+%S=fK`$?NL? literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/ToggleIcons/OvalToggleOff_ByJellyCat.png b/examples/resource-bar/assets/ToggleIcons/OvalToggleOff_ByJellyCat.png new file mode 100644 index 0000000000000000000000000000000000000000..dfa02c069cb9669288d2737d5155994b7931ed94 GIT binary patch literal 16473 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 Kq^cxLgZ>Xt|6BL~ literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/ToggleIcons/SciUserInterfaceCircleToggleOff_ByBuch.png b/examples/resource-bar/assets/ToggleIcons/SciUserInterfaceCircleToggleOff_ByBuch.png new file mode 100644 index 0000000000000000000000000000000000000000..b5b09b1b237b2b0e51722a5a07f3312b2eb8db25 GIT binary patch literal 807 zcmV+?1K9kDP)EX>4Tx04R}tkv&MmP!xqvQ>7vmg?12e$WWauh>AE$D;B{*X)CnqVDi#GXws0R zxHt-~1qXi?s}3&Cx;nTDg5VE`tBaGOi4rtTK|H%@ z>74h8!>lYR#OK5l1|5+2k?XR{Z=6dG3p_JyWYcltFtJ$bV!4Z1*-(jRh$D)sQNECK zS>e3JS*_Mt`<(oS!GgAu;X18RB(Q`eQV=1djtZ)<5T(CHiitGs$2|Najz2{%nOqex zax9<*6_Voze}mt%HH*_zZc;D?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-KxD8xfcQknqxZDATpLEHP9LY~hC>DYDGkT^x5V{5W*W9_a_i_3FWNB8*H^9Lm zFkYhUb&q@Zby{D4^000SaNLh0L z0GY}F0GY}GA00}TyhwL=^L000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0002~Nkl1p=5JjJiihw|cZXg?j3k#xDW((s3 zq*Ia3S5V=`jZ2p*bPnSx7g$sXbq2*nut;=+6oJ&6#=FT%27y0pvBQ5e@Mj!43Vcuf z|9^e|I9-p^HCJU~85ZIQz-%(6JiR$q_se;$_Ro(h@IC9*ySb^0I8p$v1`pestZ0yF zXiZw>Eiw(siocp0_@1iDgoQXF(~yUkCkv8SaI>6}6%8Ve)QACfn*a<#w{#a|(yMoK zlh)U|#?L literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/ToggleIcons/SciUserInterfaceCircleToggleOn_ByBuch.png b/examples/resource-bar/assets/ToggleIcons/SciUserInterfaceCircleToggleOn_ByBuch.png new file mode 100644 index 0000000000000000000000000000000000000000..061e63a25e4d6c713319cddfcbcbeb975d2c2767 GIT binary patch literal 831 zcmV-F1Hk-=P)EX>4Tx04R}tkv&MmP!xqvQ>7vmg?12e$WWauh>AE$D;B{*X)CnqVDi#GXws0R zxHt-~1qXi?s}3&Cx;nTDg5VE`tBaGOi4rtTK|H%@ z>74h8!>lYR#OK5l1|5+2k?XR{Z=6dG3p_JyWYcltFtJ$bV!4Z1*-(jRh$D)sQNECK zS>e3JS*_Mt`<(oS!GgAu;X18RB(Q`eQV=1djtZ)<5T(CHiitGs$2|Najz2{%nOqex zax9<*6_Voze}mt%HH*_zZc;D?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-KxD8xfcQknqxZDATpLEHP9LY~hC>DYDGkT^x5V{5W*W9_a_i_3FWNB8*H^9Lm zFkYhUb&q@Zby{D4^000SaNLh0L z0GY}F0GY}GA00}UB@ZJ000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0003NNklAs=6vuxNw?Kw$9g`r0QlWN|4B`jq z=FmatHz*D+E*(2&kgk3K5vPtWk|AcQkd{&!8b`Md1;OpQ^o3kf`-g*j$N%^4?!9MF zk!_i(9DjWujH<_|nv-~-8M?s|0N-IZBEX>4Tx04R}tkv&MmP!xqvQ>7vmg?12e$WWauh>AE$D;B{*X)CnqVDi#GXws0R zxHt-~1qXi?s}3&Cx;nTDg5VE`tBaGOi4rtTK|H%@ z>74h8!>lYR#OK5l1|5+2k?XR{Z=6dG3p_JyWYcltFtJ$bV!4Z1*-(jRh$D)sQNECK zS>e3JS*_Mt`<(oS!GgAu;X18RB(Q`eQV=1djtZ)<5T(CHiitGs$2|Najz2{%nOqex zax9<*6_Voze}mt%HH*_zZc;D?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-KxD8xfcQknqxZDATpLEHP9LY~hC>DYDGkT^x5V{5W*W9_a_i_3FWNB8*H^9Lm zFkYhUb&q@Zby{D4^000SaNLh0L z0GY}F0GY}GA00}MC3qO0!!000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0001eNklXQ;gR{zKmvI4eG=JPDrHNg}S0!$2KfC17( zjDIi!f>5xdX!^189K*gs0hD0H2N+3BMg|fR42%p63=A$RCM0PD0P<%YZ7a&?mH+?% M07*qoM6N<$f@mNecmMzZ literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/ToggleIcons/SciUserInterfaceSquareToggleOn_ByBuch.png b/examples/resource-bar/assets/ToggleIcons/SciUserInterfaceSquareToggleOn_ByBuch.png new file mode 100644 index 0000000000000000000000000000000000000000..23262c2338c00c779a6e0d26905fba65eb4d2545 GIT binary patch literal 702 zcmV;v0zv(WP)EX>4Tx04R}tkv&MmP!xqvQ>7vmg?12e$WWauh>AE$D;B{*X)CnqVDi#GXws0R zxHt-~1qXi?s}3&Cx;nTDg5VE`tBaGOi4rtTK|H%@ z>74h8!>lYR#OK5l1|5+2k?XR{Z=6dG3p_JyWYcltFtJ$bV!4Z1*-(jRh$D)sQNECK zS>e3JS*_Mt`<(oS!GgAu;X18RB(Q`eQV=1djtZ)<5T(CHiitGs$2|Najz2{%nOqex zax9<*6_Voze}mt%HH*_zZc;D?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-KxD8xfcQknqxZDATpLEHP9LY~hC>DYDGkT^x5V{5W*W9_a_i_3FWNB8*H^9Lm zFkYhUb&q@Zby{D4^000SaNLh0L z0GY}F0GY}GA00}L!S$6^Bj000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0001$NklXQ;gR{zKmvI4F{Ge!#0~dC~{sZThkD9K*gs0hD0H2N+3BMg|fR k42%p63=A$RCM0PD05FO(8;?5l5dZ)H07*qoM6N<$g2gK&fdBvi literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/ToggleIcons/SimpleSquareToggleBlueOff_ByWesley.png b/examples/resource-bar/assets/ToggleIcons/SimpleSquareToggleBlueOff_ByWesley.png new file mode 100644 index 0000000000000000000000000000000000000000..2cd33ce4feaf01807caab09af0a3df7653d3d489 GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^l0YoQ!3HFqYQLWaQjEnx?oJHr&dIz4a%OwFIEHw1 zCQlIvOicg+ft^JU?U|<@l$K?7V*>)UEa@KJ4F_sI=;U%;<(=L%%U6E>0g0UB&#naA z|1n35jm_$3%9Tlh-fcTnb;7UJC4$VDu%Pjw!RB`Vg5D^jEY7zKd(uR97A)UEa@KJ4F_sI=;U%;<(=L%>ui&vp>})H;fu0o zR(yW+x*n*e&D@I3R4H6q+CM7J`@hHjKY&qM^^Ct|x zJ_TBEW>JF_!!*grgt*;@CODLOC!}rOAUpf;i333JV4lO*GVwDx6>|c#FKuLG=r^^k Uob9u6G0zopr0I;NNH2?qr literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/ToggleIcons/SimpleSquareToggleGreenOff_ByWesley.png b/examples/resource-bar/assets/ToggleIcons/SimpleSquareToggleGreenOff_ByWesley.png new file mode 100644 index 0000000000000000000000000000000000000000..93411f1dbafd58b5d8659fe00d45e26d79ce62e4 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^l0YoQ!3HFqYQLWaQjEnx?oJHr&dIz4a(X;n978-h zlcxv-rX~QvhkI*2&Tl-Gu=+i(8ygU)Wl8t&Za7d=Q1L2!l{BC6Y&*L~L%X*XG0vrz zH=9ODNW6G5IndipSMt%c4R`Fm%uZ`Nd`8ahplR006{=g9Kg_yVZM;Nmv06i_+cfd% z^?|o@EE;B>{gin;8EiUdZ0f4*yA#q5H+N67V`50ZpdRP3{-zSpT@0SCelF{r5}E+> C%uVkA literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/ToggleIcons/SimpleSquareToggleGreenOn_ByWesley.png b/examples/resource-bar/assets/ToggleIcons/SimpleSquareToggleGreenOn_ByWesley.png new file mode 100644 index 0000000000000000000000000000000000000000..380bc3feadc83a13cb119a525a52a299dd9f63d4 GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^l0YoQ!3HFqYQLWaQjEnx?oJHr&dIz4at?U9IEHw1 zCQlIvOiciS5BJu5oZomVVfA}nH#Q(p%aZQl-Eg3$pyE~dDrr9B*{rdL%x2F{I($)< zhku>FwcPc9!%S>!9nSV|D`J`xIdu=NP*uJn)KgRR`$B#fZ|K%!*N2OLv`C317`L}Z zu|3|L^TXxO3f1O2lfdJfXnr8C$3rGFpVBlwVy0CCdbSBU*44$rjF6*2U FngGTqVj2Jd literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/ToggleIcons/SimpleWhiteSquareToggleOff_ByWesley-export.png b/examples/resource-bar/assets/ToggleIcons/SimpleWhiteSquareToggleOff_ByWesley-export.png new file mode 100644 index 0000000000000000000000000000000000000000..5b10af0b1452964c36ec56ab5305628c9cc8e0e5 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^3P7yH!3HGlHr@UYq!^2X+?^QKos)S9&)2sH{Aku^0g7d1^)Xsp#+(?(tQ=|23{R2`reo@Fi4)|?PIq*)&R7L!PC{xWt~$( F69Bb|H8}tP literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/ToggleIcons/SimpleWhiteSquareToggleOn_ByWesley-export.png b/examples/resource-bar/assets/ToggleIcons/SimpleWhiteSquareToggleOn_ByWesley-export.png new file mode 100644 index 0000000000000000000000000000000000000000..7f4c4c9353efd48aa6974bf1754919dee735f082 GIT binary patch literal 186 zcmeAS@N?(olHy`uVBq!ia0vp^3P7yH!3HGlHr@UYq!^2X+?^QKos)S9@!Y_zr5}2 fJ4$aJt7BF-u@`)Dy#JLt(0&F_S3j3^P6jF3~3OR6r>sX^!f?_$YjMKk-nZtq<&ILVszXE8~~W)r{|yW=<(IOE_vwXx*)ft z|KOMVb{O>o$wd&YZs#~?(?UebCKZuQk(%WY)sV_nr31IeUhe`5ar zVQ*zvq=LL>_qtQ3#(#I?2<^Ln0p@@_{{^#$ZKb z-Xzd8W+I&ye5=4(drIR5za$~F_lI8V(mUKVrfqLdfio3tpYVFm4ZSw=XWN{%sV805 zNH;r#&p|^i6@po-B~%Bp22T$4vl#$cnL`<^wvXo^_=&>j7A2#>{%5Lf=-@l*?y`pG z1O1$}wG5l^l_ee{X=6Q3vto_ef|o(EM*Xr7UjszOs*~8^w6&AXrz3kRPV#dJG`j4S zv*mt`%YrCg0t48MnexJKKuHn8!u2qeik?h5ud9!QDimEF)Qwp6EZ+Mvf4eD@dg!84 zMdE<0T3@S*q(1zTHrj&c!uWo?BeY}?_DGA7l`np1K`tlcc>T@)fw z?k<4jtCzE@3#H6=NgkL~0MI)8HDo;fjaQ|lBGJ>^Rgo{FE^A}ellOF4N@){aLy5>l z0s)sm1du7Xb41*EeR3QzR^Q#z+c)IOJ`e!NEqc2A6nOE&@*k)Ko*R(8=HzbVm6zp} zF{Xm;c7O5xr4!6@DE0*^k#3$-o>%$0$kv$u))iu~V$@R5lrkoeQwp^(k@+(7DmKtV zhgnv(V_Q08-XSs)q#M{hjil#TUN7=*K4VUU8JA(PSP7Lx`a570Ub`5UJ_)Vrjn(xq zkPix~+S;PPiU;SVHsGbxOgMc>FvkuVg~#)>#Bu|a`VA_pwzes(j$RoBeF^t2bfk*Q z`}^J5G)eg4-#TJBQ+`JlnOj5PIgfOC`A>@Cn!{>pAuuhKx?t#(+J&0Q-#!{-Iu|U> zGffZofe$$QDxFiI(P;H8gdokn!d&4bryFd9uXC%&&&$grQmJP6<#!fUm5jy|E|0RD znwUYMJkHKm)Q*CK_reeE!_~cwu!xw&%5+$|;V|)5cRwyIof`cVXdv%h9iSbxyB5AR zqW0b%hQlljmHr4B{M?v$N}{@*WIJ}=>dnSRTXf^y&CZaZAUiv|k&E`b$5#u?P$_jXq7P@X7rq|EnpO`uNAkovzkNA#^6JZ)eU9SNF|=y zjLO8WNZcuCh1RE{xrj6YlTGHEmZnY|+Ok~~&^RF1`>e%TM!+~J$I=nel3wVrE9hK$ zv-<&DS#*!_78}`fTp=8P z^Sw@G(a#NHLov9bLuAEyWTGrD4CP|Dh}*ata785j*d?G-X@XJ@Hu^|mnJAOa9u=@V zM7(iJ4o%T96WD~-F5206S9C|L{)L;&7}}4luNc~o)$9{)&RgFL7iBP0gZ(sz(WmlK z6*qy7SdJvkN4zd*O`IH{498}~lrb3gYI;$xCMeB>$1Mb=y;9?Qy5BY$WlA{unM0h3 zKRnk$=%G4}KO+m8!t1eAtx7@6C(#5n^GO=G;dasdmyLE79>H(npPW)tapXK=EfzWb z?gp)?t6eC56T4oT$`z(39!JURzH4Cm7g$EaYRrvq8t<(3+Z6O3vsR?e7B}5#+SYCF WL>F9v=z2+i1K{b3c40Y3T>S@mht4Gc literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/ToggleIcons/SquareToggleOn_ByJellyCat.png b/examples/resource-bar/assets/ToggleIcons/SquareToggleOn_ByJellyCat.png new file mode 100644 index 0000000000000000000000000000000000000000..d4d1c3bf87d5160352a2b582110fd4c69527f036 GIT binary patch literal 2855 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Wishforge.txt b/examples/resource-bar/assets/Wishforge.txt new file mode 100644 index 000000000..6e7106b02 --- /dev/null +++ b/examples/resource-bar/assets/Wishforge.txt @@ -0,0 +1 @@ +https://wishforge.itch.io/3000-free-icons \ No newline at end of file diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 365d98143..3ecf8749b 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -841,6 +841,123 @@ "name": "assets\\Flat dark joystick border.png", "smoothed": true, "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Buch/Brown LCD Bar Fill.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Buch\\Brown LCD Bar Fill.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Buch/Bronze bar background.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Buch\\Bronze bar background.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Buch/Green LCD Bar Fill.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Buch\\Green LCD Bar Fill.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Buch/Gold bar background.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Buch\\Gold bar background.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Wesley/Dot Bar Blue Fill Bar.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Wesley\\Dot Bar Blue Fill Bar.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Wesley/Dot Bar Blue Border.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Wesley\\Dot Bar Blue Border.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Wesley/Dot Bar Green Fill Bar.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Wesley\\Dot Bar Green Fill Bar.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Wesley/Dot Bar Green Border.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Wesley\\Dot Bar Green Border.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Wesley/Flat Bar Red Fill Bar.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Wesley\\Flat Bar Red Fill Bar.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Wesley/Flat Bar White Border.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Wesley\\Flat Bar White Border.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Wesley/Flat Bar Yellow Fill Bar.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Wesley\\Flat Bar Yellow Fill Bar.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Wesley/Flat Bar Blue Fill Bar.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Wesley\\Flat Bar Blue Fill Bar.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Wesley/Flat Bar Green Fill Bar.png.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Wesley\\Flat Bar Green Fill Bar.png.png", + "smoothed": true, + "userAdded": true } ], "resourceFolders": [] @@ -869,7 +986,7 @@ "gridColor": 10401023, "gridAlpha": 0.8, "snap": false, - "zoomFactor": 1.1600001617431615, + "zoomFactor": 0.7202776314336254, "windowMask": false }, "objectsGroups": [], @@ -1716,7 +1833,7 @@ "gridColor": 10401023, "gridAlpha": 0.2, "snap": true, - "zoomFactor": 1.239999978637697, + "zoomFactor": 0.9156321947082823, "windowMask": false }, "objectsGroups": [ @@ -1730,6 +1847,50 @@ "name": "MinusKey" } ] + }, + { + "name": "ContinuousBar", + "objects": [ + { + "name": "BronzeBrownBar" + }, + { + "name": "ContinousBar" + }, + { + "name": "NoBufferContinousBar" + }, + { + "name": "NoLabelContinousBar" + }, + { + "name": "BronzeGreenBar" + }, + { + "name": "GoldBrownBar" + }, + { + "name": "GoldGreenBar" + }, + { + "name": "BlueDotBar" + }, + { + "name": "GreenDotBar" + }, + { + "name": "RedFlatBar" + }, + { + "name": "YellowFlatBar" + }, + { + "name": "GreenFlatBar" + }, + { + "name": "BlueFlatBar" + } + ] } ], "variables": [], @@ -1913,6 +2074,141 @@ "numberProperties": [], "stringProperties": [], "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 25, + "layer": "", + "name": "BronzeBrownBar", + "persistentUuid": "fdee4ae8-1e59-4022-97f7-edef3962666a", + "width": 144, + "x": 680, + "y": 391, + "zOrder": 51, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "BronzeGreenBar", + "persistentUuid": "0a10c628-7329-4865-af9e-59f9d45e6791", + "width": 0, + "x": 680, + "y": 432, + "zOrder": 52, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "GoldGreenBar", + "persistentUuid": "f8bab57d-0139-42b5-8051-14cfc7a82ec5", + "width": 0, + "x": 680, + "y": 471, + "zOrder": 54, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 26, + "layer": "", + "name": "BlueDotBar", + "persistentUuid": "00dcd7ac-7574-44ff-9400-f5f6e9e4f3c5", + "width": 192, + "x": 680, + "y": 512, + "zOrder": 55, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "GreenDotBar", + "persistentUuid": "d2d99c92-6438-4ce2-8d6a-77eddc5c01fd", + "width": 0, + "x": 680, + "y": 552, + "zOrder": 56, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "RedFlatBar", + "persistentUuid": "94173da0-5340-4338-a404-d00c90af48f7", + "width": 0, + "x": 856, + "y": 384, + "zOrder": 57, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "YellowFlatBar", + "persistentUuid": "9f9ee6f3-8c2c-4c43-b48b-750ceae5a6f2", + "width": 0, + "x": 856, + "y": 440, + "zOrder": 58, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "GreenFlatBar", + "persistentUuid": "934dc425-93f9-4aaf-8cd3-0fe36a08ca38", + "width": 0, + "x": 856, + "y": 496, + "zOrder": 59, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "BlueFlatBar", + "persistentUuid": "a47c9a12-1ac0-49e8-bb08-789ba792bb71", + "width": 0, + "x": 856, + "y": 552, + "zOrder": 60, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] } ], "objects": [ @@ -2055,171 +2351,836 @@ "texture": "assets\\Empty Heart.png", "width": 78 }, - "FillBar": { - "height": 26, - "texture": "assets\\Full Heart.png", - "width": 78 + "FillBar": { + "height": 26, + "texture": "assets\\Full Heart.png", + "width": 78 + } + } + }, + { + "assetStoreId": "", + "name": "NoBackgroundUnitsBar", + "tags": "", + "type": "TiledUnitsBar::TiledUnitsBar", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "UnitWidth": 16, + "HideBackground": true, + "ShowBackground": false + }, + "childrenContent": { + "Background": { + "bottomMargin": 0, + "height": 16, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\tiled_Tiled Empty UI Heart.png", + "tiled": true, + "topMargin": 0, + "width": 48 + }, + "Bar": { + "height": 16, + "texture": "assets\\tiled_Tiled Empty UI Heart.png", + "width": 48 + }, + "FillBar": { + "height": 16, + "texture": "assets\\tiled_Tiled Filler UI Heart.png", + "width": 16 + } + } + }, + { + "assetStoreId": "", + "name": "ContinousBar", + "tags": "", + "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "MaxValue": 16, + "InitialValue": 8, + "BarLeftPadding": 9, + "BarRightPadding": 9, + "BarBottomPadding": 3, + "BarTopPadding": 3 + }, + "childrenContent": { + "Background": { + "bottomMargin": 6, + "height": 15, + "leftMargin": 11, + "rightMargin": 11, + "texture": "assets\\Health Bar Box.png", + "tiled": true, + "topMargin": 6, + "width": 96 + }, + "Buffer": { + "bottomMargin": 0, + "height": 8, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\tiled_Energy Bar Fill.png", + "tiled": false, + "topMargin": 0, + "width": 32 + }, + "FillBar": { + "bottomMargin": 0, + "height": 8, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\tiled_Health Bar Fill.png", + "tiled": false, + "topMargin": 0, + "width": 32 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "8 / 16", + "font": "", + "textAlignment": "center", + "characterSize": 8, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + } + } + }, + { + "assetStoreId": "", + "name": "NoBufferContinousBar", + "tags": "", + "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "MaxValue": 16, + "InitialValue": 8, + "BarLeftPadding": 9, + "BarRightPadding": 9, + "BarBottomPadding": 3, + "BarTopPadding": 3, + "EasingDuration": 0.25, + "PreviousHighValueDuration": 0 + }, + "childrenContent": { + "Background": { + "bottomMargin": 6, + "height": 15, + "leftMargin": 11, + "rightMargin": 11, + "texture": "assets\\Health Bar Box.png", + "tiled": true, + "topMargin": 6, + "width": 96 + }, + "Buffer": { + "bottomMargin": 0, + "height": 8, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Health Bar2.png", + "tiled": false, + "topMargin": 0, + "width": 32 + }, + "FillBar": { + "bottomMargin": 3, + "height": 8, + "leftMargin": 4, + "rightMargin": 4, + "texture": "assets\\Health Bar2.png", + "tiled": false, + "topMargin": 3, + "width": 32 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "8 / 16", + "font": "", + "textAlignment": "center", + "characterSize": 8, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + } + } + }, + { + "assetStoreId": "", + "name": "NoLabelContinousBar", + "tags": "", + "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "MaxValue": 16, + "InitialValue": 8, + "BarLeftPadding": 9, + "BarRightPadding": 9, + "BarBottomPadding": 3, + "BarTopPadding": 3, + "ShowLabel": false + }, + "childrenContent": { + "Background": { + "bottomMargin": 6, + "height": 15, + "leftMargin": 11, + "rightMargin": 11, + "texture": "assets\\Health Bar Box.png", + "tiled": true, + "topMargin": 6, + "width": 96 + }, + "Buffer": { + "bottomMargin": 0, + "height": 8, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\tiled_Energy Bar Fill.png", + "tiled": false, + "topMargin": 0, + "width": 32 + }, + "FillBar": { + "bottomMargin": 0, + "height": 8, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\tiled_Health Bar Fill.png", + "tiled": false, + "topMargin": 0, + "width": 32 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "8 / 16", + "font": "", + "textAlignment": "", + "characterSize": 8, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + } + } + }, + { + "assetStoreId": "", + "name": "BronzeBrownBar", + "tags": "", + "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "ShowLabel": false, + "PreviousHighValueDuration": 0, + "BarTopPadding": 4, + "BarLeftPadding": 25, + "BarRightPadding": 25, + "BarBottomPadding": 5, + "InitialValue": 8, + "MaxValue": 16, + "EasingDuration": 0 + }, + "childrenContent": { + "Background": { + "bottomMargin": 4, + "height": 25, + "leftMargin": 24, + "rightMargin": 25, + "texture": "assets\\Resource bars\\Buch\\Bronze bar background.png", + "tiled": true, + "topMargin": 3, + "width": 113 + }, + "Buffer": { + "bottomMargin": 0, + "height": 16, + "leftMargin": 0, + "rightMargin": 0, + "texture": "", + "tiled": true, + "topMargin": 0, + "width": 16 + }, + "FillBar": { + "bottomMargin": 0, + "height": 16, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Resource bars\\Buch\\Brown LCD Bar Fill.png", + "tiled": true, + "topMargin": 0, + "width": 16 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "2 / 3", + "font": "", + "textAlignment": "", + "characterSize": 20, + "color": { + "b": 0, + "g": 0, + "r": 0 + } + } + } + }, + { + "assetStoreId": "", + "name": "BronzeGreenBar", + "tags": "", + "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "ShowLabel": false, + "PreviousHighValueDuration": 0, + "BarTopPadding": 4, + "BarLeftPadding": 25, + "BarRightPadding": 25, + "BarBottomPadding": 5, + "InitialValue": 8, + "MaxValue": 16, + "EasingDuration": 0 + }, + "childrenContent": { + "Background": { + "bottomMargin": 4, + "height": 25, + "leftMargin": 24, + "rightMargin": 25, + "texture": "assets\\Resource bars\\Buch\\Bronze bar background.png", + "tiled": true, + "topMargin": 3, + "width": 113 + }, + "Buffer": { + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "rightMargin": 0, + "texture": "", + "tiled": true, + "topMargin": 0, + "width": 32 + }, + "FillBar": { + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Resource bars\\Buch\\Green LCD Bar Fill.png", + "tiled": true, + "topMargin": 0, + "width": 32 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "2 / 3", + "font": "", + "textAlignment": "", + "characterSize": 20, + "color": { + "b": 0, + "g": 0, + "r": 0 + } + } + } + }, + { + "assetStoreId": "", + "name": "GoldBrownBar", + "tags": "", + "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "ShowLabel": false, + "PreviousHighValueDuration": 0, + "BarTopPadding": 4, + "BarLeftPadding": 25, + "BarRightPadding": 25, + "BarBottomPadding": 5, + "InitialValue": 8, + "MaxValue": 16, + "EasingDuration": 0 + }, + "childrenContent": { + "Background": { + "bottomMargin": 4, + "height": 25, + "leftMargin": 24, + "rightMargin": 25, + "texture": "assets\\Resource bars\\Buch\\Gold bar background.png", + "tiled": true, + "topMargin": 3, + "width": 113 + }, + "Buffer": { + "bottomMargin": 0, + "height": 16, + "leftMargin": 0, + "rightMargin": 0, + "texture": "", + "tiled": true, + "topMargin": 0, + "width": 16 + }, + "FillBar": { + "bottomMargin": 0, + "height": 16, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Resource bars\\Buch\\Brown LCD Bar Fill.png", + "tiled": true, + "topMargin": 0, + "width": 16 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "2 / 3", + "font": "", + "textAlignment": "", + "characterSize": 20, + "color": { + "b": 0, + "g": 0, + "r": 0 + } + } + } + }, + { + "assetStoreId": "", + "name": "GoldGreenBar", + "tags": "", + "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "ShowLabel": false, + "PreviousHighValueDuration": 0, + "BarTopPadding": 4, + "BarLeftPadding": 25, + "BarRightPadding": 25, + "BarBottomPadding": 5, + "InitialValue": 8, + "MaxValue": 16, + "EasingDuration": 0 + }, + "childrenContent": { + "Background": { + "bottomMargin": 4, + "height": 25, + "leftMargin": 24, + "rightMargin": 25, + "texture": "assets\\Resource bars\\Buch\\Gold bar background.png", + "tiled": true, + "topMargin": 3, + "width": 113 + }, + "Buffer": { + "bottomMargin": 0, + "height": 16, + "leftMargin": 0, + "rightMargin": 0, + "texture": "", + "tiled": true, + "topMargin": 0, + "width": 16 + }, + "FillBar": { + "bottomMargin": 0, + "height": 16, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Resource bars\\Buch\\Green LCD Bar Fill.png", + "tiled": true, + "topMargin": 0, + "width": 16 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "2 / 3", + "font": "", + "textAlignment": "", + "characterSize": 20, + "color": { + "b": 0, + "g": 0, + "r": 0 + } + } + } + }, + { + "assetStoreId": "", + "name": "BlueDotBar", + "tags": "", + "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "BarTopPadding": 3, + "BarLeftPadding": 4, + "BarRightPadding": 4, + "BarBottomPadding": 4, + "EasingDuration": 0, + "PreviousHighValueDuration": 0, + "ShowLabel": false, + "InitialValue": 8, + "MaxValue": 16 + }, + "childrenContent": { + "Background": { + "bottomMargin": 4, + "height": 26, + "leftMargin": 2, + "rightMargin": 2, + "texture": "assets\\Resource bars\\Wesley\\Dot Bar Blue Border.png", + "tiled": false, + "topMargin": 3, + "width": 118 + }, + "Buffer": { + "bottomMargin": 0, + "height": 19, + "leftMargin": 0, + "rightMargin": 0, + "texture": "", + "tiled": true, + "topMargin": 0, + "width": 21 + }, + "FillBar": { + "bottomMargin": 0, + "height": 19, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Resource bars\\Wesley\\Dot Bar Blue Fill Bar.png", + "tiled": true, + "topMargin": 0, + "width": 21 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "2 / 3", + "font": "", + "textAlignment": "", + "characterSize": 20, + "color": { + "b": 0, + "g": 0, + "r": 0 + } + } + } + }, + { + "assetStoreId": "", + "name": "GreenDotBar", + "tags": "", + "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "BarTopPadding": 3, + "BarLeftPadding": 4, + "BarRightPadding": 4, + "BarBottomPadding": 4, + "EasingDuration": 0, + "PreviousHighValueDuration": 0, + "ShowLabel": false, + "InitialValue": 8, + "MaxValue": 16 + }, + "childrenContent": { + "Background": { + "bottomMargin": 4, + "height": 26, + "leftMargin": 2, + "rightMargin": 2, + "texture": "assets\\Resource bars\\Wesley\\Dot Bar Green Border.png", + "tiled": false, + "topMargin": 3, + "width": 118 + }, + "Buffer": { + "bottomMargin": 0, + "height": 19, + "leftMargin": 0, + "rightMargin": 0, + "texture": "", + "tiled": true, + "topMargin": 0, + "width": 21 + }, + "FillBar": { + "bottomMargin": 0, + "height": 19, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Resource bars\\Wesley\\Dot Bar Green Fill Bar.png", + "tiled": true, + "topMargin": 0, + "width": 21 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "2 / 3", + "font": "", + "textAlignment": "", + "characterSize": 20, + "color": { + "b": 0, + "g": 0, + "r": 0 + } } } }, { "assetStoreId": "", - "name": "NoBackgroundUnitsBar", + "name": "RedFlatBar", "tags": "", - "type": "TiledUnitsBar::TiledUnitsBar", + "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "variables": [], "effects": [], "behaviors": [], "content": { - "UnitWidth": 16, - "HideBackground": true, - "ShowBackground": false + "PreviousHighValueDuration": 0, + "ShowLabel": true, + "BarTopPadding": 4, + "BarBottomPadding": 6, + "BarLeftPadding": 4, + "BarRightPadding": 4, + "MaxValue": 16, + "InitialValue": 8 }, "childrenContent": { "Background": { + "bottomMargin": 6, + "height": 34, + "leftMargin": 4, + "rightMargin": 4, + "texture": "assets\\Resource bars\\Wesley\\Flat Bar White Border.png", + "tiled": true, + "topMargin": 6, + "width": 224 + }, + "Buffer": { "bottomMargin": 0, - "height": 16, + "height": 24, "leftMargin": 0, "rightMargin": 0, - "texture": "assets\\tiled_Tiled Empty UI Heart.png", + "texture": "", "tiled": true, "topMargin": 0, - "width": 48 - }, - "Bar": { - "height": 16, - "texture": "assets\\tiled_Tiled Empty UI Heart.png", - "width": 48 + "width": 24 }, "FillBar": { - "height": 16, - "texture": "assets\\tiled_Tiled Filler UI Heart.png", - "width": 16 + "bottomMargin": 0, + "height": 24, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Resource bars\\Wesley\\Flat Bar Red Fill Bar.png", + "tiled": true, + "topMargin": 0, + "width": 24 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "8 / 16", + "font": "", + "textAlignment": "center", + "characterSize": 16, + "color": { + "b": 255, + "g": 255, + "r": 255 + } } } }, { "assetStoreId": "", - "name": "ContinousBar", + "name": "YellowFlatBar", "tags": "", "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "variables": [], "effects": [], "behaviors": [], "content": { - "MaxValue": 10, - "InitialValue": 7, - "BarLeftPadding": 9, - "BarRightPadding": 9, - "BarBottomPadding": 3, - "BarTopPadding": 3 + "PreviousHighValueDuration": 0, + "ShowLabel": true, + "BarTopPadding": 4, + "BarBottomPadding": 6, + "BarLeftPadding": 4, + "BarRightPadding": 4, + "MaxValue": 16, + "InitialValue": 8 }, "childrenContent": { "Background": { "bottomMargin": 6, - "height": 15, - "leftMargin": 11, - "rightMargin": 11, - "texture": "assets\\Health Bar Box.png", + "height": 34, + "leftMargin": 4, + "rightMargin": 4, + "texture": "assets\\Resource bars\\Wesley\\Flat Bar White Border.png", "tiled": true, "topMargin": 6, - "width": 96 + "width": 224 }, "Buffer": { "bottomMargin": 0, - "height": 8, + "height": 24, "leftMargin": 0, "rightMargin": 0, - "texture": "assets\\tiled_Energy Bar Fill.png", - "tiled": false, + "texture": "", + "tiled": true, "topMargin": 0, - "width": 32 + "width": 24 }, "FillBar": { "bottomMargin": 0, - "height": 8, + "height": 24, "leftMargin": 0, "rightMargin": 0, - "texture": "assets\\tiled_Health Bar Fill.png", - "tiled": false, + "texture": "assets\\Resource bars\\Wesley\\Flat Bar Yellow Fill Bar.png", + "tiled": true, "topMargin": 0, - "width": 32 + "width": 24 }, "Label": { "bold": false, "italic": false, "smoothed": true, "underlined": false, - "string": "2 / 3", + "string": "8 / 16", "font": "", "textAlignment": "center", - "characterSize": 8, + "characterSize": 16, "color": { - "b": 255, - "g": 255, - "r": 255 + "b": 0, + "g": 124, + "r": 185 } } } }, { "assetStoreId": "", - "name": "NoBufferContinousBar", + "name": "GreenFlatBar", "tags": "", "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "variables": [], "effects": [], "behaviors": [], "content": { - "MaxValue": 10, - "InitialValue": 7, - "BarLeftPadding": 9, - "BarRightPadding": 9, - "BarBottomPadding": 3, - "BarTopPadding": 3, - "EasingDuration": 0, - "PreviousHighValueDuration": 0 + "PreviousHighValueDuration": 0, + "ShowLabel": true, + "BarTopPadding": 4, + "BarBottomPadding": 6, + "BarLeftPadding": 4, + "BarRightPadding": 4, + "MaxValue": 16, + "InitialValue": 8 }, "childrenContent": { "Background": { "bottomMargin": 6, - "height": 15, - "leftMargin": 11, - "rightMargin": 11, - "texture": "assets\\Health Bar Box.png", + "height": 34, + "leftMargin": 4, + "rightMargin": 4, + "texture": "assets\\Resource bars\\Wesley\\Flat Bar White Border.png", "tiled": true, "topMargin": 6, - "width": 96 + "width": 224 }, "Buffer": { "bottomMargin": 0, - "height": 8, + "height": 24, "leftMargin": 0, "rightMargin": 0, - "texture": "assets\\Health Bar2.png", - "tiled": false, + "texture": "", + "tiled": true, "topMargin": 0, - "width": 32 + "width": 24 }, "FillBar": { - "bottomMargin": 3, - "height": 8, - "leftMargin": 4, - "rightMargin": 4, - "texture": "assets\\Health Bar2.png", - "tiled": false, - "topMargin": 3, - "width": 32 + "bottomMargin": 0, + "height": 24, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Resource bars\\Wesley\\Flat Bar Green Fill Bar.png.png", + "tiled": true, + "topMargin": 0, + "width": 24 }, "Label": { "bold": false, "italic": false, "smoothed": true, "underlined": false, - "string": "2 / 3", + "string": "8 / 16", "font": "", "textAlignment": "center", - "characterSize": 8, + "characterSize": 16, "color": { "b": 255, "g": 255, @@ -2230,61 +3191,62 @@ }, { "assetStoreId": "", - "name": "NoLabelContinousBar", + "name": "BlueFlatBar", "tags": "", "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "variables": [], "effects": [], "behaviors": [], "content": { - "MaxValue": 10, - "InitialValue": 7, - "BarLeftPadding": 9, - "BarRightPadding": 9, - "BarBottomPadding": 3, - "BarTopPadding": 3, - "ShowLabel": false + "PreviousHighValueDuration": 0, + "ShowLabel": true, + "BarTopPadding": 4, + "BarBottomPadding": 6, + "BarLeftPadding": 4, + "BarRightPadding": 4, + "MaxValue": 16, + "InitialValue": 8 }, "childrenContent": { "Background": { "bottomMargin": 6, - "height": 15, - "leftMargin": 11, - "rightMargin": 11, - "texture": "assets\\Health Bar Box.png", + "height": 34, + "leftMargin": 4, + "rightMargin": 4, + "texture": "assets\\Resource bars\\Wesley\\Flat Bar White Border.png", "tiled": true, "topMargin": 6, - "width": 96 + "width": 224 }, "Buffer": { "bottomMargin": 0, - "height": 8, + "height": 24, "leftMargin": 0, "rightMargin": 0, - "texture": "assets\\tiled_Energy Bar Fill.png", - "tiled": false, + "texture": "", + "tiled": true, "topMargin": 0, - "width": 32 + "width": 24 }, "FillBar": { "bottomMargin": 0, - "height": 8, + "height": 24, "leftMargin": 0, "rightMargin": 0, - "texture": "assets\\tiled_Health Bar Fill.png", - "tiled": false, + "texture": "assets\\Resource bars\\Wesley\\Flat Bar Blue Fill Bar.png", + "tiled": true, "topMargin": 0, - "width": 32 + "width": 24 }, "Label": { "bold": false, "italic": false, "smoothed": true, "underlined": false, - "string": "2 / 3", + "string": "8 / 16", "font": "", - "textAlignment": "", - "characterSize": 8, + "textAlignment": "center", + "characterSize": 16, "color": { "b": 255, "g": 255, @@ -2508,31 +3470,9 @@ "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" }, "parameters": [ - "ContinousBar", - "+", - "0.5", - "" - ] - }, - { - "type": { - "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" - }, - "parameters": [ - "NoLabelContinousBar", - "+", - "0.5", - "" - ] - }, - { - "type": { - "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" - }, - "parameters": [ - "NoBufferContinousBar", + "ContinuousBar", "+", - "0.5", + "1", "" ] } @@ -2581,31 +3521,9 @@ "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" }, "parameters": [ - "ContinousBar", - "-", - "0.5", - "" - ] - }, - { - "type": { - "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" - }, - "parameters": [ - "NoLabelContinousBar", - "-", - "0.5", - "" - ] - }, - { - "type": { - "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" - }, - "parameters": [ - "NoBufferContinousBar", + "ContinuousBar", "-", - "0.5", + "1", "" ] } @@ -17631,7 +18549,7 @@ "parameters": [ "Label", "=", - "round(FillBar.CenterY())" + "FillBar.CenterY()" ] }, { @@ -17641,7 +18559,7 @@ "parameters": [ "Label", "=", - "round(Background.CenterX() + (Object.PropertyBarLeftPadding() - Object.PropertyBarRightPadding()) / 2)" + "Background.CenterX() + (Object.PropertyBarLeftPadding() - Object.PropertyBarRightPadding()) / 2" ] } ] @@ -17715,7 +18633,24 @@ "GetArgumentAsNumber(\"Value\")", "" ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::PropertyEasingDuration" + }, + "parameters": [ + "Object", + ">", + "0" + ] + } + ], + "actions": [ { "type": { "value": "Tween::AddObjectWidthTween" @@ -17729,7 +18664,40 @@ "Object.PropertyEasingDuration() * 1000", "" ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::PropertyEasingDuration" + }, + "parameters": [ + "Object", + "<=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteObject::Width" + }, + "parameters": [ + "FillBar", + "=", + "Object.WidthForValue()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { "type": { "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::UpdateLabel" @@ -18552,7 +19520,7 @@ "behaviors": [], "string": "2 / 3", "font": "", - "textAlignment": "", + "textAlignment": "center", "characterSize": 20, "color": { "b": 0, From 00b8915aa758fbf84187b8dcfdcbd2caf63ced9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Tue, 17 Jan 2023 19:27:05 +0100 Subject: [PATCH 72/98] WIP: add some sliders --- .../Resource bars/Buch/Dark LCD Bar Fill.png | Bin 0 -> 133 bytes ...SciUserInterfaceGoldBarFillDark_ByBuch.png | Bin 646 -> 0 bytes .../Plastic Green Round Slider Border.png} | Bin .../Plastic Green Round Slider Thumb.png} | Bin .../Plastic Green Square Slider Border.png} | Bin .../Plastic Green Square Slider Thumb.png} | Bin .../assets/Sliders/JellyCat/Transparent.png | Bin 0 -> 75 bytes .../SimpleSquareSliderBlueBorder_ByWesley.png | Bin 275 -> 0 bytes .../SimpleSquareSliderBlueFill_ByWesley.png | Bin 228 -> 0 bytes .../SimpleSquareSliderBlueThumb_ByWesley.png | Bin 198 -> 0 bytes ...SimpleSquareSliderGreenBorder_ByWesley.png | Bin 266 -> 0 bytes .../SimpleSquareSliderGreenFill_ByWesley.png | Bin 224 -> 0 bytes .../SimpleSquareSliderGreenThumb_ByWesley.png | Bin 202 -> 0 bytes ...hiteSquareSliderBorder_ByWesley-export.png | Bin 249 -> 0 bytes ...eWhiteSquareSliderFill_ByWesley-export.png | Bin 193 -> 0 bytes ...WhiteSquareSliderThumb_ByWesley-export.png | Bin 132 -> 0 bytes .../Wesley/Square Slider Blue Border.png | Bin 0 -> 242 bytes .../Wesley/Square Slider Blue Fill Bar.png | Bin 0 -> 174 bytes .../Wesley/Square Slider Blue Thumb.png | Bin 0 -> 178 bytes .../Wesley/Square Slider Green Border.png | Bin 0 -> 233 bytes .../Wesley/Square Slider Green Fill Bar.png | Bin 0 -> 177 bytes .../Wesley/Square Slider Green Thumb.png | Bin 0 -> 183 bytes .../Wesley/Square Slider White Border.png | Bin 0 -> 210 bytes .../Wesley/Square Slider White Fill Bar.png | Bin 0 -> 132 bytes .../Wesley/Square Slider White Thumb.png | Bin 0 -> 107 bytes ...SciUserInterfaceCircleToggleOff_ByBuch.png | Bin .../SciUserInterfaceCircleToggleOn_ByBuch.png | Bin ...SciUserInterfaceSquareToggleOff_ByBuch.png | Bin .../SciUserInterfaceSquareToggleOn_ByBuch.png | Bin .../CircleToggleOff_ByJellyCat.png | Bin .../CircleToggleOn_ByJellyCat.png | Bin .../OvalToggleOff_ByJellyCat.png | Bin .../OvalToggleOn_ByJellyCat.png | Bin .../SquareToggleOff_ByJellyCat.png | Bin .../SquareToggleOn_ByJellyCat.png | Bin .../SimpleSquareToggleBlueOff_ByWesley.png | Bin .../SimpleSquareToggleBlueOn_ByWesley.png | Bin .../SimpleSquareToggleGreenOff_ByWesley.png | Bin .../SimpleSquareToggleGreenOn_ByWesley.png | Bin ...leWhiteSquareToggleOff_ByWesley-export.png | Bin ...pleWhiteSquareToggleOn_ByWesley-export.png | Bin examples/resource-bar/game.json | 822 +++++++++++++++++- 42 files changed, 776 insertions(+), 46 deletions(-) create mode 100644 examples/resource-bar/assets/Resource bars/Buch/Dark LCD Bar Fill.png delete mode 100644 examples/resource-bar/assets/Resource bars/Kenney/SciUserInterfaceGoldBarFillDark_ByBuch.png rename examples/resource-bar/assets/Sliders/{OvalSlider_ByJellyCat.png => JellyCat/Plastic Green Round Slider Border.png} (100%) rename examples/resource-bar/assets/Sliders/{OvalSliderThumb_ByJellyCat.png => JellyCat/Plastic Green Round Slider Thumb.png} (100%) rename examples/resource-bar/assets/Sliders/{SquareSlider_ByJellyCat.png => JellyCat/Plastic Green Square Slider Border.png} (100%) rename examples/resource-bar/assets/Sliders/{SquareSliderThumb_ByJellyCat.png => JellyCat/Plastic Green Square Slider Thumb.png} (100%) create mode 100644 examples/resource-bar/assets/Sliders/JellyCat/Transparent.png delete mode 100644 examples/resource-bar/assets/Sliders/SimpleSquareSliderBlueBorder_ByWesley.png delete mode 100644 examples/resource-bar/assets/Sliders/SimpleSquareSliderBlueFill_ByWesley.png delete mode 100644 examples/resource-bar/assets/Sliders/SimpleSquareSliderBlueThumb_ByWesley.png delete mode 100644 examples/resource-bar/assets/Sliders/SimpleSquareSliderGreenBorder_ByWesley.png delete mode 100644 examples/resource-bar/assets/Sliders/SimpleSquareSliderGreenFill_ByWesley.png delete mode 100644 examples/resource-bar/assets/Sliders/SimpleSquareSliderGreenThumb_ByWesley.png delete mode 100644 examples/resource-bar/assets/Sliders/SimpleWhiteSquareSliderBorder_ByWesley-export.png delete mode 100644 examples/resource-bar/assets/Sliders/SimpleWhiteSquareSliderFill_ByWesley-export.png delete mode 100644 examples/resource-bar/assets/Sliders/SimpleWhiteSquareSliderThumb_ByWesley-export.png create mode 100644 examples/resource-bar/assets/Sliders/Wesley/Square Slider Blue Border.png create mode 100644 examples/resource-bar/assets/Sliders/Wesley/Square Slider Blue Fill Bar.png create mode 100644 examples/resource-bar/assets/Sliders/Wesley/Square Slider Blue Thumb.png create mode 100644 examples/resource-bar/assets/Sliders/Wesley/Square Slider Green Border.png create mode 100644 examples/resource-bar/assets/Sliders/Wesley/Square Slider Green Fill Bar.png create mode 100644 examples/resource-bar/assets/Sliders/Wesley/Square Slider Green Thumb.png create mode 100644 examples/resource-bar/assets/Sliders/Wesley/Square Slider White Border.png create mode 100644 examples/resource-bar/assets/Sliders/Wesley/Square Slider White Fill Bar.png create mode 100644 examples/resource-bar/assets/Sliders/Wesley/Square Slider White Thumb.png rename examples/resource-bar/assets/ToggleIcons/{ => Buch}/SciUserInterfaceCircleToggleOff_ByBuch.png (100%) rename examples/resource-bar/assets/ToggleIcons/{ => Buch}/SciUserInterfaceCircleToggleOn_ByBuch.png (100%) rename examples/resource-bar/assets/ToggleIcons/{ => Buch}/SciUserInterfaceSquareToggleOff_ByBuch.png (100%) rename examples/resource-bar/assets/ToggleIcons/{ => Buch}/SciUserInterfaceSquareToggleOn_ByBuch.png (100%) rename examples/resource-bar/assets/ToggleIcons/{ => JellyCat}/CircleToggleOff_ByJellyCat.png (100%) rename examples/resource-bar/assets/ToggleIcons/{ => JellyCat}/CircleToggleOn_ByJellyCat.png (100%) rename examples/resource-bar/assets/ToggleIcons/{ => JellyCat}/OvalToggleOff_ByJellyCat.png (100%) rename examples/resource-bar/assets/ToggleIcons/{ => JellyCat}/OvalToggleOn_ByJellyCat.png (100%) rename examples/resource-bar/assets/ToggleIcons/{ => JellyCat}/SquareToggleOff_ByJellyCat.png (100%) rename examples/resource-bar/assets/ToggleIcons/{ => JellyCat}/SquareToggleOn_ByJellyCat.png (100%) rename examples/resource-bar/assets/ToggleIcons/{ => Wesley}/SimpleSquareToggleBlueOff_ByWesley.png (100%) rename examples/resource-bar/assets/ToggleIcons/{ => Wesley}/SimpleSquareToggleBlueOn_ByWesley.png (100%) rename examples/resource-bar/assets/ToggleIcons/{ => Wesley}/SimpleSquareToggleGreenOff_ByWesley.png (100%) rename examples/resource-bar/assets/ToggleIcons/{ => Wesley}/SimpleSquareToggleGreenOn_ByWesley.png (100%) rename examples/resource-bar/assets/ToggleIcons/{ => Wesley}/SimpleWhiteSquareToggleOff_ByWesley-export.png (100%) rename examples/resource-bar/assets/ToggleIcons/{ => Wesley}/SimpleWhiteSquareToggleOn_ByWesley-export.png (100%) diff --git a/examples/resource-bar/assets/Resource bars/Buch/Dark LCD Bar Fill.png b/examples/resource-bar/assets/Resource bars/Buch/Dark LCD Bar Fill.png new file mode 100644 index 0000000000000000000000000000000000000000..2fd1c9d88bbf0aad5e9c063815879a274c85c64c GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^4nQox!3HFkJ+IURQa+w8jv*0;-(J`#$RNPrd~r_j zO$XOZj^F1Kn58o^HO@?!|89BBs-^FveqEaz-9BY@P~Q5d*BqZQ1GOT6jret$`wy?N X*KA4={IkxX3?$>}>gTe~DWM4fS_>=W literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Resource bars/Kenney/SciUserInterfaceGoldBarFillDark_ByBuch.png b/examples/resource-bar/assets/Resource bars/Kenney/SciUserInterfaceGoldBarFillDark_ByBuch.png deleted file mode 100644 index 8d3771ecc213aeb0ca5f9442e270b53596948498..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmV;10(t$3P)X1^@s62HC;q0004nX+uL$Nkc;* zaB^>EX>4Tx04R}tkv&MmP!xqvQ>7vmg?12e$WWauh>AE$D;B{*X)CnqVDi#GXws0R zxHt-~1qXi?s}3&Cx;nTDg5VE`tBaGOi4rtTK|H%@ z>74h8!>lYR#OK5l1|5+2k?XR{Z=6dG3p_JyWYcltFtJ$bV!4Z1*-(jRh$D)sQNECK zS>e3JS*_Mt`<(oS!GgAu;X18RB(Q`eQV=1djtZ)<5T(CHiitGs$2|Najz2{%nOqex zax9<*6_Voze}mt%HH*_zZc;D?^uE~k#~2XU1zHW;{yw(t)(PN$2ClS@zt#liK1pwM zw8#-KxD8xfcQknqxZDATpLEHP9LY~hC>DYDGkT^x5V{5W*W9_a_i_3FWNB8*H^9Lm zFkYhUb&q@Zby{D4^000SaNLh0L z0GY}F0GY}GA00}311AYh6B000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}00018Nkl*y5d)R%g8%>k07*qoM6N<$f*E2D#{d8T diff --git a/examples/resource-bar/assets/Sliders/OvalSlider_ByJellyCat.png b/examples/resource-bar/assets/Sliders/JellyCat/Plastic Green Round Slider Border.png similarity index 100% rename from examples/resource-bar/assets/Sliders/OvalSlider_ByJellyCat.png rename to examples/resource-bar/assets/Sliders/JellyCat/Plastic Green Round Slider Border.png diff --git a/examples/resource-bar/assets/Sliders/OvalSliderThumb_ByJellyCat.png b/examples/resource-bar/assets/Sliders/JellyCat/Plastic Green Round Slider Thumb.png similarity index 100% rename from examples/resource-bar/assets/Sliders/OvalSliderThumb_ByJellyCat.png rename to examples/resource-bar/assets/Sliders/JellyCat/Plastic Green Round Slider Thumb.png diff --git a/examples/resource-bar/assets/Sliders/SquareSlider_ByJellyCat.png b/examples/resource-bar/assets/Sliders/JellyCat/Plastic Green Square Slider Border.png similarity index 100% rename from examples/resource-bar/assets/Sliders/SquareSlider_ByJellyCat.png rename to examples/resource-bar/assets/Sliders/JellyCat/Plastic Green Square Slider Border.png diff --git a/examples/resource-bar/assets/Sliders/SquareSliderThumb_ByJellyCat.png b/examples/resource-bar/assets/Sliders/JellyCat/Plastic Green Square Slider Thumb.png similarity index 100% rename from examples/resource-bar/assets/Sliders/SquareSliderThumb_ByJellyCat.png rename to examples/resource-bar/assets/Sliders/JellyCat/Plastic Green Square Slider Thumb.png diff --git a/examples/resource-bar/assets/Sliders/JellyCat/Transparent.png b/examples/resource-bar/assets/Sliders/JellyCat/Transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..4d7beb8065852f68443a92759630f668a48b8c6f GIT binary patch literal 75 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`LY^*;Ar_~T6C_v{Cy4YgaWF8j X2rw|V+OH}C$})Jm`njxgN@xNA_#zJ} literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Sliders/SimpleSquareSliderBlueBorder_ByWesley.png b/examples/resource-bar/assets/Sliders/SimpleSquareSliderBlueBorder_ByWesley.png deleted file mode 100644 index 6f16bda40977613a5229120c5bd424f2edaa7d37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 275 zcmeAS@N?(olHy`uVBq!ia0vp^*MV4+gAGVtjjaYrFct^7J29*~C-V}>IqT`-7*a9k z?d^rUhXO=e9|nKA#OUGLd|dHHlj*8}o`yFZC%D8C7{pert1uQ|5#nFAUiiy1HS_<= zCmjE?(>GWJXoN%P?Ki5PzVqtNMK=i8wI{23O21ch2w54k=K9ZPds#UW&CQQKW$Ib- zX|Y`U>gNIqect+oI~k0Ruu3TE9pETrbPKAhQT1H=SwNxdlE`#!1E-hndj-^7*a9k z?X87^hYUm-9e|KAPq+TI`@U%2PuHSO zpk4-sj*c0;{I_nuj!hC=5xYN9%~rK}L&B{02cD^lH`c4^ok%gXd2#-{P_@I?TX(f) zUS{uo_wF2P@SE%JVkXSqp&(r7sOA}S_G?HM|B8DX=3nIRO{@O0g3-PrhHvpapy?+b YGfO=XdA&h2a2LojPgg&ebxsLQ0OnR#(f|Me diff --git a/examples/resource-bar/assets/Sliders/SimpleSquareSliderBlueThumb_ByWesley.png b/examples/resource-bar/assets/Sliders/SimpleSquareSliderBlueThumb_ByWesley.png deleted file mode 100644 index db52f18758f5aed2af64c6c8706907c8ea711de6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw{1|(OCFP#RY7>k44ofy`glX(f`G#-f1 zzHuLId&%+{sL~zopr0O?FeYybcN diff --git a/examples/resource-bar/assets/Sliders/SimpleSquareSliderGreenBorder_ByWesley.png b/examples/resource-bar/assets/Sliders/SimpleSquareSliderGreenBorder_ByWesley.png deleted file mode 100644 index 65c65d8e0df4b0bcd4d0f5ddacd831ff427c78c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^*MV4+gAGVtjjaYrFct^7J29*~C-V}>IpXQ!7*a9k z?QKJ@LjeLU4?FiLM=TLn>{aKScSJj)iq&7J;Vy83P)2_jUM$2tDnm{ Hr-UW|w-aPN diff --git a/examples/resource-bar/assets/Sliders/SimpleSquareSliderGreenFill_ByWesley.png b/examples/resource-bar/assets/Sliders/SimpleSquareSliderGreenFill_ByWesley.png deleted file mode 100644 index 4f092fc7df1fcb4285489fcd1a6030ad562a0035..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 224 zcmeAS@N?(olHy`uVBq!ia0vp^*MV4+gAGVtjjaYrFct^7J29*~C-V}>ndRx?7*a9k z?X88pOok#257{l<8f6XCKjbtd>&ZyZaZiw7VCObq=Gd_1d7p{z$?rSEY(Fpey~P34 z%Fxi!5xH;U{+#=!Y>n4suQ^`|-XtLQ=b80}%Cn9S=67;)z5LYs`)6n}U&g&n@hY#M zJP{J}ng0E86h~_ZHk44ofy`glX(f`w0OEWhFJ6_ zr!+J@dA#qxqy|f|uDP+10T2Y8c1UTSxgu4&&yU)z< zT2077h*KfgUcc}6XZvRiVUPap*gH2@$l=#5m1UW`{?u?K_^w;eKAUBN3zLTuqsl~v zNgfQIDh(=NZJopjXMPjc2*`n{e|GrY6JMr?l*tU2gePp~?enio2>?2u!PC{xWt~$( F69BtQO+o+w diff --git a/examples/resource-bar/assets/Sliders/SimpleWhiteSquareSliderFill_ByWesley-export.png b/examples/resource-bar/assets/Sliders/SimpleWhiteSquareSliderFill_ByWesley-export.png deleted file mode 100644 index a62038146cdf089c2e3a6f58b081e85d7614bb32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193 zcmeAS@N?(olHy`uVBq!ia0y~yVB`d{l{nadq)&;CDv)9<4sv&5Sa(k5C6H6?>Eakt zG3V{Ijl2yGJS+#z7qK!)E%?vp%UqDc?_s=ha(9>4xZ00hu;WtEgwmEs{fR8dJfLZC-zSU?uY09~NCz%x`X32Jac{4E9ho4rSD8J={y zFUxK+c^xm;0E-RXQ&5S! zd{;EOZbTV~IP;1$+-JM?U|YW~6Azckl>-U_bAk_f=Y2}o@@#wkS@c2j>AYZ7g&*fm zu_!40SXnwr=kj5p3yBsv!It;;bRMu|S7H)8c;D^Hvx{68R-R4P^1Su$Nin0<9sT1~ Z%$iZc1;2d%ZUH)g!PC{xWt~$(698QfLoEOR literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Sliders/Wesley/Square Slider Blue Thumb.png b/examples/resource-bar/assets/Sliders/Wesley/Square Slider Blue Thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..347baa11f70f180df26bed3838fbed309a3996e6 GIT binary patch literal 178 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw{1|(OCFP#RYDm`5sLo7}wCoEu0XfZ5_tNH7{ zGBI3bhvdVypu-L+%`-C|)~ay|Ud_sq(okF!=bL?JS5|&}R;I07Wa+VTq5i!)d8r8r b2@DJg`xNT)Hc#XRI)cH|)z4*}Q$iB}GcZ9O literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Sliders/Wesley/Square Slider Green Border.png b/examples/resource-bar/assets/Sliders/Wesley/Square Slider Green Border.png new file mode 100644 index 0000000000000000000000000000000000000000..652f63c5b2c519b87b2696270a871b008644be20 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^*MV4wgAGWYi16M7q&9fEIEG~0dwW}#?~sE8%Y}ST zS@DNl92Zntf)y+o*g79Fc=!bd$Fi_HC>dr5@o)%iP|4W#&h~1EpV3U;`kTmPD77@HC%vz%S^ysbp{7Vf?ZrybedM^T|>aROnsmiC3U>Fgt_hLd(BM>qQ2F|_J zF0x?39nI6MeXR>(8j2jt_r+)Uy#5}Y`oR8Yqg$!vy`_w-PyLqGB=4E|V?H-m#&q9b fmSRx`8n0Pj&QK2C=j>ezbUTBmtDnm{r-UW|@0C@n literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Sliders/Wesley/Square Slider Green Fill Bar.png b/examples/resource-bar/assets/Sliders/Wesley/Square Slider Green Fill Bar.png new file mode 100644 index 0000000000000000000000000000000000000000..511decb6a434afb67590594b497cb094cd68dee5 GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^7lD|YgAGVNoS(4_NL6^cIEG~0dwX*s@1X#Z)`!K? z60Bth6h7oMB z5;X?FgZ^tLrMwaMc4$6ZH`mYMLf#wk=Q0(-jU5lpE6-}X$#o$^>RHI79DjECbr&8~ c?!7MkY@3AI4H2nrKsPXWy85}Sb4q9e0M2ki@Bjb+ literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Sliders/Wesley/Square Slider Green Thumb.png b/examples/resource-bar/assets/Sliders/Wesley/Square Slider Green Thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..5c079da09bcdfafdc5035e2e74c3ed4e8bf06444 GIT binary patch literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^q9Dw{1|(OCFP#RY>O5T>Lo7}wCoEu0Xfd4B|NGza zD;suBn=SdUE$FaAO7qN&hqY>)f>*P$q%;&4Mfplk@5^zHOz64YUKgA*W0kD-p`}+0 z1a8i`cthTFidfse9e=vD+76ycto-<_O#3h&8xY(S^Wy!x<#FNJZu9NYk`qrmcE$bz dN-_fh!#*W7wG|8gX#!os;OXk;vd$@?2>|?EaktaqI2fjhqbzBCZ!* zWE>sYFKFt{y~L^`^XN8rlf)6F=TkK63oCETP*xH;(0h!NVIqSI(+{`mT8ZB`Ll-3d z-WVz5aBz}`rtUeW&}d!G2ZkVd0Zs=MutF#Uoexq0me-j2ms?~5MC}hpxm_pCIS))? cxM#^YVKZ;vj&;V%fR1GFboFyt=akR{0F=)?-T(jq literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Sliders/Wesley/Square Slider White Fill Bar.png b/examples/resource-bar/assets/Sliders/Wesley/Square Slider White Fill Bar.png new file mode 100644 index 0000000000000000000000000000000000000000..c5ed083397c5f4e842681d5c5be6d1a06a365a26 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^e}PzlgAGXDeP6i%NO^m@IEG~0dwbiFmqCGt#j%S` zPU67+Bd>+|4U`w2d=|G>Me>08GU0|7j2D>~vAghh$O+ggR5^Ts3&d=_{xOw(np{OF Z^JQz+>;w8?EI?x!JYD@<);T3K0RY&=DSiL| literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Sliders/Wesley/Square Slider White Thumb.png b/examples/resource-bar/assets/Sliders/Wesley/Square Slider White Thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..5307d8c6804de1de23182244f3b2d96a6deb0249 GIT binary patch literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fMxHK?Ar_~TCkO=6fLgRBoL4lZWvm$Csdo-m5B0fA@W)`gFg7$(RDp8PmxQ#?>NgQu&X%Q~loCIIP9 BAyohX literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/ToggleIcons/SciUserInterfaceCircleToggleOff_ByBuch.png b/examples/resource-bar/assets/ToggleIcons/Buch/SciUserInterfaceCircleToggleOff_ByBuch.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/SciUserInterfaceCircleToggleOff_ByBuch.png rename to examples/resource-bar/assets/ToggleIcons/Buch/SciUserInterfaceCircleToggleOff_ByBuch.png diff --git a/examples/resource-bar/assets/ToggleIcons/SciUserInterfaceCircleToggleOn_ByBuch.png b/examples/resource-bar/assets/ToggleIcons/Buch/SciUserInterfaceCircleToggleOn_ByBuch.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/SciUserInterfaceCircleToggleOn_ByBuch.png rename to examples/resource-bar/assets/ToggleIcons/Buch/SciUserInterfaceCircleToggleOn_ByBuch.png diff --git a/examples/resource-bar/assets/ToggleIcons/SciUserInterfaceSquareToggleOff_ByBuch.png b/examples/resource-bar/assets/ToggleIcons/Buch/SciUserInterfaceSquareToggleOff_ByBuch.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/SciUserInterfaceSquareToggleOff_ByBuch.png rename to examples/resource-bar/assets/ToggleIcons/Buch/SciUserInterfaceSquareToggleOff_ByBuch.png diff --git a/examples/resource-bar/assets/ToggleIcons/SciUserInterfaceSquareToggleOn_ByBuch.png b/examples/resource-bar/assets/ToggleIcons/Buch/SciUserInterfaceSquareToggleOn_ByBuch.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/SciUserInterfaceSquareToggleOn_ByBuch.png rename to examples/resource-bar/assets/ToggleIcons/Buch/SciUserInterfaceSquareToggleOn_ByBuch.png diff --git a/examples/resource-bar/assets/ToggleIcons/CircleToggleOff_ByJellyCat.png b/examples/resource-bar/assets/ToggleIcons/JellyCat/CircleToggleOff_ByJellyCat.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/CircleToggleOff_ByJellyCat.png rename to examples/resource-bar/assets/ToggleIcons/JellyCat/CircleToggleOff_ByJellyCat.png diff --git a/examples/resource-bar/assets/ToggleIcons/CircleToggleOn_ByJellyCat.png b/examples/resource-bar/assets/ToggleIcons/JellyCat/CircleToggleOn_ByJellyCat.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/CircleToggleOn_ByJellyCat.png rename to examples/resource-bar/assets/ToggleIcons/JellyCat/CircleToggleOn_ByJellyCat.png diff --git a/examples/resource-bar/assets/ToggleIcons/OvalToggleOff_ByJellyCat.png b/examples/resource-bar/assets/ToggleIcons/JellyCat/OvalToggleOff_ByJellyCat.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/OvalToggleOff_ByJellyCat.png rename to examples/resource-bar/assets/ToggleIcons/JellyCat/OvalToggleOff_ByJellyCat.png diff --git a/examples/resource-bar/assets/ToggleIcons/OvalToggleOn_ByJellyCat.png b/examples/resource-bar/assets/ToggleIcons/JellyCat/OvalToggleOn_ByJellyCat.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/OvalToggleOn_ByJellyCat.png rename to examples/resource-bar/assets/ToggleIcons/JellyCat/OvalToggleOn_ByJellyCat.png diff --git a/examples/resource-bar/assets/ToggleIcons/SquareToggleOff_ByJellyCat.png b/examples/resource-bar/assets/ToggleIcons/JellyCat/SquareToggleOff_ByJellyCat.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/SquareToggleOff_ByJellyCat.png rename to examples/resource-bar/assets/ToggleIcons/JellyCat/SquareToggleOff_ByJellyCat.png diff --git a/examples/resource-bar/assets/ToggleIcons/SquareToggleOn_ByJellyCat.png b/examples/resource-bar/assets/ToggleIcons/JellyCat/SquareToggleOn_ByJellyCat.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/SquareToggleOn_ByJellyCat.png rename to examples/resource-bar/assets/ToggleIcons/JellyCat/SquareToggleOn_ByJellyCat.png diff --git a/examples/resource-bar/assets/ToggleIcons/SimpleSquareToggleBlueOff_ByWesley.png b/examples/resource-bar/assets/ToggleIcons/Wesley/SimpleSquareToggleBlueOff_ByWesley.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/SimpleSquareToggleBlueOff_ByWesley.png rename to examples/resource-bar/assets/ToggleIcons/Wesley/SimpleSquareToggleBlueOff_ByWesley.png diff --git a/examples/resource-bar/assets/ToggleIcons/SimpleSquareToggleBlueOn_ByWesley.png b/examples/resource-bar/assets/ToggleIcons/Wesley/SimpleSquareToggleBlueOn_ByWesley.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/SimpleSquareToggleBlueOn_ByWesley.png rename to examples/resource-bar/assets/ToggleIcons/Wesley/SimpleSquareToggleBlueOn_ByWesley.png diff --git a/examples/resource-bar/assets/ToggleIcons/SimpleSquareToggleGreenOff_ByWesley.png b/examples/resource-bar/assets/ToggleIcons/Wesley/SimpleSquareToggleGreenOff_ByWesley.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/SimpleSquareToggleGreenOff_ByWesley.png rename to examples/resource-bar/assets/ToggleIcons/Wesley/SimpleSquareToggleGreenOff_ByWesley.png diff --git a/examples/resource-bar/assets/ToggleIcons/SimpleSquareToggleGreenOn_ByWesley.png b/examples/resource-bar/assets/ToggleIcons/Wesley/SimpleSquareToggleGreenOn_ByWesley.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/SimpleSquareToggleGreenOn_ByWesley.png rename to examples/resource-bar/assets/ToggleIcons/Wesley/SimpleSquareToggleGreenOn_ByWesley.png diff --git a/examples/resource-bar/assets/ToggleIcons/SimpleWhiteSquareToggleOff_ByWesley-export.png b/examples/resource-bar/assets/ToggleIcons/Wesley/SimpleWhiteSquareToggleOff_ByWesley-export.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/SimpleWhiteSquareToggleOff_ByWesley-export.png rename to examples/resource-bar/assets/ToggleIcons/Wesley/SimpleWhiteSquareToggleOff_ByWesley-export.png diff --git a/examples/resource-bar/assets/ToggleIcons/SimpleWhiteSquareToggleOn_ByWesley-export.png b/examples/resource-bar/assets/ToggleIcons/Wesley/SimpleWhiteSquareToggleOn_ByWesley-export.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/SimpleWhiteSquareToggleOn_ByWesley-export.png rename to examples/resource-bar/assets/ToggleIcons/Wesley/SimpleWhiteSquareToggleOn_ByWesley-export.png diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 3ecf8749b..720552dc8 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -848,7 +848,7 @@ "kind": "image", "metadata": "", "name": "assets\\Resource bars\\Buch\\Brown LCD Bar Fill.png", - "smoothed": true, + "smoothed": false, "userAdded": false }, { @@ -857,7 +857,7 @@ "kind": "image", "metadata": "", "name": "assets\\Resource bars\\Buch\\Bronze bar background.png", - "smoothed": true, + "smoothed": false, "userAdded": false }, { @@ -866,7 +866,7 @@ "kind": "image", "metadata": "", "name": "assets\\Resource bars\\Buch\\Green LCD Bar Fill.png", - "smoothed": true, + "smoothed": false, "userAdded": true }, { @@ -875,7 +875,7 @@ "kind": "image", "metadata": "", "name": "assets\\Resource bars\\Buch\\Gold bar background.png", - "smoothed": true, + "smoothed": false, "userAdded": true }, { @@ -884,7 +884,7 @@ "kind": "image", "metadata": "", "name": "assets\\Resource bars\\Wesley\\Dot Bar Blue Fill Bar.png", - "smoothed": true, + "smoothed": false, "userAdded": true }, { @@ -893,7 +893,7 @@ "kind": "image", "metadata": "", "name": "assets\\Resource bars\\Wesley\\Dot Bar Blue Border.png", - "smoothed": true, + "smoothed": false, "userAdded": true }, { @@ -902,7 +902,7 @@ "kind": "image", "metadata": "", "name": "assets\\Resource bars\\Wesley\\Dot Bar Green Fill Bar.png", - "smoothed": true, + "smoothed": false, "userAdded": false }, { @@ -911,7 +911,7 @@ "kind": "image", "metadata": "", "name": "assets\\Resource bars\\Wesley\\Dot Bar Green Border.png", - "smoothed": true, + "smoothed": false, "userAdded": false }, { @@ -920,7 +920,7 @@ "kind": "image", "metadata": "", "name": "assets\\Resource bars\\Wesley\\Flat Bar Red Fill Bar.png", - "smoothed": true, + "smoothed": false, "userAdded": true }, { @@ -929,7 +929,7 @@ "kind": "image", "metadata": "", "name": "assets\\Resource bars\\Wesley\\Flat Bar White Border.png", - "smoothed": true, + "smoothed": false, "userAdded": true }, { @@ -938,7 +938,7 @@ "kind": "image", "metadata": "", "name": "assets\\Resource bars\\Wesley\\Flat Bar Yellow Fill Bar.png", - "smoothed": true, + "smoothed": false, "userAdded": true }, { @@ -947,7 +947,7 @@ "kind": "image", "metadata": "", "name": "assets\\Resource bars\\Wesley\\Flat Bar Blue Fill Bar.png", - "smoothed": true, + "smoothed": false, "userAdded": true }, { @@ -956,6 +956,141 @@ "kind": "image", "metadata": "", "name": "assets\\Resource bars\\Wesley\\Flat Bar Green Fill Bar.png.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Buch/Dark LCD Bar Fill.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Buch\\Dark LCD Bar Fill.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/Wesley/Square Slider Blue Thumb.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\Wesley\\Square Slider Blue Thumb.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/Wesley/Square Slider Blue Fill Bar.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\Wesley\\Square Slider Blue Fill Bar.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/Wesley/Square Slider Blue Border.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\Wesley\\Square Slider Blue Border.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/Wesley/Square Slider Green Thumb.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\Wesley\\Square Slider Green Thumb.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/Wesley/Square Slider Green Fill Bar.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\Wesley\\Square Slider Green Fill Bar.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/Wesley/Square Slider Green Border.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\Wesley\\Square Slider Green Border.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/Wesley/Square Slider White Thumb.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\Wesley\\Square Slider White Thumb.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/Wesley/Square Slider White Fill Bar.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\Wesley\\Square Slider White Fill Bar.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/Wesley/Square Slider White Border.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\Wesley\\Square Slider White Border.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/JellyCat/Plastic Green Round Slider Thumb.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\JellyCat\\Plastic Green Round Slider Thumb.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/JellyCat/Plastic Green Round Slider Border.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\JellyCat\\Plastic Green Round Slider Border.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/JellyCat/Transparent.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\JellyCat\\Transparent.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/JellyCat/Plastic Green Square Slider Thumb.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\JellyCat\\Plastic Green Square Slider Thumb.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/JellyCat/Plastic Green Square Slider Border.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\JellyCat\\Plastic Green Square Slider Border.png", "smoothed": true, "userAdded": true } @@ -966,6 +1101,571 @@ "objectsGroups": [], "variables": [], "layouts": [ + { + "b": 43, + "disableInputWhenNotFocused": true, + "mangledName": "Sliders", + "name": "Sliders", + "r": 43, + "standardSortMethod": true, + "stopSoundsOnStartup": true, + "title": "", + "v": 43, + "uiSettings": { + "grid": false, + "gridType": "rectangular", + "gridWidth": 32, + "gridHeight": 32, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.8, + "snap": false, + "zoomFactor": 0.7710541980363553, + "windowMask": false + }, + "objectsGroups": [], + "variables": [], + "instances": [ + { + "angle": 0, + "customSize": true, + "height": 15, + "layer": "", + "name": "NewSlider", + "persistentUuid": "b11108dc-c86c-4085-8167-b235471dd419", + "width": 113, + "x": 306, + "y": 150, + "zOrder": 6, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 24, + "layer": "", + "name": "NewSlider", + "persistentUuid": "c7b92c23-0955-4f75-a05c-9c255758b26e", + "width": 265, + "x": 220, + "y": 220, + "zOrder": 6, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "SquareBlueSlider", + "persistentUuid": "ac4f7a51-24f8-41c4-98e2-b0c5ca92fdf4", + "width": 0, + "x": 671, + "y": 111, + "zOrder": 9, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "SquareGreenSlider", + "persistentUuid": "e65ba35b-cf24-4571-9bfa-d4c893cc2888", + "width": 0, + "x": 671, + "y": 171, + "zOrder": 10, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "SquareWhiteSlider", + "persistentUuid": "4e894e92-9667-49ee-b049-f01f263519e1", + "width": 0, + "x": 642, + "y": 261, + "zOrder": 11, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "PlasticGreenRoundSlider", + "persistentUuid": "25a3c3ad-576e-4bc4-8f02-d5342a683976", + "width": 0, + "x": 46, + "y": 369, + "zOrder": 12, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "PlasticGreenSquareSlider", + "persistentUuid": "1561606e-8080-4c88-bec1-40299d18eaa7", + "width": 0, + "x": 46, + "y": 577, + "zOrder": 13, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ], + "objects": [ + { + "assetStoreId": "", + "name": "NewSlider", + "tags": "", + "type": "PanelSpriteSlider::PanelSpriteSlider", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "BarTopPadding": 3, + "BarBottomPadding": 3, + "BarLeftPadding": 9, + "BarRightPadding": 9, + "MaxValue": 100, + "InitialValue": 50 + }, + "childrenContent": { + "Background": { + "bottomMargin": 6, + "height": 15, + "leftMargin": 11, + "rightMargin": 11, + "texture": "assets\\Health Bar Box.png", + "tiled": true, + "topMargin": 6, + "width": 96 + }, + "FillBar": { + "bottomMargin": 0, + "height": 8, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\tiled_Health Bar Fill.png", + "tiled": false, + "topMargin": 0, + "width": 32 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "It displays the value when it changes.", + "font": "", + "textAlignment": "", + "characterSize": 20, + "color": { + "b": 211, + "g": 211, + "r": 211 + } + }, + "Thumb": { + "bottomMargin": 6, + "height": 32, + "leftMargin": 8, + "rightMargin": 8, + "texture": "assets\\Energy Bar.png", + "tiled": false, + "topMargin": 6, + "width": 16 + } + } + }, + { + "assetStoreId": "", + "name": "SquareBlueSlider", + "tags": "", + "type": "PanelSpriteSlider::PanelSpriteSlider", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "BarTopPadding": 3, + "BarLeftPadding": 3, + "BarRightPadding": 3, + "BarBottomPadding": 4, + "LabelMargin": 4 + }, + "childrenContent": { + "Background": { + "bottomMargin": 4, + "height": 18, + "leftMargin": 2, + "rightMargin": 2, + "texture": "assets\\Sliders\\Wesley\\Square Slider Blue Border.png", + "tiled": false, + "topMargin": 4, + "width": 215 + }, + "FillBar": { + "bottomMargin": 1, + "height": 11, + "leftMargin": 1, + "rightMargin": 1, + "texture": "assets\\Sliders\\Wesley\\Square Slider Blue Fill Bar.png", + "tiled": false, + "topMargin": 1, + "width": 11 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "It displays the value when it changes.", + "font": "", + "textAlignment": "", + "characterSize": 16, + "color": { + "b": 221, + "g": 221, + "r": 221 + } + }, + "Thumb": { + "bottomMargin": 3, + "height": 21, + "leftMargin": 3, + "rightMargin": 3, + "texture": "assets\\Sliders\\Wesley\\Square Slider Blue Thumb.png", + "tiled": false, + "topMargin": 3, + "width": 21 + } + } + }, + { + "assetStoreId": "", + "name": "SquareGreenSlider", + "tags": "", + "type": "PanelSpriteSlider::PanelSpriteSlider", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "BarTopPadding": 3, + "BarLeftPadding": 3, + "BarRightPadding": 3, + "BarBottomPadding": 4, + "LabelMargin": 4 + }, + "childrenContent": { + "Background": { + "bottomMargin": 4, + "height": 18, + "leftMargin": 2, + "rightMargin": 2, + "texture": "assets\\Sliders\\Wesley\\Square Slider Green Border.png", + "tiled": false, + "topMargin": 4, + "width": 215 + }, + "FillBar": { + "bottomMargin": 1, + "height": 11, + "leftMargin": 1, + "rightMargin": 1, + "texture": "assets\\Sliders\\Wesley\\Square Slider Green Fill Bar.png", + "tiled": false, + "topMargin": 1, + "width": 11 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "It displays the value when it changes.", + "font": "", + "textAlignment": "", + "characterSize": 16, + "color": { + "b": 221, + "g": 221, + "r": 221 + } + }, + "Thumb": { + "bottomMargin": 3, + "height": 21, + "leftMargin": 3, + "rightMargin": 3, + "texture": "assets\\Sliders\\Wesley\\Square Slider Green Thumb.png", + "tiled": false, + "topMargin": 3, + "width": 21 + } + } + }, + { + "assetStoreId": "", + "name": "SquareWhiteSlider", + "tags": "", + "type": "PanelSpriteSlider::PanelSpriteSlider", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "BarTopPadding": 6, + "BarLeftPadding": 6, + "BarRightPadding": 6, + "BarBottomPadding": 6, + "LabelMargin": 6 + }, + "childrenContent": { + "Background": { + "bottomMargin": 4, + "height": 28, + "leftMargin": 2, + "rightMargin": 2, + "texture": "assets\\Sliders\\Wesley\\Square Slider White Border.png", + "tiled": false, + "topMargin": 4, + "width": 265 + }, + "FillBar": { + "bottomMargin": 2, + "height": 16, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Sliders\\Wesley\\Square Slider White Fill Bar.png", + "tiled": false, + "topMargin": 0, + "width": 16 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "It displays the value when it changes.", + "font": "", + "textAlignment": "", + "characterSize": 20, + "color": { + "b": 221, + "g": 221, + "r": 221 + } + }, + "Thumb": { + "bottomMargin": 2, + "height": 36, + "leftMargin": 1, + "rightMargin": 1, + "texture": "assets\\Sliders\\Wesley\\Square Slider White Thumb.png", + "tiled": false, + "topMargin": 2, + "width": 22 + } + } + }, + { + "assetStoreId": "", + "name": "PlasticGreenRoundSlider", + "tags": "", + "type": "PanelSpriteSlider::PanelSpriteSlider", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "LabelMargin": 16, + "BarLeftPadding": 62, + "BarRightPadding": 62 + }, + "childrenContent": { + "Background": { + "bottomMargin": 62, + "height": 126, + "leftMargin": 62, + "rightMargin": 62, + "texture": "assets\\Sliders\\JellyCat\\Plastic Green Round Slider Border.png", + "tiled": false, + "topMargin": 62, + "width": 1165 + }, + "FillBar": { + "bottomMargin": 0, + "height": 16, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Sliders\\JellyCat\\Transparent.png", + "tiled": false, + "topMargin": 0, + "width": 16 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "It displays the value when it changes.", + "font": "", + "textAlignment": "", + "characterSize": 40, + "color": { + "b": 221, + "g": 221, + "r": 221 + } + }, + "Thumb": { + "bottomMargin": 0, + "height": 117, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Sliders\\JellyCat\\Plastic Green Round Slider Thumb.png", + "tiled": false, + "topMargin": 0, + "width": 126 + } + } + }, + { + "assetStoreId": "", + "name": "PlasticGreenSquareSlider", + "tags": "", + "type": "PanelSpriteSlider::PanelSpriteSlider", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "LabelMargin": 16, + "BarLeftPadding": 62, + "BarRightPadding": 62 + }, + "childrenContent": { + "Background": { + "bottomMargin": 62, + "height": 126, + "leftMargin": 62, + "rightMargin": 62, + "texture": "assets\\Sliders\\JellyCat\\Plastic Green Square Slider Border.png", + "tiled": false, + "topMargin": 62, + "width": 1165 + }, + "FillBar": { + "bottomMargin": 0, + "height": 16, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Sliders\\JellyCat\\Transparent.png", + "tiled": false, + "topMargin": 0, + "width": 16 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "It displays the value when it changes.", + "font": "", + "textAlignment": "", + "characterSize": 40, + "color": { + "b": 221, + "g": 221, + "r": 221 + } + }, + "Thumb": { + "bottomMargin": 0, + "height": 117, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Sliders\\JellyCat\\Plastic Green Square Slider Thumb.png", + "tiled": false, + "topMargin": 0, + "width": 126 + } + } + } + ], + "events": [ + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DepartScene" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "DebuggerTools::EnableDebugDraw" + }, + "parameters": [ + "", + "", + "", + "no", + "no" + ] + } + ] + } + ], + "layers": [ + { + "ambientLightColorB": 8632048, + "ambientLightColorG": 150995054, + "ambientLightColorR": 1869182049, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "behaviorsSharedData": [] + }, { "b": 43, "disableInputWhenNotFocused": true, @@ -1816,8 +2516,8 @@ { "b": 68, "disableInputWhenNotFocused": true, - "mangledName": "Sprite_32and_32Tiled_32Sprite", - "name": "Sprite and Tiled Sprite", + "mangledName": "Bars", + "name": "Bars", "r": 68, "standardSortMethod": true, "stopSoundsOnStartup": true, @@ -1833,7 +2533,7 @@ "gridColor": 10401023, "gridAlpha": 0.2, "snap": true, - "zoomFactor": 0.9156321947082823, + "zoomFactor": 0.9985039886066421, "windowMask": false }, "objectsGroups": [ @@ -1867,7 +2567,7 @@ "name": "BronzeGreenBar" }, { - "name": "GoldBrownBar" + "name": "GoldDarkBar" }, { "name": "GoldGreenBar" @@ -1948,8 +2648,8 @@ "name": "ContinousBar", "persistentUuid": "60a7c4ed-31bf-44a9-8513-09c9bfd8eb42", "width": 194, - "x": 424, - "y": 456, + "x": 368, + "y": 448, "zOrder": 40, "numberProperties": [], "stringProperties": [], @@ -2008,8 +2708,8 @@ "name": "NoBackgroundUnitsBar", "persistentUuid": "a4a16b93-f588-4324-b306-5f85919b34ab", "width": 208, - "x": 424, - "y": 304, + "x": 368, + "y": 296, "zOrder": 44, "numberProperties": [], "stringProperties": [], @@ -2023,8 +2723,8 @@ "name": "NoLabelContinousBar", "persistentUuid": "e7d18ac3-25ec-477d-86dd-c7e055964917", "width": 176, - "x": 440, - "y": 528, + "x": 384, + "y": 520, "zOrder": 46, "numberProperties": [], "stringProperties": [], @@ -2068,8 +2768,8 @@ "name": "NoBufferContinousBar", "persistentUuid": "7c30a69a-005e-4388-87fb-11758e8ed614", "width": 184, - "x": 432, - "y": 385, + "x": 376, + "y": 377, "zOrder": 48, "numberProperties": [], "stringProperties": [], @@ -2083,8 +2783,8 @@ "name": "BronzeBrownBar", "persistentUuid": "fdee4ae8-1e59-4022-97f7-edef3962666a", "width": 144, - "x": 680, - "y": 391, + "x": 622, + "y": 327, "zOrder": 51, "numberProperties": [], "stringProperties": [], @@ -2098,8 +2798,8 @@ "name": "BronzeGreenBar", "persistentUuid": "0a10c628-7329-4865-af9e-59f9d45e6791", "width": 0, - "x": 680, - "y": 432, + "x": 622, + "y": 368, "zOrder": 52, "numberProperties": [], "stringProperties": [], @@ -2113,8 +2813,8 @@ "name": "GoldGreenBar", "persistentUuid": "f8bab57d-0139-42b5-8051-14cfc7a82ec5", "width": 0, - "x": 680, - "y": 471, + "x": 622, + "y": 407, "zOrder": 54, "numberProperties": [], "stringProperties": [], @@ -2128,8 +2828,8 @@ "name": "BlueDotBar", "persistentUuid": "00dcd7ac-7574-44ff-9400-f5f6e9e4f3c5", "width": 192, - "x": 680, - "y": 512, + "x": 624, + "y": 504, "zOrder": 55, "numberProperties": [], "stringProperties": [], @@ -2143,8 +2843,8 @@ "name": "GreenDotBar", "persistentUuid": "d2d99c92-6438-4ce2-8d6a-77eddc5c01fd", "width": 0, - "x": 680, - "y": 552, + "x": 624, + "y": 544, "zOrder": 56, "numberProperties": [], "stringProperties": [], @@ -2158,8 +2858,8 @@ "name": "RedFlatBar", "persistentUuid": "94173da0-5340-4338-a404-d00c90af48f7", "width": 0, - "x": 856, - "y": 384, + "x": 800, + "y": 376, "zOrder": 57, "numberProperties": [], "stringProperties": [], @@ -2173,8 +2873,8 @@ "name": "YellowFlatBar", "persistentUuid": "9f9ee6f3-8c2c-4c43-b48b-750ceae5a6f2", "width": 0, - "x": 856, - "y": 440, + "x": 800, + "y": 432, "zOrder": 58, "numberProperties": [], "stringProperties": [], @@ -2188,8 +2888,8 @@ "name": "GreenFlatBar", "persistentUuid": "934dc425-93f9-4aaf-8cd3-0fe36a08ca38", "width": 0, - "x": 856, - "y": 496, + "x": 800, + "y": 488, "zOrder": 59, "numberProperties": [], "stringProperties": [], @@ -2203,12 +2903,42 @@ "name": "BlueFlatBar", "persistentUuid": "a47c9a12-1ac0-49e8-bb08-789ba792bb71", "width": 0, - "x": 856, - "y": 552, + "x": 800, + "y": 544, "zOrder": 60, "numberProperties": [], "stringProperties": [], "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 74, + "layer": "", + "name": "RedFlatBar", + "persistentUuid": "8a527c5e-1ec6-4012-b4b6-85315d4513d2", + "width": 328, + "x": 664, + "y": 608, + "zOrder": 57, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "GoldDarkBar", + "persistentUuid": "3401cf4b-20c1-4fd6-bea5-4a8f1e857761", + "width": 0, + "x": 623, + "y": 447, + "zOrder": 61, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] } ], "objects": [ @@ -2725,7 +3455,7 @@ }, { "assetStoreId": "", - "name": "GoldBrownBar", + "name": "GoldDarkBar", "tags": "", "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "variables": [], @@ -2768,7 +3498,7 @@ "height": 16, "leftMargin": 0, "rightMargin": 0, - "texture": "assets\\Resource bars\\Buch\\Brown LCD Bar Fill.png", + "texture": "assets\\Resource bars\\Buch\\Dark LCD Bar Fill.png", "tiled": true, "topMargin": 0, "width": 16 @@ -16526,7 +17256,7 @@ "parameters": [ "Label", "=", - "round(FillBar.CenterY())" + "FillBar.CenterY()" ] }, { @@ -16536,7 +17266,7 @@ "parameters": [ "Label", "=", - "round(Background.CenterX() + (Object.PropertyBarLeftPadding() - Object.PropertyBarRightPadding()) / 2)" + "Background.CenterX() + (Object.PropertyBarLeftPadding() - Object.PropertyBarRightPadding()) / 2" ] } ] From f211b6fd8c0c76c9ac2a201da9f85d425621b019 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Wed, 18 Jan 2023 12:42:00 +0100 Subject: [PATCH 73/98] WIP: add some bars --- .../resource-bar/assets/Health Bar Box2.png | Bin 246 -> 0 bytes .../Blue Fill Bar.png} | Bin .../Copper Bar Border.png} | Bin .../Copper Bar Red Fill.png} | Bin .../Metal Bar Border.png} | Bin .../Shaded Yellow Fill Barl.png} | Bin .../Wesley/Flat Bar Yellow Fill Bar.png | Bin 170 -> 0 bytes .../Wood Bar Frame_No Shadow.png} | Bin .../Wood Bar Frame_Shadow.png} | Bin .../tiled_Health Bar Fill.png | Bin ...rder.png => Square Blue Slider Border.png} | Bin ...ar.png => Square Blue Slider Fill Bar.png} | Bin ...Thumb.png => Square Blue Slider Thumb.png} | Bin ...der.png => Square Green Slider Border.png} | Bin ...r.png => Square Green Slider Fill Bar.png} | Bin ...humb.png => Square Green Slider Thumb.png} | Bin ...der.png => Square White Slider Border.png} | Bin ...r.png => Square White Slider Fill Bar.png} | Bin ...humb.png => Square White Slider Thumb.png} | Bin ...f_ByBuch.png => Gold Round Toggle_Off.png} | Bin ...On_ByBuch.png => Gold Round Toggle_On.png} | Bin ..._ByBuch.png => Gold Square Toggle_Off.png} | Bin ...n_ByBuch.png => Gold Square Toggle_On.png} | Bin ...png => Plastic Green Round Switch_Off.png} | Bin ....png => Plastic Green Round Switch_On.png} | Bin ...png => Plastic Green Round Toggle_Off.png} | Bin ....png => Plastic Green Round Toggle_On.png} | Bin ...ng => Plastic Green Square Toggle_Off.png} | Bin ...png => Plastic Green Square Toggle_On.png} | Bin ...yWesley.png => Square Blue Toggle_Off.png} | Bin ...ByWesley.png => Square Blue Toggle_On.png} | Bin ...Wesley.png => Square Green Toggle_Off.png} | Bin ...yWesley.png => Square Green Toggle_On.png} | Bin ...export.png => Square White Toggle_Off.png} | Bin ...-export.png => Square White Toggle_On.png} | Bin examples/resource-bar/game.json | 739 +++++++++++++----- 36 files changed, 558 insertions(+), 181 deletions(-) delete mode 100644 examples/resource-bar/assets/Health Bar Box2.png rename examples/resource-bar/assets/{Blue bar.png => Resource bars/Blue Fill Bar.png} (100%) rename examples/resource-bar/assets/{Health Bar Box.png => Resource bars/Copper Bar Border.png} (100%) rename examples/resource-bar/assets/{Health Bar2.png => Resource bars/Copper Bar Red Fill.png} (100%) rename examples/resource-bar/assets/{Energy Bar.png => Resource bars/Metal Bar Border.png} (100%) rename examples/resource-bar/assets/{tiled_Energy Bar Fill.png => Resource bars/Shaded Yellow Fill Barl.png} (100%) delete mode 100644 examples/resource-bar/assets/Resource bars/Wesley/Flat Bar Yellow Fill Bar.png rename examples/resource-bar/assets/{Bar Frame_No Shadow.png => Resource bars/Wood Bar Frame_No Shadow.png} (100%) rename examples/resource-bar/assets/{Bar Frame_Shadow.png => Resource bars/Wood Bar Frame_Shadow.png} (100%) rename examples/resource-bar/assets/{ => Resource bars}/tiled_Health Bar Fill.png (100%) rename examples/resource-bar/assets/Sliders/Wesley/{Square Slider Blue Border.png => Square Blue Slider Border.png} (100%) rename examples/resource-bar/assets/Sliders/Wesley/{Square Slider Blue Fill Bar.png => Square Blue Slider Fill Bar.png} (100%) rename examples/resource-bar/assets/Sliders/Wesley/{Square Slider Blue Thumb.png => Square Blue Slider Thumb.png} (100%) rename examples/resource-bar/assets/Sliders/Wesley/{Square Slider Green Border.png => Square Green Slider Border.png} (100%) rename examples/resource-bar/assets/Sliders/Wesley/{Square Slider Green Fill Bar.png => Square Green Slider Fill Bar.png} (100%) rename examples/resource-bar/assets/Sliders/Wesley/{Square Slider Green Thumb.png => Square Green Slider Thumb.png} (100%) rename examples/resource-bar/assets/Sliders/Wesley/{Square Slider White Border.png => Square White Slider Border.png} (100%) rename examples/resource-bar/assets/Sliders/Wesley/{Square Slider White Fill Bar.png => Square White Slider Fill Bar.png} (100%) rename examples/resource-bar/assets/Sliders/Wesley/{Square Slider White Thumb.png => Square White Slider Thumb.png} (100%) rename examples/resource-bar/assets/ToggleIcons/Buch/{SciUserInterfaceCircleToggleOff_ByBuch.png => Gold Round Toggle_Off.png} (100%) rename examples/resource-bar/assets/ToggleIcons/Buch/{SciUserInterfaceCircleToggleOn_ByBuch.png => Gold Round Toggle_On.png} (100%) rename examples/resource-bar/assets/ToggleIcons/Buch/{SciUserInterfaceSquareToggleOff_ByBuch.png => Gold Square Toggle_Off.png} (100%) rename examples/resource-bar/assets/ToggleIcons/Buch/{SciUserInterfaceSquareToggleOn_ByBuch.png => Gold Square Toggle_On.png} (100%) rename examples/resource-bar/assets/ToggleIcons/JellyCat/{OvalToggleOff_ByJellyCat.png => Plastic Green Round Switch_Off.png} (100%) rename examples/resource-bar/assets/ToggleIcons/JellyCat/{OvalToggleOn_ByJellyCat.png => Plastic Green Round Switch_On.png} (100%) rename examples/resource-bar/assets/ToggleIcons/JellyCat/{CircleToggleOff_ByJellyCat.png => Plastic Green Round Toggle_Off.png} (100%) rename examples/resource-bar/assets/ToggleIcons/JellyCat/{CircleToggleOn_ByJellyCat.png => Plastic Green Round Toggle_On.png} (100%) rename examples/resource-bar/assets/ToggleIcons/JellyCat/{SquareToggleOff_ByJellyCat.png => Plastic Green Square Toggle_Off.png} (100%) rename examples/resource-bar/assets/ToggleIcons/JellyCat/{SquareToggleOn_ByJellyCat.png => Plastic Green Square Toggle_On.png} (100%) rename examples/resource-bar/assets/ToggleIcons/Wesley/{SimpleSquareToggleBlueOff_ByWesley.png => Square Blue Toggle_Off.png} (100%) rename examples/resource-bar/assets/ToggleIcons/Wesley/{SimpleSquareToggleBlueOn_ByWesley.png => Square Blue Toggle_On.png} (100%) rename examples/resource-bar/assets/ToggleIcons/Wesley/{SimpleSquareToggleGreenOff_ByWesley.png => Square Green Toggle_Off.png} (100%) rename examples/resource-bar/assets/ToggleIcons/Wesley/{SimpleSquareToggleGreenOn_ByWesley.png => Square Green Toggle_On.png} (100%) rename examples/resource-bar/assets/ToggleIcons/Wesley/{SimpleWhiteSquareToggleOff_ByWesley-export.png => Square White Toggle_Off.png} (100%) rename examples/resource-bar/assets/ToggleIcons/Wesley/{SimpleWhiteSquareToggleOn_ByWesley-export.png => Square White Toggle_On.png} (100%) diff --git a/examples/resource-bar/assets/Health Bar Box2.png b/examples/resource-bar/assets/Health Bar Box2.png deleted file mode 100644 index 34250327ca41e3df957ed796cb844296e10ae6fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 zcmeAS@N?(olHy`uVBq!ia0vp^2|&!x!3HFytxjzRQk(@Ik;M!Q+`=Ht$S`Y;1W<5= zr;B4q#NoFy&T=*w@VM>nesFLz^N!}`9Se#ry0?399}NrM`0s+;ybl|u$LtGt5>{4v z_JQ+H`&sK0djUT|!K@#rubj3qdB^|$V`P?)5@XcFFplpRHt~G^^44A};`znI?msgP z<}XZL8S~=CwW$s3auu7WG&Hvq|MuLf;B;2`YLh?%1B=1}Gsg0H3tN8mHoOp>V$3e^ tYCF@6mh71=H(96NXWhuFyG8IW!^QjzY4I+W89+BPc)I$ztaD0e0svgwU)ulx diff --git a/examples/resource-bar/assets/Blue bar.png b/examples/resource-bar/assets/Resource bars/Blue Fill Bar.png similarity index 100% rename from examples/resource-bar/assets/Blue bar.png rename to examples/resource-bar/assets/Resource bars/Blue Fill Bar.png diff --git a/examples/resource-bar/assets/Health Bar Box.png b/examples/resource-bar/assets/Resource bars/Copper Bar Border.png similarity index 100% rename from examples/resource-bar/assets/Health Bar Box.png rename to examples/resource-bar/assets/Resource bars/Copper Bar Border.png diff --git a/examples/resource-bar/assets/Health Bar2.png b/examples/resource-bar/assets/Resource bars/Copper Bar Red Fill.png similarity index 100% rename from examples/resource-bar/assets/Health Bar2.png rename to examples/resource-bar/assets/Resource bars/Copper Bar Red Fill.png diff --git a/examples/resource-bar/assets/Energy Bar.png b/examples/resource-bar/assets/Resource bars/Metal Bar Border.png similarity index 100% rename from examples/resource-bar/assets/Energy Bar.png rename to examples/resource-bar/assets/Resource bars/Metal Bar Border.png diff --git a/examples/resource-bar/assets/tiled_Energy Bar Fill.png b/examples/resource-bar/assets/Resource bars/Shaded Yellow Fill Barl.png similarity index 100% rename from examples/resource-bar/assets/tiled_Energy Bar Fill.png rename to examples/resource-bar/assets/Resource bars/Shaded Yellow Fill Barl.png diff --git a/examples/resource-bar/assets/Resource bars/Wesley/Flat Bar Yellow Fill Bar.png b/examples/resource-bar/assets/Resource bars/Wesley/Flat Bar Yellow Fill Bar.png deleted file mode 100644 index aeedf823dbe150e550e47d303f7d8e6179019959..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^H-K1zgAGW|IAI(Kq!^2X+?^QKos)S9l!NAtz<&u^Z~IwalYYp^$#XyIW~Y<4`6AYeo)b0NRj X6Xw#ZJ5m<{?PKtC^>bP0l+XkK$J;c; diff --git a/examples/resource-bar/assets/Bar Frame_No Shadow.png b/examples/resource-bar/assets/Resource bars/Wood Bar Frame_No Shadow.png similarity index 100% rename from examples/resource-bar/assets/Bar Frame_No Shadow.png rename to examples/resource-bar/assets/Resource bars/Wood Bar Frame_No Shadow.png diff --git a/examples/resource-bar/assets/Bar Frame_Shadow.png b/examples/resource-bar/assets/Resource bars/Wood Bar Frame_Shadow.png similarity index 100% rename from examples/resource-bar/assets/Bar Frame_Shadow.png rename to examples/resource-bar/assets/Resource bars/Wood Bar Frame_Shadow.png diff --git a/examples/resource-bar/assets/tiled_Health Bar Fill.png b/examples/resource-bar/assets/Resource bars/tiled_Health Bar Fill.png similarity index 100% rename from examples/resource-bar/assets/tiled_Health Bar Fill.png rename to examples/resource-bar/assets/Resource bars/tiled_Health Bar Fill.png diff --git a/examples/resource-bar/assets/Sliders/Wesley/Square Slider Blue Border.png b/examples/resource-bar/assets/Sliders/Wesley/Square Blue Slider Border.png similarity index 100% rename from examples/resource-bar/assets/Sliders/Wesley/Square Slider Blue Border.png rename to examples/resource-bar/assets/Sliders/Wesley/Square Blue Slider Border.png diff --git a/examples/resource-bar/assets/Sliders/Wesley/Square Slider Blue Fill Bar.png b/examples/resource-bar/assets/Sliders/Wesley/Square Blue Slider Fill Bar.png similarity index 100% rename from examples/resource-bar/assets/Sliders/Wesley/Square Slider Blue Fill Bar.png rename to examples/resource-bar/assets/Sliders/Wesley/Square Blue Slider Fill Bar.png diff --git a/examples/resource-bar/assets/Sliders/Wesley/Square Slider Blue Thumb.png b/examples/resource-bar/assets/Sliders/Wesley/Square Blue Slider Thumb.png similarity index 100% rename from examples/resource-bar/assets/Sliders/Wesley/Square Slider Blue Thumb.png rename to examples/resource-bar/assets/Sliders/Wesley/Square Blue Slider Thumb.png diff --git a/examples/resource-bar/assets/Sliders/Wesley/Square Slider Green Border.png b/examples/resource-bar/assets/Sliders/Wesley/Square Green Slider Border.png similarity index 100% rename from examples/resource-bar/assets/Sliders/Wesley/Square Slider Green Border.png rename to examples/resource-bar/assets/Sliders/Wesley/Square Green Slider Border.png diff --git a/examples/resource-bar/assets/Sliders/Wesley/Square Slider Green Fill Bar.png b/examples/resource-bar/assets/Sliders/Wesley/Square Green Slider Fill Bar.png similarity index 100% rename from examples/resource-bar/assets/Sliders/Wesley/Square Slider Green Fill Bar.png rename to examples/resource-bar/assets/Sliders/Wesley/Square Green Slider Fill Bar.png diff --git a/examples/resource-bar/assets/Sliders/Wesley/Square Slider Green Thumb.png b/examples/resource-bar/assets/Sliders/Wesley/Square Green Slider Thumb.png similarity index 100% rename from examples/resource-bar/assets/Sliders/Wesley/Square Slider Green Thumb.png rename to examples/resource-bar/assets/Sliders/Wesley/Square Green Slider Thumb.png diff --git a/examples/resource-bar/assets/Sliders/Wesley/Square Slider White Border.png b/examples/resource-bar/assets/Sliders/Wesley/Square White Slider Border.png similarity index 100% rename from examples/resource-bar/assets/Sliders/Wesley/Square Slider White Border.png rename to examples/resource-bar/assets/Sliders/Wesley/Square White Slider Border.png diff --git a/examples/resource-bar/assets/Sliders/Wesley/Square Slider White Fill Bar.png b/examples/resource-bar/assets/Sliders/Wesley/Square White Slider Fill Bar.png similarity index 100% rename from examples/resource-bar/assets/Sliders/Wesley/Square Slider White Fill Bar.png rename to examples/resource-bar/assets/Sliders/Wesley/Square White Slider Fill Bar.png diff --git a/examples/resource-bar/assets/Sliders/Wesley/Square Slider White Thumb.png b/examples/resource-bar/assets/Sliders/Wesley/Square White Slider Thumb.png similarity index 100% rename from examples/resource-bar/assets/Sliders/Wesley/Square Slider White Thumb.png rename to examples/resource-bar/assets/Sliders/Wesley/Square White Slider Thumb.png diff --git a/examples/resource-bar/assets/ToggleIcons/Buch/SciUserInterfaceCircleToggleOff_ByBuch.png b/examples/resource-bar/assets/ToggleIcons/Buch/Gold Round Toggle_Off.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/Buch/SciUserInterfaceCircleToggleOff_ByBuch.png rename to examples/resource-bar/assets/ToggleIcons/Buch/Gold Round Toggle_Off.png diff --git a/examples/resource-bar/assets/ToggleIcons/Buch/SciUserInterfaceCircleToggleOn_ByBuch.png b/examples/resource-bar/assets/ToggleIcons/Buch/Gold Round Toggle_On.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/Buch/SciUserInterfaceCircleToggleOn_ByBuch.png rename to examples/resource-bar/assets/ToggleIcons/Buch/Gold Round Toggle_On.png diff --git a/examples/resource-bar/assets/ToggleIcons/Buch/SciUserInterfaceSquareToggleOff_ByBuch.png b/examples/resource-bar/assets/ToggleIcons/Buch/Gold Square Toggle_Off.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/Buch/SciUserInterfaceSquareToggleOff_ByBuch.png rename to examples/resource-bar/assets/ToggleIcons/Buch/Gold Square Toggle_Off.png diff --git a/examples/resource-bar/assets/ToggleIcons/Buch/SciUserInterfaceSquareToggleOn_ByBuch.png b/examples/resource-bar/assets/ToggleIcons/Buch/Gold Square Toggle_On.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/Buch/SciUserInterfaceSquareToggleOn_ByBuch.png rename to examples/resource-bar/assets/ToggleIcons/Buch/Gold Square Toggle_On.png diff --git a/examples/resource-bar/assets/ToggleIcons/JellyCat/OvalToggleOff_ByJellyCat.png b/examples/resource-bar/assets/ToggleIcons/JellyCat/Plastic Green Round Switch_Off.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/JellyCat/OvalToggleOff_ByJellyCat.png rename to examples/resource-bar/assets/ToggleIcons/JellyCat/Plastic Green Round Switch_Off.png diff --git a/examples/resource-bar/assets/ToggleIcons/JellyCat/OvalToggleOn_ByJellyCat.png b/examples/resource-bar/assets/ToggleIcons/JellyCat/Plastic Green Round Switch_On.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/JellyCat/OvalToggleOn_ByJellyCat.png rename to examples/resource-bar/assets/ToggleIcons/JellyCat/Plastic Green Round Switch_On.png diff --git a/examples/resource-bar/assets/ToggleIcons/JellyCat/CircleToggleOff_ByJellyCat.png b/examples/resource-bar/assets/ToggleIcons/JellyCat/Plastic Green Round Toggle_Off.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/JellyCat/CircleToggleOff_ByJellyCat.png rename to examples/resource-bar/assets/ToggleIcons/JellyCat/Plastic Green Round Toggle_Off.png diff --git a/examples/resource-bar/assets/ToggleIcons/JellyCat/CircleToggleOn_ByJellyCat.png b/examples/resource-bar/assets/ToggleIcons/JellyCat/Plastic Green Round Toggle_On.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/JellyCat/CircleToggleOn_ByJellyCat.png rename to examples/resource-bar/assets/ToggleIcons/JellyCat/Plastic Green Round Toggle_On.png diff --git a/examples/resource-bar/assets/ToggleIcons/JellyCat/SquareToggleOff_ByJellyCat.png b/examples/resource-bar/assets/ToggleIcons/JellyCat/Plastic Green Square Toggle_Off.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/JellyCat/SquareToggleOff_ByJellyCat.png rename to examples/resource-bar/assets/ToggleIcons/JellyCat/Plastic Green Square Toggle_Off.png diff --git a/examples/resource-bar/assets/ToggleIcons/JellyCat/SquareToggleOn_ByJellyCat.png b/examples/resource-bar/assets/ToggleIcons/JellyCat/Plastic Green Square Toggle_On.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/JellyCat/SquareToggleOn_ByJellyCat.png rename to examples/resource-bar/assets/ToggleIcons/JellyCat/Plastic Green Square Toggle_On.png diff --git a/examples/resource-bar/assets/ToggleIcons/Wesley/SimpleSquareToggleBlueOff_ByWesley.png b/examples/resource-bar/assets/ToggleIcons/Wesley/Square Blue Toggle_Off.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/Wesley/SimpleSquareToggleBlueOff_ByWesley.png rename to examples/resource-bar/assets/ToggleIcons/Wesley/Square Blue Toggle_Off.png diff --git a/examples/resource-bar/assets/ToggleIcons/Wesley/SimpleSquareToggleBlueOn_ByWesley.png b/examples/resource-bar/assets/ToggleIcons/Wesley/Square Blue Toggle_On.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/Wesley/SimpleSquareToggleBlueOn_ByWesley.png rename to examples/resource-bar/assets/ToggleIcons/Wesley/Square Blue Toggle_On.png diff --git a/examples/resource-bar/assets/ToggleIcons/Wesley/SimpleSquareToggleGreenOff_ByWesley.png b/examples/resource-bar/assets/ToggleIcons/Wesley/Square Green Toggle_Off.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/Wesley/SimpleSquareToggleGreenOff_ByWesley.png rename to examples/resource-bar/assets/ToggleIcons/Wesley/Square Green Toggle_Off.png diff --git a/examples/resource-bar/assets/ToggleIcons/Wesley/SimpleSquareToggleGreenOn_ByWesley.png b/examples/resource-bar/assets/ToggleIcons/Wesley/Square Green Toggle_On.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/Wesley/SimpleSquareToggleGreenOn_ByWesley.png rename to examples/resource-bar/assets/ToggleIcons/Wesley/Square Green Toggle_On.png diff --git a/examples/resource-bar/assets/ToggleIcons/Wesley/SimpleWhiteSquareToggleOff_ByWesley-export.png b/examples/resource-bar/assets/ToggleIcons/Wesley/Square White Toggle_Off.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/Wesley/SimpleWhiteSquareToggleOff_ByWesley-export.png rename to examples/resource-bar/assets/ToggleIcons/Wesley/Square White Toggle_Off.png diff --git a/examples/resource-bar/assets/ToggleIcons/Wesley/SimpleWhiteSquareToggleOn_ByWesley-export.png b/examples/resource-bar/assets/ToggleIcons/Wesley/Square White Toggle_On.png similarity index 100% rename from examples/resource-bar/assets/ToggleIcons/Wesley/SimpleWhiteSquareToggleOn_ByWesley-export.png rename to examples/resource-bar/assets/ToggleIcons/Wesley/Square White Toggle_On.png diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 720552dc8..78ae7f519 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -1,5 +1,5 @@ { - "firstLayout": "Joystick", + "firstLayout": "Sliders", "gdVersion": { "build": 99, "major": 4, @@ -1093,6 +1093,195 @@ "name": "assets\\Sliders\\JellyCat\\Plastic Green Square Slider Border.png", "smoothed": true, "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/Wood Bar Frame_No Shadow.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\Wood Bar Frame_No Shadow.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/Blue Fill Bar.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\Blue Fill Bar.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/Wood Bar Frame_Shadow.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\Wood Bar Frame_Shadow.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/Wesley/Square Blue Slider Fill Bar.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\Wesley\\Square Blue Slider Fill Bar.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/Wesley/Square Blue Slider Border.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\Wesley\\Square Blue Slider Border.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/Wesley/Square Blue Slider Thumb.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\Wesley\\Square Blue Slider Thumb.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/Wesley/Square Green Slider Thumb.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\Wesley\\Square Green Slider Thumb.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/Wesley/Square Green Slider Fill Bar.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\Wesley\\Square Green Slider Fill Bar.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/Wesley/Square Green Slider Border.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\Wesley\\Square Green Slider Border.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/Wesley/Square White Slider Thumb.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\Wesley\\Square White Slider Thumb.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/Wesley/Square White Slider Fill Bar.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\Wesley\\Square White Slider Fill Bar.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/Wesley/Square White Slider Border.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\Wesley\\Square White Slider Border.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Wesley/Flat Bar Orange Fill Bar.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Wesley\\Flat Bar Orange Fill Bar.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Blue Fill Bar.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Blue Fill Bar.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Wood Bar Frame_No Shadow.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Wood Bar Frame_No Shadow.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Wood Bar Frame_Shadow.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Wood Bar Frame_Shadow.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Copper Bar Border.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Copper Bar Border.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Copper Bar Red Fill.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Copper Bar Red Fill.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/tiled_Health Bar Fill.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\tiled_Health Bar Fill.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Shaded Yellow Fill Barl.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Shaded Yellow Fill Barl.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Metal Bar Border.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Metal Bar Border.png", + "smoothed": true, + "userAdded": true } ], "resourceFolders": [] @@ -1121,42 +1310,12 @@ "gridColor": 10401023, "gridAlpha": 0.8, "snap": false, - "zoomFactor": 0.7710541980363553, + "zoomFactor": 0.7710541980363546, "windowMask": false }, "objectsGroups": [], "variables": [], "instances": [ - { - "angle": 0, - "customSize": true, - "height": 15, - "layer": "", - "name": "NewSlider", - "persistentUuid": "b11108dc-c86c-4085-8167-b235471dd419", - "width": 113, - "x": 306, - "y": 150, - "zOrder": 6, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 24, - "layer": "", - "name": "NewSlider", - "persistentUuid": "c7b92c23-0955-4f75-a05c-9c255758b26e", - "width": 265, - "x": 220, - "y": 220, - "zOrder": 6, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, { "angle": 0, "customSize": false, @@ -1165,8 +1324,8 @@ "name": "SquareBlueSlider", "persistentUuid": "ac4f7a51-24f8-41c4-98e2-b0c5ca92fdf4", "width": 0, - "x": 671, - "y": 111, + "x": 505, + "y": 120, "zOrder": 9, "numberProperties": [], "stringProperties": [], @@ -1180,8 +1339,8 @@ "name": "SquareGreenSlider", "persistentUuid": "e65ba35b-cf24-4571-9bfa-d4c893cc2888", "width": 0, - "x": 671, - "y": 171, + "x": 505, + "y": 180, "zOrder": 10, "numberProperties": [], "stringProperties": [], @@ -1195,8 +1354,8 @@ "name": "SquareWhiteSlider", "persistentUuid": "4e894e92-9667-49ee-b049-f01f263519e1", "width": 0, - "x": 642, - "y": 261, + "x": 476, + "y": 270, "zOrder": 11, "numberProperties": [], "stringProperties": [], @@ -1234,70 +1393,6 @@ } ], "objects": [ - { - "assetStoreId": "", - "name": "NewSlider", - "tags": "", - "type": "PanelSpriteSlider::PanelSpriteSlider", - "variables": [], - "effects": [], - "behaviors": [], - "content": { - "BarTopPadding": 3, - "BarBottomPadding": 3, - "BarLeftPadding": 9, - "BarRightPadding": 9, - "MaxValue": 100, - "InitialValue": 50 - }, - "childrenContent": { - "Background": { - "bottomMargin": 6, - "height": 15, - "leftMargin": 11, - "rightMargin": 11, - "texture": "assets\\Health Bar Box.png", - "tiled": true, - "topMargin": 6, - "width": 96 - }, - "FillBar": { - "bottomMargin": 0, - "height": 8, - "leftMargin": 0, - "rightMargin": 0, - "texture": "assets\\tiled_Health Bar Fill.png", - "tiled": false, - "topMargin": 0, - "width": 32 - }, - "Label": { - "bold": false, - "italic": false, - "smoothed": true, - "underlined": false, - "string": "It displays the value when it changes.", - "font": "", - "textAlignment": "", - "characterSize": 20, - "color": { - "b": 211, - "g": 211, - "r": 211 - } - }, - "Thumb": { - "bottomMargin": 6, - "height": 32, - "leftMargin": 8, - "rightMargin": 8, - "texture": "assets\\Energy Bar.png", - "tiled": false, - "topMargin": 6, - "width": 16 - } - } - }, { "assetStoreId": "", "name": "SquareBlueSlider", @@ -1319,7 +1414,7 @@ "height": 18, "leftMargin": 2, "rightMargin": 2, - "texture": "assets\\Sliders\\Wesley\\Square Slider Blue Border.png", + "texture": "assets\\Sliders\\Wesley\\Square Blue Slider Border.png", "tiled": false, "topMargin": 4, "width": 215 @@ -1329,7 +1424,7 @@ "height": 11, "leftMargin": 1, "rightMargin": 1, - "texture": "assets\\Sliders\\Wesley\\Square Slider Blue Fill Bar.png", + "texture": "assets\\Sliders\\Wesley\\Square Blue Slider Fill Bar.png", "tiled": false, "topMargin": 1, "width": 11 @@ -1354,7 +1449,7 @@ "height": 21, "leftMargin": 3, "rightMargin": 3, - "texture": "assets\\Sliders\\Wesley\\Square Slider Blue Thumb.png", + "texture": "assets\\Sliders\\Wesley\\Square Blue Slider Thumb.png", "tiled": false, "topMargin": 3, "width": 21 @@ -1382,7 +1477,7 @@ "height": 18, "leftMargin": 2, "rightMargin": 2, - "texture": "assets\\Sliders\\Wesley\\Square Slider Green Border.png", + "texture": "assets\\Sliders\\Wesley\\Square Green Slider Border.png", "tiled": false, "topMargin": 4, "width": 215 @@ -1392,7 +1487,7 @@ "height": 11, "leftMargin": 1, "rightMargin": 1, - "texture": "assets\\Sliders\\Wesley\\Square Slider Green Fill Bar.png", + "texture": "assets\\Sliders\\Wesley\\Square Green Slider Fill Bar.png", "tiled": false, "topMargin": 1, "width": 11 @@ -1417,7 +1512,7 @@ "height": 21, "leftMargin": 3, "rightMargin": 3, - "texture": "assets\\Sliders\\Wesley\\Square Slider Green Thumb.png", + "texture": "assets\\Sliders\\Wesley\\Square Green Slider Thumb.png", "tiled": false, "topMargin": 3, "width": 21 @@ -1445,7 +1540,7 @@ "height": 28, "leftMargin": 2, "rightMargin": 2, - "texture": "assets\\Sliders\\Wesley\\Square Slider White Border.png", + "texture": "assets\\Sliders\\Wesley\\Square White Slider Border.png", "tiled": false, "topMargin": 4, "width": 265 @@ -1455,7 +1550,7 @@ "height": 16, "leftMargin": 0, "rightMargin": 0, - "texture": "assets\\Sliders\\Wesley\\Square Slider White Fill Bar.png", + "texture": "assets\\Sliders\\Wesley\\Square White Slider Fill Bar.png", "tiled": false, "topMargin": 0, "width": 16 @@ -1480,7 +1575,7 @@ "height": 36, "leftMargin": 1, "rightMargin": 1, - "texture": "assets\\Sliders\\Wesley\\Square Slider White Thumb.png", + "texture": "assets\\Sliders\\Wesley\\Square White Slider Thumb.png", "tiled": false, "topMargin": 2, "width": 22 @@ -2018,7 +2113,7 @@ "height": 15, "leftMargin": 11, "rightMargin": 11, - "texture": "assets\\Health Bar Box.png", + "texture": "assets\\Resource bars\\Copper Bar Border.png", "tiled": true, "topMargin": 6, "width": 96 @@ -2028,7 +2123,7 @@ "height": 8, "leftMargin": 0, "rightMargin": 0, - "texture": "assets\\tiled_Health Bar Fill.png", + "texture": "assets\\Resource bars\\tiled_Health Bar Fill.png", "tiled": false, "topMargin": 0, "width": 32 @@ -2053,7 +2148,7 @@ "height": 32, "leftMargin": 8, "rightMargin": 8, - "texture": "assets\\Energy Bar.png", + "texture": "assets\\Resource bars\\Metal Bar Border.png", "tiled": false, "topMargin": 6, "width": 16 @@ -2485,6 +2580,11 @@ ] } ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [] } ], "layers": [ @@ -2533,7 +2633,7 @@ "gridColor": 10401023, "gridAlpha": 0.2, "snap": true, - "zoomFactor": 0.9985039886066421, + "zoomFactor": 0.7699518302210852, "windowMask": false }, "objectsGroups": [ @@ -2582,13 +2682,22 @@ "name": "RedFlatBar" }, { - "name": "YellowFlatBar" + "name": "OrangeFlatBar" }, { "name": "GreenFlatBar" }, { "name": "BlueFlatBar" + }, + { + "name": "WoodNoShadowBlueBar" + }, + { + "name": "WoodShadowBlueBar" + }, + { + "name": "MetalYellowBar" } ] } @@ -2603,8 +2712,8 @@ "name": "PlusKey", "persistentUuid": "75acefa2-30d2-45f3-8955-bdbcc059a348", "width": 0, - "x": 422, - "y": 82, + "x": 638, + "y": 90, "zOrder": 25, "numberProperties": [], "stringProperties": [], @@ -2618,8 +2727,8 @@ "name": "MinusKey", "persistentUuid": "68d80c16-a4fc-4793-aa38-eb458b7c1a28", "width": 0, - "x": 322, - "y": 82, + "x": 538, + "y": 90, "zOrder": 26, "numberProperties": [], "stringProperties": [], @@ -2633,8 +2742,8 @@ "name": "UnitsBar", "persistentUuid": "cd7ae08a-3045-436b-bda9-beda9d2b55db", "width": 200, - "x": 408, - "y": 160, + "x": 1016, + "y": 56, "zOrder": 39, "numberProperties": [], "stringProperties": [], @@ -2648,8 +2757,8 @@ "name": "ContinousBar", "persistentUuid": "60a7c4ed-31bf-44a9-8513-09c9bfd8eb42", "width": 194, - "x": 368, - "y": 448, + "x": 360, + "y": 327, "zOrder": 40, "numberProperties": [], "stringProperties": [], @@ -2663,8 +2772,8 @@ "name": "NoBackgroundUnitsBar", "persistentUuid": "850c5ba6-8615-4217-bc65-f0b4a149b4cc", "width": 96, - "x": 240, - "y": 320, + "x": 88, + "y": 88, "zOrder": 41, "numberProperties": [], "stringProperties": [], @@ -2678,8 +2787,8 @@ "name": "UnitsBar", "persistentUuid": "20b69c52-a1a2-4f22-b7b7-4560d4da8dcb", "width": 0, - "x": 184, - "y": 176, + "x": 792, + "y": 72, "zOrder": 42, "numberProperties": [], "stringProperties": [], @@ -2693,8 +2802,8 @@ "name": "ContinousBar", "persistentUuid": "a4664301-98a6-419b-a0d5-c5028371de9c", "width": 0, - "x": 224, - "y": 464, + "x": 216, + "y": 343, "zOrder": 43, "numberProperties": [], "stringProperties": [], @@ -2708,8 +2817,8 @@ "name": "NoBackgroundUnitsBar", "persistentUuid": "a4a16b93-f588-4324-b306-5f85919b34ab", "width": 208, - "x": 368, - "y": 296, + "x": 216, + "y": 64, "zOrder": 44, "numberProperties": [], "stringProperties": [], @@ -2723,8 +2832,8 @@ "name": "NoLabelContinousBar", "persistentUuid": "e7d18ac3-25ec-477d-86dd-c7e055964917", "width": 176, - "x": 384, - "y": 520, + "x": 376, + "y": 399, "zOrder": 46, "numberProperties": [], "stringProperties": [], @@ -2738,8 +2847,8 @@ "name": "NoLabelContinousBar", "persistentUuid": "a55d7eb7-5856-4e57-9a53-e6eb6731dbfe", "width": 0, - "x": 224, - "y": 544, + "x": 216, + "y": 423, "zOrder": 47, "numberProperties": [], "stringProperties": [], @@ -2753,8 +2862,8 @@ "name": "NoBufferContinousBar", "persistentUuid": "7089d4c5-79a2-47e6-876b-f78887bb43fb", "width": 0, - "x": 224, - "y": 393, + "x": 216, + "y": 272, "zOrder": 48, "numberProperties": [], "stringProperties": [], @@ -2768,8 +2877,8 @@ "name": "NoBufferContinousBar", "persistentUuid": "7c30a69a-005e-4388-87fb-11758e8ed614", "width": 184, - "x": 376, - "y": 377, + "x": 368, + "y": 256, "zOrder": 48, "numberProperties": [], "stringProperties": [], @@ -2783,8 +2892,8 @@ "name": "BronzeBrownBar", "persistentUuid": "fdee4ae8-1e59-4022-97f7-edef3962666a", "width": 144, - "x": 622, - "y": 327, + "x": 600, + "y": 197, "zOrder": 51, "numberProperties": [], "stringProperties": [], @@ -2798,8 +2907,8 @@ "name": "BronzeGreenBar", "persistentUuid": "0a10c628-7329-4865-af9e-59f9d45e6791", "width": 0, - "x": 622, - "y": 368, + "x": 600, + "y": 238, "zOrder": 52, "numberProperties": [], "stringProperties": [], @@ -2813,8 +2922,8 @@ "name": "GoldGreenBar", "persistentUuid": "f8bab57d-0139-42b5-8051-14cfc7a82ec5", "width": 0, - "x": 622, - "y": 407, + "x": 600, + "y": 277, "zOrder": 54, "numberProperties": [], "stringProperties": [], @@ -2828,8 +2937,8 @@ "name": "BlueDotBar", "persistentUuid": "00dcd7ac-7574-44ff-9400-f5f6e9e4f3c5", "width": 192, - "x": 624, - "y": 504, + "x": 602, + "y": 374, "zOrder": 55, "numberProperties": [], "stringProperties": [], @@ -2843,8 +2952,8 @@ "name": "GreenDotBar", "persistentUuid": "d2d99c92-6438-4ce2-8d6a-77eddc5c01fd", "width": 0, - "x": 624, - "y": 544, + "x": 602, + "y": 414, "zOrder": 56, "numberProperties": [], "stringProperties": [], @@ -2858,8 +2967,8 @@ "name": "RedFlatBar", "persistentUuid": "94173da0-5340-4338-a404-d00c90af48f7", "width": 0, - "x": 800, - "y": 376, + "x": 778, + "y": 246, "zOrder": 57, "numberProperties": [], "stringProperties": [], @@ -2870,11 +2979,11 @@ "customSize": false, "height": 0, "layer": "", - "name": "YellowFlatBar", + "name": "OrangeFlatBar", "persistentUuid": "9f9ee6f3-8c2c-4c43-b48b-750ceae5a6f2", "width": 0, - "x": 800, - "y": 432, + "x": 778, + "y": 302, "zOrder": 58, "numberProperties": [], "stringProperties": [], @@ -2888,8 +2997,8 @@ "name": "GreenFlatBar", "persistentUuid": "934dc425-93f9-4aaf-8cd3-0fe36a08ca38", "width": 0, - "x": 800, - "y": 488, + "x": 778, + "y": 358, "zOrder": 59, "numberProperties": [], "stringProperties": [], @@ -2903,8 +3012,8 @@ "name": "BlueFlatBar", "persistentUuid": "a47c9a12-1ac0-49e8-bb08-789ba792bb71", "width": 0, - "x": 800, - "y": 544, + "x": 778, + "y": 414, "zOrder": 60, "numberProperties": [], "stringProperties": [], @@ -2918,8 +3027,8 @@ "name": "RedFlatBar", "persistentUuid": "8a527c5e-1ec6-4012-b4b6-85315d4513d2", "width": 328, - "x": 664, - "y": 608, + "x": 642, + "y": 478, "zOrder": 57, "numberProperties": [], "stringProperties": [], @@ -2933,12 +3042,87 @@ "name": "GoldDarkBar", "persistentUuid": "3401cf4b-20c1-4fd6-bea5-4a8f1e857761", "width": 0, - "x": 623, - "y": 447, + "x": 601, + "y": 317, "zOrder": 61, "numberProperties": [], "stringProperties": [], "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "WoodNoShadowBlueBar", + "persistentUuid": "b2406dd7-6261-4d56-8ddb-5a8673e1a1b3", + "width": 0, + "x": 155, + "y": 468, + "zOrder": 62, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "WoodShadowBlueBar", + "persistentUuid": "fdd12973-6e27-4e10-ba04-2de9d4d8e722", + "width": 0, + "x": 155, + "y": 527, + "zOrder": 63, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "MetalYellowBar", + "persistentUuid": "f13421c8-9742-4651-ba61-be44929f2df6", + "width": 0, + "x": 232, + "y": 197, + "zOrder": 64, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 48, + "layer": "", + "name": "MetalYellowBar", + "persistentUuid": "acec9b5a-8858-43bc-a11c-dc3f26c6afc6", + "width": 136, + "x": 400, + "y": 183, + "zOrder": 65, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 88, + "layer": "", + "name": "WoodNoShadowBlueBar", + "persistentUuid": "e76e7f40-c5d3-459f-9079-2631720a63bc", + "width": 448, + "x": 112, + "y": 592, + "zOrder": 66, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] } ], "objects": [ @@ -3146,7 +3330,7 @@ "height": 15, "leftMargin": 11, "rightMargin": 11, - "texture": "assets\\Health Bar Box.png", + "texture": "assets\\Resource bars\\Copper Bar Border.png", "tiled": true, "topMargin": 6, "width": 96 @@ -3156,7 +3340,7 @@ "height": 8, "leftMargin": 0, "rightMargin": 0, - "texture": "assets\\tiled_Energy Bar Fill.png", + "texture": "assets\\Resource bars\\Shaded Yellow Fill Barl.png", "tiled": false, "topMargin": 0, "width": 32 @@ -3166,7 +3350,7 @@ "height": 8, "leftMargin": 0, "rightMargin": 0, - "texture": "assets\\tiled_Health Bar Fill.png", + "texture": "assets\\Resource bars\\tiled_Health Bar Fill.png", "tiled": false, "topMargin": 0, "width": 32 @@ -3212,7 +3396,7 @@ "height": 15, "leftMargin": 11, "rightMargin": 11, - "texture": "assets\\Health Bar Box.png", + "texture": "assets\\Resource bars\\Copper Bar Border.png", "tiled": true, "topMargin": 6, "width": 96 @@ -3222,7 +3406,7 @@ "height": 8, "leftMargin": 0, "rightMargin": 0, - "texture": "assets\\Health Bar2.png", + "texture": "", "tiled": false, "topMargin": 0, "width": 32 @@ -3232,7 +3416,7 @@ "height": 8, "leftMargin": 4, "rightMargin": 4, - "texture": "assets\\Health Bar2.png", + "texture": "assets\\Resource bars\\Copper Bar Red Fill.png", "tiled": false, "topMargin": 3, "width": 32 @@ -3277,7 +3461,7 @@ "height": 15, "leftMargin": 11, "rightMargin": 11, - "texture": "assets\\Health Bar Box.png", + "texture": "assets\\Resource bars\\Copper Bar Border.png", "tiled": true, "topMargin": 6, "width": 96 @@ -3287,7 +3471,7 @@ "height": 8, "leftMargin": 0, "rightMargin": 0, - "texture": "assets\\tiled_Energy Bar Fill.png", + "texture": "assets\\Resource bars\\Shaded Yellow Fill Barl.png", "tiled": false, "topMargin": 0, "width": 32 @@ -3297,7 +3481,7 @@ "height": 8, "leftMargin": 0, "rightMargin": 0, - "texture": "assets\\tiled_Health Bar Fill.png", + "texture": "assets\\Resource bars\\tiled_Health Bar Fill.png", "tiled": false, "topMargin": 0, "width": 32 @@ -3789,7 +3973,7 @@ }, { "assetStoreId": "", - "name": "YellowFlatBar", + "name": "OrangeFlatBar", "tags": "", "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "variables": [], @@ -3831,7 +4015,7 @@ "height": 24, "leftMargin": 0, "rightMargin": 0, - "texture": "assets\\Resource bars\\Wesley\\Flat Bar Yellow Fill Bar.png", + "texture": "assets\\Resource bars\\Wesley\\Flat Bar Orange Fill Bar.png", "tiled": true, "topMargin": 0, "width": 24 @@ -3846,9 +4030,9 @@ "textAlignment": "center", "characterSize": 16, "color": { - "b": 0, - "g": 124, - "r": 185 + "b": 255, + "g": 255, + "r": 255 } } } @@ -3984,6 +4168,201 @@ } } } + }, + { + "assetStoreId": "", + "name": "WoodNoShadowBlueBar", + "tags": "", + "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "InitialValue": 8, + "MaxValue": 16, + "BarTopPadding": 8, + "BarRightPadding": 10, + "BarBottomPadding": 8, + "BarLeftPadding": 10, + "PreviousHighValueDuration": 0 + }, + "childrenContent": { + "Background": { + "bottomMargin": 8, + "height": 35, + "leftMargin": 10, + "rightMargin": 10, + "texture": "assets\\Resource bars\\Wood Bar Frame_No Shadow.png", + "tiled": true, + "topMargin": 8, + "width": 397 + }, + "Buffer": { + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "rightMargin": 0, + "texture": "", + "tiled": true, + "topMargin": 0, + "width": 32 + }, + "FillBar": { + "bottomMargin": 9, + "height": 19, + "leftMargin": 6, + "rightMargin": 6, + "texture": "assets\\Resource bars\\Blue Fill Bar.png", + "tiled": false, + "topMargin": 9, + "width": 19 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "8 / 16", + "font": "", + "textAlignment": "center", + "characterSize": 16, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + } + } + }, + { + "assetStoreId": "", + "name": "WoodShadowBlueBar", + "tags": "", + "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "InitialValue": 8, + "MaxValue": 16, + "BarTopPadding": 11, + "BarRightPadding": 15, + "BarBottomPadding": 11, + "BarLeftPadding": 13, + "PreviousHighValueDuration": 0 + }, + "childrenContent": { + "Background": { + "bottomMargin": 11, + "height": 41, + "leftMargin": 13, + "rightMargin": 15, + "texture": "assets\\Resource bars\\Wood Bar Frame_Shadow.png", + "tiled": true, + "topMargin": 11, + "width": 405 + }, + "Buffer": { + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "rightMargin": 0, + "texture": "", + "tiled": true, + "topMargin": 0, + "width": 32 + }, + "FillBar": { + "bottomMargin": 9, + "height": 19, + "leftMargin": 6, + "rightMargin": 6, + "texture": "assets\\Resource bars\\Blue Fill Bar.png", + "tiled": false, + "topMargin": 9, + "width": 19 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "8 / 16", + "font": "", + "textAlignment": "center", + "characterSize": 16, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + } + } + }, + { + "assetStoreId": "", + "name": "MetalYellowBar", + "tags": "", + "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "PreviousHighValueDuration": 0, + "InitialValue": 8, + "MaxValue": 16, + "BarTopPadding": 7, + "BarLeftPadding": 9, + "BarBottomPadding": 7, + "BarRightPadding": 9 + }, + "childrenContent": { + "Background": { + "bottomMargin": 7, + "height": 26, + "leftMargin": 9, + "rightMargin": 9, + "texture": "assets\\Resource bars\\Metal Bar Border.png", + "tiled": false, + "topMargin": 7, + "width": 78 + }, + "Buffer": { + "bottomMargin": 0, + "height": 12, + "leftMargin": 0, + "rightMargin": 0, + "texture": "", + "tiled": false, + "topMargin": 0, + "width": 12 + }, + "FillBar": { + "bottomMargin": 0, + "height": 12, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Resource bars\\Shaded Yellow Fill Barl.png", + "tiled": false, + "topMargin": 0, + "width": 12 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "8 / 16", + "font": "", + "textAlignment": "center", + "characterSize": 12, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + } + } } ], "events": [ @@ -17682,7 +18061,7 @@ }, { "value": "Center-center", - "type": "Number", + "type": "String", "label": "", "description": "Only used by the scene editor.", "group": "", @@ -17694,7 +18073,7 @@ }, { "value": "Center-right", - "type": "Number", + "type": "String", "label": "", "description": "Only used by the scene editor.", "group": "", @@ -22402,7 +22781,6 @@ "description": "Check if is checked.", "fullName": "Is checked", "functionType": "Condition", - "group": "Switch finite state machine configuration", "name": "IsChecked", "sentence": "_PARAM0_ is checked", "events": [ @@ -22446,7 +22824,6 @@ "description": "Change if is checked.", "fullName": "Is checked", "functionType": "Action", - "group": "Switch finite state machine configuration", "name": "SetChecked", "sentence": "_PARAM0_ is checked: _PARAM1_", "events": [ From 2510a21698715762e76abd8ba45af04e4a69e8bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Wed, 18 Jan 2023 13:02:15 +0100 Subject: [PATCH 74/98] Down-scale the green slider. --- ...mall Plastic Green Round Slider Border.png | Bin 0 -> 5735 bytes ...Small Plastic Green Round Slider Thumb.png | Bin 0 -> 5863 bytes ...all Plastic Green Square Slider Border.png | Bin 0 -> 1473 bytes ...mall Plastic Green Square Slider Thumb.png | Bin 0 -> 1074 bytes examples/resource-bar/game.json | 481 +++++++----------- 5 files changed, 195 insertions(+), 286 deletions(-) create mode 100644 examples/resource-bar/assets/Sliders/JellyCat/Small Plastic Green Round Slider Border.png create mode 100644 examples/resource-bar/assets/Sliders/JellyCat/Small Plastic Green Round Slider Thumb.png create mode 100644 examples/resource-bar/assets/Sliders/JellyCat/Small Plastic Green Square Slider Border.png create mode 100644 examples/resource-bar/assets/Sliders/JellyCat/Small Plastic Green Square Slider Thumb.png diff --git a/examples/resource-bar/assets/Sliders/JellyCat/Small Plastic Green Round Slider Border.png b/examples/resource-bar/assets/Sliders/JellyCat/Small Plastic Green Round Slider Border.png new file mode 100644 index 0000000000000000000000000000000000000000..0e438812fe25b7062b6eb44a3b202b2c788f82fc GIT binary patch literal 5735 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 IZJUVy0g4LZwEzGB literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Sliders/JellyCat/Small Plastic Green Round Slider Thumb.png b/examples/resource-bar/assets/Sliders/JellyCat/Small Plastic Green Round Slider Thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..d05854a5bbe88e9a0be8839dd7fdbdaf34929fbc GIT binary patch literal 5863 zcmVA#cb2=>t);uFXX#})J-axhI9x)tsTd{^QAyOnYB!|;`_w;mkb#+zUTXpw)&pCOx zx2mg$;wqBE9N-LUP}NoU`~UC%&%YglPk)heb4}B1&UuwFR&gB1nVFfHvMj5vX___p z2TCcGWmz1Cq1Wwp-N9fmlu`yl2tUiR5I_z<0#Kj!gMM0zQc6wJG+U=npT4-bxcJ1y zix(f5nVC6n7{+nVc?AGdN-?DrQA$mMhf+#PDP^ALG7LjMilTO>(^*+vUA?ipyZf^{ zckaBKrs;u{G6o>N2;d0-W*ElQ;^N{%k3atS^N&38$a9Y4oXYdu3d4|xVTd@6kt7MS zEQ1hY1orSt2pLHalu|Ipz&Qu!9F$Taga}>N-MV$_)=SIF%P;Qk?!J*_S-)h2x)SsUu*&nvs?dwv? z!N+C6#|6(DjmE+^zVVHJ{Oq&Oem9Du*6rK3Nw3#~>$+H8UdGDG3gS41rfINk8+O%1 zCpCUY$+H9U&lM|yaV6&q3b%T^$KQASvYpV!10S5tpy#mmWgV^Mx|=QvQ3zl0o~A{ za}As_P*5nTkmnhO!x($(0e0TX;jS|zT@x}R@H`L0;Skko6;o4F&@>H{QV1dPcDw!Z zE3drr+ud&WWu;X7QCL7eBF*iqSFirP?|=XMzbk~eZ*6Uj92^{Ab8{2F_{A^K>-E4G zL&dRi?6ifmPnnp#-$3KIjcVP7<5)0l6S`46ETM(1Q(D-&u4&M91CD0F(Hxk>fKUQ{ zK1A0WVC^jr@BZ%;S*Hdi2|D{71VMmCqk($84oWGMQfe?5Y`*^b>%YCezW!gOl>Uba z;KRTZ&bjm4bI*O}+u#27Z}t2AW9#ed==b}$dGjXTc;gKSAy9EDXwKR=bJfJc6$4Wz zEKIeksMQ^428V)zk`huWC`dpZJ{2J-1wp|%hhgZbR;rk`8)%tRsL>iym0-);#cMy^ z#qwVWkf4q{6WHC|g{Enko}LC{3{pyjVR-Q7n{WP`rKP3+BBk^`NC51^H2(ba&;Q1E zzx&Z^F`t+zl3LAB=K%wrXN`R~|R_;Lj^^EEV&)nPj(Kox`( zkV-&80FWR=flw5i72rV>BqW5$k)#QHKR|Ej;vnoHAQ5U>6{qb5oIBsb%p($={yqjf z1Se0-A&Mfnt~>Svnx@&UR_kh>=fhsF_qI|h{n+3MA?A}$KKT#6_r34^Uc23HuC1+M ze}5m>uV2U7+8Q|Ls83aJ;h739e$7VfR0T69>!?jR;2Hy{0-*|oDKJXF7y%t`6r1Ak zbtwp13PVVNG)XYvzge*c!Z{l3#KFmE}!NndnZVYhZ*cF?Ab!=~ML)UdoA9wJjU$0>C zaSN^43YsVCu&X8*C!ib!SWdt=0pTS$N*THtQod#cgpPy&NF|XZ3EW_SZr+1t zXgFsq;`GG^#7rOWzPg9$>Ivw&j{W_8Se6CG7#L&r)YR0Y2L}f?!Z6${!{ZMHPo}4* z7k~WYAOC@-Xy5 zgh^HaK$hkh#6zTdiqpm^%q~>X&UUf#s*Cx#1@wA7Ff9{v7b`gXq>1Ldg_*e;stpsG!3w%F zfU*htPJsSIaW^T?;nFM)Spg6Q*Uc=JHCVE>6&1MrjJ3FXUDx>7c zFbw15&d$zDLWsdQ4W0Ns?JHmT%5$erpMH9Kdz%D7fc5ot92^{gF$Sk@VE&4ZYD>fP zu?n2J1#U1ft?=H29cl^WlY_oH3K`MA@ExVor!_aa3 zyn)(rj#|@1b;^crGH_mKoUlnp_9+2>9~O)RKp6n4FbsUW+g(DSLfk)l8V~+02Rpml zXf~UOq6lf4f>H{@FwE1ZPk)DVery!njli?ZmoHyEb?VgBy}doeag3Ff6?mQp&N-ZE z1II6DaHcfWn>I{a1LG8wlcNrd;*6nslk|fyO-G%S_pp?RLG)yfpSXB;Z%7kGRS|{u% zaPoP8pQsRyd;z6JL^$*VYzDVsQyX9Y>TzV;Ly{!0Z5#c5AB2#R?LT9h<^oEh();hf z|1rz5W?k1smSx!5+Jcm_aC9vW!y&M18f?b^*H{sv9yy!wxvsnEPbeTnhJCjKUxk>N zZs7PuHV$}P*M$%Qj4@c2HPdRf{ssU}2_gEz!os6b6d6$zAxRSK@9%>U0!`OYonbH? z2D_%iu=tp2_&n+UzVyct*7;$GUgDx|R&nOh8U}tJoO2{ef;3G*2!XEadbL`8m=I!6 z!!T->FJFE%2m+d>DSEvgk|ZfUXfil66sFB!IXX0*l_BfB)B4>~7-=6A$ny;S$c0XH zoV_vy#fzdT=Nz8rjp~J@)oMM)IiI4O^IEM|JLCI4q?G7(yAVQv5CW^ppjQZt3Lks; z!_e~{Y5nf*zyu4VlJJ57Qsii~DrlWyh@uFba}0+=D5XaA#CbwUjXI9g&@`={BngBN zM?d6HaGgT87<7Y|+1M!Ry0_RT@sFvmfGCO)k&(pJK z&z>iQ7-^b92m#;s%Nja?ZUT%0n$Ey9R?uq_^u0zuqW**=@;pb71|XEcX>nwEVe4TS zj?3kYF|AUmoTsK~wuBHY&vPiH5XbSjfxz^l_`o;?rR2yFgD(c|_flU-#CZxy0JBDs ziwsgqq-hGJ)Tm^}D5cY!F;)>mkWm*U&-241f|h6LC~lwB_7_C}MeaB+ema!Gw{$m+vd3RK~L`^8u()R;Fo1#;2r$$P{Fz zAo5Y!`HL(7HU3vgg(OW82RWcnm_cdErFko*R7m4E?klCl=uN{gO6e%%i9(hNs4YBdl-#^94cA{^w1q8w7lQuFEyq5SbPj2WpwC_xgZ81zGU?YuC7GP^7LdPvhW zbX|9Y3L%D`=WTM%K?uRr)YPc=h1i#fhXSFOAsQseGYKWt_=mnI)K}w8KnX(}#u#>E z^fq$jd5$DW&}cNqr&*e&dqN10rfKReFE9U`F{UV`Xf~VBb-gGPCpjWlA#`*2UV1Q-s4q?V}8el)9(b3(d>I!xKgy$|8u3j!jU6aN!eI(;SD<$%!NKhS?m>t& z7LejD`peHA_}z4uLO}?HIE>+T18n~yM*ns`E@FJ?OJ4#Z1aTb0^Sq^QxBC)`5w^p2 zl@KBpLa@`PPyc$+ujCM-n0`=FL1qNHML{({w+XC@RunkOjBngsRi8m=YXZ0|otw-7 zkt>KyA`UZj_lG#R9pdd5BMc5=gkgyD=g;HJnKQ`q9IoqTYinzN*zfoM>^S0AA8u zWD04Nqu24#-Sx5ZR}r?~j^O(N48y<^Pdou#*Wvp<_V@SSURzuHtvt^=qXYU#qf!VF z1wr7RI(6zA=iKC+L)Ufe?Ccc5L8Qt&Ux6}!n*@f%!L(8U6Nt$~{`*OUFd0Xv393s` zXgp6P(kMs&pa8!4^BA{&62c!8gN_e9^blreXOSccdc9t_va<3!uIv6}r1f9cqLx7r zv~Am-Z8n=%2qCmyuR{odPN!281;QePR8Sy9g6V*!b1=>h8yJVRg+d7GBMLzs%^OBF z1|^F`OA0{dMY0tK8QfCiyYI$$=YNIpx*^gu#rgB+@z6sLK}reF^VH7H&i~lh*!Xu! zDenV^6O>Yk>$m5J$P$5Ykf6Kgqr2ndU^Btn|1&^$H$WW6n46o!6Hhz=#u$9x zN4wo#URqlE=Sh;ReCT8b0F|bx>v`Ut+1c5zan7rpbF^A5bUMZSo5&;*zj&xTl@NI` zZN)eNEmKFL%HrBso8)LneD}s=j9#81qhl;DKqp~_p&R31XNcZTfc8p^cU}sxzvYkP z_ottJ8n$gC3_~0o9Q0RKR{mwb-~aPpHk9;!14%Lr!#i1)xid2}PjSvI!!XclwJ>U5 z=b1z_5Mz&<#S(dzLrPJUwo4zNKn^uNnS@M&9UYgWNKK&d=0YORB$7}d@M84#0~~A* z(c6u1=j{aVyyWBHPJlE`F+Dwvr=EHWjYb1e6rtPg25W0;zrVY?`^QSD@MDdlDW&p$ zzrU=M%9_pQAc~USS4sygnhBV0_ayix_j({YGASc1f z!k!CyD`aVoI4lyX{=SdSogogk1N3$hY`z}j*8dq|&?}tV+}s?VdFGi(;PJ-B#vg5N zZvJ~IrTc#A7yDq3tI}?_`?e4wnx3A1lrd(Srir<^IY=qd@Ar{sIig{X$dgFpLQByw zM>tFo1qtFPMV92qGg#xmvQ03g(8jhee`<0-p0np zA8c)H{gITii(hf}c2WTL%*@Q+eE8vqf3w+aUePp-jyfSrOG{W6m_}jO8LHD7 zsx1vxgBQRZ2E(S{CI#1M*;~grOwBU|kxC??L^R0Z?Pciiq;U6Aq)}0Nwk!+h&Yi=h zOP65V_Gt7>9UL4iudc5CPPg0r?^4PkKBcMa$)#7T)k~KyUHWIIPM!MumSxpO6(G;^ zaP#I(Y;0^Gj^naB0#Ht2RT(M`4y#@WK)2}OfI}G%h`cD7MT0`q!)`Xt9!G`Mg@py& zfB*exG#U^>jC@bnZnytzV`Jmr`o8}LfaIf=SUyPrN*QC*Cr+Gr?$V`8|73c4`eDN` zj8S!TI2>YodmFcJ-$t+38{exLb#}?91H{Uin(^(5(lM50vT}kFjYb3W^Yd6(SU|N} zg%AR993u#Vtk>(^+}hgukDX5EPlXT%_?Q=uK56t#0BE|d&(6-yetmIq@r6dC@t|QC zmZoWBR0t_OFI?BfU@$-s1W1x(+(8+8-SUo&uIs2&DyY?JsMqUgwOX*O;ucz-=ZNDN zVHn1q=PmE-?EK08{{DYUl4P?y!__AN@vAn-bWPKaA3JvJ*^?(v{_S$+rKRh-!5AZ> z8&l&@^{$&$N4{(#{vEZMvMf_cl4M~R_WJ$)|Lt@-FLt}#KhLskM=6!y9^J0G`+FFr z)G$<+6XBaT4gYDXE(QEHMxz9 z9pv8QQdncHGMkLr$D>(kOvo+L9)IlnJn#FS=lp)Z_x#TH`*}~MtFzr<8D$v&z+pTN z>kfdZJRDm}Ny4W;<9-T!Nk`#)ZULZpa{m^=yK8=elgL<`%dysx;o(6MvA{Ye=z45W zAS&TzY%t0W@8s&8CVLD331>X^k|$|Kz#EU4x~zJ4WphiFU-NJT=V?=YB2ChZV2L@~ zZj3>DW0rhaSr@6)!DQ36iRXHGHFw)Gr|=`jWQx0I8ck((i2P+UnxL<*Pf^LS?ZY?~ zGK%Q1hlo;l`|R!Hz4oN-)de+|DvPh77FBXYdbu(HQ4NUOirGWEuNu5lJGEUZ>HgiM zm9g0K0&W~nYk1TfW^~ihhVOTVWQ09Gwf>48K6Is-Ym|H3+`aFuH{DJ5WN}bkwT^Ms zgqN2BS_Jgx<8^h@QNkY1#KijU_F51w&_|0%kH(nS>Bv-6R@xW%_fgIW&2Jn5)D!Mp zwng&RgY9H}eB#E(*M=It7~8=x6OX>P+>w#YFJJfA+9H5DplIbPb!lnCp|fm{rRU(p z@IVqjFY_+c7R^jb+)w~iv1$L|$MyC>K1|+UQAF&Zl9yL89WA5&!uK?Pc61n;7DW=7 zT+R*aW6qm=|EF(**~CIQQ5iNXkHvQFMY7NuEImIm0y?T1f&D!+wRGKLDKS7l2o`R& z`3Q}ip-CMFHADf}&!N(wrdV+RP#SPRlLFu(7S2|2;=X3+*5(Kw9tPkzGrmdK`Q9iK zW+Yg_F!;av-9tNUSIh03Vz^ju_;g}I)dB7E0Q_CWR9j5p#=YS^&vw?WV}_nlJV+L1 zN&~QgK#(g#&noFmtTp{iFp!rgzT{6-c^#DyfgAXS($p%_8s}tHUzV04(i_>V z>A5i-2>=?IQ|jV(5GA4UQkQJpg3l_w@J(WzqiD;w+}re@+gYe;)r0nUH**Ww@qFS@ zs8C84!phaltG+%2Dd{xzBB{?rqivy$>?R1jeieJANeOaxD~5xHO1#sip+}WkR~=Hi zN)mV>PfEv-oF9k^9+x#N&Jy{@vR zTM2!&3;VdB=mNl}Ct?JZ*D1$U_rY@P2$!?PL0E7&KSvGP0fY;~V*G(6F?Z zdXLtIn<1f40GRIP1vBImvS>vGqbyIlTlNrvjDpxw2XdwGt8Sa;-Me@5{r&uE0!8}e;zd~RRloiITmNu{&9k4MpUcS08%ywf~PNpG&W84~u-o zHb?x3XK#Kmdql6fsR@&sP3?2d=+aEnSCrqfzGrTsQF<}RP_Q||LSDt`U@wCUw%b7uJbp7w*)*_UDU`7-s(R`MPB zHS6cRpM2IYrhC~QjwZ&Yj>ONUb|Uq=g`d@J&D?AL^v0G8=Ji)T+UIf3|3Cuze}B96 zWJ$B{mff2qBX)mUo;F$OdDpY4@4p|tu0K!Z507zXT*UMED5v?Y0%vDvmtQmdeq4Il zwIh2RMCULi`5K*!GW|4}<=K{J87pob{xEso6}9uLE_NtcFc)6i^))++KVZ$PnG3vR zy{@!BnBAVd^hnT3uA?PFPE*2;p36V(FB-CfYblptZ(02wx5c{x-6~H$I6C3Yt;c(^ zn>x0at5hD)3OY1{1-R|0p4cDIbrORH(DN^L{4`WVET+vuB zTvN-hI%&Sv;qFBzHyClpZToqv_pD!1;REMd6Kf{LJ$C0DL)YqfuU^$9z{JkZ&VBf2 ze(vu@aqA+dEnF2Gf8z6=7vFzdN$}_#>-hff;=j3jckMcKMxxg(Elo>WS~`C1+O@T@ p(^8*b?ESH5vX3brTeJLsHWRmhC0i#QSqseX44$rjF6*2UngHKv{gD6w literal 0 HcmV?d00001 diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 78ae7f519..df9548362 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -109,45 +109,6 @@ "name": "gdevelop-asset-store" } }, - { - "alwaysLoaded": false, - "file": "assets/tiled_Health Bar Fill.png", - "kind": "image", - "metadata": "", - "name": "tiled_Health Bar Fill.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Space Shooter by Pixel boy/Hud/tiled_Health Bar Fill.png", - "name": "gdevelop-asset-store" - } - }, - { - "alwaysLoaded": false, - "file": "assets/tiled_Energy Bar Fill.png", - "kind": "image", - "metadata": "", - "name": "tiled_Energy Bar Fill.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Space Shooter by Pixel boy/Hud/tiled_Energy Bar Fill.png", - "name": "gdevelop-asset-store" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Health Bar Box.png", - "kind": "image", - "metadata": "", - "name": "Health Bar Box.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Western FPS 2D/Hud/Bar/Health Bar Box.png", - "name": "gdevelop-asset-store" - } - }, { "alwaysLoaded": false, "file": "assets/Health Indicator_Black Outline Empty.png", @@ -313,84 +274,6 @@ "name": "Key_Outline.png" } }, - { - "alwaysLoaded": false, - "file": "assets/Energy Bar.png", - "kind": "image", - "metadata": "", - "name": "Energy Bar.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Space Shooter by Pixel boy/Hud/Bar/5e8415764fad4e64bf3d6eb76c48ee5a89901545b96795315ec70b17fb0e1f7f_Energy Bar.png", - "name": "Energy Bar.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Health Bar2.png", - "kind": "image", - "metadata": "", - "name": "Health Bar.png2", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Western FPS 2D/Hud/Bar/ec41092214e9b23d9992e2885835085c8e5457268b3e054599e799cc8074fc52_Health Bar.png", - "name": "Health Bar.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Health Bar Box2.png", - "kind": "image", - "metadata": "", - "name": "Health Bar Box.png2", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Western FPS 2D/Hud/Bar/e6e666707e06c429f6dd475d85d575a5b69a1dc27369a8f1d06a747afa2f1264_Health Bar Box.png", - "name": "Health Bar Box.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Bar Frame_No Shadow.png", - "kind": "image", - "metadata": "", - "name": "Bar Frame_No Shadow.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Interface/PX UI Basic/865ff85ac660aa3ab3f0a1a849b6fba686bc194b14615199485296be3f0b3538_Bar Frame_No Shadow.png", - "name": "Bar Frame_No Shadow.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Bar Frame_Shadow.png", - "kind": "image", - "metadata": "", - "name": "Bar Frame_Shadow.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Interface/PX UI Basic/f5d82b20b6d272c55e875464502e683c31d7c94df786570897ac8e0b83161d82_Bar Frame_Shadow.png", - "name": "Bar Frame_Shadow.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Blue bar.png", - "kind": "image", - "metadata": "", - "name": "Blue bar.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Interface/PX UI Basic/40832527439da97fe46056f6934206f3d943568e68a955f6ff29dbe882a1c083_Blue bar.png", - "name": "Blue bar.png" - } - }, { "alwaysLoaded": false, "file": "assets/Heart-1-0.png", @@ -481,33 +364,6 @@ "smoothed": true, "userAdded": true }, - { - "alwaysLoaded": false, - "file": "assets/tiled_Health Bar Fill.png", - "kind": "image", - "metadata": "", - "name": "assets\\tiled_Health Bar Fill.png", - "smoothed": true, - "userAdded": false - }, - { - "alwaysLoaded": false, - "file": "assets/tiled_Energy Bar Fill.png", - "kind": "image", - "metadata": "", - "name": "assets\\tiled_Energy Bar Fill.png", - "smoothed": true, - "userAdded": false - }, - { - "alwaysLoaded": false, - "file": "assets/Health Bar Box.png", - "kind": "image", - "metadata": "", - "name": "assets\\Health Bar Box.png", - "smoothed": true, - "userAdded": false - }, { "alwaysLoaded": false, "file": "assets/tiled_Tiled Filler UI Heart.png", @@ -544,24 +400,6 @@ "smoothed": true, "userAdded": false }, - { - "alwaysLoaded": false, - "file": "assets/Energy Bar.png", - "kind": "image", - "metadata": "", - "name": "assets\\Energy Bar.png", - "smoothed": true, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Health Bar2.png", - "kind": "image", - "metadata": "", - "name": "assets\\Health Bar2.png", - "smoothed": true, - "userAdded": true - }, { "alwaysLoaded": false, "file": "Checked.png", @@ -932,15 +770,6 @@ "smoothed": false, "userAdded": true }, - { - "alwaysLoaded": false, - "file": "assets/Resource bars/Wesley/Flat Bar Yellow Fill Bar.png", - "kind": "image", - "metadata": "", - "name": "assets\\Resource bars\\Wesley\\Flat Bar Yellow Fill Bar.png", - "smoothed": false, - "userAdded": true - }, { "alwaysLoaded": false, "file": "assets/Resource bars/Wesley/Flat Bar Blue Fill Bar.png", @@ -968,87 +797,6 @@ "smoothed": false, "userAdded": true }, - { - "alwaysLoaded": false, - "file": "assets/Sliders/Wesley/Square Slider Blue Thumb.png", - "kind": "image", - "metadata": "", - "name": "assets\\Sliders\\Wesley\\Square Slider Blue Thumb.png", - "smoothed": false, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Sliders/Wesley/Square Slider Blue Fill Bar.png", - "kind": "image", - "metadata": "", - "name": "assets\\Sliders\\Wesley\\Square Slider Blue Fill Bar.png", - "smoothed": false, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Sliders/Wesley/Square Slider Blue Border.png", - "kind": "image", - "metadata": "", - "name": "assets\\Sliders\\Wesley\\Square Slider Blue Border.png", - "smoothed": false, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Sliders/Wesley/Square Slider Green Thumb.png", - "kind": "image", - "metadata": "", - "name": "assets\\Sliders\\Wesley\\Square Slider Green Thumb.png", - "smoothed": false, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Sliders/Wesley/Square Slider Green Fill Bar.png", - "kind": "image", - "metadata": "", - "name": "assets\\Sliders\\Wesley\\Square Slider Green Fill Bar.png", - "smoothed": false, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Sliders/Wesley/Square Slider Green Border.png", - "kind": "image", - "metadata": "", - "name": "assets\\Sliders\\Wesley\\Square Slider Green Border.png", - "smoothed": false, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Sliders/Wesley/Square Slider White Thumb.png", - "kind": "image", - "metadata": "", - "name": "assets\\Sliders\\Wesley\\Square Slider White Thumb.png", - "smoothed": true, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Sliders/Wesley/Square Slider White Fill Bar.png", - "kind": "image", - "metadata": "", - "name": "assets\\Sliders\\Wesley\\Square Slider White Fill Bar.png", - "smoothed": true, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Sliders/Wesley/Square Slider White Border.png", - "kind": "image", - "metadata": "", - "name": "assets\\Sliders\\Wesley\\Square Slider White Border.png", - "smoothed": true, - "userAdded": true - }, { "alwaysLoaded": false, "file": "assets/Sliders/JellyCat/Plastic Green Round Slider Thumb.png", @@ -1094,33 +842,6 @@ "smoothed": true, "userAdded": true }, - { - "alwaysLoaded": false, - "file": "assets/Sliders/Wood Bar Frame_No Shadow.png", - "kind": "image", - "metadata": "", - "name": "assets\\Sliders\\Wood Bar Frame_No Shadow.png", - "smoothed": true, - "userAdded": false - }, - { - "alwaysLoaded": false, - "file": "assets/Sliders/Blue Fill Bar.png", - "kind": "image", - "metadata": "", - "name": "assets\\Sliders\\Blue Fill Bar.png", - "smoothed": true, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Sliders/Wood Bar Frame_Shadow.png", - "kind": "image", - "metadata": "", - "name": "assets\\Sliders\\Wood Bar Frame_Shadow.png", - "smoothed": true, - "userAdded": false - }, { "alwaysLoaded": false, "file": "assets/Sliders/Wesley/Square Blue Slider Fill Bar.png", @@ -1282,6 +1003,42 @@ "name": "assets\\Resource bars\\Metal Bar Border.png", "smoothed": true, "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/JellyCat/Small Plastic Green Round Slider Thumb.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\JellyCat\\Small Plastic Green Round Slider Thumb.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/JellyCat/Small Plastic Green Round Slider Border.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\JellyCat\\Small Plastic Green Round Slider Border.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/JellyCat/Small Plastic Green Square Slider Thumb.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\JellyCat\\Small Plastic Green Square Slider Thumb.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Sliders/JellyCat/Small Plastic Green Square Slider Border.png", + "kind": "image", + "metadata": "", + "name": "assets\\Sliders\\JellyCat\\Small Plastic Green Square Slider Border.png", + "smoothed": true, + "userAdded": true } ], "resourceFolders": [] @@ -1310,7 +1067,7 @@ "gridColor": 10401023, "gridAlpha": 0.8, "snap": false, - "zoomFactor": 0.7710541980363546, + "zoomFactor": 0.6208876656732174, "windowMask": false }, "objectsGroups": [], @@ -1324,8 +1081,8 @@ "name": "SquareBlueSlider", "persistentUuid": "ac4f7a51-24f8-41c4-98e2-b0c5ca92fdf4", "width": 0, - "x": 505, - "y": 120, + "x": 122, + "y": 94, "zOrder": 9, "numberProperties": [], "stringProperties": [], @@ -1339,8 +1096,8 @@ "name": "SquareGreenSlider", "persistentUuid": "e65ba35b-cf24-4571-9bfa-d4c893cc2888", "width": 0, - "x": 505, - "y": 180, + "x": 122, + "y": 154, "zOrder": 10, "numberProperties": [], "stringProperties": [], @@ -1354,8 +1111,8 @@ "name": "SquareWhiteSlider", "persistentUuid": "4e894e92-9667-49ee-b049-f01f263519e1", "width": 0, - "x": 476, - "y": 270, + "x": 104, + "y": 238, "zOrder": 11, "numberProperties": [], "stringProperties": [], @@ -1390,6 +1147,36 @@ "numberProperties": [], "stringProperties": [], "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "SmallPlasticGreenRoundSlider", + "persistentUuid": "8003e188-f1a0-4a43-8fe8-516a19aa4e19", + "width": 0, + "x": 517, + "y": 63, + "zOrder": 14, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "SmallPlasticGreenSquareSlider", + "persistentUuid": "5fa601da-89be-4fef-ab58-441b35ec140b", + "width": 0, + "x": 523, + "y": 204, + "zOrder": 15, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] } ], "objects": [ @@ -1703,6 +1490,128 @@ "width": 126 } } + }, + { + "assetStoreId": "", + "name": "SmallPlasticGreenRoundSlider", + "tags": "", + "type": "PanelSpriteSlider::PanelSpriteSlider", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "LabelMargin": 8, + "BarLeftPadding": 31, + "BarRightPadding": 31 + }, + "childrenContent": { + "Background": { + "bottomMargin": 31, + "height": 63, + "leftMargin": 31, + "rightMargin": 31, + "texture": "assets\\Sliders\\JellyCat\\Small Plastic Green Round Slider Border.png", + "tiled": false, + "topMargin": 31, + "width": 583 + }, + "FillBar": { + "bottomMargin": 0, + "height": 16, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Sliders\\JellyCat\\Transparent.png", + "tiled": false, + "topMargin": 0, + "width": 16 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "It displays the value when it changes.", + "font": "", + "textAlignment": "", + "characterSize": 20, + "color": { + "b": 221, + "g": 221, + "r": 221 + } + }, + "Thumb": { + "bottomMargin": 0, + "height": 59, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Sliders\\JellyCat\\Small Plastic Green Round Slider Thumb.png", + "tiled": false, + "topMargin": 0, + "width": 63 + } + } + }, + { + "assetStoreId": "", + "name": "SmallPlasticGreenSquareSlider", + "tags": "", + "type": "PanelSpriteSlider::PanelSpriteSlider", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "LabelMargin": 8, + "BarLeftPadding": 31, + "BarRightPadding": 31 + }, + "childrenContent": { + "Background": { + "bottomMargin": 31, + "height": 63, + "leftMargin": 31, + "rightMargin": 31, + "texture": "assets\\Sliders\\JellyCat\\Small Plastic Green Square Slider Border.png", + "tiled": false, + "topMargin": 31, + "width": 583 + }, + "FillBar": { + "bottomMargin": 0, + "height": 16, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Sliders\\JellyCat\\Transparent.png", + "tiled": false, + "topMargin": 0, + "width": 16 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "It displays the value when it changes.", + "font": "", + "textAlignment": "", + "characterSize": 20, + "color": { + "b": 221, + "g": 221, + "r": 221 + } + }, + "Thumb": { + "bottomMargin": 0, + "height": 59, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Sliders\\JellyCat\\Small Plastic Green Square Slider Thumb.png", + "tiled": false, + "topMargin": 0, + "width": 63 + } + } } ], "events": [ From 53c4c6d7592004b3c5553ebb51b36a071004e5fe Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 18 Jan 2023 12:08:18 +0000 Subject: [PATCH 75/98] Optimised images with calibre/image-actions --- .../Buch/Bronze bar background.png | Bin 1228 -> 523 bytes .../Buch/Gold bar background.png | Bin 1208 -> 505 bytes .../ShmupHealthResourceDark_ByKenney.png | Bin 175 -> 168 bytes .../ShmupShieldResourceDark_ByKenney.png | Bin 199 -> 197 bytes ...paceShooterRocketResourceDark_ByKenney.png | Bin 7961 -> 1224 bytes .../SpaceShooterRocketResource_ByKenney.png | Bin 2317 -> 1413 bytes .../Wesley/Dot Bar Blue Border.png | Bin 275 -> 211 bytes .../Wesley/Dot Bar Blue Fill Bar.png | Bin 212 -> 193 bytes .../Wesley/Dot Bar Green Border.png | Bin 270 -> 216 bytes .../Wesley/Dot Bar Green Fill Bar.png | Bin 201 -> 195 bytes .../Wesley/Flat Bar Blue Fill Bar.png | Bin 170 -> 158 bytes .../Wesley/Flat Bar Green Fill Bar.png.png | Bin 171 -> 159 bytes .../Wesley/Flat Bar Orange Fill Bar.png | Bin 171 -> 158 bytes .../Wesley/Flat Bar Red Fill Bar.png | Bin 168 -> 157 bytes .../Wesley/Flat Bar White Border.png | Bin 241 -> 204 bytes .../Resource bars/Wishforge/Empty Heart.png | Bin 1736 -> 796 bytes .../Resource bars/Wishforge/Filled Heart.png | Bin 1383 -> 955 bytes ...Small Plastic Green Round Slider Thumb.png | Bin 5863 -> 5726 bytes .../Wesley/Square Blue Slider Border.png | Bin 242 -> 212 bytes .../Wesley/Square Blue Slider Fill Bar.png | Bin 174 -> 167 bytes .../Wesley/Square Blue Slider Thumb.png | Bin 178 -> 161 bytes .../Wesley/Square Green Slider Border.png | Bin 233 -> 217 bytes .../Wesley/Square Green Slider Fill Bar.png | Bin 177 -> 170 bytes .../Wesley/Square Green Slider Thumb.png | Bin 183 -> 161 bytes .../Buch/Gold Round Toggle_Off.png | Bin 807 -> 199 bytes .../ToggleIcons/Buch/Gold Round Toggle_On.png | Bin 831 -> 218 bytes .../Buch/Gold Square Toggle_Off.png | Bin 678 -> 160 bytes .../Buch/Gold Square Toggle_On.png | Bin 702 -> 177 bytes .../Plastic Green Round Switch_Off.png | Bin 16473 -> 14722 bytes .../Plastic Green Round Switch_On.png | Bin 16819 -> 14921 bytes .../Plastic Green Round Toggle_Off.png | Bin 8830 -> 8173 bytes .../Plastic Green Square Toggle_Off.png | Bin 1556 -> 1252 bytes .../Wesley/Square Blue Toggle_Off.png | Bin 225 -> 178 bytes .../Wesley/Square Blue Toggle_On.png | Bin 277 -> 209 bytes .../Wesley/Square Green Toggle_Off.png | Bin 210 -> 178 bytes .../Wesley/Square Green Toggle_On.png | Bin 262 -> 208 bytes .../Wesley/Square White Toggle_Off.png | Bin 164 -> 145 bytes .../Wesley/Square White Toggle_On.png | Bin 186 -> 156 bytes 38 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/resource-bar/assets/Resource bars/Buch/Bronze bar background.png b/examples/resource-bar/assets/Resource bars/Buch/Bronze bar background.png index 1313a75ad24c54aa7940d00ecfc50ed645b5e3cb..eb9c927ae3b7f9c328fd321e4002248c886af33d 100644 GIT binary patch delta 498 zcmVcJIK(#>fNk06guX2)Qz@oj8tLm5WdMm84g-&i~bInr0X( zewP>Hsa8)9cc-D_-=;iE2fyFlR>{(VbCkt5caS)c}mi2mNr0OIGO=hYIK=noO!;Z!5kfVeKiQUa*} zS~4=XUqGBg#C~a@nE+}))&LHOGQ^Uv0L}!^BO_yU%4?5K=_r-UHcri7GPslDla}t^ z0ddR%S`?rJQX3F`*~eeO=~wY{ZrAv?2*47^Qh@Z!evh(3Tx^{U1cXa&8~!geZUbQJ o^1Gh3xn-W#j`X_bbS=Mr02)60ELm`DLjV8(07*qoM6N<$f-c1EcK`qY delta 1189 zcmV;W1X}xx1k4GLBYy#fX+uL$Nkc;*aB^>EX>4Tx04R}tkv&MmP!xqvQ>7vmg?12e z$WWauh>AE$D;B{*X)CnqVDi#GXws0RxHt-~1qXi?s}3&Cx;nTDg5VE`tBaGOit5u zRCiIH<=yvZ4JZYZ0X~sY3ZEziNmZcDa7Z*69yfS_>t?f%Ws@Z4huXp zY-H1M;xMsT>SDQzS=msDXNV(;s!_g>b6MfM#aXS^S^J#)hQWfilHoe7Q6#X0BvKF| zqmBxyun?ucMt_QlH0{Sc{3DJ(MJ}0K6) z00006VoOIv0RI600RN!9r<0K(7k>Z;bV*G`2j>A00|q)c{6E+L000?uMObu0Z*6U5 zZgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0007`NklH-T3 zi4+(zRBAg^T^OrmN&nDxX_YZc)gg)0f#HZmZef81^{fIT9hyhqIkwL}u79bb^INce zC)<2Ke|NUe0UY9G^kN6c7#11O`L3&_9~;OKaO zWR~vJ6v-^z=jr-)Q#q zb}Fq%Q?9KG$iNk#Z6veQ2!F8-c@D8iJDmw^K!#NU91TyD<(;^VPTa=${hM0l<)@5J zA6Z{Y_j_GT?^C>cb-F7BQ3ue}kz{)3Uw|gJIq2g8GIX89@Q%npO@QkjWwf#d85RK? z9S?F1@^mu2^WYp^NP5Yx)IqiZ8JZrUAJ0ELf>i|0Lp8gR>!&h=N`GhKpaU7I0Lt*> z##L#$$AdJxQKgNnU(SgS;Da;2&?zvt7JOHWL-gwW_|D&u(_$cFq5tO|hN zt;uWA?{zC3+#F;G0GSY#R7~|`LLh22J-vsBTFuHdmbC_e#!9RM0J}Jf4z8H$pkJ}s zdV)-kDglbkcE6j`0Dpi#AeXzS)vT<+sz;uWznXG@x!LJTtOM_y{}0F&;G=coO00wV zVrlIn@3!)wWbNc9pz2-~K;@1NIZ_9RmskC)uk(9SrFSMoAwU3Vs2ZTjj;b*gxJ-y# zxp%19fuxnKZYF?Qh%!hOKx#0KBJaop-+!h-Uj)zyk%Oc)pLWjj95S~*5B{x<(sjrm zGOw@!2sj+iP%YlYW@}v3i_JFoWxtMbeLE?&@nH+l8X|$D-3Nk4Zj;OSH6L(>=mO9Q zA_wUb!=pj10Z#8zl+o;;99aZVc-BJ~bv<|bRC@ge7OEhVuZmvj00000NkvXXu0mjf D{Anz1 diff --git a/examples/resource-bar/assets/Resource bars/Buch/Gold bar background.png b/examples/resource-bar/assets/Resource bars/Buch/Gold bar background.png index 80ac1d6b6dd876aaff2361944491459522455784..3a98ca1a193dd0e1c7562dd4bcf7c6e03b770a0e 100644 GIT binary patch delta 480 zcmV<60U!Rj3Hbw%BYyx1a7bBm005cF005cF0ppRRA^-pZt4TybRA}DqnmZ1IFbsw{ zK*x@Z9XoXB5jyq^+@xbKSXCW5^a#BI6+@6QcH%e*qQpp69w2c34~LMXX(EpOuI*#( zaya)*#mA~N8*cu%9ivRsfGwIvx9lLHBkyN7$vcB(=*<0k8h>r5bNS&qm;Sq92(Zmq zJ4!2@W(P?*A#IosVhv>oQKALZQrB#<0HsUrq)4pG}p zt3cw9u_W>=68#W;T4e`G0fZ0qIb#sRk;uUd1%wzR?m{_0zPu|NME;wIQ%XO4od_fZ z$bpf-b9sZvM}Hy(ldBVh!~jzb|0f#6GTM$HH8Tn^vo!`$H)|6$vx9|BG5o`85WC5Q zM^1oF-$kO)Am-P01`vK1bG|JWiTNSI9!@kuHHgbX3n<@D%vPZUdf;y4p|=>>c0(Q>jhL4AO}+F5dPVx z7C&n!$LLoCU+b delta 1169 zcmV;C1aABJ1Gov0BYy#fX+uL$Nkc;*aB^>EX>4Tx04R}tkv&MmP!xqvQ>7vmg?12e z$WWauh>AE$D;B{*X)CnqVDi#GXws0RxHt-~1qXi?s}3&Cx;nTDg5VE`tBaGOit5u zRCiIH<=yvZ4JZYZ0X~sY3ZEziNmZcDa7Z*69yfS_>t?f%Ws@Z4huXp zY-H1M;xMsT>SDQzS=msDXNV(;s!_g>b6MfM#aXS^S^J#)hQWfilHoe7Q6#X0BvKF| zqmBxyun?ucMt_QlH0{Sc{3DJ(MJ}0K6) z00006VoOIv0RI600RN!9r<0K(7k>Z;bV*G`2j>A00|^}(ZkBui000?uMObu0Z*6U5 zZgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}0007yNklUJr{e&SUME#~F)Oj!94~pZyuk1K7u+l_{&`6JegRbX2msl-sLI?QS?1e3 zjWN%*_<8>0&<14S3ee@o=6~7F2yqN`f|#dqqjy>mw2jDcNPyAly}ExfE3ufB)j7se zmrog!Khj?+=V^@R?J*)dK{Nrhb)vk{nG+M^M9E*m_UXaKnYJ? zTq{!>57Hiunm5uv?jh~BfecLm`KXX5)yllhKD+hAlqH18Puo6TH-U`gJ8&ofK3h}w zB2VK%2RBa$gfhd>M|7UmCaNv+$FB4`8O&oXD-;&{*MO&n`e-pLYl~eke2E{cO@wS+ zRN0&m0E+!3Xy}PHJ>TuIbM)b|FreL*Za&X+F}3%TK;2`OwJD4;yqgz z)F|Xp{T+F)uhnbOGoDk%M&6<#ak~fX~}4x_I^_zbpc1 j{MW;zvHo}ZU4DH4MI=-!?(O@~00000NkvXXu0mjfNE;;` diff --git a/examples/resource-bar/assets/Resource bars/Kenney/ShmupHealthResourceDark_ByKenney.png b/examples/resource-bar/assets/Resource bars/Kenney/ShmupHealthResourceDark_ByKenney.png index 8acd40645be04d139bbe1a856301864cb1b4ee8f..c182af17e0b9b3eeddb854ec28a853a0813165ae 100644 GIT binary patch delta 151 zcmZ3_xPozlWIY=L14B5|&vqciS>O>_%)r1c1j3A$?$-SQ3PyRlIEG~0dwX*uZ$kiw zYhc=sjYV_s?`-+)zfkzbq;^a5h0nJHsCpW{eO;%<;~e76PhL8hR=TV?EnA( delta 158 zcmZ3%xSnx>WIZzj14F_c&aFU-CEd~2k%3`jU(N5p$w0nnfKP}kkp7cleg4>vd){*Y z|NnRPiWd@*Vvz4D0!px#1o;Is07ZddY5lU_Kp`Vf7sn8f&bL<=3NkQo9CqM&V{g>P zxTvbb<$LMso~t`}9=tZzG*D=CQ1D=iW3aIi7h%>-mQ=~Tva@jyP&O>_%)r1c1j3A$?$-SQ3YL4iIEG~0dwX*uZ-at> zLtvUg*t+EBLhtNZ^%9yNK2dnDetlB4YCxCD(l>kF{VM%uBb?yraD+jJ`Np@$rBUKp zw(JR&4(l0#CV{{So{j@NyDu=fFfB5C=*^tMr2FL%PqdVRu)?E{*{9Si8ZORwSzp4S aqUp-7dP73uzQ+A5kTy?OKbLh*2~7Z0c0k(z delta 182 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 Bkc|KU delta 2287 zcmVEX>4Tx04R}tkv&MmP!xqvQ>7vmg?12e z$WWauh>AE$D;B{*X)CnqVDi#GXws0RxHt-~1qXi?s}3&Cx;nTDg5VE`tBaGOit5u zRCiIH<=yvZ4JZYZ0X~sY3ZEziNmZcDa7Z*69yfS_>t?f%Ws@Z4huXp zY-H1M;xMsT>SDQzS=msDXNV(;s!_g>b6MfM#aXS^S^J#)hQWfilHoe7Q6#X0BvKF| zqmBxyun?ucMt_QlH0{Sc{3DJ(MJ}0K6) z00006VoOIv0RI600RN!9r<0K(7k>Z;bV*G`2j>A00~#LUh=x=E000?uMObu0Z*6U5 zZgc=ca%Ew3Wn>_CX>@2HM@dakSAh-}000K$Nkl1u73-Vx8Tv=E|c3vuP`!nwyuwxvmaG=5@o4g&!IV2qiRv8ChJ zo|K0Mh7p(w{EjiRoy%2*27d-yg=vQLJ!h;s6fj3`{BjzfD@+_in>tfN0Yh|6a)CZ# zf?hPGYn+1&8#ow2ne^0Jz5rUTfZ~P^$1;pKo_L`=1B7wuI&=2f*@1(xfp{zf03PdP z2$>oznA)QfV@wJVqd0o-iQAtfJx~zaS=zRZ<0m`63en#_xMoZKDJxNW-YQ zN>$tNs0)r?ds22>8ip_qT+ha`3{W*Nk(R+dkQU)0Kg&@?fgTA4^MnyVc3}lnRol?$ z3xYLF99OAmn@BK(#0%aacVeze1_tp&RPY{NXM}Q9Y%rJ~aDNdDTey&_XdBwEhEa8s zingI)JrXcFmn3)r04UE$YLGEz9=Y}GLL$<;UT)SIYaNmurSSFV$DvSklmY$uW)uF| z*f6iYxTby_yJ~xDOS;&ytXN=nTP@EXQvYr{%|JIfj#wF%ON6kSoldJB2xe{l zuQ?&ai(!DVZR^Uz#l^KiHyu>dFR$IXdx20^ApjRyjE*qc8rF&fq_MX4YRRv1`v&m+ z*_)360DrD8{#XTo)WBGlz4GAp&F87i^aj2D2a^(-j4 zdn$DzFsDv_CeLIvEw%>Mk^CTpCIiDcpO&OzJ|EjD_&1EPsUZCu5i_#3$>s8iq9mKk z$*RxDS7U*>JiBn(&AfzC&~!bqo&0Sbu>ThLK$V8re{bM}nagxhS7c3`Wy+ zsa0W&nppdWf?-THrT6LjvyNft(~3>p58vUG?pF(A%Mt)JFqoM7wTfTNF~+9O*J`Cm zFqoM7i5GXzjhi@3svaK}3{hytq?5g9MtJ zWNDD9OM_n&HBMCmg9!+0kU_f2O|sOFfCk~BkQD!@{-|F{r%{jM)T$oYQmpD2=ZRHa z(zxl7E%mCp!CED(G*C*(^f0nWDw3Iulz-wq^~bS(>9pI>?e6(*((f28w8zr;6vv~p z*3NdwNF&`bnmjy$26ez$`qT}-5O#Cpb>juSH*;fN2y5k20%> zw6D&517qXk$~XGs_upXa?OV?nt#|C$PV@fk_dj{YXg}Y%^%4MHx;Gp47%k$z5Pwd? zef0PGI=p}PPCc7;cBJEd%W5Vb7TLDF>OOwIs}7{oZo~fmzRN|TabW#qU^<;$35+Ud z0DzALoz=d^Xb%?`*W5#D+qNU;|GkCZJ6M)g?{}sLjw8DY-^6cqyIt7pbfj||uh&=m z1|x)14>!M0;39VlAy$LlWyb>Z;D7eb=R(*YvtX~&fo``OUItL0+qP3zajoJUSPs50 z>j)t{DZSV2uBHaYwuSU$Va2rNbx~wW#{z>>Jj^m)pw6l)9VmhEOYtDi!9Z0~I%dpx zQ+(Hlja%E>VB2==lvb=wa*A^fA78?6ZEnKW=4Qli)KWUOWpIis27WA^6hQCa^)XbT z5aLDejov`O+?%;Ezqi+!j(VwTS^GP(IcnuEZ*1PSwY=_lsdoKa>%Jf!GqJ;)RyxQ^oD=?( zUninb6pUC`PuY-b|6bjFWne`UtM&#aAmSF&i7;5&@|7d($xPjZ$KlKLr|f!n^LSv^ g7g_l_Q?B#&dI2hPS4oN50A0l3>FVdQ&MBb@01li+jsO4v delta 247 zcmcc2IGJgJNGZx^prw85kJOdb&7+7lSr5*SS$r70X;;L!Zil&9dyq3PcZb65R)a<+ca&IR`tRqt)xKYfxAvih+xD0J^JmrXB`7hEt`5HBD%%YH6pkGOhO6K%P%!Ov$Xh| zjEeltu8Ac23ZfFc<{D`)Z(WmNNiF%y-(_Jduj=V}de-L!6Yd!E#D6P)Cu$vWzWGb3 h$n#4-^85e&WZdknq44$rjF6*2UngCiBY6SoQ diff --git a/examples/resource-bar/assets/Resource bars/Wesley/Dot Bar Blue Fill Bar.png b/examples/resource-bar/assets/Resource bars/Wesley/Dot Bar Blue Fill Bar.png index 46e3c2afbee0b1dd5bff3c886622b73008de7e0b..6b4d60964937f1db11f133a777952a1e74644968 100644 GIT binary patch delta 165 zcmcb@c#v^|N;-F3vt^Ip^qJ znFF$=4B4Uw1ujQcHj3|XipzO7y>rL89q*1CUzC}4Co4mL!=E%mCL_j~4NOrz4R4k= zY|Kf$B_EmBEp=)`-I*ko6rddI773vIo5j4B|1|xcT`HIS^pNpeZ-djh>I*DF4jtla R0y>0&!PC{xWt~$(69CbTMD73p delta 184 zcmV;p07w790n`DIB!8PpL_t(&-tC#85yC(a0QZrJl3EBeIx*fm;ZK886+f`@_J%(Be>iKh?82 n9(6G=>&tfSZ68(#R?O>|yhv4e`gJ*=vlu*G{an^LB{Ts5l2c9c delta 242 zcmcb?*vB+MrJk`k$lZxy-8q?;3=9k>JY5_^G8*6BTF86IL89&9`xBO8iL5LcLWe|7 z@HIFlNidugF}><)z#!D=I60wpwkPza#F#@lQJ{xb|+BzwS7R zZ7KV~`j#y#+wboEqH`i4h*x#v#%)PeJ4~mSo^+hxX?n{eXN_+5p;=06G?9s}=idUW z*ixocZQ8huBfDz@3h}DCIVo=c|2>QEUt)CKGjG?S#R|)>7%vgO{I;k1DBG=2;U)9^ e4QIc8%KBoua`HSU?{z>=F?hQAxvX z1Y|!29QV0Q{E@Y7sfIkPAF~(%nSe|{0WC&ACLsG7a9F1oJRsk!A1fE~#Ft>!wp}W9 VoaL^5aG(GH002ovPDHLkV1fy8M5h1% delta 173 zcmV;e08;7mf|^2n++@U;$n>O#AJaD$1^Tm4rXWvDFUqe6w0s(=51cYA_OVTSw*D}%oaLv!On5I&I50K^FfAZ#E3!V)|n%%jExB-lWhjaiR--={SFTTbo% QK(iS@We1 diff --git a/examples/resource-bar/assets/Resource bars/Wesley/Flat Bar Orange Fill Bar.png b/examples/resource-bar/assets/Resource bars/Wesley/Flat Bar Orange Fill Bar.png index b35cdbd2d4d732ac5bbd76be687ef91809b519e7..e77428cdd1b38b35ffad8a3629d61dda658aaf74 100644 GIT binary patch delta 129 zcmZ3@IFE6HN)=~;M`SSr1Gf+eGhVt|_lJRjA;8ncF{I+w+slT$3=A9x47Ml;y`J-+ zp?|$QuTEsiQwDn{76S7!;>LpvKztxUsR2lUaDu^uO`1pc)!FUq R)B&2!;OXk;vd$@?2>|XkDKr28 literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^H-K1zgAGW|IAI(Kq!^2X+?^QKos)S9YS5YR%5yNN4E$YQ<2OX22oIA(g3R z0)yg~|NAWD*B_PHzl~ diff --git a/examples/resource-bar/assets/Resource bars/Wishforge/Empty Heart.png b/examples/resource-bar/assets/Resource bars/Wishforge/Empty Heart.png index c2312de5011a14ec394f079ff706a90e2d98f923..27f1c4ee238f77ac43e7ada34c40593b2818400a 100644 GIT binary patch delta 773 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 delta 1344 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∋m;enrv|tKaFQH1NqO|8 z{D0Xn6fO0EPl&TR6vbf-kGJW)E)Co@>Fg?a?x5MNX$cco$&Wn}`Wkv)ziUJ9lK|~q zED+ekR`vL$8v^mz?pRcRl+wficYBWC>{iuL?MaX2AEsi_+liR+Tvu^OCq(ygg}uYA zgHiOhKG#LYA2c;J_4&E2Y9lFg{p1B_b$_RvlsKRj_2J*n%MziPc51_N?3T_-^H(3x z8K9XxyFb25+jNss54`Hb6fAlt5z}^tD-F_Ps5>0n+bfO2`{lTrz{&7QNlBL^*GKBk z@!t7|``9rtG3&+iH|Tx70i_{5uN6Ki+Dc#;2Lw(r?$ygvcK2J`1w?V%c?#-MZw~!iHDmnAL-T*8c@@5Scz}Qqcz{di?skUmwU9i|26Sjw7 zjzj^QpcP^SbsFnPGbgb=X|(i@eXM<+cJEyanp@#K3oz%^7);s`rnb#;=X#=hzBAf7 z+o-t%?}aj!$59BJ{fXrHMStnpXa3%Exh?p@z`(#q!~o~@hkO_T+{@E*fT2+#p?F0nb)$1$i&1j8>ceC;3sC3qIAJ}k1=z6kXYuN_C%L#E$lW21%V!H{ z9(rPA<<0LPQRaq_G)J_ywQSf~V)LSBb^@2q^on$IRdUV#j~+y{4Sxs-ctqaxEb~ae z(a##HuL3PviVmLY|JIDz=r@E{2c?{8MJG&}FEPOj&MFdZ7(IC_b{LPSF zCb`Tx;etK!N<&PQ*NoW|jG>|_2s*3W4UxG{aOu=qNY}Vw7n!HK^*PQ^r^f~OGP&+} zSB{`^Kik{edyEjs*MIDcmxr;stCp~~H-USIl}d%^d`F~~xuDOZo+zsH z!HBi~7$@bCp5)%&bWw_2{68P#wUO%rFnGBS@ z=oH-=A)*VS1~?+Iq`eYI*;C!r5tqI*WzF&s<9MjU4_T5jyw2xE_HPTn*fwzLXaQ3T zqlPqN9cR?h%X9$iILjGX-NC`3=yxAE{S`mPV)0;U5jP8~{-ECkpb=qz~-UuyP zXboX$YXrv*W`FPqwSsS~jf#rUOnZd&v{$o&F7i7h!&Ws<9uhTnE~YRxYbBA?qM^F* zI2`A2+;1mnel|ao0!Dagr|7up{15TKRsBeqhG3}?DXDsC z-Z1l0ZwPV&0T~*%gpq(Vv1p}0^6!?0+G~8Cevrb~^M4x}>@nDuGQ2r^=Vwr>M?^#% zl@tS_|wajaIFHJ^9#*bo*uY-ewcZx&_mE z@7k%an6WB|Cj-PQL;d~zSH{N1{#{bzUt*ARSy@?^M1))w*?dj%_Il&R9Td5CO^EBN z0KJ@&lJbLqJslMl^-mF6YbAwBg-}D}{cRugS5nG;l_A7479v90NmTeqIgA#A6pG?1 z6M-~M)=XKm8ZWsvUHa{@B3K65*x1C$>pIEnoz>YHE#Q`S`$qpC&aGUhoD0_y00000 LNkvXXu0mjfaxYLw delta 5859 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 delta 214 zcmV;{04e{}0rCNmB!9U{L_t(&-tF6=ZNpFi1kiJ3m6TPL;vqUzQAs*Nphsv}Ko-aV zU7)zYGgK}KYH&jQEd~3Vy+>>ro^-k|%Wg7x9WU1aiw)gVlOzwKfOWKGv3}n_r2!R` zPFXHkYq`qJxlqXPXxK=49HMgS4P_YuWbfC2Zv$Pn<1 t5kN#BBKWmwS&aaLu72|J0rbm$8r?#iJo>au0ssI207*qoLd%B!6{DL_t(&-tE|-4FW+FMbY;O4%8@$*jg|YLk$#w-v-v;wvR0W z3<@;Vz#tHuQ^HGb@@FbZhU@bc;A6{fQzany&dLNJBKWCwk}T8163}5dY*RVkyota$ z2O4@D3zZ+g+Ap2)iY-aP zr_@>1C1mx=OpOzJ0-ZB6G!9>xE|M(byfRUNr(en{OJgmM=%?39x*8RV540WXvY)`P kR3cA-r-4P|sKI821DwxUuI^mr1vH+))78&qol`;+0BTh+3;+NC delta 150 zcmV;H0BQfB0kQ#*B!78HL_t(I%VS`m0bqnNbY6V@PpM&7B)A#jhEl^oWP_P#;e93v z5!GsH8Ym&6T1^|5j%-6&;7MWa7m5wj3Fbk#lo|#in==~wqlVJLP@$a*sA3q*97b4i z^~)-yg;GP=j?Jlg@#c0bBXT)Nsi804+-_xHU|;|MV7?%KZV$7O3jhEB07*qoM6N<$ Eg0FZ!r2qf` diff --git a/examples/resource-bar/assets/Sliders/Wesley/Square Green Slider Border.png b/examples/resource-bar/assets/Sliders/Wesley/Square Green Slider Border.png index 652f63c5b2c519b87b2696270a871b008644be20..180e6bda669fb10b8825082f486b40db87dea6a7 100644 GIT binary patch delta 189 zcmV;u07C!i0oehNB!3BTNLh0L01FZT01FZU(%pXi0001sNklST5I|86 zk%9%t7%8aIumN4hU;-w~SfEIp3n+bY^-g+?%aeY0F6Erhciw?^=1dmyn~z757l_ r0JMpw>UF%OK#tpgF4xSEBbqt@5K-gah6R|D00000NkvXXu0mjfd0S6` delta 205 zcmV;;05bpC0qFsdB!93;L_t(&-tF5h4#Gef1ki6u9T(vW2+$;iQy@7228rPSNKR2x zT?7X}A~9$Z3(&nfRXz3TT&2`Z*R_FevK<>6jx^zC%lW00000NkvXX Hu0mjfimX!i diff --git a/examples/resource-bar/assets/Sliders/Wesley/Square Green Slider Fill Bar.png b/examples/resource-bar/assets/Sliders/Wesley/Square Green Slider Fill Bar.png index 511decb6a434afb67590594b497cb094cd68dee5..fe0550fe741de4f8afead0fdae15a0d185b6eda7 100644 GIT binary patch delta 142 zcmdnUxQcOtN>6F3vt?s1tN^ zN8{Yf7Lmt-^rcm}l=d8GUS0oVmCK#{^{+X7zK8~An~2*8g70)D01?4Yt&(Ky7fV2c&3>IuK+taN z7v~&!6M=}}&m)?K*$U8T8s=1zY)=OtuF&9lz1JJ&wiqVZ6b>4;00000NkvXXu0mjf DkQP5V diff --git a/examples/resource-bar/assets/Sliders/Wesley/Square Green Slider Thumb.png b/examples/resource-bar/assets/Sliders/Wesley/Square Green Slider Thumb.png index 5c079da09bcdfafdc5035e2e74c3ed4e8bf06444..d0f8a56a7afce7ca8f8207b0382f43a69fd3f0d7 100644 GIT binary patch delta 132 zcmdnaxR7yzN-bxBM`SSr1Gf+eGhVt|_lJRjA=uN!F~s6@a>4>t54(52=Lh+eG8^(N z+qFEwh3j0r7FIqr&XEZ{x7+K2b7riP)jqWJih;n*ITvrpn@$mH+qdISw^rN1Gl`WS zpOtAJ=3@hbn_^zPf44j?Jlk!)Jz8?&X~(YEUqDG_AYc&Lr=+H~V!=O61|aZs^>bP0 Hl+XkKax6nH diff --git a/examples/resource-bar/assets/ToggleIcons/Buch/Gold Round Toggle_Off.png b/examples/resource-bar/assets/ToggleIcons/Buch/Gold Round Toggle_Off.png index b5b09b1b237b2b0e51722a5a07f3312b2eb8db25..d7e6cea7d325fe37f0e5a17a27aaa296cd558089 100644 GIT binary patch delta 172 zcmV;d08{^`2FC%ABYyx1a7bBm005cF005cF0ppRRA^-pYc}YY;R4C75U_b*xeBA$$ zF#|pTQ*`S}914bsTN $It*$(CTCGAKj))wK{Nd6pbJOm;^`>GKPtvXoA@SlSFqO zOaqE-gfzkA21pakU&x+D*8rojh8|2KGDeOH6ipxwOc6){G9|_txiF2$nvoS_)qqVi aKE(ii75ml4V;zzJ0000EX>4Tx04R}tkv&MmP!xqvQ>7vmg?12e z$WWauh>AE$D;B{*X)CnqVDi#GXws0RxHt-~1qXi?s}3&Cx;nTDg5VE`tBaGOit5u zRCiIH<=yvZ4JZYZ0X~sY3ZEziNmZcDa7Z*69yfS_>t?f%Ws@Z4huXp zY-H1M;xMsT>SDQzS=msDXNV(;s!_g>b6MfM#aXS^S^J#)hQWfilHoe7Q6#X0BvKF| zqmBxyun?ucMt_QlH0{Sc{3DJ(MJ}0K6) z00006VoOIv0RI600RN!9r<0K(7=H(JNliru=K&A{4Gm+pLmU7A02y>eSad^gZEa<4 zbO1wgWnpw>WFU8GbZ8()Nlj2!fese{0090;L_t(2&z+JnYQsPfMW2j{fIx+AARB`V z3!+qJ3*!T%Q<2VBP~panOP4Bi4&y2pSX2mg2E|3NNOXe~fz+GEyU9uhfqy@2vBQ5e z@Mj!43Vcuf|9^e|I9-p^HCJU~85ZIQz-%(6JiR$q_se;$_Ro(h@IC9*ySb^0I8p$v z1`pestZ0yFXiZw>Eiw(siocp0_@1iDgoQXF(~yUkCkv8SaI>6}6%8Ve)QACfn*a<# zw{#a|(yMoKlh)${ diff --git a/examples/resource-bar/assets/ToggleIcons/Buch/Gold Round Toggle_On.png b/examples/resource-bar/assets/ToggleIcons/Buch/Gold Round Toggle_On.png index 061e63a25e4d6c713319cddfcbcbeb975d2c2767..399c6ca6308a367820203fa0baca0bfa61987bd9 100644 GIT binary patch delta 191 zcmV;w06_o02HF9TBYyx1a7bBm005cF005cF0ppRRA^-pYj7da6R4C75U_b*xeBA$$ zF#|pTQ*`S}914bsTN $It*$(CTCGAKj))wK{Nd6pbJOm_+U>9XK{gRe@_n(FC&v zrUB+Gbd4ysVbcWD0AdrR2^|yE1X6&m0jnmMzhIt)DMZ!)GdL7$=)p81W8|nn(FEea t6oC{VW1Nu-(}=7YSus`(*fir)3;;uw<-s37PQd^G002ovPDHLkV1lO%N$mgt delta 788 zcmV+v1MB?S0lx;2BYy#fX+uL$Nkc;*aB^>EX>4Tx04R}tkv&MmP!xqvQ>7vmg?12e z$WWauh>AE$D;B{*X)CnqVDi#GXws0RxHt-~1qXi?s}3&Cx;nTDg5VE`tBaGOit5u zRCiIH<=yvZ4JZYZ0X~sY3ZEziNmZcDa7Z*69yfS_>t?f%Ws@Z4huXp zY-H1M;xMsT>SDQzS=msDXNV(;s!_g>b6MfM#aXS^S^J#)hQWfilHoe7Q6#X0BvKF| zqmBxyun?ucMt_QlH0{Sc{3DJ(MJ}0K6) z00006VoOIv0RI600RN!9r<0K(7=H(JNliru=K&A{4HeSad^gZEa<4 zbO1wgWnpw>WFU8GbZ8()Nlj2!fese{009~oC;s@yF&_U=oC=MOF0n z2v}AU4_Hjn`b|Nnt=>O#0LHzRW(cFK*4(1Q(l~)dzUKmH(@>i$fkoQr{OSj6KyZUC ST$hXh0000HsI6*l0e5WxmF(o+?udCZ76HP72J3=;lmi3V8IKL mz=u&Zk%GaRKmf!b1p@#HYeB0PkgKo&0000EX>4Tx04R}tkv&MmP!xqvQ>7vmg?12e z$WWauh>AE$D;B{*X)CnqVDi#GXws0RxHt-~1qXi?s}3&Cx;nTDg5VE`tBaGOit5u zRCiIH<=yvZ4JZYZ0X~sY3ZEziNmZcDa7Z*69yfS_>t?f%Ws@Z4huXp zY-H1M;xMsT>SDQzS=msDXNV(;s!_g>b6MfM#aXS^S^J#)hQWfilHoe7Q6#X0BvKF| zqmBxyun?ucMt_QlH0{Sc{3DJ(MJ}0K6) z00006VoOIv0RI600RN!9r<0K(7=H(JNliru=K&A{3^%-@tM32+02y>eSad^gZEa<4 zbO1wgWnpw>WFU8GbZ8()Nlj2!fese{004bSL_t(2&tnwfk@?R+0(kS~2_vHjkIesL zC!7c>{;~2LgH!(p1_KER1{Rp0mBl{1n)Ve6z}YOgBw&Ce+=#)-Vjsii^Ght)HNg}S z0!$2KfC17(jDIi!f>5xdX!^189K*gs0hD0H2N+3BMg|fR42%p63=A$RCM0PD0P<%Y UZ7a&?mH+?%07*qoM6N<$f(n!tTmS$7 diff --git a/examples/resource-bar/assets/ToggleIcons/Buch/Gold Square Toggle_On.png b/examples/resource-bar/assets/ToggleIcons/Buch/Gold Square Toggle_On.png index 23262c2338c00c779a6e0d26905fba65eb4d2545..29a791da6e008235acb4a990446875ab9fd2d2b1 100644 GIT binary patch delta 150 zcmV;H0BQfe1+f8;BYyx1a7bBm005cF005cF0ppRRA^-pYV@X6oR4C755aE&ePYPxL z0TAQXl{kXHsI8R&4%1n5XG%N2DmkW6v1c^Hc3?>tO;2I(VCDo z&`uLf5jw`J2_MGL1d0O?21($>Hq)$ delta 658 zcmV;D0&V@V0lo#0BYy#fX+uL$Nkc;*aB^>EX>4Tx04R}tkv&MmP!xqvQ>7vmg?12e z$WWauh>AE$D;B{*X)CnqVDi#GXws0RxHt-~1qXi?s}3&Cx;nTDg5VE`tBaGOit5u zRCiIH<=yvZ4JZYZ0X~sY3ZEziNmZcDa7Z*69yfS_>t?f%Ws@Z4huXp zY-H1M;xMsT>SDQzS=msDXNV(;s!_g>b6MfM#aXS^S^J#)hQWfilHoe7Q6#X0BvKF| zqmBxyun?ucMt_QlH0{Sc{3DJ(MJ}0K6) z00006VoOIv0RI600RN!9r<0K(7=H(JNliru=K&A{3@kRsVgmpG02y>eSad^gZEa<4 zbO1wgWnpw>WFU8GbZ8()Nlj2!fese{005OqL_t(2&tnwfk@?R+0(kS~2_vHjkIesL zC!7c>{;~2LgH!(p1_KER1{Rp0mBl{1n)Ve6z}YOw64-2F{Ge!#0~dC~{sZThkD9K*gs0hD0H s2N+3BMg|fR42%p63=A$RCM0PD05FO(8;?5l5dZ)H07*qoM6N<$f-P$urT_o{ diff --git a/examples/resource-bar/assets/ToggleIcons/JellyCat/Plastic Green Round Switch_Off.png b/examples/resource-bar/assets/ToggleIcons/JellyCat/Plastic Green Round Switch_Off.png index dfa02c069cb9669288d2737d5155994b7931ed94..9e0436d66097c2e96b718fd02dad8683643b38c0 100644 GIT binary patch literal 14722 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 QivR!s07*qoM6N<$f~!q@`v3p{ literal 16473 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 Hu0mjfy5cTi literal 16819 zcmX9_1yoeu*Bv?>V5GYwMnVB80j0aUBn1Sdr9rwoq@|^$rBi8<`VA@F0+K`Lcm02h z$E;az)|z?u-V^)mvrnX&iYy*3B`yR4!IPJh(ttovXu*3|Y)tT~IbmcBZiL!MN~+0A zO42*II9l1*SwbN2#E*%>ay@FqVGqR$(z|GX=?fC_h4f)0&Y##wzf0J#f7>;6L6Gs< z$Z5Qx#+V5Tj_)fEj;^o5uL`2SggCo7Yq%y7jw$1Enu|EK&^^3*80*+ZmFW1TRsR-M zjc-`4zrdWOjSbUyRZ#V2F z_mhn08T;oZ!HP|`_e;rLTE|5@h2);lh{S3aMRXH6}kZ4 z5!)+FK|%C>+)o_`#|KsCEqC*X&&vcH4KC3aRrjIbTrkZQWu+hw|NiniN|M1H949&b z4-g0`^S^%-c@3r`a1+Z_URfGz8wG~SM|ioC4nBiWxJv7}N;=xxTRONxBwZ}cTrDl= zJ#1X9>1E}W)pP^#$siDVh`f}zmgn#N4zF~kcOSQ}Vuep$SJYK?sy0m88qwo4Ffnb& zq@zGFMXm5SFe@|6$X;}ha?rL@$Ir};J+pch^KSb6^S#>I@BN>xeyx&VH%v-M>`K}; z7%UoTFB-kmvD&0bbe8=~m+0uap*}U`WG^G8SkerDQyFRJou}#(76x zKzk;5N5BQiqaFxc7wlkf7vSHhv8RHVw)Su-YYHf9BHWBBX7(`TlURl~Pc9c07T8%; zb41dHHx(en%VxZgO)PZ+k>LQmtU7zD zR7*aZM*ALT>cfhMKe0=*);<14N&cF|n|Ezztqu0`Wixx58fC6e(}wR(7Fs@tzWR85 z3WwkXEI<-F)fuGhYi8DT`OL&&N%61FXR8mFyB;Q7g*u)S<4P+dLM-*i-DtwhJWarR zn@lcfAN%*ue$m?f+^j2c zijY@&eW{rCY;~Sp8NvYeJT1s7t9wtT)gNz|f$%_kZnkIDWZ(TCrJYB!e6|F=$ zlo3)L#uqd=K->VxHo!`g9Dl+=oCymf-g%WF6utvZpHY2i*-f7|h< z&lmAhdH7ITZa_grb<>sOxfa=lk$|Qa+(u~S=zgU3nvV6X%A;d1-=phh(d5tG9u-6P zQ_^U7ih_MNO2E*N{O6Y+FjExz+E8A`A@Au$#(e0Cm-Ubp=xX>O^k`v)-6!8JNFaJ~ z#%a+byj6EboINe>=>hq(d13-1dej39Fl>5i{3n#L62#JiacICyE2ik>3AMCC3*Z|; zyP+0_-N<9Kh;1+IpcNym@1`)3G2rpmnV9;i4Dy7oMzS2Fl0w<%xA`hLFm=&ln*xop z_S^pypMN~Qy+V$mz#*k?V|BYr`NHrC=rfgAn*0ww&-;x*a2t^F6V~0vWAUydqwtUz@0j@%^V)WzcmIz+F0cTTv zQfLp?hn5A8e`oX1VO*`s54E-n1e`DIvhN-PuZ)#R zlw*R$4}5o~-aQkF>SO%5$z$6<$*a7#xSEA6R{6jZUb1#ai>WM0EDc=ai^fxMp$Cft zuXAaM0ihtOpnbrwN4UUmut2%PxXX8Uvg~0KSp66(ea6JJ3>E=*f+U0|_x`lR|6(f4h4xr3Fmd3}qBnD6Y8<2;M?szf=z?+U^r@?f)T9ZN`1GGv zU{OeHRzYkAQfgI6>{?~BPjtK-UB|CrnjV?-7L@!-ix>%I^J>gQ28&Xa7J0_}>Lc%; zh19V?Gh{eOd%C+Jn3$L#2&t86B@Az>v8B)t^FVw4EUp@&OQ1`k%Se3>=`s6)uz^CM z^tACkjrN}un2DpM$9ZF2h4vRU{V=2?o)6cVW){0#ootGFUGJ21O&|Gvnc~kW(+zygIp#=W6<4P$h zDGB@@WFcTyvbB0rT;x(5qV3_EVO9X^<3lL*IxwOwsx z5%}LDa~}+NGN_qeJj-y4Oj{Skmywk{{`F$4yK$d?MU5DP`tKoR?~rM8yu0Y&)fCZl68~DZHSJN~XlsM+P_j0G(9zD}Sctn5Cj$P=RvP+|$D5q76fQOGy0e(T_XpTxwFq7b-!ReUtu zC5MoE?R$24y#BzFHr#5n6t-}fS&7Tk_vjGTw%;+L#Dy12L|x zAX#YJQ9cFk=fMCg_~9&D&qI!Nzfo)<-1E>7TDyV<4N|8Kgom4ck`^3d_`C&+&{S&> zsxtm8S*e3Ih8(oukz+~D$((fSz{*wTy1i*MNc(A+Y-V`jveO!;P!t5bNEwkJ$CNN+ z0n)_Q_O_Y6j;6coo~b_nD-n@f7Wt%6Ew&V%s+4s--6J&!I;70xroqGqIUss}{2&Vp z`Ez?KVr6B;B_I&)(gIaRn9lPPOMk!Uym<9%WW=jNJ6~~9xqWVY-YtrKA| z3VI>+51c9-eyFVD%kc&57z2jh6W-p08;VdOY6)&q^H1V%=|Vx1?~|L&XB1y4fTvjhU3KAxLZB{GM&P@G)^)#1;D5=^tBiGWB?6#HB5=-19W!!FyLlP@ ztiFq`hmY2oTQ85LHkmM`|2=z0wW7JT3HhC{q#P6zri{#K_2TT=@`l-Bz@FE^esBb- zlbWZCbB#h`BFm1wKH*wAQHST}GXU>))B&4+5$NE;H;E(WCvBlmYN0Pvs~1viBUhyH z=kW02Hdh6wxpN!m{Nkc3qoB0*%`<^m5*A7x_7Ih|eVn*7=$B!L{4{`1P?m{zk8I>8R-w-7=}YQaQt zt{)OHT-g2Oa(onsv~9Eb#-bpkd-^ZmiPC%od`buXdlcgjXOyOP?$}oz&1|fEgi<0;B%m)=q>B?R7tlr(P(;q=(t; zHJ{jyW}W@F!)u)xW;g)u|ZMu9#v>wc&q`CBhLf8wg_I|H4NrJgPP{4+#PZ_4ZgUmNLSaCyyR`@GtIq z@y&m;&VpfquU5mHe+83eu%sZUD$wXJOuLVG1rx(yR$}#}EVA3`6>`S+1jBX4xUc6L z|D!U*63d>9FMz|-hC$i@p)Ep+5r7#kXb;lZFgLz<$CM@6iz|0bRJ(eHeOUeVFCH+J#z-mvkGVZRdMGXqVoLTVJA*Dq?8-$ zHMm0vO8@U95rr&@}ue_D!~Aw^YVJ(D~Mko#kq$?`A9 zME9vZOPgOopjQ9s?(XhLPEHnm0WA!pT9|ixvXZ~z5KMmiUs~rWnXvm`K`oH$rr70^ zME=~Kq;>W7MU#Oq#iEH@uh}~nJnvemahZmRDc=*wwlU~+hpKYx zO1jr!=WM^aOfWinb!n%3hL$%Z#}7pVpcoWAM*!f}*tb3Xds6K?!JDm8f|&0g7|0E4 zYxwcT{s{KspLfL|N>qJv@YRKGOmcfW zXIQzv3B+_}Gk|!}t2Q>g!{SRlZ-d)m9To($=#C;TXQr5oe1Bx7Pa0-+%Ae_AcD9a1 zI9Fy2{8*p#-C;+WqJM@``*wiV_u*#wK{m6P zd(MvZ#fujpn}OmjZhhrsb6C)M4IRQOzCAv{d*1On^!rCMrtk$0i>|;0s>RT;hBx$> zP}$&3NM=diAg)yvF+&t%Sa>)}v*P}lcgMx5z53-hD~_z@heN*KCrlb;S|>kK*jZ~r zG$?1#2+-)g|IXH8Enkg#+zacc?##{2@xQnlV$JPcSor*o1q&4=hB{_-rNaig-$7~| z$snNeSNvV@kMKfqL;xDrRT?(VR|d%#938?qai_DL}&W&!NtkKL42R!e>41R>15-C%tf5I$^2R)W9=EDwo9 zDl<$I_#L6mHtyShCqS2`_Ci41X(Jh45{vP2p2ln_qtkU`B(X-PELNL zrCOagI~^9^^~<)97t=bke|#K9Js|!%_u~Aj;YWD!&b=IyMn+DKA5QdF7w+iNY!IO4 z?rP&d{uR|v?HdF6S#g`G;vb3u@XQgn7JnhTKc_88E*^bxqZ>XSJjxP80B`bsg43eV zBE*Koy}rH%#dLeYZ3pvtB_18&>&Kgga9m(+-~*67^Y^?5TqqmuC5iib>g($tlo7ld zGClfio`R4vRsU;*$v=b zMS=*OT7W%D2TXxh8(!+lPxZ)t$q`aClUDR+gk7^+EGb%lSs~ zNU7$?$jEm!0TW8k^W1yY;GbUlULF~eNQ(o5+ht15I5-}lyU6^76d@4b0GU$ox)Fo2 zNSkf%u8)zwwwGQ<7{^V(Tqw7_oqg+=^HjqV=Q2#^AMjTeNCx@D`Xx4iz9YWNuoAj;3ouAHkA&C+y;Y?d*_V}(1%~XQ2>P-tO zM6Lt@ldiom>yVLnrlIwV3#z1|Qt;;4lWdiyO^=3C)aWI@n|(S=m_3)J`ag6g4!d?} z+ix_{B*p;oxWS-O-az!`Z~fAvbuZe)kch-!^)Irh4$%}jyH`SnD6h?$EY+-ZVHqD8 z!McD0tQ`v$OjsK(rY_BTA01zupa$4BL;-^1NF-j0F;F7ECT~}siSTgCtFtS4*G#B1 z`?BQqS()lzK!EwxC2g9#9@}&g^f~`})58%ByeIhL)a-_n`%4oBm2~?Xiluq~hL$_p z?lW%)Zm~nY&VTf23xc@?@G*Ie(y~%`7Du4yNMY5fPZ=~RL@ZP z%qimRkz8Ce#t-C`$l9?d0%L~C(C{oFxBxDf6tc5pb8&Cdy9Y?LTD`yfkToZ=uce{g zM4l^wSokG~omKCSI1suw|AKPRjfLrX*t(#d=th`ct;|`saYRD{=I{helEeHC6_^Wb z7tQM3I~2&VXFHigN7yYbD$#sn;uydWQvg}F8$s`v8Txt0kZtb!zunLsG_hNWJjo&X zvUDF$o0Jh>nB-3;@e>W6w;u&v^!(#Bwi1^}U36@;6=EX@j)hi^U&A#5-41{JbG z5#hfR@(5a*ZH1gTRwP(beE9Ie`0f2*I?xWY7= zVUSO1;!X&7XJu6^zi%fzdE}PVuDe}S;@()bi_`y-DNJe{g{b8XKKONFT)s2s-PpaXZ2(Xm;Tb&QZB2lEmb&?v*r~G?V3S@04fc*#;Vh7#qxsu znGx( z;aWU-(@K-?F>=6^(!C20 z5C!meTJiN$0S&5Ig0l7|89o2rUcC1P1Dj!bcwWCce^TkqYt8-*cD|VVx|mzbv(~Qq z{b?@uMcTfD`89wwaifgyzka->N)|*Gioi3!qzgOQVO=~-a~*iPnocck`(I_h;Nqhq z#t`H`YE(VwubN*oQhx=Zta!sw@KK~77{CF-q#-8MKnS4lXFmM{rEZGiuvFsR|1rrr zmf?5f&ybViHyDLu%Sw)U8Q%~5~HBvIqjnQ55S^4Nh{ zQ0hMsxu2o%sP~y;;Bl{SZYGwO{f+)49PN6;6j+i$*-gbrW17$9#JSR#lu$oqfw_SH z4TNL>#$f26ppJ_Q2b}6ml~K-E4}bTQgW1}3xXs%No6NK}G{~IYv=3vLSpvC}Ku{7_ zMOGnK(aO9@dqjrr{G$W{I$X0E8ue3q0!BV+F>^U7_)ipKQ%Ziemv}|`B%wAKh-wAT z9oA5O$X#ETA5Pc(%}ve2!Nz|N>C-hO^a}tE+Yy)>GU*-U?wM?sg{g)#-rmK-P-qLX40lU^!@Ix#RlED%uhkC{bh%K_T_OKO5l30Ns)+<1R5K+xu~Tou&P%c4XLdSOO!*8 zloGCyM{Dgf1tqdTWD>yj=Cyj7G!&V|6Eid6Am>|pAm}^)7=##92J?=*QB7_kv5hJa zL-0lvwB=T7HqWMGL@ljL-pNe6-&&)p^E4#cIGqw&M zrSkV7r@Q@+bM}MmS{UA1Z(c-`ud9F`(tn;n$J+1t@?8)2uQy*gxuLc>;>H)F_r(un zCA=b69z^U~BIm8_w5U#XDU3;5d2n1;BdjrGMXL)_l)3C5P*_>i&skFRmY16Y-fGIW zVc!Rw<6F*EhY-=lQ|sv;{){WkoHci_^Q;MI&*}FOQ!8u8-~FcL*T3q%f^L%TQ8+Y- zSI#Qj+Q1I!G3{;b_GtO`2gYEZ)qh<`(ZAoRmYY8IWvLT%GK3O*+_d8AteN1U@m;Sc zqfe>o!l~0fUU2_P*Yr@~ig-Kb`y{&Jxvoy0XXbOku##4X-J88LY;jWGgutpjHR8Uu zKRRy#RpKhN=-xwu8_GgpHkYi|vhc}9(IKI;v(qx8;$@2OiL%$i zpU4fC$bXad&p&K0D#uT`VCLK`{dMzinp)UG$LuRjJCW(r1j^qPuCgePM|i) zMHx0+bW-PruiBu$<$zCfM$2!U+Lq=>F-~9xC=}I|uR`YtC((7n#F+@^xVUDaD-6~0 z2;OQRC)Pem9aN&o-Vul(B_vIygkZK2uZJu12M0vC?o+W1I-^4>kN&3K9)m9Q^QAX( zr0XIFe&91USf0B#n04)p%*s^We0Og~s^RQBRoKuSLSzl9;HCRAs{|4jUh0SIjdD+s z@3Yrc{Z1ly488O)%RHM*f%!^eks$hSBovy&MQ=U7{in{B^7}SPj;XG6cPFr9agSj& zbzKk;`6KMeU{)CRU$kxnq*;%nF&a+W^_#)p_2D^I54GT`K}5rJ|H+X5Xyel;frmY# z_nLd*s0Us%rbxVMVZpoPmc9|`Ia^H(NX?O0x;uYvu-n`gmD{t0q=xEP8M(HVrBH3wO63Ew)J%E73mwwuR;Nqhac61Apo} zS!Qb&r1bH16G7E+IL_ae3a{yGZ+)4LR;TAr?HP_BG?G})yLH&l;Wlosb;D-6kT z6`t@Kj!h#0rt08t(k&B(2t1QYowPe&#g`F%O~zI#FoG1X5c zb4VO4Bl@z!0^{L@M46EXo@XIVbd~QNFws3)k^i4nXpXS>)S<;EY^?Zu3#|HW97ar}N zarxb@&M*EHZ4Zz1o6v=edG0GuU5ec-m4`yDhFvmGJOvXm7c*6*P~v?(u^8`YbXq2h z7E3GhNm;8LnIZmbr4Qf;MkapKR~bgSWRKRXF?WjJg1j7? zitUx{Qm!BWBCbwMP^TMR0Pjp*Q=b~$WNv;|N-Nnkf17=8^u6j$L?SUkSW)Jun7V)g zM7dOmG;YCu8+)Yi@=|#6!>0>c;rp2vv;H20Pq3Z{py!m!jz;`s=?g_)VAugKKlO=%)V!?8YR>aeh|RJW?KvNArt9UMuLR;x6aoJsHNfSn^i$i8UOo5a0%Zmo8BV+iAGTkoB<)arg%xZbuOVDgx%a>_| z;q{mm+F0yDLPZ&M6`7D5@=b*oO+sjx%JRj}JxGn4(Ts2hSJ&M3LuY>VM?L{%eqpvm z2dGi4TK0?I5=Eh(^od4;quCQx7<3)9zDGK$80n($hZ|5;jB-DftzAe-40X@-c&lBU zoLfKcqpwW<#*xpCZ>%AyYs9?5r!pSctsCR<+17t3f*g=}E@Cl&rs_5# zp9UFLg2K$1R+od5H#c6W>hAIi7EhNHOA_|B{rO@6bALuLblB*;0NcjZR%RWc{20ZK3p= zl`m*D`jAGOOoI{uMYc#UvT#d}1?CP?$-gz;DYXmZ*h>^z8ucqSEFP^h_5L(F(-z5pLbn9*xcVtWyGNKwF zW9D2t#X+-w7KMdE^(~UGB%%fy?MVWp(Q2SQrOD}aXCv1Sj`RGkBY&fI^Wmm9_9H%4 z#iR1Zs)r5KNX?Nb)(%N2US|Uwxgr*W3ROeL^@51(9(wTwtmUlb?R!l zv1XGQCB9OR1L~LySiarNnTE)Hql%)s$Rg^P%+K|m4Ot)|F`DU6p`*z|8*nBr@Klmd zvbu{ZN#14XDpd&cIIcXK{qXJs7KU=8I_IDFK5sMd`wa-mE*6PQxcp1;umuXF;46s) zhf=(Vy0kr2nfb{t`HcqwCMNL%w%xK7^Txpfb@EOvh1!-i9Bo_muZMi}|GJ$LkF6b{ ztc1>onSHabI}^uBwcLb|^Flf_%3_iQetWN8e*9O^q(R|HQ|ZTlrKW4<)h|-HA)!>uo^%f1oTrm|8SIU5#vF+yx z1PxQ$$7xT2N~s|TQ`5w7C4t+QKIqc)!)O27Ly&rqb$p!5jWY^k%rMI6=|zDc*k#(38-mCI`tB&Pn!SvK+nChJvF~P0em=-d3x_ zz~Y_8A10M>ImGR=8u{-s^4mz#BBsbU>PU}*V zv#^%-MszDLN`iL(=AGKz&w<cqNhkYn_bfHG^zSvCwyrd9sJM-NIbY;OV{(~i;cL~3-z$O+BP)n9pT0AN3U|d& z*OQ<8YsQ>i1Cq8Umu3gcytecFpqV&Ec%%n95g6LqMJna*<{RymRTt?3wfd0p5mK+m()LJ=9w=`p7aY8^TO+l*z zQ&}|?Gxzka2>Vmk|5`_)c%y)9Lb*D_qCq&W(6WB+DTD>D8#QmrmT%1T9KoNh;`6}j z!)1#>Qf}ACoLJenB87Q)-O*tm?~g>LarqUuvu!uunp2qETx_rAs`X+AU))w>RT-Mq zy1gGz2pE65alK=r#3=l%i3HzJpzm$7ZHW%A+E5!id9jVe%vs~&<}mImw6HS!xwN{X z?N-y|Kkf>sW-3aU9nrJ2k=@9OibR#X*R`LmRaOwdXNz8DAnn0 zc2ZGny0ldKvViUZIk^~PqTYmG4M62_cZ0~Q+oY3(*3C9MQvYzSV5Qgh2lN{^Uj_jT zt%j(L53bjuz=?>6R8fu^5dxvqoiw$nmib(U;aaU*NY}SieKhg-E6QC6y*mi+959-V_VZyT zMH;h>_J;Fp8TRvlpjSLVOmX%ho^qN!**Z=b3;Fb#hMfElxs`q@hJI?UL%_fy4~m%2 z$q=jR0#M&kN~@!)zhd$ec3OcLe>~GZ98&neqo7ZsA^-n!m>Q^${i80;?z^rQyq=pU zm*-^9`Oap`H}P&S$5@WmMY9561>BxoA-}5V|C>hzO&PvJgvnx#v^G{ ztuF^@OFc!Fie1RV#6@UjMQ9z%FBE?%0~n2L*NwKy&)*XQq7VmbGGErCuNW{=+=gkQ z*OiLv_jVt&waqeFfGX24eQMCE5p?SOF~y#&I78Aw4@;v`XP{u>4}*qvgx$4bk%sbv zfHKhs-S@NZn#5&~1#-jpHCXl!gx4+yA3mb1e*8$t`tWply6H`_{hOEiJt@fz%%bnU z#P@tWr1`Nwz$5TRE>gi*(%As{gTrWM zKIZonCFqNkmosK4xkEQ23R)8PNr3ejR08UIc|3OEX}y1Czsrm68TMZq+9dgEr6bD> zW~r9?nsppwXk6p7+4#+v^&+C8{yfz9bc`e;w=ZUaf}pr~;iFWs4Wmy{n1Ot_)_;#x zj<{a7y?-@X_>|W1ZkAT$veVvkr{v}BN!thb*pjCVGH$-78CglO;A-NnKfDsRFZPq_ zJt1mnvIy;6uKS9QKkw3chXWZ3Qm3BMOviHcm0%pwsD-PB26 zptx$URHveJ%63=-e-Y}>f8x?AN|aFm|I-TMc#Y$7XEAKLj-!k6)uX&6Q@q<1bz|S- zzC&>T?jxXdIfnT|4Luf|!?9=woYj8*95hN9Z{oz(=3g{cl(|?zgRG**3$**7J6@hW z);giIdM2Ol*AS*)9Q=ldo&*oh_b8D#+$l;DKFaVCZoZ+09_-Ttll+VO0O@x0HKVgm z#guND=hUe`8?7X`ki@RbD}ArLj3n}KwvlxR7QE~rcYC-3pgm{?lEy?sWMxUayY(51d+$U0;2Q^B>Ap zdJQC%4oHuPHK3ha#-tbcN<$!m4>>#CL2T0k-o4gIuzlts+?5&&D2GJG1R81vjS_3_ z)TlGJMjEdq5Vh5p2+qAUtTN*Fv^@S_R< zB?9dc16reNyRYT8GmcUSUg0f@N)pdhTTc(eorK`@pP9u#&cjz`T=%gcaUzEXNEn%q zJs?e}3@Gt9c|tEbee9t_eZmZv+l8VM@bTM6BtO`1gc9E4WD`!-q^~fC~IwL zZ9G#{WA;c1`sF&aC$L17<$pU(&c2(Pft;1y1E@*R!d#UUjsHi%AjsKmfAjIZ{*TNn}HuF9+OpLy!fM%zo z_T{Ri4zIR0#&DgzS*jVi)c&ldrltuR{bT zaC4w?0{ylbt+8R|zs)ZLJ!PceqdrD5Z98YDG9Hto3(YYuI!FnW;kpDR76H4ik|jN= z2FY8R0(S?{Whp*+*{kKilp1GMKc{%lRiS;H#}LZ)_U&7L)t`EeVTQ8twDw6_F52Ix zJ}_^v?j;NhY0d41zA@C=|MljRNJHVCkd*qH6njGO?0M^BPZ(_noT(RF5z6*U`0{Ki zOgnVGW~8L3@pxi>Ymuyepf&s~(al@bmoZUJ)8LyKIr%HT_}h?}lQ&4(s-@ZXaTJJl zqe#PxJ6k|?;{8)X5Cd2SxR{$7W62{1ia|fecgvk0jr~ZjD0sN_Q~5m3|IRu7Xv%DW zc~UoPuSEZQaOvyyZwHI55BE1&#-GZqn_U_sZl!2kdi%TEeYWl1X2x(crx4{}IP~xM0vg{z*CxQVkuh zwBy#-Hsm9J;i97sTGcPfyaqnY{wLxL1BQ*n?iU<~;$`M%x~O@-MTY3L+7>2hCeoyF z`?bd0l6dU28&?B18AzGVl{Pu?X!6}xWLEuMUWE$7PZ;FEaXlwlxfC@k6H7S`DdeUr5~ zlStL6qSAL7N?G-}EMeE#cu8e!e(t(Qmv!z@tz2k7XxkY&b~Nm~lUIo^wgJ+<qXm0j+PydNZ*+(`lN}7x+)ZRTpY3g%Nbt8fS zLraHKODrA8F$_imJg!f7{NK;J%Qn=LdyaDjQ)d<e~*YL^nv(u4z37qW|j22f1j)zAGmI5?PN z%GJC~XOPIv%NqiInOFW$VO4Rp|w#x?R;j3L6*z;gI9TM z1_vG0KIO*y?R$vLv3w9cbZ(Km>i#PU8N*&fb+Qv{ny`$Znk1um-)W_y+jQj zbMU)iFPm36x{^>Bh8SB;Ah~!E zS(`uuu(D$My!ZEy@#CKGQtAS$!Q!cKTJJ%{5*xf)kV^&z21FT$Pnes9C-zAKON^`c zBBg#r4y+SE_AM!}FfqAaz1nxf2Ib6IIldy+4;&PUZtd4!tW*hJQxOQIe2)5|MUz}T zdGs^VtEtrgZE8KoBQ!KLqxVl2sP-Pw_)m$U(hS!*{TXMV7IGcD(Led9pQ>Ix1Fi=v zJG;MhD4!;hxI7Di_&EOK+3plOXo$9I!$N4XaT)g)+sL*@vys!+0Iq3GiU$VK*R6QY z9HNxwoXkPG8FEyJT#ZwXb|bw$S?$rf0+}99#$S8%k9gwYyziKprIip;Y$-n^30`e1 zURV&pacZGGo|~a$#+OZytrb$&0fq0uVd55}BO@K(K5UORaY2a~eulThq6)Zpc!HwI zp7US5D$>V*U>IAxDr_NhuYB$b@yt=F%<~$5=^+vhmJPC=0xLO`-?IFoe>xbyMOXfh zRGwsehbdPCXyi^R=F|Js`gW?E0r~MmM*;k;6P~3{L-#tQM$6;XnJr85m3CA?y3QsM z6cepc!Ci7 z05zqJ{%T%{F4B9*4Ri}G&Y;rskyc-r$9erl@b=d)B_iK)BpdM%`Y?|vIVDsvaFaam zc&}sp{r=r&?9vq5w-9CsZ`Gs_k`wY@gkC_7WA|Q)2h!F*}d=VzN2b7Bsy|qYgMTgyYb}Vcz3j zcw!}d?I+>0yvpl9H-3I@_V^F12oW$^1O#gS-F07|y3T&={JnC#@^-$F9}JN!obS)a z*Ky3teu}3P19BuVB9Zpo#33l&U1-vPR7P#5OoQ|`PrLi7q>@8N0QKo|N|~ zx3sNez#cbl-({c?l9_KduRj_ChBnCN97f(+5boUO`5?!3x9A z0X5P}PuVsnzK3LX~YGV@c5$J;qS#j9E|d5%9=XUh2d`#)EG7mXSY={?*|@SgjkC%VIk z{8Jd;SZRFqipFSW``-}NuvPu@Ze_wZ?vA-Bm?!v|qmilC#Eu2rT=)p!NR4fE_fB4%gNOvn7F}lYjpFxdBC& z%5~oQS29nz*&_BRjg0hkPZv+mOY8yX9>2|XRi1?o9|3gn?$c9OM7UKZOF0I}ReW;H zXklC3wTo20jBwpe4Ua_VhihJ8cj$;s;_y3oX;k0|u9pl8J}A+qnXpNePiHalIaNA| z4%cGkfECwVAf8`z*~wAMek~ zZ~OK&@$dV3k3lDT9!Rt9<2^fW0}|f> zWWecDEg#23kS|e5yTBuQO<{>l@p3`ovufhh zhir7k`2pAg2H$&5CNWWC>*-zPzWV~cmN(!@3Y1Jxnr8DQMhgzbhcxCxb7a~J`X}Vj ze_Q*boD(xg1)~kyY4FQ>HMuuHkJK++db2!lDTXat+Vfq00?}cY|M6O%e^^%HS5peb ztwl_Nm1&nPl-{?svpHaO+wp}Hf7A)RAD?q(mP>Fxw7gDF>oZ=2!}$*Tk(d;RKTcH(L|+WvNAjg zr>r!ex1`{cHkT-~4_Ry%tm)wc(Z6c>tL~`zqZ%^68V|-fAK{704&bq1Rk37PG?DFsE*TF0l$4-IF_RPqWQQF~-)4kcq10{mU!>jaggRJD4)g7M_h&w7TsTBU!F z@siRNKMMUpXVmU_JOGJu!n1f=sWs{yFi`C$2zdtI|T;BxB$lg{#_i@L;RN6Hz_{iF6YuZuAD+Rm7rt}FtYF3aGsmP)RO(M;GjZq} ze6plSV&dE-sT>X$Q(y6-Er6e&yf^L%HX{ea1Av=zrWTBQ-&RaEPbfYK#;;lqIEQ(Z z5hA)}TK5Mjy2e+Iu?Y&caO(Q`?m6rg8*MS)9yBlxIPpEpp>=05QEo$B9CnU4_=BCd zSC*f1F+r6zht#(Vf2l4&lR8NQBnai@*Uv${Yf`Pnrs?F7G~Ai+Q~xl_uSe$0D3^oS_%OryuXvChPAsM2ewisH0_Uw|_pU2(-NydB;_7l|Dp9}T$T2H^)&ugIZMiKCD$pnsALE<0I z9y4!XC1QIRhIJ!-tpV=AdXhLO4%S=CAuOh@1rrM>fCm=96AR$^$2YGC&-!Js;&%k& z4g}-21mk`S?iSl@xf;<`PT6j=va*hW!StSyCUr^^9BYo;I%ocq*p3X$O-)JODvC*t z1xxSFW5<(^4}r9v-fv&jl%U{0nDOPAuVg;8bGv-`uD*Tffo{T1BR3$Ta~X{8L*%7Z Kq^cxLgZ>Xt|6BL~ diff --git a/examples/resource-bar/assets/ToggleIcons/JellyCat/Plastic Green Round Toggle_Off.png b/examples/resource-bar/assets/ToggleIcons/JellyCat/Plastic Green Round Toggle_Off.png index 655e8aaf1d6dacf4efc5b40abad4989606aebc43..f6b555e68db8a329a1fa4c8fe935e73ac224b21b 100644 GIT binary patch literal 8173 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 diff --git a/examples/resource-bar/assets/ToggleIcons/JellyCat/Plastic Green Square Toggle_Off.png b/examples/resource-bar/assets/ToggleIcons/JellyCat/Plastic Green Square Toggle_Off.png index d7f031c43695902a947ff95dec45b573ad0f97dc..0b6ab2aff24651972fc6ffa71c49abeb003b159a 100644 GIT binary patch literal 1252 zcmeAS@N?(olHy`uVBq!ia0vp^bwFIg!3HFqceK3&Qk(@Ik;M!QVyYm_=ozH)fq{W# znx~6nNX4zU*H3z{4wq;se6E<)6Ks+xqVA%s*(H38GyUjIg>x24i#VFN_@wW4XyhH~ zReIzV!+G?Z66^ojyI(H46Z-P)tGD0f@}8Dm-Q98InO!&gXVv)}|ISsOpWXokEj>Lw zcNQ&Lv}(^DoBgMsW-a(|`elh(#JSSU%*>_JcHY%e`uyn8qvzA7i&s`vP5S-2dgt!l zlW*US=9;{2{rabG-uPU*emylS>lOcLoA`(I7Phv3zyACgDJL)g^w~2vJ$?P7Q9L4Q zbLY=L{qEhmGiT16c<|uC{Arat4?UNYle4q8v6(Tou%INmUV8Lsk&nOs>%8gPwr$)0 zk9Ga-zfYdHn3;C)cZEb9sIXP37EmO#AC)-0*bhrUQGxUj@M-`&04@oKtpZO7%} zJ)1UN>iM(a;OiaNW!ERWKK%K-U2fm*-ODk=PQn0 zSO448#Ps=rcu9rr^WdPMGrw=%yeV?1)H-1rCTKX)?{Mqb-udj2+YBIE} zn=?md^Xt>6PoKRR7ag6wE;u;&th3yQ1I+w37=-W#78^$Y1IQE>RY*D+(3OKUV>KG4 z3C(zd>KRa6<9{Id#lyvm7pq!YMj9CzokQ_utnyH8ss=mlqXP?deVaJy3EX%U#GXVw=Z44zW-nP*>mUqng2O=?wtPg>C=lUDl|X| zf5V1^yk#FU^78!D)YQ(1WaQ@7wtmma$@x=KQj&6^bm@y%Gv>@$V&Hj^xv}BPmoFZ` z^nU2K$h}<0`>#()$jh5Aj&*NZ$H&!Q@r zK0iPIf685l#A#bE+XF-7<@x@qJ=!&ULZ^jZoIW+cFERS1_?IX98D-j6PfIk6IR`AZ O7(8A5T-G@yGywo<*l1b+ literal 1556 zcma)6iBr-E6#jXnu4cMvf^OznDTsMsE9TLPH;MOwm6(PX;R#CyN{8m8Wb0Adieagl zwqoO%CZ?-mX=1767PB7fL3yF&0-h}GAF$hd^WHb}&3o^gH*ejF3~3OR6r>sX^!f?_$YjMKk-nZtq<&ILVszXE8~~W)r{|yW=<(IOE_vwXx*)ft z|KOMVb{O>o$wd&YZs#~?(?UebCKZuQk(%WY)sV_nr31IeUhe`5ar zVQ*zvq=LL>_qtQ3#(#I?2<^Ln0p@@_{{^#$ZKb z-Xzd8W+I&ye5=4(drIR5za$~F_lI8V(mUKVrfqLdfio3tpYVFm4ZSw=XWN{%sV805 zNH;r#&p|^i6@po-B~%Bp22T$4vl#$cnL`<^wvXo^_=&>j7A2#>{%5Lf=-@l*?y`pG z1O1$}wG5l^l_ee{X=6Q3vto_ef|o(EM*Xr7UjszOs*~8^w6&AXrz3kRPV#dJG`j4S zv*mt`%YrCg0t48MnexJKKuHn8!u2qeik?h5ud9!QDimEF)Qwp6EZ+Mvf4eD@dg!84 zMdE<0T3@S*q(1zTHrj&c!uWo?BeY}?_DGA7l`np1K`tlcc>T@)fw z?k<4jtCzE@3#H6=NgkL~0MI)8HDo;fjaQ|lBGJ>^Rgo{FE^A}ellOF4N@){aLy5>l z0s)sm1du7Xb41*EeR3QzR^Q#z+c)IOJ`e!NEqc2A6nOE&@*k)Ko*R(8=HzbVm6zp} zF{Xm;c7O5xr4!6@DE0*^k#3$-o>%$0$kv$u))iu~V$@R5lrkoeQwp^(k@+(7DmKtV zhgnv(V_Q08-XSs)q#M{hjil#TUN7=*K4VUU8JA(PSP7Lx`a570Ub`5UJ_)Vrjn(xq zkPix~+S;PPiU;SVHsGbxOgMc>FvkuVg~#)>#Bu|a`VA_pwzes(j$RoBeF^t2bfk*Q z`}^J5G)eg4-#TJBQ+`JlnOj5PIgfOC`A>@Cn!{>pAuuhKx?t#(+J&0Q-#!{-Iu|U> zGffZofe$$QDxFiI(P;H8gdokn!d&4bryFd9uXC%&&&$grQmJP6<#!fUm5jy|E|0RD znwUYMJkHKm)Q*CK_reeE!_~cwu!xw&%5+$|;V|)5cRwyIof`cVXdv%h9iSbxyB5AR zqW0b%hQlljmHr4B{M?v$N}{@*WIJ}=>dnSRTXf^y&CZaZAUiv|k&E`b$5#u?P$_jXq7P@X7rq|EnpO`uNAkovzkNA#^6JZ)eU9SNF|=y zjLO8WNZcuCh1RE{xrj6YlTGHEmZnY|+Ok~~&^RF1`>e%TM!+~J$I=nel3wVrE9hK$ zv-<&DS#*!_78}`fTp=8P z^Sw@G(a#NHLov9bLuAEyWTGrD4CP|Dh}*ata785j*d?G-X@XJ@Hu^|mnJAOa9u=@V zM7(iJ4o%T96WD~-F5206S9C|L{)L;&7}}4luNc~o)$9{)&RgFL7iBP0gZ(sz(WmlK z6*qy7SdJvkN4zd*O`IH{498}~lrb3gYI;$xCMeB>$1Mb=y;9?Qy5BY$WlA{unM0h3 zKRnk$=%G4}KO+m8!t1eAtx7@6C(#5n^GO=G;dasdmyLE79>H(npPW)tapXK=EfzWb z?gp)?t6eC56T4oT$`z(39!JURzH4Cm7g$EaYRrvq8t<(3+Z6O3vsR?e7B}5#+SYCF WL>F9v=z2+i1K{b3c40Y3T>S@mht4Gc diff --git a/examples/resource-bar/assets/ToggleIcons/Wesley/Square Blue Toggle_Off.png b/examples/resource-bar/assets/ToggleIcons/Wesley/Square Blue Toggle_Off.png index 2cd33ce4feaf01807caab09af0a3df7653d3d489..04cd0fc01cb3e9a58abc9b49dd0ff211806b4a02 100644 GIT binary patch delta 150 zcmV;H0BQf>0kQ#*B!3BTNLh0L01FZT01FZU(%pXi0001FNklo%x0jAB`^UYzfP)SnA!BT1n8}5YU5E$MlBh&gak_%roQ|S!nCjiX7;Ehqn3ggeNGZx^prw85kI5d%8G=cyuOD5eQ6800M!XMGx(nryi7+Wp-l& z0<|pZ9^MTHYCh=Xa$V(}-ZaZse*OW8oa4`~1l<2IM~scl>SxN8NrB#NJ5+VTuhk`j z%$TsC@u9)ycK?FjD5EUSw+wsIM0OS}Y`xXCzah;{%x>XaZV3=rXP^>rn~!bAO&y?d s21W)zutPmy?_E}7X}K7K=uAciFB7GFv9|S2KzA~Dy85}Sb4q9e06QB=zW@LL diff --git a/examples/resource-bar/assets/ToggleIcons/Wesley/Square Blue Toggle_On.png b/examples/resource-bar/assets/ToggleIcons/Wesley/Square Blue Toggle_On.png index 04836e050307fc324bc43975cd2c31280c9c848a..b4b2f8fd47e012680762d511cef3637bd4874622 100644 GIT binary patch delta 181 zcmV;m080Or0?`4GB!3BTNLh0L01FZT01FZU(%pXi0001kNklo%x0jAB`^UYzfP)SnAsSXP{Ri}EdhF~n#w^{J!;9QB?Djy!_=1)W4xA7!vYva zu>@I=+Lpliqn3*I2pBMgj#};Pp+)}Lb0Jb!8|B@6rWJT0&M26z;Xm6sA4>J%Z5+Hk6JRw zEfLzefGUQfn}d?$*^bSr5n^DVxZ+|vHm3%e&&V+K<$neS%%XrA0G1h9U|zezkU(`y zU}m$h9h<|*z`(%3;GRJBb{EWSc$`ox(y;*mk2O7cn@p*r00000NkvXXu0mjf=Iv>s diff --git a/examples/resource-bar/assets/ToggleIcons/Wesley/Square Green Toggle_Off.png b/examples/resource-bar/assets/ToggleIcons/Wesley/Square Green Toggle_Off.png index 93411f1dbafd58b5d8659fe00d45e26d79ce62e4..d6ac6872b043966f869437531ab010623c2f22d9 100644 GIT binary patch delta 150 zcmV;H0BQfy0kQ#*B!3BTNLh0L01FZT01FZU(%pXi0001FNkl16%pSF5)RIw4 zNU($!4GFj07*qoM6N<$ Ef{vg&T>t<8 delta 182 zcmdnQc!_a>NGZx^prw85kIPJY5_^JUWx72n41k0KtcQYd+3zJe9EeJ+B)Z z5U6EI_wa5wP*YIxDtwhRpYd!vyGBF1w-qtYrI$CGMoCD#crrQA+f7&U(X#+zL~OBIL#o>}@#*z}w{tA?8)lyUlzBWEY&>Ud>Z?AO{-=!<$63 iumq#sMT;g8%xnPv>_I&k>PdG10000jKkay2 zgJB6R!Kfu8)Dnz*a{JJ4iVan@V@2Vk_=Fl3U^9n>S_b2@Y-9LD{HP^^+>#fUe^JFy zbaPO0JfxzLZK2c>GZx^prw85kJiJY5_^B3hIG{Qv*IzKxN^hdJ}-3T6o)h`7M2 z;(9eB>*43?+XH?y>$3pGvNCegxsB2fI44|TT+Am?dSC^!o2&+_)MTOMlw+Qi`L>gTe~DS@#G0K+FStpET3 diff --git a/examples/resource-bar/assets/ToggleIcons/Wesley/Square White Toggle_On.png b/examples/resource-bar/assets/ToggleIcons/Wesley/Square White Toggle_On.png index 7f4c4c9353efd48aa6974bf1754919dee735f082..848d6edccaa77946bdfe5d4fe1107c36a3d0df1e 100644 GIT binary patch delta 127 zcmdnRIEQh9N(EU@ats)Enk1;aD{O(pG4__70hhwnKLdZ$SUzkyp`;=VZX3T f+l_;N2Q$NBMn~gKd>`9@CNp@t`njxgN@xNA8tyD4 delta 158 zcmbQkxQlUuNGZx^prw85kH!JY5_^B3j>G-^kmbAkg|y{xQd-6AVVGOM^Et zv^pm&W<3^Eq_$^uL(}h1PK7(7vX5?1JN=A_;mrBw2g%plo}M`Subz{EbAe3d|4o4( z3}a6}i~G#NBH+Nl2q7wFb2k3F{4w?!r^R31cJ>{mH;;+eF{_){3qCpC|4JR`00vK2 KKbLh*2~7a8y+RiN From 7157016ad0dc97cf29720ed36eee8bc767d9483e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Wed, 18 Jan 2023 16:12:37 +0100 Subject: [PATCH 76/98] Add toggle switches. --- examples/resource-bar/game.json | 1052 ++++++++++++++++++++++++++++++- 1 file changed, 1046 insertions(+), 6 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index df9548362..0708c4282 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -965,7 +965,7 @@ "kind": "image", "metadata": "", "name": "assets\\Resource bars\\Copper Bar Border.png", - "smoothed": true, + "smoothed": false, "userAdded": true }, { @@ -974,7 +974,7 @@ "kind": "image", "metadata": "", "name": "assets\\Resource bars\\Copper Bar Red Fill.png", - "smoothed": true, + "smoothed": false, "userAdded": true }, { @@ -983,7 +983,7 @@ "kind": "image", "metadata": "", "name": "assets\\Resource bars\\tiled_Health Bar Fill.png", - "smoothed": true, + "smoothed": false, "userAdded": true }, { @@ -992,7 +992,7 @@ "kind": "image", "metadata": "", "name": "assets\\Resource bars\\Shaded Yellow Fill Barl.png", - "smoothed": true, + "smoothed": false, "userAdded": true }, { @@ -1001,7 +1001,7 @@ "kind": "image", "metadata": "", "name": "assets\\Resource bars\\Metal Bar Border.png", - "smoothed": true, + "smoothed": false, "userAdded": true }, { @@ -1039,6 +1039,150 @@ "name": "assets\\Sliders\\JellyCat\\Small Plastic Green Square Slider Border.png", "smoothed": true, "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/ToggleIcons/JellyCat/Plastic Green Round Switch_Off.png", + "kind": "image", + "metadata": "", + "name": "assets\\ToggleIcons\\JellyCat\\Plastic Green Round Switch_Off.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/ToggleIcons/JellyCat/Plastic Green Round Switch_On.png", + "kind": "image", + "metadata": "", + "name": "assets\\ToggleIcons\\JellyCat\\Plastic Green Round Switch_On.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/ToggleIcons/JellyCat/Plastic Green Round Toggle_Off.png", + "kind": "image", + "metadata": "", + "name": "assets\\ToggleIcons\\JellyCat\\Plastic Green Round Toggle_Off.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/ToggleIcons/JellyCat/Plastic Green Round Toggle_On.png", + "kind": "image", + "metadata": "", + "name": "assets\\ToggleIcons\\JellyCat\\Plastic Green Round Toggle_On.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/ToggleIcons/JellyCat/Plastic Green Square Toggle_Off.png", + "kind": "image", + "metadata": "", + "name": "assets\\ToggleIcons\\JellyCat\\Plastic Green Square Toggle_Off.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/ToggleIcons/JellyCat/Plastic Green Square Toggle_On.png", + "kind": "image", + "metadata": "", + "name": "assets\\ToggleIcons\\JellyCat\\Plastic Green Square Toggle_On.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/ToggleIcons/Wesley/Square Blue Toggle_Off.png", + "kind": "image", + "metadata": "", + "name": "assets\\ToggleIcons\\Wesley\\Square Blue Toggle_Off.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/ToggleIcons/Wesley/Square Blue Toggle_On.png", + "kind": "image", + "metadata": "", + "name": "assets\\ToggleIcons\\Wesley\\Square Blue Toggle_On.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/ToggleIcons/Wesley/Square Green Toggle_Off.png", + "kind": "image", + "metadata": "", + "name": "assets\\ToggleIcons\\Wesley\\Square Green Toggle_Off.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/ToggleIcons/Wesley/Square Green Toggle_On.png", + "kind": "image", + "metadata": "", + "name": "assets\\ToggleIcons\\Wesley\\Square Green Toggle_On.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/ToggleIcons/Wesley/Square White Toggle_Off.png", + "kind": "image", + "metadata": "", + "name": "assets\\ToggleIcons\\Wesley\\Square White Toggle_Off.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/ToggleIcons/Wesley/Square White Toggle_On.png", + "kind": "image", + "metadata": "", + "name": "assets\\ToggleIcons\\Wesley\\Square White Toggle_On.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/ToggleIcons/Buch/Gold Round Toggle_Off.png", + "kind": "image", + "metadata": "", + "name": "assets\\ToggleIcons\\Buch\\Gold Round Toggle_Off.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/ToggleIcons/Buch/Gold Round Toggle_On.png", + "kind": "image", + "metadata": "", + "name": "assets\\ToggleIcons\\Buch\\Gold Round Toggle_On.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/ToggleIcons/Buch/Gold Square Toggle_Off.png", + "kind": "image", + "metadata": "", + "name": "assets\\ToggleIcons\\Buch\\Gold Square Toggle_Off.png", + "smoothed": false, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/ToggleIcons/Buch/Gold Square Toggle_On.png", + "kind": "image", + "metadata": "", + "name": "assets\\ToggleIcons\\Buch\\Gold Square Toggle_On.png", + "smoothed": false, + "userAdded": true } ], "resourceFolders": [] @@ -1670,6 +1814,902 @@ ], "behaviorsSharedData": [] }, + { + "b": 43, + "disableInputWhenNotFocused": true, + "mangledName": "Toggles", + "name": "Toggles", + "r": 43, + "standardSortMethod": true, + "stopSoundsOnStartup": true, + "title": "", + "v": 43, + "uiSettings": { + "grid": false, + "gridType": "rectangular", + "gridWidth": 32, + "gridHeight": 32, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.8, + "snap": false, + "zoomFactor": 0.8807369002847458, + "windowMask": false + }, + "objectsGroups": [], + "variables": [], + "instances": [ + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "GreenPlasticRoundSwitch", + "persistentUuid": "dd6228b0-74b8-4ae8-b35f-368b92cb040e", + "width": 0, + "x": 243, + "y": 468, + "zOrder": 1, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "GreenPlasticRoundToggle", + "persistentUuid": "04e90046-9fe2-4ed0-b7a6-c15ab17f282b", + "width": 0, + "x": 599, + "y": 472, + "zOrder": 2, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "GreenPlasticSquareToggle", + "persistentUuid": "0346ffe9-6a6c-43b9-bd11-172d5d9a6941", + "width": 0, + "x": 828, + "y": 470, + "zOrder": 3, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "SquareBlueToggle", + "persistentUuid": "4a5626b4-c209-4204-a763-de3470c80994", + "width": 0, + "x": 560, + "y": 130, + "zOrder": 4, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "SquareGreenToggle", + "persistentUuid": "56a51fb1-7d63-4265-8837-d03de84043ac", + "width": 0, + "x": 721, + "y": 128, + "zOrder": 5, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "SquareWhiteToggle", + "persistentUuid": "36f55eef-63e3-4311-b945-b0357947d368", + "width": 0, + "x": 904, + "y": 122, + "zOrder": 6, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 52, + "layer": "", + "name": "SquareBlueToggle", + "persistentUuid": "f10e7e60-3651-43fa-a4e3-c57101a0c028", + "width": 50, + "x": 548, + "y": 202, + "zOrder": 4, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 52, + "layer": "", + "name": "SquareGreenToggle", + "persistentUuid": "b019b0bc-7a2f-4be2-8690-15ec193cede8", + "width": 50, + "x": 709, + "y": 200, + "zOrder": 5, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 68, + "layer": "", + "name": "SquareWhiteToggle", + "persistentUuid": "8414256d-a033-408f-869c-f3cfcecabb46", + "width": 64, + "x": 892, + "y": 194, + "zOrder": 6, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 59, + "layer": "", + "name": "GreenPlasticRoundSwitch", + "persistentUuid": "329f0128-164e-4e66-9854-9fa92197898f", + "width": 143, + "x": 316, + "y": 371, + "zOrder": 1, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 59, + "layer": "", + "name": "GreenPlasticRoundToggle", + "persistentUuid": "0e037eff-aca2-41ea-8890-f33bc3a86c49", + "width": 63, + "x": 634, + "y": 360, + "zOrder": 2, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 59, + "layer": "", + "name": "GreenPlasticSquareToggle", + "persistentUuid": "5eb187a4-807e-42d4-b242-fbc3a2676bb3", + "width": 63, + "x": 852, + "y": 363, + "zOrder": 3, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 26, + "layer": "", + "name": "GoldRoundToggle", + "persistentUuid": "e6975138-d187-4bca-b14b-583f197a95fe", + "width": 26, + "x": 394, + "y": 120, + "zOrder": 7, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 26, + "layer": "", + "name": "GoldSquareToggle", + "persistentUuid": "a661ff0f-3e61-4292-9df8-0072ce99d204", + "width": 26, + "x": 277, + "y": 121, + "zOrder": 8, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 52, + "layer": "", + "name": "GoldRoundToggle", + "persistentUuid": "44f7955b-ac59-4441-bae6-44d7544bb3be", + "width": 52, + "x": 392, + "y": 212, + "zOrder": 7, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 52, + "layer": "", + "name": "GoldSquareToggle", + "persistentUuid": "5caa797d-da8f-4aba-b5b9-5f4ac4ffbab9", + "width": 52, + "x": 275, + "y": 213, + "zOrder": 8, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ], + "objects": [ + { + "assetStoreId": "", + "name": "GreenPlasticRoundSwitch", + "tags": "", + "type": "SpriteToggleSwitch::SpriteToggleSwitch", + "variables": [], + "effects": [], + "behaviors": [], + "content": {}, + "childrenContent": { + "State": { + "updateIfNotVisible": false, + "animations": [ + { + "name": "Unchecked", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\ToggleIcons\\JellyCat\\Plastic Green Round Switch_Off.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Checked", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\ToggleIcons\\JellyCat\\Plastic Green Round Switch_On.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + } + } + }, + { + "assetStoreId": "", + "name": "GreenPlasticRoundToggle", + "tags": "", + "type": "SpriteToggleSwitch::SpriteToggleSwitch", + "variables": [], + "effects": [], + "behaviors": [], + "content": {}, + "childrenContent": { + "State": { + "updateIfNotVisible": false, + "animations": [ + { + "name": "Unchecked", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\ToggleIcons\\JellyCat\\Plastic Green Round Toggle_Off.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Checked", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\ToggleIcons\\JellyCat\\Plastic Green Round Toggle_On.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + } + } + }, + { + "assetStoreId": "", + "name": "GreenPlasticSquareToggle", + "tags": "", + "type": "SpriteToggleSwitch::SpriteToggleSwitch", + "variables": [], + "effects": [], + "behaviors": [], + "content": {}, + "childrenContent": { + "State": { + "updateIfNotVisible": false, + "animations": [ + { + "name": "Unchecked", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\ToggleIcons\\JellyCat\\Plastic Green Square Toggle_Off.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Checked", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\ToggleIcons\\JellyCat\\Plastic Green Square Toggle_On.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + } + } + }, + { + "assetStoreId": "", + "name": "SquareBlueToggle", + "tags": "", + "type": "SpriteToggleSwitch::SpriteToggleSwitch", + "variables": [], + "effects": [], + "behaviors": [], + "content": {}, + "childrenContent": { + "State": { + "updateIfNotVisible": false, + "animations": [ + { + "name": "Unchecked", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\ToggleIcons\\Wesley\\Square Blue Toggle_Off.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Checked", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\ToggleIcons\\Wesley\\Square Blue Toggle_On.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + } + } + }, + { + "assetStoreId": "", + "name": "SquareGreenToggle", + "tags": "", + "type": "SpriteToggleSwitch::SpriteToggleSwitch", + "variables": [], + "effects": [], + "behaviors": [], + "content": {}, + "childrenContent": { + "State": { + "updateIfNotVisible": false, + "animations": [ + { + "name": "Unchecked", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\ToggleIcons\\Wesley\\Square Green Toggle_Off.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Checked", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\ToggleIcons\\Wesley\\Square Green Toggle_On.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + } + } + }, + { + "assetStoreId": "", + "name": "SquareWhiteToggle", + "tags": "", + "type": "SpriteToggleSwitch::SpriteToggleSwitch", + "variables": [], + "effects": [], + "behaviors": [], + "content": {}, + "childrenContent": { + "State": { + "updateIfNotVisible": false, + "animations": [ + { + "name": "Unchecked", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\ToggleIcons\\Wesley\\Square White Toggle_Off.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Checked", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\ToggleIcons\\Wesley\\Square White Toggle_On.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + } + } + }, + { + "assetStoreId": "", + "name": "GoldRoundToggle", + "tags": "", + "type": "SpriteToggleSwitch::SpriteToggleSwitch", + "variables": [], + "effects": [], + "behaviors": [], + "content": {}, + "childrenContent": { + "State": { + "updateIfNotVisible": false, + "animations": [ + { + "name": "Unchecked", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\ToggleIcons\\Buch\\Gold Round Toggle_Off.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Checked", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\ToggleIcons\\Buch\\Gold Round Toggle_On.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + } + } + }, + { + "assetStoreId": "", + "name": "GoldSquareToggle", + "tags": "", + "type": "SpriteToggleSwitch::SpriteToggleSwitch", + "variables": [], + "effects": [], + "behaviors": [], + "content": {}, + "childrenContent": { + "State": { + "updateIfNotVisible": false, + "animations": [ + { + "name": "Unchecked", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\ToggleIcons\\Buch\\Gold Square Toggle_Off.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Checked", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\ToggleIcons\\Buch\\Gold Square Toggle_On.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + } + } + } + ], + "events": [], + "layers": [ + { + "ambientLightColorB": 10101048, + "ambientLightColorG": 10101048, + "ambientLightColorR": 14, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "behaviorsSharedData": [] + }, { "b": 43, "disableInputWhenNotFocused": true, @@ -22370,7 +23410,7 @@ ], "eventsBasedObjects": [ { - "defaultName": "Switch", + "defaultName": "ToggleSwitch", "description": "A toggle switch that users can click or touch.", "fullName": "Toggle switch", "name": "SpriteToggleSwitch", From 524faa2a64cebefece7733d2654deea361f4d040 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Wed, 18 Jan 2023 16:51:47 +0100 Subject: [PATCH 77/98] Split the bar scene. --- .../Small Plastic Green Round Switch_Off.png | Bin 0 -> 7451 bytes .../Small Plastic Green Round Switch_On.png | Bin 0 -> 7588 bytes .../Small Plastic Green Round Toggle_Off.png | Bin 0 -> 3897 bytes .../Small Plastic Green Round Toggle_On.png | Bin 0 -> 5863 bytes .../Small Plastic Green Square Toggle_Off.png | Bin 0 -> 549 bytes .../Small Plastic Green Square Toggle_On.png | Bin 0 -> 1074 bytes examples/resource-bar/game.json | 1613 ++++++++++++----- 7 files changed, 1120 insertions(+), 493 deletions(-) create mode 100644 examples/resource-bar/assets/ToggleIcons/JellyCat/Small Plastic Green Round Switch_Off.png create mode 100644 examples/resource-bar/assets/ToggleIcons/JellyCat/Small Plastic Green Round Switch_On.png create mode 100644 examples/resource-bar/assets/ToggleIcons/JellyCat/Small Plastic Green Round Toggle_Off.png create mode 100644 examples/resource-bar/assets/ToggleIcons/JellyCat/Small Plastic Green Round Toggle_On.png create mode 100644 examples/resource-bar/assets/ToggleIcons/JellyCat/Small Plastic Green Square Toggle_Off.png create mode 100644 examples/resource-bar/assets/ToggleIcons/JellyCat/Small Plastic Green Square Toggle_On.png diff --git a/examples/resource-bar/assets/ToggleIcons/JellyCat/Small Plastic Green Round Switch_Off.png b/examples/resource-bar/assets/ToggleIcons/JellyCat/Small Plastic Green Round Switch_Off.png new file mode 100644 index 0000000000000000000000000000000000000000..02dd36082d5dd7f29c623ba34f51169212c0e0a5 GIT binary patch literal 7451 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 LvbIt!)GYizfs!;! literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/ToggleIcons/JellyCat/Small Plastic Green Round Switch_On.png b/examples/resource-bar/assets/ToggleIcons/JellyCat/Small Plastic Green Round Switch_On.png new file mode 100644 index 0000000000000000000000000000000000000000..eba345ffbff0fa06eed6af9db34791f65325a44d GIT binary patch literal 7588 zcmWkzWmr^Q7aeefp+~x5U{F9>x)~4wX#o-G?w0QE4(XEa?glB5l9!T>p;NlP`~A4* z-aqF#=j?s9{H{I#l&OY(#K55Qeg|)N?g7l+m!^+CY6lUr| z@n}TTM~rcqBBm!uKQYLv(#MB&JT-TdyBa`XK?bDRNcR||dy2`ILXS?-=9(G~t1lW0 z-azN37__aieA;mdOz(>6~ul`NoGuz`=MK1uwb39Q4Y(QD9|YH<-i6@fDpqt zdQqG%9|#m7D20R|C>X`ow80ZaIVg^z3MyV!hM3{rZNpVp&tt?i{t^P0?Q_Vy>+9>g zUiCPrtgf!Adiw69iw=FL=#_-P;={wkON(=S?sBpOzwPs-kDCgoj>XFr1~|4x6&5m7 zR95CK+e#+Dr3zG}8X=?wP|$a<3}!H#Ksns7+3Bqm5+UyAhl=vD03R+ZEftMWA#}?| z@8{58;-wt&Ke_ju)>f5kKO_j3f`&`wmNCO+5m0b$5<*>lVDl_4yoZ#a$!5;X)bwd% zoNx7EQ@Y?R2HLk0{(5ob&ntEHdL`kr0Xv`lPdRs(erMa;CR)tN$}GeVm;350Y-|CX zXbO>tnBg!6hJkvn>3-&a71*pyk}=ARuh3-ka-;l|>#R<}!s2UKZi=9}4SQ@F>G2Qc zzt)?{!bpON!zI<})-ns!nDeI0d#)cvUSzHePTu<>AawB%{BST=8aD9ZwTfOym|pa4 zJOfHsGI!vV%BFL--)J@W#E0x?(*fDI?r1V6r+Zy3nE4_P7wU6mBg>DP(=NOvfL zmOL5=2FRYWm`6zHew9tH>p^{~DYdB}xapne^zQEN8N1I}djrvFypCIuK4NL|*=cEMd4q

g(%U+|KC0;JQay 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 z0fwARR910 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/ToggleIcons/JellyCat/Small Plastic Green Round Toggle_Off.png b/examples/resource-bar/assets/ToggleIcons/JellyCat/Small Plastic Green Round Toggle_Off.png new file mode 100644 index 0000000000000000000000000000000000000000..19812c12b822ba7f57061c05ded2791b21522e68 GIT binary patch literal 3897 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/ToggleIcons/JellyCat/Small Plastic Green Round Toggle_On.png b/examples/resource-bar/assets/ToggleIcons/JellyCat/Small Plastic Green Round Toggle_On.png new file mode 100644 index 0000000000000000000000000000000000000000..d05854a5bbe88e9a0be8839dd7fdbdaf34929fbc GIT binary patch literal 5863 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 IIVCg!04uZpi2wiq literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/ToggleIcons/JellyCat/Small Plastic Green Square Toggle_On.png b/examples/resource-bar/assets/ToggleIcons/JellyCat/Small Plastic Green Square Toggle_On.png new file mode 100644 index 0000000000000000000000000000000000000000..9ee5cf282094a554c33d912a98704b3f6c0f8df0 GIT binary patch literal 1074 zcmeAS@N?(olHy`uVBq!ia0vp^_CRdK!3HGRCpG2(Db50q$YKTtF;x&|^bAt@02Gug zag8W(&d<$F%`0JWE=o--Nlj5G&n(GMaQE~L2yf&QXJBC7@9E+gl5y|tZGV3iSBc{v z-v@{KoY&FN4rH34A*Z6IHczEs+V05n`$XSa;-Me@5{r&uE0!8}e;zd~RRloiITmNu{&9k4MpUcS08%ywf~PNpG&W84~u-o zHb?x3XK#Kmdql6fsR@&sP3?2d=+aEnSCrqfzGrTsQF<}RP_Q||LSDt`U@wCUw%b7uJbp7w*)*_UDU`7-s(R`MPB zHS6cRpM2IYrhC~QjwZ&Yj>ONUb|Uq=g`d@J&D?AL^v0G8=Ji)T+UIf3|3Cuze}B96 zWJ$B{mff2qBX)mUo;F$OdDpY4@4p|tu0K!Z507zXT*UMED5v?Y0%vDvmtQmdeq4Il zwIh2RMCULi`5K*!GW|4}<=K{J87pob{xEso6}9uLE_NtcFc)6i^))++KVZ$PnG3vR zy{@!BnBAVd^hnT3uA?PFPE*2;p36V(FB-CfYblptZ(02wx5c{x-6~H$I6C3Yt;c(^ zn>x0at5hD)3OY1{1-R|0p4cDIbrORH(DN^L{4`WVET+vuB zTvN-hI%&Sv;qFBzHyClpZToqv_pD!1;REMd6Kf{LJ$C0DL)YqfuU^$9z{JkZ&VBf2 ze(vu@aqA+dEnF2Gf8z6=7vFzdN$}_#>-hff;=j3jckMcKMxxg(Elo>WS~`C1+O@T@ p(^8*b?ESH5vX3brTeJLsHWRmhC0i#QSqseX44$rjF6*2UngHKv{gD6w literal 0 HcmV?d00001 diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 0708c4282..4f43088fe 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -1183,6 +1183,60 @@ "name": "assets\\ToggleIcons\\Buch\\Gold Square Toggle_On.png", "smoothed": false, "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/ToggleIcons/JellyCat/Small Plastic Green Round Switch_Off.png", + "kind": "image", + "metadata": "", + "name": "assets\\ToggleIcons\\JellyCat\\Small Plastic Green Round Switch_Off.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/ToggleIcons/JellyCat/Small Plastic Green Round Switch_On.png", + "kind": "image", + "metadata": "", + "name": "assets\\ToggleIcons\\JellyCat\\Small Plastic Green Round Switch_On.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/ToggleIcons/JellyCat/Small Plastic Green Round Toggle_Off.png", + "kind": "image", + "metadata": "", + "name": "assets\\ToggleIcons\\JellyCat\\Small Plastic Green Round Toggle_Off.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/ToggleIcons/JellyCat/Small Plastic Green Round Toggle_On.png", + "kind": "image", + "metadata": "", + "name": "assets\\ToggleIcons\\JellyCat\\Small Plastic Green Round Toggle_On.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/ToggleIcons/JellyCat/Small Plastic Green Square Toggle_Off.png", + "kind": "image", + "metadata": "", + "name": "assets\\ToggleIcons\\JellyCat\\Small Plastic Green Square Toggle_Off.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/ToggleIcons/JellyCat/Small Plastic Green Square Toggle_On.png", + "kind": "image", + "metadata": "", + "name": "assets\\ToggleIcons\\JellyCat\\Small Plastic Green Square Toggle_On.png", + "smoothed": true, + "userAdded": true } ], "resourceFolders": [] @@ -1975,51 +2029,6 @@ "stringProperties": [], "initialVariables": [] }, - { - "angle": 0, - "customSize": true, - "height": 59, - "layer": "", - "name": "GreenPlasticRoundSwitch", - "persistentUuid": "329f0128-164e-4e66-9854-9fa92197898f", - "width": 143, - "x": 316, - "y": 371, - "zOrder": 1, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 59, - "layer": "", - "name": "GreenPlasticRoundToggle", - "persistentUuid": "0e037eff-aca2-41ea-8890-f33bc3a86c49", - "width": 63, - "x": 634, - "y": 360, - "zOrder": 2, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 59, - "layer": "", - "name": "GreenPlasticSquareToggle", - "persistentUuid": "5eb187a4-807e-42d4-b242-fbc3a2676bb3", - "width": 63, - "x": 852, - "y": 363, - "zOrder": 3, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, { "angle": 0, "customSize": true, @@ -2079,6 +2088,51 @@ "numberProperties": [], "stringProperties": [], "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "SmallGreenPlasticRoundSwitch", + "persistentUuid": "50ed085f-0f1c-4616-8006-dfffc3023735", + "width": 0, + "x": 312, + "y": 365, + "zOrder": 9, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "SmallGreenPlasticRoundToggle", + "persistentUuid": "22b48d13-0928-41d8-91da-b05ef6eb6372", + "width": 0, + "x": 624, + "y": 366, + "zOrder": 10, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "SmallGreenPlasticSquareToggle", + "persistentUuid": "def2be66-c713-4b28-bbf5-eb5ca882e35b", + "width": 0, + "x": 858, + "y": 368, + "zOrder": 11, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] } ], "objects": [ @@ -2309,7 +2363,7 @@ }, { "assetStoreId": "", - "name": "SquareBlueToggle", + "name": "SmallGreenPlasticRoundSwitch", "tags": "", "type": "SpriteToggleSwitch::SpriteToggleSwitch", "variables": [], @@ -2330,7 +2384,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "assets\\ToggleIcons\\Wesley\\Square Blue Toggle_Off.png", + "image": "assets\\ToggleIcons\\JellyCat\\Small Plastic Green Round Switch_Off.png", "points": [], "originPoint": { "name": "origine", @@ -2359,7 +2413,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "assets\\ToggleIcons\\Wesley\\Square Blue Toggle_On.png", + "image": "assets\\ToggleIcons\\JellyCat\\Small Plastic Green Round Switch_On.png", "points": [], "originPoint": { "name": "origine", @@ -2384,7 +2438,7 @@ }, { "assetStoreId": "", - "name": "SquareGreenToggle", + "name": "SmallGreenPlasticRoundToggle", "tags": "", "type": "SpriteToggleSwitch::SpriteToggleSwitch", "variables": [], @@ -2405,7 +2459,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "assets\\ToggleIcons\\Wesley\\Square Green Toggle_Off.png", + "image": "assets\\ToggleIcons\\JellyCat\\Small Plastic Green Round Toggle_Off.png", "points": [], "originPoint": { "name": "origine", @@ -2434,7 +2488,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "assets\\ToggleIcons\\Wesley\\Square Green Toggle_On.png", + "image": "assets\\ToggleIcons\\JellyCat\\Small Plastic Green Round Toggle_On.png", "points": [], "originPoint": { "name": "origine", @@ -2459,7 +2513,7 @@ }, { "assetStoreId": "", - "name": "SquareWhiteToggle", + "name": "SmallGreenPlasticSquareToggle", "tags": "", "type": "SpriteToggleSwitch::SpriteToggleSwitch", "variables": [], @@ -2480,7 +2534,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "assets\\ToggleIcons\\Wesley\\Square White Toggle_Off.png", + "image": "assets\\ToggleIcons\\JellyCat\\Small Plastic Green Square Toggle_Off.png", "points": [], "originPoint": { "name": "origine", @@ -2509,7 +2563,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "assets\\ToggleIcons\\Wesley\\Square White Toggle_On.png", + "image": "assets\\ToggleIcons\\JellyCat\\Small Plastic Green Square Toggle_On.png", "points": [], "originPoint": { "name": "origine", @@ -2534,7 +2588,7 @@ }, { "assetStoreId": "", - "name": "GoldRoundToggle", + "name": "SquareBlueToggle", "tags": "", "type": "SpriteToggleSwitch::SpriteToggleSwitch", "variables": [], @@ -2555,7 +2609,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "assets\\ToggleIcons\\Buch\\Gold Round Toggle_Off.png", + "image": "assets\\ToggleIcons\\Wesley\\Square Blue Toggle_Off.png", "points": [], "originPoint": { "name": "origine", @@ -2584,7 +2638,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "assets\\ToggleIcons\\Buch\\Gold Round Toggle_On.png", + "image": "assets\\ToggleIcons\\Wesley\\Square Blue Toggle_On.png", "points": [], "originPoint": { "name": "origine", @@ -2609,7 +2663,7 @@ }, { "assetStoreId": "", - "name": "GoldSquareToggle", + "name": "SquareGreenToggle", "tags": "", "type": "SpriteToggleSwitch::SpriteToggleSwitch", "variables": [], @@ -2630,7 +2684,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "assets\\ToggleIcons\\Buch\\Gold Square Toggle_Off.png", + "image": "assets\\ToggleIcons\\Wesley\\Square Green Toggle_Off.png", "points": [], "originPoint": { "name": "origine", @@ -2659,7 +2713,7 @@ "sprites": [ { "hasCustomCollisionMask": false, - "image": "assets\\ToggleIcons\\Buch\\Gold Square Toggle_On.png", + "image": "assets\\ToggleIcons\\Wesley\\Square Green Toggle_On.png", "points": [], "originPoint": { "name": "origine", @@ -2681,65 +2735,290 @@ ] } } - } - ], - "events": [], - "layers": [ + }, { - "ambientLightColorB": 10101048, - "ambientLightColorG": 10101048, - "ambientLightColorR": 14, - "followBaseLayerCamera": false, - "isLightingLayer": false, - "name": "", - "visibility": true, - "cameras": [ - { - "defaultSize": true, - "defaultViewport": true, - "height": 0, - "viewportBottom": 1, - "viewportLeft": 0, - "viewportRight": 1, - "viewportTop": 0, - "width": 0 + "assetStoreId": "", + "name": "SquareWhiteToggle", + "tags": "", + "type": "SpriteToggleSwitch::SpriteToggleSwitch", + "variables": [], + "effects": [], + "behaviors": [], + "content": {}, + "childrenContent": { + "State": { + "updateIfNotVisible": false, + "animations": [ + { + "name": "Unchecked", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\ToggleIcons\\Wesley\\Square White Toggle_Off.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Checked", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\ToggleIcons\\Wesley\\Square White Toggle_On.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] } - ], - "effects": [] - } - ], - "behaviorsSharedData": [] - }, - { - "b": 43, - "disableInputWhenNotFocused": true, - "mangledName": "Experiment", - "name": "Experiment", - "r": 43, - "standardSortMethod": true, - "stopSoundsOnStartup": true, - "title": "", - "v": 43, - "uiSettings": { - "grid": false, - "gridType": "rectangular", - "gridWidth": 32, - "gridHeight": 32, - "gridOffsetX": 0, - "gridOffsetY": 0, - "gridColor": 10401023, - "gridAlpha": 0.8, - "snap": false, - "zoomFactor": 0.7202776314336254, - "windowMask": false - }, - "objectsGroups": [], - "variables": [], - "instances": [ + } + }, { - "angle": 0, - "customSize": false, - "height": 0, + "assetStoreId": "", + "name": "GoldRoundToggle", + "tags": "", + "type": "SpriteToggleSwitch::SpriteToggleSwitch", + "variables": [], + "effects": [], + "behaviors": [], + "content": {}, + "childrenContent": { + "State": { + "updateIfNotVisible": false, + "animations": [ + { + "name": "Unchecked", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\ToggleIcons\\Buch\\Gold Round Toggle_Off.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Checked", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\ToggleIcons\\Buch\\Gold Round Toggle_On.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + } + } + }, + { + "assetStoreId": "", + "name": "GoldSquareToggle", + "tags": "", + "type": "SpriteToggleSwitch::SpriteToggleSwitch", + "variables": [], + "effects": [], + "behaviors": [], + "content": {}, + "childrenContent": { + "State": { + "updateIfNotVisible": false, + "animations": [ + { + "name": "Unchecked", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\ToggleIcons\\Buch\\Gold Square Toggle_Off.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Checked", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\ToggleIcons\\Buch\\Gold Square Toggle_On.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + } + } + } + ], + "events": [], + "layers": [ + { + "ambientLightColorB": 10101048, + "ambientLightColorG": 10101048, + "ambientLightColorR": 14, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "behaviorsSharedData": [] + }, + { + "b": 43, + "disableInputWhenNotFocused": true, + "mangledName": "Experiment", + "name": "Experiment", + "r": 43, + "standardSortMethod": true, + "stopSoundsOnStartup": true, + "title": "", + "v": 43, + "uiSettings": { + "grid": false, + "gridType": "rectangular", + "gridWidth": 32, + "gridHeight": 32, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.8, + "snap": false, + "zoomFactor": 0.7202776314336254, + "windowMask": false + }, + "objectsGroups": [], + "variables": [], + "instances": [ + { + "angle": 0, + "customSize": false, + "height": 0, "layer": "", "name": "Checkbox", "persistentUuid": "c76646f5-db56-47a8-94dc-e41cb42ead76", @@ -3565,8 +3844,8 @@ { "b": 68, "disableInputWhenNotFocused": true, - "mangledName": "Bars", - "name": "Bars", + "mangledName": "Units_32Bars", + "name": "Units Bars", "r": 68, "standardSortMethod": true, "stopSoundsOnStartup": true, @@ -3598,55 +3877,13 @@ ] }, { - "name": "ContinuousBar", + "name": "UnitsBar", "objects": [ { - "name": "BronzeBrownBar" - }, - { - "name": "ContinousBar" - }, - { - "name": "NoBufferContinousBar" - }, - { - "name": "NoLabelContinousBar" - }, - { - "name": "BronzeGreenBar" - }, - { - "name": "GoldDarkBar" - }, - { - "name": "GoldGreenBar" - }, - { - "name": "BlueDotBar" - }, - { - "name": "GreenDotBar" - }, - { - "name": "RedFlatBar" - }, - { - "name": "OrangeFlatBar" - }, - { - "name": "GreenFlatBar" - }, - { - "name": "BlueFlatBar" - }, - { - "name": "WoodNoShadowBlueBar" - }, - { - "name": "WoodShadowBlueBar" + "name": "HearthScrollUnitsBar" }, { - "name": "MetalYellowBar" + "name": "NoBackgroundUnitsBar" } ] } @@ -3688,11 +3925,11 @@ "customSize": true, "height": 88, "layer": "", - "name": "UnitsBar", + "name": "HearthScrollUnitsBar", "persistentUuid": "cd7ae08a-3045-436b-bda9-beda9d2b55db", "width": 200, - "x": 1016, - "y": 56, + "x": 592, + "y": 216, "zOrder": 39, "numberProperties": [], "stringProperties": [], @@ -3700,30 +3937,702 @@ }, { "angle": 0, - "customSize": true, - "height": 40, - "layer": "", - "name": "ContinousBar", - "persistentUuid": "60a7c4ed-31bf-44a9-8513-09c9bfd8eb42", - "width": 194, - "x": 360, - "y": 327, - "zOrder": 40, + "customSize": false, + "height": 16, + "layer": "", + "name": "NoBackgroundUnitsBar", + "persistentUuid": "850c5ba6-8615-4217-bc65-f0b4a149b4cc", + "width": 96, + "x": 464, + "y": 392, + "zOrder": 41, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "HearthScrollUnitsBar", + "persistentUuid": "20b69c52-a1a2-4f22-b7b7-4560d4da8dcb", + "width": 0, + "x": 368, + "y": 232, + "zOrder": 42, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 64, + "layer": "", + "name": "NoBackgroundUnitsBar", + "persistentUuid": "a4a16b93-f588-4324-b306-5f85919b34ab", + "width": 208, + "x": 592, + "y": 368, + "zOrder": 44, "numberProperties": [], "stringProperties": [], "initialVariables": [] + } + ], + "objects": [ + { + "assetStoreId": "996e07c73069934a868dc8212a0d7d959dfdd245af964998aad12cf57d252ac3", + "name": "PlusKey", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [ + { + "effectType": "Outline", + "name": "Effect", + "doubleParameters": { + "padding": 2, + "thickness": 2 + }, + "stringParameters": { + "color": "255;255;255" + }, + "booleanParameters": {} + } + ], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Plus Key.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 50, + "y": 50 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "90731de0069b2f3684767c392c6e4c48255a2647bc849497f25b672771290626", + "name": "MinusKey", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [ + { + "effectType": "Outline", + "name": "Effect", + "doubleParameters": { + "padding": 2, + "thickness": 2 + }, + "stringParameters": { + "color": "255;255;255" + }, + "booleanParameters": {} + } + ], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Minus Key.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 50, + "y": 50 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "", + "name": "HearthScrollUnitsBar", + "tags": "", + "type": "TiledUnitsBar::TiledUnitsBar", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "UnitWidth": 26, + "BarLeftPadding": 38, + "BarRightPadding": 38, + "MaxValue": 3, + "InitialValue": 3 + }, + "childrenContent": { + "Background": { + "bottomMargin": 30, + "height": 64, + "leftMargin": 64, + "rightMargin": 64, + "texture": "assets\\Scroll.png", + "tiled": false, + "topMargin": 30, + "width": 154 + }, + "Bar": { + "height": 26, + "texture": "assets\\Empty Heart.png", + "width": 78 + }, + "FillBar": { + "height": 26, + "texture": "assets\\Full Heart.png", + "width": 78 + } + } + }, + { + "assetStoreId": "", + "name": "NoBackgroundUnitsBar", + "tags": "", + "type": "TiledUnitsBar::TiledUnitsBar", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "UnitWidth": 16, + "HideBackground": true, + "ShowBackground": false + }, + "childrenContent": { + "Background": { + "bottomMargin": 0, + "height": 16, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\tiled_Tiled Empty UI Heart.png", + "tiled": true, + "topMargin": 0, + "width": 48 + }, + "Bar": { + "height": 16, + "texture": "assets\\tiled_Tiled Empty UI Heart.png", + "width": 48 + }, + "FillBar": { + "height": 16, + "texture": "assets\\tiled_Tiled Filler UI Heart.png", + "width": 16 + } + } + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Initialize game", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DepartScene" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "MaxResource", + "=", + "CameraBorderRight()" + ] + } + ], + "events": [ + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::EnableDebugDraw" + }, + "parameters": [ + "", + "", + "", + "", + "" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 224, + "colorG": 16, + "colorR": 189, + "creationTime": 0, + "name": "Buttons", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Hover", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SourisSurObjet" + }, + "parameters": [ + "Button", + "", + "", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "EnableEffect" + }, + "parameters": [ + "Button", + "\"Effect\"", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SourisSurObjet" + }, + "parameters": [ + "Button", + "", + "", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "EnableEffect" + }, + "parameters": [ + "Button", + "\"Effect\"", + "yes" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Clicked", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "MouseButtonReleased" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "ScaleWidth" + }, + "parameters": [ + "Button", + "=", + "0.9" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SourisSurObjet" + }, + "parameters": [ + "PlusKey", + "", + "", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TiledUnitsBar::TiledUnitsBar::SetValue" + }, + "parameters": [ + "UnitsBar", + "+", + "0.5", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SourisSurObjet" + }, + "parameters": [ + "MinusKey", + "", + "", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TiledUnitsBar::TiledUnitsBar::SetValue" + }, + "parameters": [ + "UnitsBar", + "-", + "0.5", + "" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Press", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "MouseButtonPressed" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SourisSurObjet" + }, + "parameters": [ + "Button", + "", + "", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeColor" + }, + "parameters": [ + "Button", + "\"189;16;224\"" + ] + }, + { + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "Button", + "=", + "0.9" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "MouseButtonPressed" + }, + "parameters": [ + "", + "Left" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeColor" + }, + "parameters": [ + "Button", + "\"255;255;255\"" + ] + }, + { + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "Button", + "=", + "1" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [] + } + ], + "layers": [ + { + "ambientLightColorB": 32, + "ambientLightColorG": 0, + "ambientLightColorR": 0, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "behaviorsSharedData": [] + }, + { + "b": 68, + "disableInputWhenNotFocused": true, + "mangledName": "Continuous_32Bars", + "name": "Continuous Bars", + "r": 68, + "standardSortMethod": true, + "stopSoundsOnStartup": true, + "title": "", + "v": 68, + "uiSettings": { + "grid": true, + "gridType": "rectangular", + "gridWidth": 8, + "gridHeight": 8, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.2, + "snap": true, + "zoomFactor": 0.7699518302210852, + "windowMask": false + }, + "objectsGroups": [ + { + "name": "Button", + "objects": [ + { + "name": "PlusKey" + }, + { + "name": "MinusKey" + } + ] }, + { + "name": "ContinuousBar", + "objects": [ + { + "name": "ContinousBar" + }, + { + "name": "NoBufferContinousBar" + }, + { + "name": "NoLabelContinousBar" + }, + { + "name": "BronzeGreenBar" + }, + { + "name": "GoldGreenBar" + }, + { + "name": "BlueDotBar" + }, + { + "name": "GreenDotBar" + }, + { + "name": "RedFlatBar" + }, + { + "name": "OrangeFlatBar" + }, + { + "name": "GreenFlatBar" + }, + { + "name": "BlueFlatBar" + }, + { + "name": "WoodNoShadowBlueBar" + }, + { + "name": "WoodShadowBlueBar" + }, + { + "name": "MetalYellowBar" + } + ] + } + ], + "variables": [], + "instances": [ { "angle": 0, "customSize": false, - "height": 16, + "height": 0, "layer": "", - "name": "NoBackgroundUnitsBar", - "persistentUuid": "850c5ba6-8615-4217-bc65-f0b4a149b4cc", - "width": 96, - "x": 88, - "y": 88, - "zOrder": 41, + "name": "PlusKey", + "persistentUuid": "75acefa2-30d2-45f3-8955-bdbcc059a348", + "width": 0, + "x": 638, + "y": 90, + "zOrder": 25, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -3733,42 +4642,42 @@ "customSize": false, "height": 0, "layer": "", - "name": "UnitsBar", - "persistentUuid": "20b69c52-a1a2-4f22-b7b7-4560d4da8dcb", + "name": "MinusKey", + "persistentUuid": "68d80c16-a4fc-4793-aa38-eb458b7c1a28", "width": 0, - "x": 792, - "y": 72, - "zOrder": 42, + "x": 538, + "y": 90, + "zOrder": 26, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, - "customSize": false, - "height": 0, + "customSize": true, + "height": 40, "layer": "", "name": "ContinousBar", - "persistentUuid": "a4664301-98a6-419b-a0d5-c5028371de9c", - "width": 0, - "x": 216, - "y": 343, - "zOrder": 43, + "persistentUuid": "60a7c4ed-31bf-44a9-8513-09c9bfd8eb42", + "width": 194, + "x": 360, + "y": 327, + "zOrder": 40, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, - "customSize": true, - "height": 64, + "customSize": false, + "height": 0, "layer": "", - "name": "NoBackgroundUnitsBar", - "persistentUuid": "a4a16b93-f588-4324-b306-5f85919b34ab", - "width": 208, + "name": "ContinousBar", + "persistentUuid": "a4664301-98a6-419b-a0d5-c5028371de9c", + "width": 0, "x": 216, - "y": 64, - "zOrder": 44, + "y": 343, + "zOrder": 43, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -3833,21 +4742,6 @@ "stringProperties": [], "initialVariables": [] }, - { - "angle": 0, - "customSize": false, - "height": 25, - "layer": "", - "name": "BronzeBrownBar", - "persistentUuid": "fdee4ae8-1e59-4022-97f7-edef3962666a", - "width": 144, - "x": 600, - "y": 197, - "zOrder": 51, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, { "angle": 0, "customSize": false, @@ -3856,8 +4750,8 @@ "name": "BronzeGreenBar", "persistentUuid": "0a10c628-7329-4865-af9e-59f9d45e6791", "width": 0, - "x": 600, - "y": 238, + "x": 607, + "y": 264, "zOrder": 52, "numberProperties": [], "stringProperties": [], @@ -3871,8 +4765,8 @@ "name": "GoldGreenBar", "persistentUuid": "f8bab57d-0139-42b5-8051-14cfc7a82ec5", "width": 0, - "x": 600, - "y": 277, + "x": 607, + "y": 303, "zOrder": 54, "numberProperties": [], "stringProperties": [], @@ -3977,23 +4871,8 @@ "persistentUuid": "8a527c5e-1ec6-4012-b4b6-85315d4513d2", "width": 328, "x": 642, - "y": 478, - "zOrder": 57, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "GoldDarkBar", - "persistentUuid": "3401cf4b-20c1-4fd6-bea5-4a8f1e857761", - "width": 0, - "x": 601, - "y": 317, - "zOrder": 61, + "y": 478, + "zOrder": 57, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -4183,80 +5062,6 @@ } ] }, - { - "assetStoreId": "", - "name": "UnitsBar", - "tags": "", - "type": "TiledUnitsBar::TiledUnitsBar", - "variables": [], - "effects": [], - "behaviors": [], - "content": { - "UnitWidth": 26, - "BarLeftPadding": 38, - "BarRightPadding": 38, - "MaxValue": 3, - "InitialValue": 3 - }, - "childrenContent": { - "Background": { - "bottomMargin": 30, - "height": 64, - "leftMargin": 64, - "rightMargin": 64, - "texture": "assets\\Scroll.png", - "tiled": false, - "topMargin": 30, - "width": 154 - }, - "Bar": { - "height": 26, - "texture": "assets\\Empty Heart.png", - "width": 78 - }, - "FillBar": { - "height": 26, - "texture": "assets\\Full Heart.png", - "width": 78 - } - } - }, - { - "assetStoreId": "", - "name": "NoBackgroundUnitsBar", - "tags": "", - "type": "TiledUnitsBar::TiledUnitsBar", - "variables": [], - "effects": [], - "behaviors": [], - "content": { - "UnitWidth": 16, - "HideBackground": true, - "ShowBackground": false - }, - "childrenContent": { - "Background": { - "bottomMargin": 0, - "height": 16, - "leftMargin": 0, - "rightMargin": 0, - "texture": "assets\\tiled_Tiled Empty UI Heart.png", - "tiled": true, - "topMargin": 0, - "width": 48 - }, - "Bar": { - "height": 16, - "texture": "assets\\tiled_Tiled Empty UI Heart.png", - "width": 48 - }, - "FillBar": { - "height": 16, - "texture": "assets\\tiled_Tiled Filler UI Heart.png", - "width": 16 - } - } - }, { "assetStoreId": "", "name": "ContinousBar", @@ -4452,73 +5257,6 @@ } } }, - { - "assetStoreId": "", - "name": "BronzeBrownBar", - "tags": "", - "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", - "variables": [], - "effects": [], - "behaviors": [], - "content": { - "ShowLabel": false, - "PreviousHighValueDuration": 0, - "BarTopPadding": 4, - "BarLeftPadding": 25, - "BarRightPadding": 25, - "BarBottomPadding": 5, - "InitialValue": 8, - "MaxValue": 16, - "EasingDuration": 0 - }, - "childrenContent": { - "Background": { - "bottomMargin": 4, - "height": 25, - "leftMargin": 24, - "rightMargin": 25, - "texture": "assets\\Resource bars\\Buch\\Bronze bar background.png", - "tiled": true, - "topMargin": 3, - "width": 113 - }, - "Buffer": { - "bottomMargin": 0, - "height": 16, - "leftMargin": 0, - "rightMargin": 0, - "texture": "", - "tiled": true, - "topMargin": 0, - "width": 16 - }, - "FillBar": { - "bottomMargin": 0, - "height": 16, - "leftMargin": 0, - "rightMargin": 0, - "texture": "assets\\Resource bars\\Buch\\Brown LCD Bar Fill.png", - "tiled": true, - "topMargin": 0, - "width": 16 - }, - "Label": { - "bold": false, - "italic": false, - "smoothed": true, - "underlined": false, - "string": "2 / 3", - "font": "", - "textAlignment": "", - "characterSize": 20, - "color": { - "b": 0, - "g": 0, - "r": 0 - } - } - } - }, { "assetStoreId": "", "name": "BronzeGreenBar", @@ -4529,7 +5267,7 @@ "behaviors": [], "content": { "ShowLabel": false, - "PreviousHighValueDuration": 0, + "PreviousHighValueDuration": 1, "BarTopPadding": 4, "BarLeftPadding": 25, "BarRightPadding": 25, @@ -4554,7 +5292,7 @@ "height": 32, "leftMargin": 0, "rightMargin": 0, - "texture": "", + "texture": "assets\\Resource bars\\Buch\\Brown LCD Bar Fill.png", "tiled": true, "topMargin": 0, "width": 32 @@ -4586,73 +5324,6 @@ } } }, - { - "assetStoreId": "", - "name": "GoldDarkBar", - "tags": "", - "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", - "variables": [], - "effects": [], - "behaviors": [], - "content": { - "ShowLabel": false, - "PreviousHighValueDuration": 0, - "BarTopPadding": 4, - "BarLeftPadding": 25, - "BarRightPadding": 25, - "BarBottomPadding": 5, - "InitialValue": 8, - "MaxValue": 16, - "EasingDuration": 0 - }, - "childrenContent": { - "Background": { - "bottomMargin": 4, - "height": 25, - "leftMargin": 24, - "rightMargin": 25, - "texture": "assets\\Resource bars\\Buch\\Gold bar background.png", - "tiled": true, - "topMargin": 3, - "width": 113 - }, - "Buffer": { - "bottomMargin": 0, - "height": 16, - "leftMargin": 0, - "rightMargin": 0, - "texture": "", - "tiled": true, - "topMargin": 0, - "width": 16 - }, - "FillBar": { - "bottomMargin": 0, - "height": 16, - "leftMargin": 0, - "rightMargin": 0, - "texture": "assets\\Resource bars\\Buch\\Dark LCD Bar Fill.png", - "tiled": true, - "topMargin": 0, - "width": 16 - }, - "Label": { - "bold": false, - "italic": false, - "smoothed": true, - "underlined": false, - "string": "2 / 3", - "font": "", - "textAlignment": "", - "characterSize": 20, - "color": { - "b": 0, - "g": 0, - "r": 0 - } - } - } - }, { "assetStoreId": "", "name": "GoldGreenBar", @@ -4663,7 +5334,7 @@ "behaviors": [], "content": { "ShowLabel": false, - "PreviousHighValueDuration": 0, + "PreviousHighValueDuration": 1, "BarTopPadding": 4, "BarLeftPadding": 25, "BarRightPadding": 25, @@ -4688,7 +5359,7 @@ "height": 16, "leftMargin": 0, "rightMargin": 0, - "texture": "", + "texture": "assets\\Resource bars\\Buch\\Dark LCD Bar Fill.png", "tiled": true, "topMargin": 0, "width": 16 @@ -5501,28 +6172,6 @@ } ], "actions": [ - { - "type": { - "value": "TiledUnitsBar::TiledUnitsBar::SetValue" - }, - "parameters": [ - "UnitsBar", - "+", - "0.5", - "" - ] - }, - { - "type": { - "value": "TiledUnitsBar::TiledUnitsBar::SetValue" - }, - "parameters": [ - "NoBackgroundUnitsBar", - "+", - "0.5", - "" - ] - }, { "type": { "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" @@ -5552,28 +6201,6 @@ } ], "actions": [ - { - "type": { - "value": "TiledUnitsBar::TiledUnitsBar::SetValue" - }, - "parameters": [ - "UnitsBar", - "-", - "0.5", - "" - ] - }, - { - "type": { - "value": "TiledUnitsBar::TiledUnitsBar::SetValue" - }, - "parameters": [ - "NoBackgroundUnitsBar", - "-", - "0.5", - "" - ] - }, { "type": { "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" From 65a218f56aae72bdfcc3bdc9bd7095474d1f4803 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Wed, 18 Jan 2023 17:29:23 +0100 Subject: [PATCH 78/98] Add some units bar. --- .../Scroll Empty Heart.png} | Bin .../Scroll Full Heart.png} | Bin .../assets/{ => Resource bars}/Scroll.png | Bin .../{Empty Heart.png => Flat Heart Empty.png} | Bin ...Filled Heart.png => Flat Heart Filled.png} | Bin examples/resource-bar/game.json | 140 +++++++++++++----- 6 files changed, 106 insertions(+), 34 deletions(-) rename examples/resource-bar/assets/{Empty Heart.png => Resource bars/Scroll Empty Heart.png} (100%) rename examples/resource-bar/assets/{Full Heart.png => Resource bars/Scroll Full Heart.png} (100%) rename examples/resource-bar/assets/{ => Resource bars}/Scroll.png (100%) rename examples/resource-bar/assets/Resource bars/Wishforge/{Empty Heart.png => Flat Heart Empty.png} (100%) rename examples/resource-bar/assets/Resource bars/Wishforge/{Filled Heart.png => Flat Heart Filled.png} (100%) diff --git a/examples/resource-bar/assets/Empty Heart.png b/examples/resource-bar/assets/Resource bars/Scroll Empty Heart.png similarity index 100% rename from examples/resource-bar/assets/Empty Heart.png rename to examples/resource-bar/assets/Resource bars/Scroll Empty Heart.png diff --git a/examples/resource-bar/assets/Full Heart.png b/examples/resource-bar/assets/Resource bars/Scroll Full Heart.png similarity index 100% rename from examples/resource-bar/assets/Full Heart.png rename to examples/resource-bar/assets/Resource bars/Scroll Full Heart.png diff --git a/examples/resource-bar/assets/Scroll.png b/examples/resource-bar/assets/Resource bars/Scroll.png similarity index 100% rename from examples/resource-bar/assets/Scroll.png rename to examples/resource-bar/assets/Resource bars/Scroll.png diff --git a/examples/resource-bar/assets/Resource bars/Wishforge/Empty Heart.png b/examples/resource-bar/assets/Resource bars/Wishforge/Flat Heart Empty.png similarity index 100% rename from examples/resource-bar/assets/Resource bars/Wishforge/Empty Heart.png rename to examples/resource-bar/assets/Resource bars/Wishforge/Flat Heart Empty.png diff --git a/examples/resource-bar/assets/Resource bars/Wishforge/Filled Heart.png b/examples/resource-bar/assets/Resource bars/Wishforge/Flat Heart Filled.png similarity index 100% rename from examples/resource-bar/assets/Resource bars/Wishforge/Filled Heart.png rename to examples/resource-bar/assets/Resource bars/Wishforge/Flat Heart Filled.png diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 4f43088fe..0e186cdb7 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -310,33 +310,6 @@ "smoothed": true, "userAdded": true }, - { - "alwaysLoaded": false, - "file": "assets/Full Heart.png", - "kind": "image", - "metadata": "", - "name": "assets\\Full Heart.png", - "smoothed": true, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Empty Heart.png", - "kind": "image", - "metadata": "", - "name": "assets\\Empty Heart.png", - "smoothed": true, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Scroll.png", - "kind": "image", - "metadata": "", - "name": "assets\\Scroll.png", - "smoothed": true, - "userAdded": true - }, { "alwaysLoaded": false, "file": "assets/Flashy Empty Heart.png", @@ -1237,6 +1210,51 @@ "name": "assets\\ToggleIcons\\JellyCat\\Small Plastic Green Square Toggle_On.png", "smoothed": true, "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Wishforge/Flat Heart Filled.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Wishforge\\Flat Heart Filled.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Wishforge/Flat Heart Empty.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Wishforge\\Flat Heart Empty.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Scroll Full Heart.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Scroll Full Heart.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Scroll Empty Heart.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Scroll Empty Heart.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Resource bars/Scroll.png", + "kind": "image", + "metadata": "", + "name": "assets\\Resource bars\\Scroll.png", + "smoothed": true, + "userAdded": true } ], "resourceFolders": [] @@ -3880,10 +3898,13 @@ "name": "UnitsBar", "objects": [ { - "name": "HearthScrollUnitsBar" + "name": "HeartScrollBar" }, { "name": "NoBackgroundUnitsBar" + }, + { + "name": "FlatHeart" } ] } @@ -3925,7 +3946,7 @@ "customSize": true, "height": 88, "layer": "", - "name": "HearthScrollUnitsBar", + "name": "HeartScrollBar", "persistentUuid": "cd7ae08a-3045-436b-bda9-beda9d2b55db", "width": 200, "x": 592, @@ -3955,7 +3976,7 @@ "customSize": false, "height": 0, "layer": "", - "name": "HearthScrollUnitsBar", + "name": "HeartScrollBar", "persistentUuid": "20b69c52-a1a2-4f22-b7b7-4560d4da8dcb", "width": 0, "x": 368, @@ -3979,6 +4000,21 @@ "numberProperties": [], "stringProperties": [], "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "FlatHeart", + "persistentUuid": "ff235c90-65d5-4244-95c6-b0f0ed957e2f", + "width": 0, + "x": 434, + "y": 494, + "zOrder": 45, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] } ], "objects": [ @@ -4092,7 +4128,7 @@ }, { "assetStoreId": "", - "name": "HearthScrollUnitsBar", + "name": "HeartScrollBar", "tags": "", "type": "TiledUnitsBar::TiledUnitsBar", "variables": [], @@ -4111,19 +4147,19 @@ "height": 64, "leftMargin": 64, "rightMargin": 64, - "texture": "assets\\Scroll.png", + "texture": "assets\\Resource bars\\Scroll.png", "tiled": false, "topMargin": 30, "width": 154 }, "Bar": { "height": 26, - "texture": "assets\\Empty Heart.png", + "texture": "assets\\Resource bars\\Scroll Empty Heart.png", "width": 78 }, "FillBar": { "height": 26, - "texture": "assets\\Full Heart.png", + "texture": "assets\\Resource bars\\Scroll Full Heart.png", "width": 78 } } @@ -4163,6 +4199,42 @@ "width": 16 } } + }, + { + "assetStoreId": "", + "name": "FlatHeart", + "tags": "", + "type": "TiledUnitsBar::TiledUnitsBar", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "UnitWidth": 90, + "HideBackground": true, + "ShowBackground": false + }, + "childrenContent": { + "Background": { + "bottomMargin": 0, + "height": 90, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Resource bars\\Wishforge\\Flat Heart Empty.png", + "tiled": false, + "topMargin": 0, + "width": 270 + }, + "Bar": { + "height": 90, + "texture": "assets\\Resource bars\\Wishforge\\Flat Heart Empty.png", + "width": 90 + }, + "FillBar": { + "height": 90, + "texture": "assets\\Resource bars\\Wishforge\\Flat Heart Filled.png", + "width": 90 + } + } } ], "events": [ From e4b063d908538d57d4f12679765540c812812514 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 18 Jan 2023 16:33:15 +0000 Subject: [PATCH 79/98] Optimised images with calibre/image-actions --- .../Small Plastic Green Round Switch_Off.png | Bin 7451 -> 7136 bytes .../Small Plastic Green Round Switch_On.png | Bin 7588 -> 7091 bytes .../Small Plastic Green Round Toggle_Off.png | Bin 3897 -> 3382 bytes .../Small Plastic Green Round Toggle_On.png | Bin 5863 -> 5726 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/resource-bar/assets/ToggleIcons/JellyCat/Small Plastic Green Round Switch_Off.png b/examples/resource-bar/assets/ToggleIcons/JellyCat/Small Plastic Green Round Switch_Off.png index 02dd36082d5dd7f29c623ba34f51169212c0e0a5..941e2fc73b0762b3e8081bc6e524ce348599b608 100644 GIT binary patch literal 7136 zcmV<68z1C}P)Dchdl!2_1Sx_A1Poj{T#CIn?7ao- zV!#fHZJd}snYt$9WM(qGW?Dv_#3Yl?_ul86&࿴tQmP;1e=dGofdTD9sK5D+l9d-v`UAt51?A|oT6 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 LvbIt!)GYizfs!;! diff --git a/examples/resource-bar/assets/ToggleIcons/JellyCat/Small Plastic Green Round Switch_On.png b/examples/resource-bar/assets/ToggleIcons/JellyCat/Small Plastic Green Round Switch_On.png index eba345ffbff0fa06eed6af9db34791f65325a44d..e87809bffbd35495468e7b5a04eff0891c06d949 100644 GIT binary patch literal 7091 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

g(%U+|KC0;JQay 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 z0fwARR910 diff --git a/examples/resource-bar/assets/ToggleIcons/JellyCat/Small Plastic Green Round Toggle_Off.png b/examples/resource-bar/assets/ToggleIcons/JellyCat/Small Plastic Green Round Toggle_Off.png index 19812c12b822ba7f57061c05ded2791b21522e68..6178daa932bb9232c43798fe219811dac8f934ee 100644 GIT binary patch delta 3359 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 delta 3878 zcmW-jdpwi<|HtP%TFjxWVh(YeV`$}k8mg_FR_o6Bti}jq4zXoMH6n+&6N(x+M96U@ z6qT=2VmZ#?&S)VyH}bpg-}SiuyB^o|cwev2>-~B?8;&=_9~e@^xo8`!D>tU6T-^z- zoEUQdc7Xysb1of0ul=LCb3QG&DQpfI=IeK@L8Whn8epX}o+9`mDI-9jcH*#gLdbjL zjS_ibf^3(gm&Kxv!E;zk5nqep#bKATQa$>rLpe70lw+c!#Xqhe#ItoOi5g>RL27Bf z%RPg+?(VLdguHP?9D(p7 zRO8|CEPtazx5boRKv7b228J{!6b0@#N-4g}tTG9eqm+&{I`Oa8gUY1~uj_Qb5 z4bJ5=w=YU=3$#`uFyw%Mg?CHCrS0V38%rEw^Q4@w*0N!mDGV|b1CL{$hb7PCClb@9 zW>lBDeW55zFdsvvR?9la|3cwnv~c^u%Ng7TnQj#DRx&jE+i zhFeg`drPt&(X+01BoxShLAt2;ymv^u4PLxqn!qqp@?g0|rx?NS3qgS|WD24)rC!mC zEm@Jzhw+fZhm~@Bt#CL5o!{0;vA5PMb@Qx&0j0UAX=mQ$=Mw|wydOc{u(V(T;X<UJ}yzGp0cf@4amu6rXPx0fy3Df-<~K}BR0QiHk+ksU)GHc7&N)`#1a3(CRb8#=>gu{kVm6VMkL!58f%MisEf3_+gVy$Bn%rC7l2At9Q})>& z2&h9GP5HoCf8c*C$G@W?*pH%rEE}T=XovzEawOJG#7g8 z_;C~i+mRq3@)RL9zI>K2ajwYGvd9snBnYx;XS3bh-1brcOE{QNyhG0m4YIf7vOjN( z)m?87TbXQDh%Pi>zJ9Gz@1pJ294@rlwhfPMgGacZ|0^p&s}}_7{;GX!-$V7P2P`?% zU3MzuzdKXKn?Qhcb#(z6gvyDuR3$={)#;gXETf`cU|9Fo=X3Ja4&f&J>n-o3XtHDjW#OfR+(t>HR2IGhCY!;&-pJ>r~m znSouZK;3<-n|cuiJ}B(CnEAZWH0BqV(_g@|Djh!N>fv#&Vx*I|+MXU*FNRUqe*}@S zMZ;RSE`9US6rB>>;bz_t6=r2As(Vw;{@m!kyy$m^OoD! zOm8*-W`;&F|#H1E3})glAyx_T5n zKD*(;!1@RFrSs;>r;*6lgM_mKyf^GtBfe?=LTq0A?zh~7oqKA9I}0Nff0uc~UR$WaL@5~vYZdl8d&gZ2FH|+hT!#XNwo6?bm#eM+dD8s0(S>`WLKA}ml@Rpmn@O3%;F zFK))7gI?lYwmxK>WRFJ12N*0&&3uzqvp0?3SR7)zdV1#m-Zvi|9UY|HKq~fz^Y3{d zQ4$19Rz9LZRkSR-LiL6LS>_}olk#3VD=X_1I`jDyzXxt)k2qkqtv%6D2P}1@d)(ey z&rE)gH12bZS!E|I5uevY-Z!SdSEedn=met4pG4Zi*$sEk_vieeZ)TlOliMvg_e?3K z@Xp8x;5$Cdk~M|9(wLAn-sMaP8(=kHUcf zdz)B-2O>mETYJi9b6+u^xDjhcAP^KE_jRtD0)dIndUnE0|R?9-E8aY zYLv13TnxOSvC-T4D1w1DW1pJgQ-oL}AKMwGQ4$GfQ|wEnbHilBlGOAc{m&GH0zF6+ zk%0Gd)`@^^ykS1^@$#uPe%;d!Z=tVI;)*T8>apm=uNN zZ@{fpc)7|mm$6OocNX=$hLC|Xvc)Cm9Wy-u|x_Y@G(V zn~Jo%uG94L@-7-S&j}a#E^UnkqhvQr*a(toNedCf@OktzQ9yvGKN$NyYX?2DQ z`jfP+Q*Ay`>XcM5V!RQ(GW^ezudh;TU?+fQYT4KVV&RW|pPvVwDt}q|{$!?>KS0pq z`kTMn2AJyFuUK`P`w}D=I<&hNpn?rhYL6a#cp%C}_eW1tx=E`%fr0|hN=`IPr0N|_ zWFdnkcJ?c8e|;a%cEB`3`BU|DXp0&5@856XwuH1^>LM|6Ro z*bW(hSwjUs+Ml9Rly~0Tj4os;10N|L`7VS}pTPev;>KdP=6<&;BuJxXc;>~3&JQ0x zgj5|!aayfGHuulX=jIdBv0^x!p0RODsm+h;z09hVD;h~|IwIY$IQI1ddk!nL#+>gh zz!T;xBqj@o6Jp3*zI+*IRlOV}nAi8aCIxt9Z7qy~pi>d_8AJPlhGkC>SQI2FXhp>1 zm#)`p5i#oGa)!4r{gnl!@?LUNF6Pf0LQ!6Ufg0*DIsWcHHe;WFX8cMkV>C52S83i~ zpJgjQ#LNyBS>KZCCfEK6*($-7c|}JXHpG4*oMn5bMoRHZgDP0ub`MX_0|iW(B5h`{ zh++-2Arz%D%9fb%t>}3@QsdiWsh+gTdlk%!WlsH(m^2LB>-($>v0ew_#v&l~u%B~s z71uC!XYxm zYtpe=xxJ;TXyq^_6DSG9jJF?YUXT+5UszZO{r*KAbUS#$Cn$(Z;Q;EfzvVw>T3Fxg zBGaZqqWt~*{?!~KkdmQ*o~lh%Ks;nc#7U&^lS+`$h5xmNu`#{0FjlO*yqLZEY>ZIl z-W>kT!E}I``d9~fvoQne4codj+)A2xn{fRKPTLXVq?0?e6d^@22(X$JARzf3ABDj@3$F4aY)zV%c`nB&EBwsvFv7dHA>Dygx9vvrfeB)YIG}Jp^8h@ORlNW z%Qw4qlz~+jh6AKS0l0|r(a7MZdhS0PjeB*khL_w#sc+@raC7b6a2Fg7_||PGmBcK7 zSa?2{@)z|l-C!p2q64*E)3$VHsP(Gqce$mmey1KeSq_z== z-lhoYGK+iLSN%Aqvnhs7S*p{8WZ7#sM9A0>$;SnHeC z*1gir*!|Vjf4|>K4NHf=cs{(8c<9g}3ev=ccV{W01$NqUpRDjC?w9D*zyFqYxcjor zM4jvs+2kx~5S1C$ByU230OSl1W}3i6Lt8-IE*qG)I<{^4V1+U{K8-u{+nGNTiu&~s z^DRpD=+SA7hnUhccEi4(Cc@-^e)9?rK3rh0ww64gpRP%##+j!B;{l=mAOC~-06)SY z%EQQ9V8;#`hHmTuc}Ew?VZy2A=iyix+p^U3^mao7gY7<_nw=LVc)&@||3PfTD=d>t znzJb@+dME;adzmYa5+K@AT~h#U%RH~&Yc5@C`&wq^QOBo_*Nv5xbB(Pw*Z*DVk)J6 zRd#1*y}TIlExdWJ9>e%Gx45`?x~1xG8QUS?2ubVTn7;e=qE4C5RfdGD6yw+u@;yr~ zIh$4hRRaKZa7?hHyWea-_ZPSPF{S;E6iPp@(xcI%+Go<$IdDjT)mSc||+!Q^7}+(3u$Z zzKfa2Yzzal8%NH;x;#)(XA*_fr`)hfP;uY?!6Cvd-agqHJjBU&%~v2w7=#3@a+PNf YKxZWHmA-nZ2?YTc+ScBt3gt!pKivg&!THzS7(|-s`)s=Y3xU!=~%-`#mD> z{~iD99@l-{_w&3426z9bg{+pcjE#(pY|PBeTrDjveVv?~x_<@*1*JqpMC8WA#0+Y@ zqNAgW!o$OJ0|Ek4N)-{x-q{{AUhSy?m7 z%gc8xTC`~2^5x6FtgWp*E9-nsP0ghhD^^^tuC8uaa{Y2uRn^7H%F6Td{ByHr&H8f6 zlqvg)i;Mr%y?=Z6nH@WJOcP_c%lljC4DnF>&>My(CMFKPzP`zW2M=B@zz%QNu;KjL zwQH{nC@fg805fOK#MG%%F>&HVj2kx&W5x21D_NV}E31WZs-Pb6(oKdGp!z>(}30 zvSbNn%$T9T3>!8Kefso4VqzjBtRZ0yF%o=yeBkBf1#fR}^?yGbHaoPXXV;1dHp~!LOY!i?w_|?wQ6N0H=H(a-n?Dg zwr#txdVlq5%$_}4c~wFcDJdxmq=SP4Y;0^`YikS1Wq5eHqm!REf;#&nv`Y}WM1&wb zG7J$>T@Vr372y$G(WOflgocKqbLY-#(HK2@_Jl+gMvNE%i2(IE^7}%sUcFv!*REZr zq(kfb5e0?<#&h`a;Z<9=ZapKO)<{^Y&@C)1gny8k0xEfr)~#DZZVVlLJkcfA7wN^p z$gc>)$eIY0Z;eL9U*a(Ll|;;cH5v1ErDEo@X_&Gu17!=dP%tVReRFe=(>n+0>FJ1z zi$hdY6w=btP*hX|`Fs@-qeqX{h*8eS=T^&Sdf%%kXdyqQ5~c}4N^fr8zWurolgd$g zB!4zG7It=aklcrrl@;2%IH7a2CsKy^qG(YdCT{p^u`Cc+sAL)gSC-d;kH-qr} z*%JKqLMi@sX$)SyG!Cy^7>k$Aj>0ov6r*}iE~c*PjS*A&VersG1)33%kdV+22_+>Z zDjFoct_#8LvA4HRlKV8fn^C|pw~+8F*nhZj<4GYijSvt`Ph280NcMR#Ex$UW9N4zc7sei;9XUnnlulX2Jo`;d6l(&(QkpanjMT|56?`yz- z0pAMWOb`Ru{1F2vkBgPdcI?>kz0_kB=7RA5%$K9E z^xb6C>=$qcbn9R`YU8;kKD ztjFh?D!hDV0v=hDi{fELiulCa5a*~gph0MWfddDg6+$i-16cnq12D%$U=&DxpCNF5 zkXRM&?(PtyD6hA5vPE=1R}5O_g9%TE;ITL2Q1yNqs`sU1#YbrZS^x{!IsvxosH|h@ zSpBiAd&Nmi;0kNh6-rn6Fi9_5lxY`Gko(aYL z-SJrVek!W>YeDnI>yGNcev*zgpK@iWwf3{0F8wtwKA*4S>sRWGuz%)QPwe>jARPE{ zJ}zJ@KEF|gwQm=raCnY#3`3tB#K@!pSaL;UoR)H%@ms1u3n^C}MQ-kS;)y3T6c>DB zk*o^1v9U3nTpPz*9u?b&l>QMJa5pr@fRD|~L-+y0K1BO1AMC^^OUAwNA zRJHv@>>@L>1o;0gT)0pP2}(_dIlXReZH3SjC-k4!0c9J5F!%LX@wfnIm><#JAjA81 z&_4(G7Y)(K2&?o_a3}-oKj|$7D8~;H0iRv3#Oy77lrSO(WM^lqGN=!Kk;CVtBW^>p_U{DU zWHm~QhA1F09?=?r5%BJn3Y-@X`0&ykj9!qAg2Do&L8t@t`7i09k^bUsNm;i$vA>Zh zwPIoS%k07!?$T!~k2BmI+S#B-i3r zLH)Ibk^)cSh0~*vnH#6%FB>YBK!!d!K+@rghlfWQ=M2qx-AUTd*U9eG>QXDwrcE2= zbqfn~1jad{cZCN=KN%>@9*5=oQdG^p1zhW)y9v7aD9{-|#{qRmGV$!!#W<~5iBE1W z!SoH8$bZaAR|a4=sV{#dLy^XN#gQ(zd%u-*Q@yur*>ZtBG`%h)p}bBpgMO?D+9=HjX3pbo%Ge#b!k7n zR;^m~85y2kQha>8@;a5Ay<=;{4Q`Kt3p--kU&2xO&m<*NSLwq2z5;K|0gc07yubQr zPk+32e!TPoHF);)FeGM&E6~Zw$x8h(^htp7|I^Zh1?fY-mGsI3pL*)4%N#Y)S|SS} zk1Ijr5nzXuGG}R6e5JH?7q6!(udg|NAH)4uc|RT7q+2|qStLzSIR;LSR3V>}lcRJB zOCGUFDqIz%I#QKA_P?ToE5-9S8S=E2D1Rbt$Xi+%y{(!vR z)Bw8re@qL0?Z-KI=gM^Km$ta#=~P5UhpTZICqw$sm;OW}joBK(XGxZKoHuXY?xjnY zHuUH$Z4CQ1_ST5%FQR6yC#FhyTlRjEgjiaWTz??IZ}a}@;~84!7y0|*_oHxFvwsjz z9vy&galxwP<@}IkkD*^sP{6eQK#1Jcz|zvvTe`MWoWZd?kmc!h=6ie3Hi#e6POGejrzxMN6q0hcz>*;*#*UZE7XNDnbNT`}8asi#;(sIYNh(|w zwKvuvDJf}uZEfw3YzbKkIEW;8Gc!~8#n>Z#oQtaOi}xm~!30ao1JC!{L;o|aiZenu0(4UjV*7LrsLA`)(*EZ;M7yh`(ZcrZbsd z2mYpjUv3}@s6xuzH9dIBS{3%@rtpoCoFC(&diVbt&kOjc|6Qck*nbTX2nhB?NJxkp zv9rk`co9A~B1 z0ISv(@Q-h!7=QfM&RF_hkB3Lw-%fTSyH^}YSKDLU8=SB;6#k(es=l*)vrX4EHtg~1 zC9>Vw)tO5eRDX;2HEe8n(ag+DtMY{OJUiP+KkuZKxNnNYt$#>Dzj4Ux)Lo4Z{KB^r zFkp@!I(T`gTxSK-A9mn$$KT(7lWr@^z%V#CxJbZX89jQm$_wTQ!7~CJ-L283m%SQS zKk{M(su=o5((dp0>Sw&(IOJ;&WXj4?_ZdI1BSgZg>VHKNXRedbrMtT(2AQZIW492? z_>CVw{v^lMji;*S>XLTfoI2h`>0VV~{i-Om#$xe-rk5Asji4!lD zmX<0jNh&DMb6MNc`!>q^qov7t{GIq)xqrW>wv!XY@~YZbZ~L3)$_V*neT@bI*%MOjOMm@3;51Lf767D)-eO zQ$N*d9RBxnZm-+8;Eqw%2dNV7@fg3oGtx>sz}cmpx_6G_q=Qq=m&#cVt;v*%h)rU!b4rsCk~XDZC?X5I?jXhSd6E_N∋m;enrv|tKaFQH1NqO|8 z{D0Xn6fO0EPl&TR6vbf-kGJW)E)Co@>Fg?a?x5MNX$cco$&Wn}`Wkv)ziUJ9lK|~q zED+ekR`vL$8v^mz?pRcRl+wficYBWC>{iuL?MaX2AEsi_+liR+Tvu^OCq(ygg}uYA zgHiOhKG#LYA2c;J_4&E2Y9lFg{p1B_b$_RvlsKRj_2J*n%MziPc51_N?3T_-^H(3x z8K9XxyFb25+jNss54`Hb6fAlt5z}^tD-F_Ps5>0n+bfO2`{lTrz{&7QNlBL^*GKBk z@!t7|``9rtG3&+iH|Tx70i_{5uN6Ki+Dc#;2Lw(r?$ygvcK2J`1w?V%c?#-MZw~!iHDmnAL-T*8c@@5Scz}Qqcz{di?skUmwU9i|26Sjw7 zjzj^QpcP^SbsFnPGbgb=X|(i@eXM<+cJEyanp@#K3oz%^7);s`rnb#;=X#=hzBAf7 z+o-t%?}aj!$59BJ{fXrHMStnpXa3%Exh?p@z`(#q!~o~@hkO_T+{@E*fT2+#p?F0nb)$1$i&1j8>ceC;3sC3qIAJ}k1=z6kXYuN_C%L#E$lW21%V!H{ z9(rPA<<0LPQRaq_G)J_ywQSf~V)LSBb^@2q^on$IRdUV#j~+y{4Sxs-ctqaxEb~ae z(a##HuL3PviVmLY|JIDz=r@E{2c?{8MJG&}FEPOj&MFdZ7(IC_b{LPSF zCb`Tx;etK!N<&PQ*NoW|jG>|_2s*3W4UxG{aOu=qNY}Vw7n!HK^*PQ^r^f~OGP&+} zSB{`^Kik{edyEjs*MIDcmxr;stCp~~H-USIl}d%^d`F~~xuDOZo+zsH z!HBi~7$@bCp5)%&bWw_2{68P#wUO%rFnGBS@ z=oH-=A)*VS1~?+Iq`eYI*;C!r5tqI*WzF&s<9MjU4_T5jyw2xE_HPTn*fwzLXaQ3T zqlPqN9cR?h%X9$iILjGX-NC`3=yxAE{S`mPV)0;U5jP8~{-ECkpb=qz~-UuyP zXboX$YXrv*W`FPqwSsS~jf#rUOnZd&v{$o&F7i7h!&Ws<9uhTnE~YRxYbBA?qM^F* zI2`A2+;1mnel|ao0!Dagr|7up{15TKRsBeqhG3}?DXDsC z-Z1l0ZwPV&0T~*%gpq(Vv1p}0^6!?0+G~8Cevrb~^M4x}>@nDuGQ2r^=Vwr>M?^#% zl@tS_|wajaIFHJ^9#*bo*uY-ewcZx&_mE z@7k%an6WB|Cj-PQL;d~zSH{N1{#{bzUt*ARSy@?^M1))w*?dj%_Il&R9Td5CO^EBN z0KJ@&lJbLqJslMl^-mF6YbAwBg-}D}{cRugS5nG;l_A7479v90NmTeqIgA#A6pG?1 z6M-~M)=XKm8ZWsvUHa{@B3K65*x1C$>pIEnoz>YHE#Q`S`$qpC&aGUhoD0_y00000 LNkvXXu0mjfaxYLw delta 5859 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 Date: Wed, 18 Jan 2023 17:52:58 +0100 Subject: [PATCH 80/98] Typo in extensions. --- examples/resource-bar/game.json | 37 +++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 0e186cdb7..06bf1ca5c 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -2980,7 +2980,13 @@ } } ], - "events": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [] + } + ], "layers": [ { "ambientLightColorB": 10101048, @@ -16014,7 +16020,7 @@ "name": "PanelSpriteSlider", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/UI Essentials/1678c39a3b2bd3df4f82a8a293770db4986a6bcfd3f78e738ddfc86e39176423_UI Essentials_sliders_options.svg", "shortDescription": "A draggable slider that users can move to select a numerical value.", - "version": "1.1.0", + "version": "1.1.1", "description": "A draggable slider that users can move to select a numerical value. The slider can be customized with sprites.", "origin": { "identifier": "ResourceBar", @@ -18729,7 +18735,6 @@ "description": "the value of the slider.", "fullName": "Value", "functionType": "ExpressionAndCondition", - "group": "Resource bar", "name": "Value", "sentence": "the value", "events": [ @@ -18816,7 +18821,7 @@ "description": "the minimum value of the slider.", "fullName": "Minimum value", "functionType": "ExpressionAndCondition", - "group": "Resource bar configuration", + "group": "Slider configuration", "name": "MinValue", "sentence": "the minimum value", "events": [ @@ -18912,7 +18917,7 @@ "description": "the maximum value of the slider.", "fullName": "Maximum value", "functionType": "ExpressionAndCondition", - "group": "Resource bar configuration", + "group": "Slider configuration", "name": "MaxValue", "sentence": "the maximum value", "events": [ @@ -19008,7 +19013,7 @@ "description": "the step size of the slider.", "fullName": "Step size", "functionType": "ExpressionAndCondition", - "group": "Resource bar configuration", + "group": "Slider configuration", "name": "StepSize", "sentence": "the step size", "events": [ @@ -19086,7 +19091,7 @@ "description": "Check if the label is shown.", "fullName": "Label is shown", "functionType": "Condition", - "group": "Resource bar configuration", + "group": "Slider configuration", "name": "IsLabelShown", "sentence": "_PARAM0_ label is shown", "events": [ @@ -19128,7 +19133,7 @@ "description": "Show (or hide) the label on the bar.", "fullName": "Show label", "functionType": "Action", - "group": "Resource bar configuration", + "group": "Slider configuration", "name": "SetLabelShown", "sentence": "Show the label of _PARAM0_: _PARAM1_", "events": [ @@ -19858,7 +19863,7 @@ "name": "PanelSpriteContinuousBar", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Glyphster Pack/Master/SVG/Interface Elements/ea06363a57846caab544f536b78a952234b68d4941d41c1577852a1d61aefec3_Interface Elements_interface_ui_loading_progress_bar.svg", "shortDescription": "A bar that represents a resource in the game (health, mana, ammo, etc).", - "version": "1.1.0", + "version": "1.1.1", "description": "A bar that represents a resource in the game (health, mana, ammo, etc).", "origin": { "identifier": "ResourceBar", @@ -21610,7 +21615,7 @@ "description": "Check if the bar is empty.", "fullName": "Empty", "functionType": "Condition", - "group": "FillBar bar", + "group": "Resource bar", "name": "IsEmpty", "sentence": "_PARAM0_ is empty", "events": [ @@ -21654,7 +21659,7 @@ "description": "Check if the bar is full.", "fullName": "Full", "functionType": "Condition", - "group": "FillBar bar", + "group": "Resource bar", "name": "IsFull", "sentence": "_PARAM0_ is full", "events": [ @@ -21698,7 +21703,7 @@ "description": "the previous value conservation duration (in seconds) of the object.", "fullName": "Previous value conservation duration", "functionType": "ExpressionAndCondition", - "group": "FillBar bar configuration", + "group": "Resource bar configuration", "name": "PreviousValueDuration", "sentence": "the previous value conservation duration", "events": [ @@ -21827,7 +21832,7 @@ "description": "Check if the resource value is changing.", "fullName": "Value is changing", "functionType": "Condition", - "group": "FillBar bar", + "group": "Resource bar", "name": "IsChanging", "private": true, "sentence": "_PARAM0_ value is changing", @@ -21942,7 +21947,7 @@ "description": "Check if the label is shown.", "fullName": "Label is shown", "functionType": "Condition", - "group": "FillBar bar configuration", + "group": "Resource bar configuration", "name": "IsLabelShown", "sentence": "_PARAM0_ label is shown", "events": [ @@ -21984,7 +21989,7 @@ "description": "Show (or hide) the label on the bar.", "fullName": "Show label", "functionType": "Action", - "group": "FillBar bar configuration", + "group": "Resource bar configuration", "name": "SetLabelShown", "sentence": "Show the label of _PARAM0_: _PARAM1_", "events": [ @@ -22367,7 +22372,7 @@ "name": "SpriteToggleSwitch", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/Interface Elements/8d0cd8cd0c9318f4f6efde6ee6b4c192bd19306467f80c9970387a259300f895_Interface Elements_interface_ui_toggle_switch_on_off.svg", "shortDescription": "Toggle switch that users can click or touch.", - "version": "1.0.0", + "version": "1.0.1", "description": "Toggle switch that users can click or touch. The switch can be customized with sprites.", "tags": [ "ui", From 6dbc2822029f91e8610a0b0aba60359d4bbd4250 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Fri, 20 Jan 2023 18:41:14 +0100 Subject: [PATCH 81/98] Upgrade extensions to fix extension namespace in instructions. --- examples/resource-bar/game.json | 125 ++++++++++++++++++++++---------- 1 file changed, 88 insertions(+), 37 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 06bf1ca5c..d5eab2188 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -1828,6 +1828,63 @@ "width": 63 } } + }, + { + "assetStoreId": "", + "name": "NewSlider", + "tags": "", + "type": "PanelSpriteSlider::PanelSpriteSlider", + "variables": [], + "effects": [], + "behaviors": [], + "content": {}, + "childrenContent": { + "Background": { + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Sliders\\JellyCat\\Small Plastic Green Round Slider Border.png", + "tiled": true, + "topMargin": 0, + "width": 320 + }, + "FillBar": { + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "rightMargin": 0, + "texture": "", + "tiled": true, + "topMargin": 0, + "width": 32 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "It displays the value when it changes.", + "font": "", + "textAlignment": "", + "characterSize": 20, + "color": { + "b": 0, + "g": 0, + "r": 0 + } + }, + "Thumb": { + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Sliders\\JellyCat\\Small Plastic Green Round Slider Thumb.png", + "tiled": false, + "topMargin": 0, + "width": 32 + } + } } ], "events": [ @@ -4635,7 +4692,7 @@ "gridColor": 10401023, "gridAlpha": 0.2, "snap": true, - "zoomFactor": 0.7699518302210852, + "zoomFactor": 1.137084993984467, "windowMask": false }, "objectsGroups": [ @@ -10489,7 +10546,7 @@ "conditions": [ { "type": { - "value": "Gamepads::TopDownGamepadMapper::PropertyStickMode" + "value": "SpriteMultitouchJoystick::TopDownMultitouchMapper::PropertyStickMode" }, "parameters": [ "Object", @@ -10507,8 +10564,8 @@ "parameters": [ "Object", "TopDownMovement", - "SpriteMultitouchJoystick::JoystickAngle(Object.Behavior::PropertyControllerIdentifier(), ToString(Object.Behavior::PropertyJoystickIdentifier()))", - "SpriteMultitouchJoystick::JoystickForce(Object.Behavior::PropertyControllerIdentifier(), ToString(Object.Behavior::PropertyJoystickIdentifier()))" + "SpriteMultitouchJoystick::JoystickAngle(Object.Behavior::PropertyControllerIdentifier(), Object.Behavior::PropertyJoystickIdentifier())", + "SpriteMultitouchJoystick::JoystickForce(Object.Behavior::PropertyControllerIdentifier(), Object.Behavior::PropertyJoystickIdentifier())" ] } ] @@ -10518,7 +10575,7 @@ "conditions": [ { "type": { - "value": "Gamepads::TopDownGamepadMapper::PropertyStickMode" + "value": "SpriteMultitouchJoystick::TopDownMultitouchMapper::PropertyStickMode" }, "parameters": [ "Object", @@ -10536,8 +10593,8 @@ "parameters": [ "Object", "TopDownMovement", - "SpriteMultitouchJoystick::JoystickAngle(Object.Behavior::PropertyControllerIdentifier(), ToString(Object.Behavior::PropertyJoystickIdentifier()))", - "sign(SpriteMultitouchJoystick::JoystickForce(Object.Behavior::PropertyControllerIdentifier(), ToString(Object.Behavior::PropertyJoystickIdentifier())))" + "SpriteMultitouchJoystick::JoystickAngle(Object.Behavior::PropertyControllerIdentifier(), Object.Behavior::PropertyJoystickIdentifier())", + "sign(SpriteMultitouchJoystick::JoystickForce(Object.Behavior::PropertyControllerIdentifier(), Object.Behavior::PropertyJoystickIdentifier()))" ] } ] @@ -10547,7 +10604,7 @@ "conditions": [ { "type": { - "value": "Gamepads::TopDownGamepadMapper::PropertyStickMode" + "value": "SpriteMultitouchJoystick::TopDownMultitouchMapper::PropertyStickMode" }, "parameters": [ "Object", @@ -10585,7 +10642,7 @@ "parameters": [ "", "Object.Behavior::PropertyControllerIdentifier()", - "ToString(Object.Behavior::PropertyJoystickIdentifier())", + "Object.Behavior::PropertyJoystickIdentifier()", "\"Left\"", "" ] @@ -10613,7 +10670,7 @@ "parameters": [ "", "Object.Behavior::PropertyControllerIdentifier()", - "ToString(Object.Behavior::PropertyJoystickIdentifier())", + "Object.Behavior::PropertyJoystickIdentifier()", "\"Right\"", "" ] @@ -10641,7 +10698,7 @@ "parameters": [ "", "Object.Behavior::PropertyControllerIdentifier()", - "ToString(Object.Behavior::PropertyJoystickIdentifier())", + "Object.Behavior::PropertyJoystickIdentifier()", "\"Up\"", "" ] @@ -10669,7 +10726,7 @@ "parameters": [ "", "Object.Behavior::PropertyControllerIdentifier()", - "ToString(Object.Behavior::PropertyJoystickIdentifier())", + "Object.Behavior::PropertyJoystickIdentifier()", "\"Down\"", "" ] @@ -10714,7 +10771,7 @@ "parameters": [ "", "Object.Behavior::PropertyControllerIdentifier()", - "ToString(Object.Behavior::PropertyJoystickIdentifier())", + "Object.Behavior::PropertyJoystickIdentifier()", "\"Left\"", "" ] @@ -10742,7 +10799,7 @@ "parameters": [ "", "Object.Behavior::PropertyControllerIdentifier()", - "ToString(Object.Behavior::PropertyJoystickIdentifier())", + "Object.Behavior::PropertyJoystickIdentifier()", "\"Right\"", "" ] @@ -10770,7 +10827,7 @@ "parameters": [ "", "Object.Behavior::PropertyControllerIdentifier()", - "ToString(Object.Behavior::PropertyJoystickIdentifier())", + "Object.Behavior::PropertyJoystickIdentifier()", "\"Up\"", "" ] @@ -10798,7 +10855,7 @@ "parameters": [ "", "Object.Behavior::PropertyControllerIdentifier()", - "ToString(Object.Behavior::PropertyJoystickIdentifier())", + "Object.Behavior::PropertyJoystickIdentifier()", "\"Down\"", "" ] @@ -10826,7 +10883,7 @@ "parameters": [ "", "Object.Behavior::PropertyControllerIdentifier()", - "ToString(Object.Behavior::PropertyJoystickIdentifier())", + "Object.Behavior::PropertyJoystickIdentifier()", "\"UpLeft\"", "" ] @@ -10863,7 +10920,7 @@ "parameters": [ "", "Object.Behavior::PropertyControllerIdentifier()", - "ToString(Object.Behavior::PropertyJoystickIdentifier())", + "Object.Behavior::PropertyJoystickIdentifier()", "\"UpRight\"", "" ] @@ -10900,7 +10957,7 @@ "parameters": [ "", "Object.Behavior::PropertyControllerIdentifier()", - "ToString(Object.Behavior::PropertyJoystickIdentifier())", + "Object.Behavior::PropertyJoystickIdentifier()", "\"DownLeft\"", "" ] @@ -10937,7 +10994,7 @@ "parameters": [ "", "Object.Behavior::PropertyControllerIdentifier()", - "ToString(Object.Behavior::PropertyJoystickIdentifier())", + "Object.Behavior::PropertyJoystickIdentifier()", "\"DownRight\"", "" ] @@ -11010,7 +11067,7 @@ }, { "value": "Primary", - "type": "Number", + "type": "String", "label": "Joystick name", "description": "", "group": "", @@ -11383,12 +11440,6 @@ "name": "Object", "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", - "type": "behavior" } ], "objectGroups": [] @@ -14403,7 +14454,7 @@ "name": "TiledUnitsBar", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/063e9152cf65bc0f3be2a828afd950c3ecf1b1fc72feefdc2467252fe987dc0f_dots-horizontal.svg", "shortDescription": "A bar that represents a resource in the game (health, mana, ammo, etc).", - "version": "1.1.0", + "version": "1.1.1", "description": "A bar that represents a resource in the game (health, mana, ammo, etc).", "origin": { "identifier": "ResourceBar", @@ -15626,7 +15677,7 @@ "actions": [ { "type": { - "value": "PanelSpriteContinuousBar::ResourceBar::SetValue" + "value": "TiledUnitsBar::ResourceBar::SetValue" }, "parameters": [ "FillBar", @@ -15659,7 +15710,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", "type": "behavior" } ], @@ -15714,7 +15765,7 @@ "actions": [ { "type": { - "value": "PanelSpriteContinuousBar::ResourceBar::SetMaxValue" + "value": "TiledUnitsBar::ResourceBar::SetMaxValue" }, "parameters": [ "FillBar", @@ -15756,7 +15807,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", "type": "behavior" } ], @@ -15775,7 +15826,7 @@ "conditions": [ { "type": { - "value": "PanelSpriteContinuousBar::ResourceBar::IsEmpty" + "value": "TiledUnitsBar::ResourceBar::IsEmpty" }, "parameters": [ "FillBar", @@ -15819,7 +15870,7 @@ "conditions": [ { "type": { - "value": "PanelSpriteContinuousBar::ResourceBar::IsFull" + "value": "TiledUnitsBar::ResourceBar::IsFull" }, "parameters": [ "FillBar", @@ -15970,7 +16021,7 @@ "behaviors": [ { "name": "ResourceBar", - "type": "PanelSpriteContinuousBar::ResourceBar", + "type": "TiledUnitsBar::ResourceBar", "Value": 1, "MaxValue": 3, "PreviousValue": 0 @@ -16020,7 +16071,7 @@ "name": "PanelSpriteSlider", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/UI Essentials/1678c39a3b2bd3df4f82a8a293770db4986a6bcfd3f78e738ddfc86e39176423_UI Essentials_sliders_options.svg", "shortDescription": "A draggable slider that users can move to select a numerical value.", - "version": "1.1.1", + "version": "1.1.2", "description": "A draggable slider that users can move to select a numerical value. The slider can be customized with sprites.", "origin": { "identifier": "ResourceBar", @@ -16324,7 +16375,7 @@ "actions": [ { "type": { - "value": "PanelSpriteContinuousBar::ResourceBar::SetPropertyMaxValue" + "value": "PanelSpriteSlider::ResourceBar::SetPropertyMaxValue" }, "parameters": [ "Object", From 8cec79e2b5803e33c4bfab45f2c8a6c3d79c469e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Fri, 20 Jan 2023 19:05:31 +0100 Subject: [PATCH 82/98] Fix the bar max value. --- examples/resource-bar/game.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index d5eab2188..5f927c907 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -16071,7 +16071,7 @@ "name": "PanelSpriteSlider", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/UI Essentials/1678c39a3b2bd3df4f82a8a293770db4986a6bcfd3f78e738ddfc86e39176423_UI Essentials_sliders_options.svg", "shortDescription": "A draggable slider that users can move to select a numerical value.", - "version": "1.1.2", + "version": "1.1.3", "description": "A draggable slider that users can move to select a numerical value. The slider can be customized with sprites.", "origin": { "identifier": "ResourceBar", @@ -16375,7 +16375,7 @@ "actions": [ { "type": { - "value": "PanelSpriteSlider::ResourceBar::SetPropertyMaxValue" + "value": "PanelSpriteSlider::Slider::SetPropertyMaxValue" }, "parameters": [ "Object", From e71faec720e462d23e63de108494362b681dc19a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Fri, 20 Jan 2023 22:44:07 +0100 Subject: [PATCH 83/98] Add more bars. --- .../Resource bars => }/Copper Bar Border.png | Bin ...Fill.png => Framed Pixel Red Fill Bar.png} | Bin examples/resource-bar/Metal Bar Border.png | Bin 0 -> 3110 bytes examples/resource-bar/Pixel Red Fill Bar.png | Bin 0 -> 2849 bytes .../resource-bar/Pixel Yellow Fill Bar.png | Bin 0 -> 10359 bytes ... Fill Bar.png => Shaded Blue Fill Bar.png} | Bin .../resource-bar/Shaded Green Fill Bar.png | Bin 0 -> 3531 bytes examples/resource-bar/Shaded Red Fill Bar.png | Bin 0 -> 3447 bytes .../resource-bar/Shaded Yellow Fill Bar.png | Bin 0 -> 4043 bytes ...rame_No Shadow.png => Wood Bar Border.png} | Bin .../Wood Bar Frame_Shadow.png | Bin examples/resource-bar/game.json | 777 +++++++++++------- 12 files changed, 458 insertions(+), 319 deletions(-) rename examples/resource-bar/{assets/Resource bars => }/Copper Bar Border.png (100%) rename examples/resource-bar/{assets/Resource bars/Copper Bar Red Fill.png => Framed Pixel Red Fill Bar.png} (100%) create mode 100644 examples/resource-bar/Metal Bar Border.png create mode 100644 examples/resource-bar/Pixel Red Fill Bar.png create mode 100644 examples/resource-bar/Pixel Yellow Fill Bar.png rename examples/resource-bar/{assets/Resource bars/Blue Fill Bar.png => Shaded Blue Fill Bar.png} (100%) create mode 100644 examples/resource-bar/Shaded Green Fill Bar.png create mode 100644 examples/resource-bar/Shaded Red Fill Bar.png create mode 100644 examples/resource-bar/Shaded Yellow Fill Bar.png rename examples/resource-bar/{assets/Resource bars/Wood Bar Frame_No Shadow.png => Wood Bar Border.png} (100%) rename examples/resource-bar/{assets/Resource bars => }/Wood Bar Frame_Shadow.png (100%) diff --git a/examples/resource-bar/assets/Resource bars/Copper Bar Border.png b/examples/resource-bar/Copper Bar Border.png similarity index 100% rename from examples/resource-bar/assets/Resource bars/Copper Bar Border.png rename to examples/resource-bar/Copper Bar Border.png diff --git a/examples/resource-bar/assets/Resource bars/Copper Bar Red Fill.png b/examples/resource-bar/Framed Pixel Red Fill Bar.png similarity index 100% rename from examples/resource-bar/assets/Resource bars/Copper Bar Red Fill.png rename to examples/resource-bar/Framed Pixel Red Fill Bar.png diff --git a/examples/resource-bar/Metal Bar Border.png b/examples/resource-bar/Metal Bar Border.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed0265abdc28dfcda1589503a7b8ed9557ff88c GIT binary patch literal 3110 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 A!2kdN literal 0 HcmV?d00001 diff --git a/examples/resource-bar/Pixel Red Fill Bar.png b/examples/resource-bar/Pixel Red Fill Bar.png new file mode 100644 index 0000000000000000000000000000000000000000..89211888888a016889ab1d6cbea22d59082c6fd9 GIT binary patch literal 2849 zcmV++3*PjJP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0000?Nkls#ET2YWczDM!>u3y*dU({sqaGgh@TiAJJv{2+ zQ4iCmrS3w8pFdH00000|NjF3m!t<+*EhhG00000NkvXXu0mjfN!&=4 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/Pixel Yellow Fill Bar.png b/examples/resource-bar/Pixel Yellow Fill Bar.png new file mode 100644 index 0000000000000000000000000000000000000000..5d8e7906257b9a5d7ef0be506ac1a3390bd563ac GIT binary patch literal 10359 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 F{y%j-<=_AS literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Resource bars/Blue Fill Bar.png b/examples/resource-bar/Shaded Blue Fill Bar.png similarity index 100% rename from examples/resource-bar/assets/Resource bars/Blue Fill Bar.png rename to examples/resource-bar/Shaded Blue Fill Bar.png diff --git a/examples/resource-bar/Shaded Green Fill Bar.png b/examples/resource-bar/Shaded Green Fill Bar.png new file mode 100644 index 0000000000000000000000000000000000000000..5d5903a88c3b1e4d8344e138ed3440b2b13630c1 GIT binary patch literal 3531 zcmV;+4K(tJP)EX>4Tx04R}tkv&MmKpe$iTg4)k4hEFskfAzR5EXHhDi*;)X)CnqU~=gfG-*gu zTpR`0f`cE6RR%KKJJsPzojkd?N82(+!JwgLr1s z(mC%F3#=?D#OK8023?T&k?XR{Z=6dG`+25dWYhD+0jVfq16NwdUuy!hpQJZB zTJ#7AZvz+C9ZlW?E_Z<8CtWfmM+(sN7mL9A8GTb87`z4g*WBLP`#607veeb`4RCM> zjFl*R-Q(TC?%w`A)9&vFa_MrX6#Z@F00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru

%NDJ=L)Xr2H702y>eSad^gZEa<4bO1wgWnpw> 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

%NDHz%RoGSnT02y>eSad^gZEa<4bO1wgWnpw> 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 Z{{lETvv@2rR8ar`002ovPDHLkV1n~Yi~Rrq literal 0 HcmV?d00001 diff --git a/examples/resource-bar/Shaded Yellow Fill Bar.png b/examples/resource-bar/Shaded Yellow Fill Bar.png new file mode 100644 index 0000000000000000000000000000000000000000..340b66546fda12abae715c8de4a3033aa0097f88 GIT binary patch literal 4043 zcmV;+4>a(JP)EX>4Tx04R}tkv&MmKpe$iTg4)k4hEFskfAzR5EXHhDi*;)X)CnqU~=gfG-*gu zTpR`0f`cE6RR%KKJJsPzojkd?N82(+!JwgLr1s z(mC%F3#=?D#OK8023?T&k?XR{Z=6dG`+25dWYhD+0jVfq16NwdUuy!hpQJZB zTJ#7AZvz+C9ZlW?E_Z<8CtWfmM+(sN7mL9A8GTb87`z4g*WBLP`#607veeb`4RCM> zjFl*R-Q(TC?%w`A)9&vFa_MrX6#Z@F00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru

%NDGjtDc)$Pv02y>eSad^gZEa<4bO1wgWnpw> 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 Date: Fri, 20 Jan 2023 21:48:01 +0000 Subject: [PATCH 84/98] Optimised images with calibre/image-actions --- examples/resource-bar/Metal Bar Border.png | Bin 3110 -> 288 bytes examples/resource-bar/Pixel Red Fill Bar.png | Bin 2849 -> 143 bytes .../resource-bar/Pixel Yellow Fill Bar.png | Bin 10359 -> 143 bytes .../resource-bar/Shaded Green Fill Bar.png | Bin 3531 -> 3075 bytes examples/resource-bar/Shaded Red Fill Bar.png | Bin 3447 -> 3094 bytes .../resource-bar/Shaded Yellow Fill Bar.png | Bin 4043 -> 3729 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/resource-bar/Metal Bar Border.png b/examples/resource-bar/Metal Bar Border.png index 6ed0265abdc28dfcda1589503a7b8ed9557ff88c..a93f09e6fffbd23fad968e0e5d4aeb94c7104b49 100644 GIT binary patch delta 240 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 delta 2821 zcmV+g3;Ohr0ihOf59&ghTmgWD z0l;*TI7e|ZE3OddDgXd@nX){&BsoQaTL>+22Uk}v9w^R9 z7b_GtVFF>AKrX_0nHe&HG!NkO%m4tOkrff(gY*4(&VLTB&dxTDwhmt{>c0m6B4T3W z{^ifBa6kY6;dFk{{wy!E8h|?nfNlPwCGG@hUJIag_lst-4?wj5py}FI^KkfnJUm6A zkh$5}<>chpO2k52Vaiv1{%68pz*qfj`F=e7_x0eu;v|7GU4cgg_~63K^h~83&yop* zV%+ABM}Pdc3;+Bb(;~!4V!2o<6ys46agIcqjPo+3B8fthDa9qy|77CdEc*jK-!%ZR zYCZvbku9iQV*~a}ClFY4z~c7+0P?$U!PF=S1Au6Q;m>#f??3%Vpd|o+W=WE9003S@ zBra6Svp>fO002awfhw>;8}z{#EWidF!3EsG3xE7zHiSYX#KJ-lLJDMn9CBbOtb#%) zhRv`YDqt_vKpix|QD}yfa1JiQRk#j4a1Z)n2%fLC6RbVIkUx0b+_+BaR3c znT7Zv!AJxWizFb)h!jyGOOZ85F;a?DAXP{m@;!0_Ifqlp|(=5QHQ7#Gr)$3XMd?XsE4X&sBct1q<&fbi3VB2Ov6t@q*0);U*o*S zAPZv|vv@2aYYnT0b%8a+Cb7-ge0D0knEf5Qi#@8Tp*ce{N;6lpQuCB%KL_KOarm5c zP6_8IrP_yNQcbz0DW*G2J50yT%*~?B)|oY%Ju%lZ z=bPu7*PGwBU|M)uEVih&xMfMQuC{HqePL%}7iYJ{uEXw=y_0>qeSeMpJqHbk*$%56 zS{;6Kv~mM9! zg3B(KJ}#RZ#@)!hR=4N)wtYw9={>5&Kw=W)*2gz%*kgNq+ zEef_mrsz~!DAy_nvS(#iX1~pe$~l&+o-57m%(KedkbgIv@1Ote62cPUlD4IWOIIx& zSmwQ~YB{nzae3Pc;}r!fhE@iwJh+OsDs9zItL;~pu715HdQEGAUct(O!LkCy1 z<%NCg+}G`0PgpNm-?d@-hMgNe6^V+j6x$b<6@S<$+<4_1hi}TincS4LsjI}fWY1>O zX6feMEq|U{4wkBy=9dm`4cXeX4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC- zq*U}&`cyXV(%rRT*Z6MH?i+i&_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-N zmiuj8txj!m?Z*Ss1N{dh4z}01)YTo*JycSU)_*JOM-ImyzW$x>cP$Mz4ONYt#^NJz zM0w=t_X*$k9t}F$c8q(h;Rn+nb{%IOFKR-X@|s4QQ=0o*Vq3aT%s$c9>fU<%N829{ zoHRUHc}nwC$!Xf@g42^{^3RN&m7RTlF8SPG+oHC6=VQ*_Y7cMkx)5~X(nbG^=R3SR z&VO9;xODQe+vO8ixL2C5I$v$-bm~0*lhaSfyPUh4uDM)mx$b(swR>jw=^LIm&fWCA zdGQwi*43UlJ>9+YdT;l|_x0Zv-F|W>{m#p~*>@-It-MdXU-UrjLD@syht)q@{@mE_ z+<$7occAmp+(-8Yg@e!jk@b%cLj{kSkAKUC4TkHUI6gT!;y-fz>HMcd&t%Ugo)`Y2 z{>!cx7B7DI)$7;J(U{Spm-3gBzioV_{p!H$8L!*M!p0uH$#^p{Ui4P`?ZJ24cOCDe z-w#jZd?0@)|7iKK^;6KN`;!@ylm7$*nDhK&GcDTy001CkNK#Dz0D2_=0Dyx40Dk%Z z004mL004C`008P>0026e000+nl3&F}0000?Nkls#ET2YW zczDM!>u3y*dU({sqaGgh@TiAJJv{2+Q4iCmrS3w8pFdH00000|NjF3 Xm!t<+*EhhG00000NkvXXu0mjfKaotE diff --git a/examples/resource-bar/Pixel Yellow Fill Bar.png b/examples/resource-bar/Pixel Yellow Fill Bar.png index 5d8e7906257b9a5d7ef0be506ac1a3390bd563ac..028d336bd0b5d1ee7b378639226b78e05e7fd65c 100644 GIT binary patch delta 97 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 F{y%j-<=_AS diff --git a/examples/resource-bar/Shaded Green Fill Bar.png b/examples/resource-bar/Shaded Green Fill Bar.png index 5d5903a88c3b1e4d8344e138ed3440b2b13630c1..32a028d1b927383ea68722dcb4f20cc23233bdcd 100644 GIT binary patch delta 3070 zcmY+Gc`(}v8^?89ZB?<=*3pE#yDhe_qOJRG)v*>0#kPdFH+A2F9KWqCRw>2SEs?dw z79mX$SDdBJ*tYIFL5LD}5=nUb&g?t$?lbe9`Tq0FJoEkI`F;jKzsS9~3W$h>eeV(} zA|ihAzd9jOP$c)o)LEO~b&8$ZcqGhl^Sg{Q6#-?Ae5Z5$lX_W9`KJI_v;7Z<>EW41 z4zcYq@WS6(@Vx`UKH$^+gbwpx&*>zwg0y?Sw*6V_=`%xVE%R?q1Ubf3UNiJBiDI3f z3`g`0e}${2!mZjVRb^!$>%RX*QlnWp*EjbwknHvUk9GhK&kyhDa&57JJIK zV=ZRboI*c}TDPU$IWIjtJspexuv);ykTFpA!ID=U|* zlP{VEfYuFHjMn@w>?e&SwuJ|`NKU8GCqrSZ2CpZ(O0l)^66ys zR=AX5J5k#8dYwPVK175+5FRxAA!l7@-q>FhM{UAAfXskprmZVTzA0XZ`L@qhhYvQF*s z`)b)Pki0ZyQCFgO=_CkSp)z~Bx_tc+TaFjwSAAC1#)NKL%ou%TOvh9+j^1Bsy221k zs+)P(7~{gOZmli8?ub>MQ-y6Bp37*uY}(siAF>9_c2+hSz{ZL;ydh|KKkzjBqI)(Z z`j?aS=q!o~zq^)gkk%H3)zf(fa*sS%bJMppWr=CpBQS4=V{_NjhVcs-h?l$ySfmbu zIIL%nm`L;Oh`RV!i$D?oWK)mq+$XKr6@U-vDUrimV61RDwj9OPV-`zneU6{a@B zSvOo5Nrf$vbdl|jADe-N2|%G@h;q}!G0C+YY&5%I7#lOQg>lsU8?q1fpphcxbYa@=1PKk!{$Q^e)1b+w4shkQ#|!7US7G% z%DOJEu@r5f-i04Z^i$q&s~`P*1sXx@TBqx)&?qUeNmhB!aK^OOp!7gqN_t^GDZCz8 z<(!~$QV3u_SAPje++9QAyg7F1N!^0N>{$+O;`Euh39;n4Sqak?`=qPEQm=z`W1H-Q z;}$uYTOeZ?vA(|kbv%b28VBKhgEWe+3E+qHA*FZ`4(T7t%LP9^N4sA!9me zdV$dUc+m+|{aFsxBdOoQ^ex8DOYyUKTk9&{dru+XYS^5;?GjhEMn+2gn~uK7C&+AS zLS8DTqW*f*<6{GGCqKoF#2dNm0{zb8t13(D7a$l;r|V<5^gRU+dMW$i2&NQbH!tns zhU=h0a7x1TaaCEn z%`9*hWo&7}OR&{|*k;H_I%c{d(9XgD@1qZ3RhhIUwDZ=?7P|2KI8cUxpY_;k$W+xW z2vo{!8_Xa`oVBU4FsdoD@^+%cxG)Piv!%CEsE;TUd)`#C+g~no_;dYsoKZ6EY9|B4 zZmvbXmSb^ovX*A1l6GNz^HbfD;jiAzE;)9pL-&C{g>-m3ATVjY&B z(@OeH+q5GWx_KF>LJURrQH3V@WjwoQ#xg!xGAiDK>UH+c$&CP3g8?4L&)Dov-yeCD=_}W z#_wDy8MuJzCupzZ=Ui-;6@MGqm6e<(yYh5XCrpv_PTwl-@Y+u%2l)t2DGIl9vAPdz zj{~+FS~N%_`fEj(E%oky)`i|Y_)SVc#8;j6Kg(z_y6W>UTPH|)^zn}6{T+8sJf(x; zwZ5pek@EWP@^`#DKFha&D|wEqZe5O;zl3kR(&(Nc{YRCD;Y7t{`F@MtIjcPGW2tvm z(Na+UWB6N0zSYy#VTs6iIj^$K-_c3s7&4&o@e&fm*~x>TW4>nYNZ|Lc>?TCEs|ZJ0 zclOUi`DwHnStfY7l$yaPak1aE+kPSJ7IbPBT9NNC2g?h(BX0ATHH~jai*YjcKD0{* z;%l^n3bxg$Y<9-|2N)4`JYG@!kr3uv|U{n#>hzSlGv8@T!vVAF5@=` zZy?Eoe;7CaN;fH7%*lWE)&Juc;k^w(wqFBF2UrNuVi`WP|I3ND2ZB=m2HjWf7c-^Q zxc(YP$z=NUy;}Oww5ARDr2Of8znsZ$-`r_P#EL8QHXQ--V@9=z{a-glzKpfSeRHCj HXTpB~Q7Ch1 delta 3511 zcmV;o4M_5X7|R=wBYy#eX+uL$Nkc;*aB^>EX>4Tx04R}tkv&MmKpe$iTg4)k4hEFs zkfAzR5EXHhDi*;)X)CnqU~=gfG-*guTpR`0f`cE6RR+H7*Gl(1AHR!9McVpc!PLm)6zNb6AP>?Da7Z*;|5)j_>t?f%Ws@Z4*Pkg zU}V$t!~(Hc>SDQzS=msDr-`GAs!_f_=d!|ii?dp-v-Umt3qu8MCBt=^BS>HgNu(e` zMjaJYVIfAVMt_QlH0{Sd{1L~WB9~0A3K%&SP=gA|@q_=t?{3ZF)TEmfiUYkbw*4^* z^z8zzhHZZz+ji>&2s{H2jwO{cYp` z000JJOGiWi{{a60|De66laV18e*gz`Nliru

%NDJ=L)Xr2H702y>eSad^gZEa<4 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 diff --git a/examples/resource-bar/Shaded Red Fill Bar.png b/examples/resource-bar/Shaded Red Fill Bar.png index c8d20fc98dde9bf0636d2c170db999fdf948772c..6c1c91a42c0de9a2fa49515e62a21c102a647df9 100644 GIT binary patch delta 3090 zcmV+t4DIvx8kQK4BYyx1a7bBm000XU000XU0RWnu7ytkZ$Vo&&RCwC$Sl^FZR}uFA z0HRPqfYPXe=0}qdJ5AEWp-na>Z9>*fHc5BAo37V)yRkopU`A2E!U+5F+PkW{O>Y(-PC1_v0 z0)MqF_(x?fw%E*eJ+61tVt75~?^ZOW+e*Kcjw?M^x~}v+q5cm?{fV#s1yBy1zVipq ze-A#qc|EqRVmD$8wrpQ+#C?wEZD2~bm3}K7S9-2=U4Q9&qH^RQ{Nn7lp*eX8-kqO; ze^yJ-`#}ZP8#UNaworq0&-}I8AACClKkU;O>|wuk&oA&*KK`8s@@v${{(3`LFZg*m z+WAKCh7;z*LL!2CnPt-4~hrHhy;ON%D?rboONS(M|g0;hX zhw2R8aDRmSoUq5p))!cxJY2$DoUreN7mnEDjfTLlhK}bt>(2(}RRiUq<>`?4LEQ_i z7890UO&bi`0Lz9$dBQNE*s$4XICR#~uij&a%*+OVi{Ti|9paVNOT$c19N1i-x!+g_ z=WT;y*l@Jjm1c5dfzJ{B-dK=gICO>=OgiGo^MB9RXa<5<4M+2(+;W0hr8?+P3^eYs z_qE<3eDQrerwzuHzA4>S`n}ZG@#fSeSJ#!kC#r`Zg%=9v@z)}`~o*_yV8?>l6@CfwKGrr&FI#}H4rACYJHK0B}1gt~|2D&_9wE9O`m za(~acCoGKp5%OQJWBkJJ=sFE=)rH#XQCM(Xogw`eYOB{G>Z_si8pFRv>lX2>8MsLe z*Sp4Xs}HMZfZLi>d)@TrApbQX-?ciee~sZH^RxbFK-sAu%w25x{21K5l7~+5D*XGJ4Ih>(#CmqswP4R(``^-U75S*O7l*|4_p9u^s`h>m zhpemeU7N+Vt9o1;=Qzl#r^V&5yme4ZRNg`jc7?uaS7i(^wl>0y*Wvc0B4ANP`F{

ig4wQpozi^+mm^S5E zFSsM|u|ndKo{-vTK5ozLd*!#8_dOfoY*)oNJ?%d0JL59xeb7T8uFdK(aYLLxL#}ou zT1yyzdSWbETaVAUJ&bczp)NcVA%Bla-8R!YamK14#`ZA2SHhTfMdpHyX28qwgKK5z z%zYQ`PEEUd{_?2|*r^mG=JzGx$HzzD^)u&T@zNB$H#rCI&y-+w);8LT<^AHlU|kN@ zEB?NP*67<`uX2Cpx8lEPm1#UHjL&^nES59ME2zN=eOE|rWm=OJo~;CDWq*o;Ro1b> zIWesGyTO~N&J|0*%3}ChHuYuSuD^xy5wPJs2{5)OX0mUY;HmYUab-p5`Rc4+SDD6~ zm2%R#==-l4IEHIpvGhI!_zS!u7|&81wb;V6yT_RX!t9E>h1doqr1wKXeSry6*5E2t1&5mqWZQeU@mPvOHTnUQjF20jsQQ zlE62U4z37&C-a8#Q)llNO7PxP5#GKy1+PDK-qrQ_y-7$EcYYIoc<2QD?&K)kIXeM= zzAyuSd*&*1CrZ%q46i#A^R9J+bqTHK$r@YN^9_Cc*xX0|_5HeJU4KF`^*CLUFFy}! zl45kl_h`&6i-~dQ63pgFzET|>lmo_xV#YC_NAKbIv~G%hiQVb%k7F!w-7@~X*SMyx z#)XKUkC(JJ@LpHQonz8r_;*CU%xm1`SacY6UB(5S!D+ksfrl zx=V~>I_6zr7P{Iz>whunn#b4YMCW4E9C0itZ}@z0Up}uLjTqqJMpc8^_V_<$CAs)@ENb-?-jn9@1@ibk?>hrQ3p*>4kvz}lKmr#xGd}r3xZ>8f(&y}v{AKC|r zsR#DLja|p#=cy;*5071hJCEn!PbX*KZl(ZtPYtYn%760KR%jWuU-10G{WkX_hU0nP z8U5S$3(xVM#oopFg+BQFu9km+?6)(_FJlS5LcEL|Z;(>~VPffZu>9JY0?D!M$Ie(3 zlZ*)~>22D>cJL0rkLxMO#`DEEXYgH%`e!I-2!HT`<4lDXlE?3&cF}V*ADzS zhKx^{0)L8Y1?TNkQvXa`vB+Gs8J2B{OS~T$OQ_!xV*4ibEyS4SPv;>x%UH}u??XFs zCM;oQWevc%v`JkEpNv$O75z5uNygIVqHWZH;dQkoPG&GJQFkmlBN@xcfwpOO@w^cY z9>h|*edmcuSI1xJ>-o*Tt}A^{jBncm&+Rx0KY!hG8eUC44R0KpfH#j`fwzz4`!-E} z7lUtX)50%ZFA`tLytDMQ;D=*-mgeyd@z~poIu?sVbDpN}MPisA z_@$-%d96GL1J>zjln1Ma^gxP_IFM$!rrCRG9gnaULw;$7Nt$C7QI}B5qQs+g6j!47 zNq=ooy2H4$Xu6*^aVu|lOXh6k?4@}=d2=r#XKfl`X6EdoHoN&DJu>KpIDdKLZ0mL8 zbsRL@5FexZoX#8WPDf}&l-8j+OHbc3*M`msI{RZ^x0QY?9ann(+>T=~zU>i6jNQKr z><13POFKs3)}C|l+Ws-PePA3~$;rOupns`;Q=TQ+Z{O7Uz^Ct<^6nu2W@-?l>HDU_ zbt{SPC-pac|CZrg-0Q!GbE7#5cT@b%VBK{0a>4sSO{9*TA%`&kR*Jsc#BbsI{=SF# zz;g60mMe~daSHp83wwxq)MPjXxS=|6&oE{_K7QWhU5pdv2*zB%vX!K7woIHz@qhYI zeD+2w=%fB-3*p%`axh2ZG2S!{`L__qFPbNjo0)0rb*++bAk~eZRF42sfrW?%^^J7}WxzUtnl%4xnG=)4` zshp;P8c*3=NVqncMusz(BmLuZiGMkWd8KswwS8l7Yxg-<&&yvu3}au|35m0x`#KcA zl!BXI`xgA^82RjWn7n@< zT>r`uc;Ue(T!&Y_aTad%o&UQw`ag&nTWqn#7Mn7q+e*Kcjw?M^x~}v+F@N%z?U23i zVVL>i0rx=t3-IEDC*Y;+BeBI6TWqmy5>vXZ^jqn;(sQNjO5a_P_k~_5zxosZ+O|Vb z{_>I7Vv8-d*fxnN-B$XoblewsBJ!^F|Fl>Chx7D(J7MheySBLP{uI<0TWqm?T1@G- g(r=~XSl9mpwOHSEOLKvt01E&B07*qoM6N<$f>vyE)&Kwi delta 3426 zcmV-o4W06q821{GBYy#eX+uL$Nkc;*aB^>EX>4Tx04R}tkv&MmKpe$iTg4)k4hEFs zkfAzR5EXHhDi*;)X)CnqU~=gfG-*guTpR`0f`cE6RR+H7*Gl(1AHR!9McVpc!PLm)6zNb6AP>?Da7Z*;|5)j_>t?f%Ws@Z4*Pkg zU}V$t!~(Hc>SDQzS=msDr-`GAs!_f_=d!|ii?dp-v-Umt3qu8MCBt=^BS>HgNu(e` zMjaJYVIfAVMt_QlH0{Sd{1L~WB9~0A3K%&SP=gA|@q_=t?{3ZF)TEmfiUYkbw*4^* z^z8zzhHZZz+ji>&2s{H2jwO{cYp` z000JJOGiWi{{a60|De66laV18e*gz`Nliru

%NDHz%RoGSnT02y>eSad^gZEa<4 zbO1wgWnpw>WFU8GbZ8()Nlj2!fese{01Hn^L_t(|+U;H2ZW}ogJtehd3(gG2gTVs( z7yGhbwEvF`0>|nL$=Zi*HtR+u*uemaw+T3wrEWG^ms3@zXovpu?|(72e?cI;TrYSU z&KOQ79OD?rIL0x4j*&{ilrp}~3m7}BW2i4)Z_jwW-SF$v70;Iem(%%>+A)rCjAQ&H zV<{QqlJI4k@%eto=lj?|{`K~ZfBy0d{&>0Jx94ZvE(0#-zXKR*V{8bU9W!~ zRt`al*^>g5g3ZTlMTRw-45ju>DvcfR5qTTL=KJ&z7I>>*MtmNAs|_ zR^C_lBQJnoTfL9O^NFgQ))%{c9(_0aQO~FK^|l#x&%PcZR#uyDN^i2pzO(gNTF^uc z=K5W(kGB1?vRP*Fe}j$6T;j_qcxB(iG?d_wt) z@z=UYVkTAyLRhHac3OL?E3Tg~5EG~nC=-y@@3hbg zqS_R8H{lI{cv~HtE7>_vlMox^=B@?w!Xl$oWf*JW{kxb)-7Z%|?#V0-l0={g*2>*I zG`ZFHOEZHee?MV$dM$QcWS&Z9#Wpg^b+M35)ma5{5k$<~W#2`8kHmf@lCsdXh(b!} zVlC2>#agYrtV`^2Vc|GZUm!8R*6(`N`qOGR@bh|9>sTHMOKbmD`7-k=SF;~0Hx6XP zJFxh)u!x`}_g({XUD2wGCKqR(y_1^b}D z_DR^Ryoy3xVdF`xyt8EqEK>pTUVr`MWg!BFU48WjHrB#5un7AoE}VMop}c-^B2e0J zoe4uqjAbsEr;O=RFe2fSPbg=-SlYrx&7Agh$vFqd04p*O1z^lNWSgyY!@tjw#GHUm zv87Sle{>I9G}a1psZKR=Re{)CFalhw@CL3_9p1`7%GPAoY9G9BqZnXi%26)Qt%s#z@;(cgIldwq^nUi)qRyN2xOiDm=bF$DgSOG;R z=U4E%>x7i+sr9sM?|baK&&ANT)-}s(6%9ZJe{y1AwG|Z!3u$1-&GzKHwL;u8Ne;9r zo*M?0XioI81lmuO%n{tTGY!JW!$2DIDs5ldoA&H}mpS?EgqT3hk{BvkK_?k#C1Frn z)(Uc~W(dHP3&y2jx@XK&#JRD=W2ENe`KF*2=~DzB73?W+}=r5?MSMjA~^&DJLK%@3?aP@FliU}1ebr>qiQ7GGLqf$6ntMG|dHsaB>v{MxXWAkj{8eB{eGNx@#c9o!BlhLctiJs5X zHj*y$@q7Ky(Im#dB!wB5{Q74HYpi1P8lzCw<5v71`gPd=dQw#DCbRrBj zBkiq+gCVsh{Y_9xARv{DY0enOjA<;Gr-C#yhBOx}Q^9n}7%AhP7n~B|dg|q*e{2{{ zT_X0FPEtTiw$Mf|hO^6+WZ5b*Br}gK-t^~WNFF^0DUQ*u7Bbg094}N^$}S_+bP*Yv zDgK1i94z)@SFh<0c2b9vS~bd;K#SzB^WQjoWAL|it||vz75HQ!a`7HT;BxD31}Q^1 zsSF?H6IVlQ!A08vMF3>pgR3SqfAwdB9EEjQM0`Y9r>(E7UfDsP_W*R#I4?Cz7crrnMh7-p^ebj(pVn5Pybu7Ek}xhA z)3kmqQ$bo7!;%>DR4|`2CS;5`<8;Z$#4amTA|>B|Bb(`Szd0wFlvaLfe?AN*dr;2_ zC|>3Vt!J}16<|%X%r|~o>B6?LX&XdQryxu*v=@=x^8@0l^}l#;(6Z^XnFM0XJT`EJ z1gN;WF#YEM0)3;*t&OQyc)R;`rX*aEeC1`?JtcF}l_PpGwHceWWmQF5xHSz?cs9@H zoFaHw;}80jYG0v^Z*-Woe<4AW$%ZzJ994=#6!j)`g{$2F#GY|g{w|XhwuA(mL@U4q zQ=y{kA3kg}{j#WbygXdf8Jf10=Ld-6#wi6XF*=Ro@E}VEdsIU@@WDM?>%j*DdO#-x|ntS&Yh?z5TOA`P$B8#J|>yaeVf|oQq5$wE%w=>I|^hu zxCY|BU9S5B25IaOe-2OBsJWenLxk4VNYtR;s2XO|wDe6z>iUHA>8SaM5T18D*idbk zPYqfRDz@(NJ0)7n-uHV0kMk~C+lUK~nKRWZss;IVspSWi$^uRu&Mr(8?4-ae-9>^bpOnjQ+k-a$Lm+>IUiHOx0 zu!&(#gavej{1UDlN2ie#HUD7CXAa8L-oXN4XRe7TP9^vT zr>;0Py<)q()b;C#4pGg?Jx*y_g|?fxHt^*+d&r8?$Qp1}rb+;|XZSPMG6ST5QWEkM z8FW~LfA2ct{j?qI0XD>kcb%YwHw<2^07f2V{oXAEOWc+U&I<{6g_*q3wp8$ka1 z%i&`j;~2*{#{U5FIpHl&_?lv zjIVjdmo(umPXKR!YWOY909H=t{k-5x2go1e7{@rq&j#`{XT0YHZ+Y5reg98G-qMV> zG(6+^G~hyKoav+gIlF^CI>s@M@sU8Dv2ey%l7hDX0ysFccq}qhQ2+n{07*qoM6N<$ Ef~wP$BLDyZ diff --git a/examples/resource-bar/Shaded Yellow Fill Bar.png b/examples/resource-bar/Shaded Yellow Fill Bar.png index 340b66546fda12abae715c8de4a3033aa0097f88..34ddf1f2db9b5a9e6c07e66dc7c7cc61c2b3f6d5 100644 GIT binary patch literal 3729 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 delta 4027 zcmV;s4@B^h9m^k(BYy#eX+uL$Nkc;*aB^>EX>4Tx04R}tkv&MmKpe$iTg4)k4hEFs zkfAzR5EXHhDi*;)X)CnqU~=gfG-*guTpR`0f`cE6RR+H7*Gl(1AHR!9McVpc!PLm)6zNb6AP>?Da7Z*;|5)j_>t?f%Ws@Z4*Pkg zU}V$t!~(Hc>SDQzS=msDr-`GAs!_f_=d!|ii?dp-v-Umt3qu8MCBt=^BS>HgNu(e` zMjaJYVIfAVMt_QlH0{Sd{1L~WB9~0A3K%&SP=gA|@q_=t?{3ZF)TEmfiUYkbw*4^* z^z8zzhHZZz+ji>&2s{H2jwO{cYp` z000JJOGiWi{{a60|De66laV18e*gz`Nliru

%NDGjtDc)$Pv02y>eSad^gZEa<4 zbO1wgWnpw>WFU8GbZ8()Nlj2!fese{01cx_L_t(|+U;H2a@$A_J!nyKZWSlHQ&U^D z-?d+`-@oO=W5<>#^6UfIYygd>E4~QeV%?Y5&txO#?B_TT`@@L)F9XQ(`!4^-$LkIsuD5vquEVRVgl%_m zgA3wZUYFO!_kNar^he@xKjQZ8h)Eq)lEN;pa7m`8)k_#NC$xyE#FBoB_Xk`+9@-?>c;V-{IqR zhksme@$StAyIp#D19`%Iep{P7>)=lX)UOBNXV=3S3p{xbf0yyRf0%t=0_yJ=>-L9n z0r*2d;`Xk?+cz6@S62zIt`c5fCA@pHnSS0*&DY-zVW(sLS`P9(RQ0mz{;}l$t!IA; zHuGmV^iyxy{Qh@7{I3LMyX}Nt`+mgh8P~6N30=1lY&*ero3QN?cDw0=-8TIiC;uuf z$`9*5zegD(KZZTHfA2nv*rS`ipnjh(vH6O7UMQn)ejR#Z*G)au?MBdT1RW^An1E5H zpCL^@DYX?Q03i^f{65s_{LAGt`~H+p?dLLIH!VWJw7y=qT1Q}JiRQN=GOy41{!&&H z0q1K(U$fjcxVN|s^Gx`1-zD@q?ccR;E=m?Go5!p#q58a*f6cU*I~VO2icV$)aMp!7 zgx#~V0k5w$xk>vo&c77(-kdLzu{fjh|834C*0!@qjjcF)J7vSwTBr9~`M|O#r@z2Q z>j8$MGc59xMXPc`=Eg3w|3!YMbtLmTJTned=fa9nK%J*?&k!H-$>H`J1iaApydR5_ z8SC?CMKZ!gf1K8%d$ahQ@>vc5hS_#U0hj;^x(eJEkl&bN5y^;G)F)Y7U;#?+{YD0} zfk;@=6>t(r?HF0NPSoaFwO=3ud)`{v*AgU_HC-&x&MkQbLYTtnL}xzdBrZ$5(B`Y6 zinJueK!ED3MmphFy(U|GEI=SgUgIussn7fdn!2(df3GLDG~i?;-pCl19Z@GJ`AmBM z^$q+!scnI2rRdOCvX+v<>2PIbmpTbCDknh^69CraS_F^+`>RiC0FN@ej0y2B8i?~# zLS{dsI*-<14cTQaomMQm@^)-Q%a!O>vJWnPWwiriCoD-rU=y`6;P9^H2Z5bXKq=Dj zD)Vx0f7ZGLWDxL3;JBGEe8%<}XX_G!?&_4LPJ%<@E{fEuk=2unlL4I>J9`zbxl)y|qj7zlG)KGedbN4Y z6!*g$D`$!FyhhB6f1uCE%p@Ll+5(>kXkTU|SC!a^t8&a9 z)TUPp44t6B$_0_lSGlxQAxFYYAn$j&#>-8DbDztuhygRHqFNMXG!SGEpmKC^oQKSHo=|0EIg-(q;U#M+wP8+j1!79ILJ??+ zVxnfIYiR1`oGmZsqs=rt2;{1Qo?kIkkjxIrW$j|W%6Y`;DTBRsW_4o`D#~cuI~9Eb zRXS5qBvjuu&^6z$RFiYA9?=D}&dO(Me}krG&tkWF$x6&RpgTjhD@!F<%BR8t&1Ebq zw{+5ScA3t$P%Wavvq~~%BqbdXOGy^85VB1RmHeGjv-1m!?7fVsyn8Z{Qbrn3$eFaF z(P(UQ+NTcSx%wiD%`N}TvazDfe(CBZr%P()Ez@nRll89`JnWniYK*jYAQ z0tO(-@^dsLw>tP-fpS#$&43!Pe@7ZLB*+du==iE^p}tiRHIA!kx_mwz{9F~YEGOj* zb+#lbr)gABno5_TdQ!5`D3^^?-!q~L7XUC>^~$xzh|8XgJ^8E}3X~JTQCxs-(PU^; z7?#%2oF+!S_Dm55ve)~!5XP7w&^E%_UM1pb#RY3e=SF8^qqk*%Is@~Pe~Qn*oYY!D z88OMnB_GM|C*RI+`Ps(Af$gkMjJCS5!5d9~&DYCl{mcYOWt-)_%(7B8G*&G>D_b#8 zZTopEl%n^qMQ+N+mfA*W_mSn0l)PNNL~SE^KiasMMucMZpuIv=zP}U0owLXtx<_J)MDJSWU6c6Ds%a)11B=@c{0(hy znr&8sz^E!4L7fQL${^dPEE&6Q_>1Ol8IT96f`FG}5^$^=PSk5_uoYFMFb=3T0I73O zHLgvCZu{_zNJ7`zt3NCLB*`UL!LWy+NnC;m*IP$bRXO|5&CTq;`o69_S&~iWAWKM^ z?UQvMRrd+l7{uV>e=9Zl%L8hNBVUGmqHl=(J+l8N; zQ1|z%hwe&M2rX)rNHfkf00)s;9e_e(TojoNv@{#U)dDUe1 z4{*w?L}xuJN~T7H(zdarovQK8qBD%jL8|&iD&9RRA51VnK5y=ydQZ{0x973UG9-j-qB|W z$`aogG!tE7d|Kw@V818!4+;HV&_7Q99uI#a%l_o`3gF{l{^AogtSVI zI-HCM5?a~j8rRq2It4adIf5}i23&6t*h*V>Gq|THzQNdJ!8wk0Zlkh)Hs1R=RJ|S)u#SGe0l&1o#)cmS z9ehR6e-z!1RkaY$7BKE)FSbX=Z%VueHbw!2?Rf?=7z1DfJA9C3*k3E}$NIkEG$);H zt928Aaa83Gy`bl5S2n4j=ARC%XGDBX0j1@#$*7jswsSIJ`>O zcBMgOd-VEUdvu9zNXnMIeonnTx8g{B+pTf}f1=9TbhaW5hp%U10^--D*7no3jXIIlT8t*$ ze;R}2Ze86=iUZ$FY4|ZQA{gt8=XcPkJp7}HSietrL@Oy zE3P{_yG(z(=JAM6_XBP|54gP>aDP9d;~==X?eS{U1H%S~N5SoG#I8#U} zT+7_~TC+l9V`E6EdLW4E;1U2^<{HV!e=WqGYcVjV{2;N{9 zRu4^ygIQ;aeo9B3v2|n9=o9_m59^WSXiw@Iifwp@G!0nsrT#gyScg(&!#;s1fWbCQ z29r!&Yo_{V-?GjmYIfT9@lb8m+H-7IR%hH1mf*4okfrDyY||a)< zS>%LFdB&dCa+FiH_mqcc&(YJGjXmW-{ZqPl%6FddAaE#)bM~+%uQk2nL_WV}vn{Y% zlX*L6u496nX}{;#^tn1a$A7SL#wYv%N&vuN7_jdL+&&y|bN`5&yB?bQ}nU043kP-{;*;R(B0n|+gS{Lb2bzUA*>oLZYW{WRG575CTe_Z(}I@1Q67 zj^BIAJ)Z0DnLOuTZhPt(UgGc9@C0(pGwA4R&vkCb^4xm+Ry+EdeV-GJ8}~R4#Qu21 h{l1?ofC=0G525kDE4%cu4fFs2002ovPDHLkV1kIO$X);d From ecac2c4d86c47bd26387cbd992b509dd8c5b6444 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Sat, 21 Jan 2023 00:45:50 +0100 Subject: [PATCH 85/98] Minor configuration fixes. --- examples/resource-bar/game.json | 34 ++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 0d7366f09..7b7e2a70c 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -4018,10 +4018,10 @@ "name": "HeartScrollBar" }, { - "name": "NoBackgroundUnitsBar" + "name": "PixelHeartBar" }, { - "name": "FlatHeart" + "name": "FlatHeartBar" } ] } @@ -4078,7 +4078,7 @@ "customSize": false, "height": 16, "layer": "", - "name": "NoBackgroundUnitsBar", + "name": "PixelHeartBar", "persistentUuid": "850c5ba6-8615-4217-bc65-f0b4a149b4cc", "width": 96, "x": 464, @@ -4108,7 +4108,7 @@ "customSize": true, "height": 64, "layer": "", - "name": "NoBackgroundUnitsBar", + "name": "PixelHeartBar", "persistentUuid": "a4a16b93-f588-4324-b306-5f85919b34ab", "width": 208, "x": 592, @@ -4123,7 +4123,7 @@ "customSize": false, "height": 0, "layer": "", - "name": "FlatHeart", + "name": "FlatHeartBar", "persistentUuid": "ff235c90-65d5-4244-95c6-b0f0ed957e2f", "width": 0, "x": 434, @@ -4283,7 +4283,7 @@ }, { "assetStoreId": "", - "name": "NoBackgroundUnitsBar", + "name": "PixelHeartBar", "tags": "", "type": "TiledUnitsBar::TiledUnitsBar", "variables": [], @@ -4319,7 +4319,7 @@ }, { "assetStoreId": "", - "name": "FlatHeart", + "name": "FlatHeartBar", "tags": "", "type": "TiledUnitsBar::TiledUnitsBar", "variables": [], @@ -4746,7 +4746,7 @@ "gridColor": 10401023, "gridAlpha": 0.2, "snap": false, - "zoomFactor": 0.9561706952803273, + "zoomFactor": 1.042711536951112, "windowMask": false }, "objectsGroups": [ @@ -5967,7 +5967,7 @@ "leftMargin": 0, "rightMargin": 0, "texture": "Shaded Red Fill Bar.png", - "tiled": true, + "tiled": false, "topMargin": 0, "width": 32 }, @@ -6032,7 +6032,7 @@ "leftMargin": 0, "rightMargin": 0, "texture": "Shaded Yellow Fill Bar.png", - "tiled": true, + "tiled": false, "topMargin": 0, "width": 32 }, @@ -6097,7 +6097,7 @@ "leftMargin": 0, "rightMargin": 0, "texture": "Shaded Green Fill Bar.png", - "tiled": true, + "tiled": false, "topMargin": 0, "width": 32 }, @@ -6161,8 +6161,8 @@ "height": 32, "leftMargin": 0, "rightMargin": 0, - "texture": "", - "tiled": true, + "texture": "Shaded Blue Fill Bar.png", + "tiled": false, "topMargin": 0, "width": 32 }, @@ -6223,23 +6223,23 @@ }, "Buffer": { "bottomMargin": 0, - "height": 12, + "height": 18, "leftMargin": 0, "rightMargin": 0, "texture": "Pixel Yellow Fill Bar.png", "tiled": false, "topMargin": 0, - "width": 12 + "width": 18 }, "FillBar": { "bottomMargin": 0, - "height": 12, + "height": 18, "leftMargin": 0, "rightMargin": 0, "texture": "Pixel Red Fill Bar.png", "tiled": false, "topMargin": 0, - "width": 12 + "width": 18 }, "Label": { "bold": false, From a7f18a761ed9b0266592cabfcb456fd98ba208ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Sat, 21 Jan 2023 19:28:26 +0100 Subject: [PATCH 86/98] Upgrade units bar to fix the initial value. --- examples/resource-bar/game.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 7b7e2a70c..9c9d705f4 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -14593,7 +14593,7 @@ "name": "TiledUnitsBar", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/063e9152cf65bc0f3be2a828afd950c3ecf1b1fc72feefdc2467252fe987dc0f_dots-horizontal.svg", "shortDescription": "A bar that represents a resource in the game (health, mana, ammo, etc).", - "version": "1.1.1", + "version": "1.1.2", "description": "A bar that represents a resource in the game (health, mana, ammo, etc).", "origin": { "identifier": "ResourceBar", @@ -15431,7 +15431,7 @@ "textG": 0, "textR": 0 }, - "comment": "Pass the configuration to the behavior.", + "comment": "Pass the configuration to the behavior (MaxValue must be set before Value).", "comment2": "" }, { @@ -15440,23 +15440,23 @@ "actions": [ { "type": { - "value": "TiledUnitsBar::TiledUnitsBar::SetValue" + "value": "TiledUnitsBar::TiledUnitsBar::SetMaxValue" }, "parameters": [ "Object", "=", - "Object.PropertyInitialValue()", + "Object.PropertyMaxValue()", "" ] }, { "type": { - "value": "TiledUnitsBar::TiledUnitsBar::SetMaxValue" + "value": "TiledUnitsBar::TiledUnitsBar::SetValue" }, "parameters": [ "Object", "=", - "Object.PropertyMaxValue()", + "Object.PropertyInitialValue()", "" ] } From 1156bc171df73003decd0ff31261b3ca1010f027 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Sat, 21 Jan 2023 20:57:48 +0100 Subject: [PATCH 87/98] Upgrade the ButtonFSM behavior in Slider and Toggle Switch extensions. --- examples/resource-bar/game.json | 1865 ++++++++++--------------------- 1 file changed, 594 insertions(+), 1271 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 9c9d705f4..df3422e92 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -16210,7 +16210,7 @@ "name": "PanelSpriteSlider", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/UI Essentials/1678c39a3b2bd3df4f82a8a293770db4986a6bcfd3f78e738ddfc86e39176423_UI Essentials_sliders_options.svg", "shortDescription": "A draggable slider that users can move to select a numerical value.", - "version": "1.1.3", + "version": "1.2.0", "description": "A draggable slider that users can move to select a numerical value. The slider can be customized with sprites.", "origin": { "identifier": "ResourceBar", @@ -16720,45 +16720,6 @@ "name": "doStepPostEvents", "sentence": "", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "We don't use the touch capability condition because the device could have both touch and cursor.", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "PanelSpriteSlider::AnyTouchPressed" - }, - "parameters": [ - "", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteSlider::ButtonFSM::SetPropertyShouldCheckHovering" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ] - }, { "colorB": 228, "colorG": 176, @@ -16853,33 +16814,21 @@ "conditions": [ { "type": { - "inverted": true, - "value": "PanelSpriteSlider::AnyTouchPressed" - }, - "parameters": [ - "", - "" - ] - }, - { - "type": { - "value": "PanelSpriteSlider::ButtonFSM::ShouldCheckMousePosition" + "value": "PanelSpriteSlider::ButtonFSM::PropertyShouldCheckHovering" }, "parameters": [ "Object", - "Behavior", - "" + "Behavior" ] }, { "type": { - "value": "SourisSurObjet" + "value": "CollisionPoint" }, "parameters": [ "Object", - "", - "no", - "" + "MouseOnlyCursorX(Object.Layer(), 0)", + "MouseOnlyCursorY(Object.Layer(), 0)" ] } ], @@ -16980,7 +16929,7 @@ "conditions": [ { "type": { - "value": "HasAnyTouchStarted" + "value": "HasAnyTouchOrMouseStarted" }, "parameters": [ "" @@ -17003,7 +16952,7 @@ "events": [ { "type": "BuiltinCommonInstructions::Repeat", - "repeatExpression": "StartedTouchCount()", + "repeatExpression": "StartedTouchOrMouseCount()", "conditions": [], "actions": [], "events": [ @@ -17016,8 +16965,8 @@ }, "parameters": [ "Object", - "TouchX(StartedTouchId(Object.Behavior::PropertyIndex()), Object.Layer(), 0)", - "TouchY(StartedTouchId(Object.Behavior::PropertyIndex()), Object.Layer(), 0)" + "TouchX(StartedTouchOrMouseId(Object.Behavior::PropertyIndex()), Object.Layer(), 0)", + "TouchY(StartedTouchOrMouseId(Object.Behavior::PropertyIndex()), Object.Layer(), 0)" ] } ], @@ -17030,7 +16979,7 @@ "Object", "Behavior", "=", - "StartedTouchId(Object.Behavior::PropertyIndex())" + "StartedTouchOrMouseId(Object.Behavior::PropertyIndex())" ] }, { @@ -17115,130 +17064,6 @@ ] } ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Ignore mouse events when a touch is active because the mouse is probably an echo of touch events.\nThe mouse press could be a touch that has not the right TouchId.", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "MouseButtonPressed" - }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "PanelSpriteSlider::AnyTouchPressed" - }, - "parameters": [ - "", - "" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "The trigger once must be before the state condition to detect a new press.", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "PanelSpriteSlider::ButtonFSM::PropertyMouseIsInside" - }, - "parameters": [ - "Object", - "Behavior" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "PanelSpriteSlider::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Hovered\"" - ] - }, - { - "type": { - "value": "PanelSpriteSlider::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Idle\"" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"PressedInside\"" - ] - } - ] - } - ] - } - ] } ], "parameters": [] @@ -17452,140 +17277,29 @@ "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Ignore mouse events when a touch is active because the mouse is probably an echo of touch events.\nThe mouse release could be a touch release that has not the right TouchId.", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "MouseButtonReleased" + "value": "HasTouchEnded" }, "parameters": [ "", - "Left" + "Object.Behavior::PropertyTouchId()" ] - }, + } + ], + "actions": [ { "type": { - "inverted": true, - "value": "PanelSpriteSlider::AnyTouchPressed" + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyTouchId" }, "parameters": [ - "", - "" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "PanelSpriteSlider::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"PressedInside\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Validated\"" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "PanelSpriteSlider::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"PressedInside\"" - ] - }, - { - "type": { - "inverted": true, - "value": "PanelSpriteSlider::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Validated\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Idle\"" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "HasTouchEnded" - }, - "parameters": [ - "", - "Object.Behavior::PropertyTouchId()" - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteSlider::ButtonFSM::SetPropertyTouchId" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" + "Object", + "Behavior", + "=", + "0" ] } ], @@ -18004,83 +17718,6 @@ } ], "objectGroups": [] - }, - { - "fullName": "Should check mouse position", - "functionType": "Condition", - "name": "ShouldCheckMousePosition", - "private": true, - "sentence": "_PARAM0_ should check mouse position", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Using a function avoid the OR to unselect Object when the property is not set.", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "MouseButtonPressed" - }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "value": "PanelSpriteSlider::ButtonFSM::PropertyShouldCheckHovering" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "PanelSpriteSlider::ButtonFSM", - "type": "behavior" - } - ], - "objectGroups": [] } ], "propertyDescriptors": [ @@ -22562,7 +22199,7 @@ "name": "SpriteToggleSwitch", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/Interface Elements/8d0cd8cd0c9318f4f6efde6ee6b4c192bd19306467f80c9970387a259300f895_Interface Elements_interface_ui_toggle_switch_on_off.svg", "shortDescription": "Toggle switch that users can click or touch.", - "version": "1.0.1", + "version": "1.1.0", "description": "Toggle switch that users can click or touch. The switch can be customized with sprites.", "tags": [ "ui", @@ -22600,40 +22237,28 @@ ], "eventsBasedBehaviors": [ { - "description": "The finite state machine used internally by the button object.", - "fullName": "Button finite state machine", - "name": "ButtonFSM", + "description": "The finite state machine used internally by the switch object.", + "fullName": "Switch finite state machine", + "name": "SwitchFSM", "objectType": "", "private": true, "eventsFunctions": [ { "fullName": "", "functionType": "Action", - "name": "doStepPostEvents", + "name": "doStepPreEvents", "sentence": "", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "We don't use the touch capability condition because the device could have both touch and cursor.", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "SpriteToggleSwitch::AnyTouchPressed" + "value": "SpriteToggleSwitch::ButtonFSM::IsClicked" }, "parameters": [ - "", + "Object", + "ButtonFSM", "" ] } @@ -22641,158 +22266,424 @@ "actions": [ { "type": { - "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyShouldCheckHovering" + "value": "SpriteToggleSwitch::SwitchFSM::SetPropertyWasChecked" }, "parameters": [ "Object", "Behavior", - "" + "no" ] } - ] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Finite state machine", - "source": "", - "type": "BuiltinCommonInstructions::Group", + ], "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "The \"Validated\" state only last one frame.", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" + "value": "SpriteToggleSwitch::SwitchFSM::IsChecked" }, "parameters": [ "Object", "Behavior", - "=", - "\"Validated\"" + "" ] } ], "actions": [ { "type": { - "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" + "value": "SpriteToggleSwitch::SwitchFSM::SetPropertyWasChecked" }, "parameters": [ "Object", "Behavior", - "=", - "\"Idle\"" + "yes" ] } ] }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Check position", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "inverted": true, + "value": "SpriteToggleSwitch::SwitchFSM::PropertyWasChecked" }, - "comment": "Make sure the cursor position is only checked once per frame.", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyMouseIsInside" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } + "parameters": [ + "Object", + "Behavior" ] - }, + } + ], + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "SpriteToggleSwitch::AnyTouchPressed" - }, - "parameters": [ - "", - "" - ] - }, - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::ShouldCheckMousePosition" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "SourisSurObjet" - }, - "parameters": [ - "Object", - "", - "no", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyMouseIsInside" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } + "type": { + "value": "SpriteToggleSwitch::SwitchFSM::SetPropertyIsChecked" + }, + "parameters": [ + "Object", + "Behavior", + "yes" ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, + "type": { + "value": "SpriteToggleSwitch::SwitchFSM::PropertyWasChecked" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteToggleSwitch::SwitchFSM::SetPropertyIsChecked" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteToggleSwitch::SwitchFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if is checked.", + "fullName": "Is checked", + "functionType": "Condition", + "group": "Switch finite state machine configuration", + "name": "IsChecked", + "sentence": "_PARAM0_ is checked", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteToggleSwitch::SwitchFSM::PropertyIsChecked" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteToggleSwitch::SwitchFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change if is checked.", + "fullName": "Is checked", + "functionType": "Action", + "group": "Switch finite state machine configuration", + "name": "SetChecked", + "sentence": "_PARAM0_ is checked: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteToggleSwitch::SwitchFSM::SetPropertyIsChecked" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteToggleSwitch::SwitchFSM::SetPropertyIsChecked" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteToggleSwitch::SwitchFSM", + "type": "behavior" + }, + { + "defaultValue": "yes", + "description": "IsChecked", + "name": "Value", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Behavior", + "label": "Button finite state machine", + "description": "", + "group": "", + "extraInformation": [ + "SpriteToggleSwitch::ButtonFSM" + ], + "hidden": false, + "name": "ButtonFSM" + }, + { + "value": "false", + "type": "Boolean", + "label": "Is checked", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "IsChecked" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "WasChecked" + } + ], + "sharedPropertyDescriptors": [] + }, + { + "description": "The finite state machine used internally by the button object.", + "fullName": "Button finite state machine", + "name": "ButtonFSM", + "objectType": "", + "private": true, + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Finite state machine", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "The \"Validated\" state only last one frame.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Check position", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure the cursor position is only checked once per frame.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteToggleSwitch::ButtonFSM::PropertyShouldCheckHovering" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "MouseOnlyCursorX(Object.Layer(), 0)", + "MouseOnlyCursorY(Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, "r": 255, "textB": 0, "textG": 0, @@ -22872,7 +22763,7 @@ "conditions": [ { "type": { - "value": "HasAnyTouchStarted" + "value": "HasAnyTouchOrMouseStarted" }, "parameters": [ "" @@ -22895,7 +22786,7 @@ "events": [ { "type": "BuiltinCommonInstructions::Repeat", - "repeatExpression": "StartedTouchCount()", + "repeatExpression": "StartedTouchOrMouseCount()", "conditions": [], "actions": [], "events": [ @@ -22908,8 +22799,8 @@ }, "parameters": [ "Object", - "TouchX(StartedTouchId(Object.Behavior::PropertyIndex()), Object.Layer(), 0)", - "TouchY(StartedTouchId(Object.Behavior::PropertyIndex()), Object.Layer(), 0)" + "TouchX(StartedTouchOrMouseId(Object.Behavior::PropertyIndex()), Object.Layer(), 0)", + "TouchY(StartedTouchOrMouseId(Object.Behavior::PropertyIndex()), Object.Layer(), 0)" ] } ], @@ -22922,7 +22813,7 @@ "Object", "Behavior", "=", - "StartedTouchId(Object.Behavior::PropertyIndex())" + "StartedTouchOrMouseId(Object.Behavior::PropertyIndex())" ] }, { @@ -22959,171 +22850,47 @@ }, { "type": { - "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Idle\"" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"PressedInside\"" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyIndex" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "1" - ] - } - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Ignore mouse events when a touch is active because the mouse is probably an echo of touch events.\nThe mouse press could be a touch that has not the right TouchId.", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "MouseButtonPressed" - }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "SpriteToggleSwitch::AnyTouchPressed" - }, - "parameters": [ - "", - "" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "The trigger once must be before the state condition to detect a new press.", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::PropertyMouseIsInside" - }, - "parameters": [ - "Object", - "Behavior" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Hovered\"" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } ] - }, + } + ], + "actions": [ { "type": { - "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" }, "parameters": [ "Object", "Behavior", "=", - "\"Idle\"" + "\"PressedInside\"" ] } ] } - ], + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], "actions": [ { "type": { - "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyIndex" }, "parameters": [ "Object", "Behavior", - "=", - "\"PressedInside\"" + "+", + "1" ] } ] @@ -23344,117 +23111,6 @@ "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Ignore mouse events when a touch is active because the mouse is probably an echo of touch events.\nThe mouse release could be a touch release that has not the right TouchId.", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "MouseButtonReleased" - }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "inverted": true, - "value": "SpriteToggleSwitch::AnyTouchPressed" - }, - "parameters": [ - "", - "" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"PressedInside\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Validated\"" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"PressedInside\"" - ] - }, - { - "type": { - "inverted": true, - "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Validated\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Idle\"" - ] - } - ] - } - ] - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ @@ -23521,143 +23177,45 @@ }, "parameters": [ "Object", - "Behavior", - "=", - "\"PressedInside\"" - ] - }, - { - "type": { - "inverted": true, - "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Validated\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Idle\"" - ] - } - ] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "SpriteToggleSwitch::ButtonFSM", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the button is not used.", - "fullName": "Is idle", - "functionType": "Condition", - "name": "IsIdle", - "sentence": "_PARAM0_ is idle", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Idle\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "SpriteToggleSwitch::ButtonFSM", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the button was just clicked.", - "fullName": "Is clicked", - "functionType": "Condition", - "name": "IsClicked", - "sentence": "_PARAM0_ is clicked", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Validated\"" - ] + "Behavior", + "=", + "\"PressedInside\"" + ] + }, + { + "type": { + "inverted": true, + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + } + ] + } + ], + "parameters": [] } ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] + "parameters": [] } ], "parameters": [ @@ -23676,11 +23234,11 @@ "objectGroups": [] }, { - "description": "Check if the cursor is hovered over the button.", - "fullName": "Is hovered", + "description": "Check if the button is not used.", + "fullName": "Is idle", "functionType": "Condition", - "name": "IsHovered", - "sentence": "_PARAM0_ is hovered", + "name": "IsIdle", + "sentence": "_PARAM0_ is idle", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -23693,7 +23251,7 @@ "Object", "Behavior", "=", - "\"Hovered\"" + "\"Idle\"" ] } ], @@ -23725,11 +23283,11 @@ "objectGroups": [] }, { - "description": "Check if the button is either hovered or pressed but not hovered.", - "fullName": "Is focused", + "description": "Check if the button was just clicked.", + "fullName": "Is clicked", "functionType": "Condition", - "name": "IsFocused", - "sentence": "_PARAM0_ is focused", + "name": "IsClicked", + "sentence": "_PARAM0_ is clicked", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -23742,33 +23300,7 @@ "Object", "Behavior", "=", - "\"Hovered\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"PressedOutside\"" + "\"Validated\"" ] } ], @@ -23800,11 +23332,11 @@ "objectGroups": [] }, { - "description": "Check if the button is currently being pressed with mouse or touch.", - "fullName": "Is pressed", + "description": "Check if the cursor is hovered over the button.", + "fullName": "Is hovered", "functionType": "Condition", - "name": "IsPressed", - "sentence": "_PARAM0_ is pressed", + "name": "IsHovered", + "sentence": "_PARAM0_ is hovered", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -23817,84 +23349,7 @@ "Object", "Behavior", "=", - "\"PressedInside\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "SpriteToggleSwitch::ButtonFSM", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "fullName": "Should check mouse position", - "functionType": "Condition", - "name": "ShouldCheckMousePosition", - "private": true, - "sentence": "_PARAM0_ should check mouse position", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Using a function avoid the OR to unselect Object when the property is not set.", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "MouseButtonPressed" - }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::PropertyShouldCheckHovering" - }, - "parameters": [ - "Object", - "Behavior" - ] - } + "\"Hovered\"" ] } ], @@ -23917,203 +23372,69 @@ "type": "object" }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "SpriteToggleSwitch::ButtonFSM", - "type": "behavior" - } - ], - "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "true", - "type": "Boolean", - "label": "", - "description": "Should check hovering", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "ShouldCheckHovering" - }, - { - "value": "Idle", - "type": "Choice", - "label": "State", - "description": "", - "group": "", - "extraInformation": [ - "Idle", - "Hovered", - "PressedInside", - "PressedOutside", - "Validated" - ], - "hidden": true, - "name": "State" - }, - { - "value": "0", - "type": "Number", - "label": "Touch id", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "TouchId" - }, - { - "value": "", - "type": "Boolean", - "label": "Touch is inside", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "TouchIsInside" - }, - { - "value": "", - "type": "Boolean", - "label": "Mouse is inside", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "MouseIsInside" - }, - { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "Index" - } - ], - "sharedPropertyDescriptors": [] - }, - { - "description": "The finite state machine used internally by the switch object.", - "fullName": "Switch finite state machine", - "name": "SwitchFSM", - "objectType": "", - "private": true, - "eventsFunctions": [ + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteToggleSwitch::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, { - "fullName": "", - "functionType": "Action", - "name": "doStepPreEvents", - "sentence": "", + "description": "Check if the button is either hovered or pressed but not hovered.", + "fullName": "Is focused", + "functionType": "Condition", + "name": "IsFocused", + "sentence": "_PARAM0_ is focused", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "SpriteToggleSwitch::ButtonFSM::IsClicked" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", - "ButtonFSM", - "" + "Behavior", + "=", + "\"Hovered\"" ] } ], "actions": [ { "type": { - "value": "SpriteToggleSwitch::SwitchFSM::SetPropertyWasChecked" + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", "Behavior", - "no" + "=", + "\"PressedOutside\"" ] } ], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SpriteToggleSwitch::SwitchFSM::IsChecked" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "SpriteToggleSwitch::SwitchFSM::SetPropertyWasChecked" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "SpriteToggleSwitch::SwitchFSM::PropertyWasChecked" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SpriteToggleSwitch::SwitchFSM::SetPropertyIsChecked" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SpriteToggleSwitch::SwitchFSM::PropertyWasChecked" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SpriteToggleSwitch::SwitchFSM::SetPropertyIsChecked" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" ] } ] @@ -24128,30 +23449,31 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SpriteToggleSwitch::SwitchFSM", + "supplementaryInformation": "SpriteToggleSwitch::ButtonFSM", "type": "behavior" } ], "objectGroups": [] }, { - "description": "Check if is checked.", - "fullName": "Is checked", + "description": "Check if the button is currently being pressed with mouse or touch.", + "fullName": "Is pressed", "functionType": "Condition", - "group": "Switch finite state machine configuration", - "name": "IsChecked", - "sentence": "_PARAM0_ is checked", + "name": "IsPressed", + "sentence": "_PARAM0_ is pressed", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "SpriteToggleSwitch::SwitchFSM::PropertyIsChecked" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", - "Behavior" + "Behavior", + "=", + "\"PressedInside\"" ] } ], @@ -24176,67 +23498,41 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SpriteToggleSwitch::SwitchFSM", + "supplementaryInformation": "SpriteToggleSwitch::ButtonFSM", "type": "behavior" } ], "objectGroups": [] }, { - "description": "Change if is checked.", - "fullName": "Is checked", - "functionType": "Action", - "group": "Switch finite state machine configuration", - "name": "SetChecked", - "sentence": "_PARAM0_ is checked: _PARAM2_", + "description": "Check if the button is currently being pressed outside with mouse or touch.", + "fullName": "Is held outside", + "functionType": "Condition", + "name": "IsPressedOutside", + "sentence": "_PARAM0_ is held outside", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "inverted": true, - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"Value\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "SpriteToggleSwitch::SwitchFSM::SetPropertyIsChecked" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"Value\"" + "=", + "\"PressedOutside\"" ] } ], "actions": [ { "type": { - "value": "SpriteToggleSwitch::SwitchFSM::SetPropertyIsChecked" + "value": "SetReturnBoolean" }, "parameters": [ - "Object", - "Behavior", - "yes" + "True" ] } ] @@ -24251,15 +23547,8 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SpriteToggleSwitch::SwitchFSM", + "supplementaryInformation": "SpriteToggleSwitch::ButtonFSM", "type": "behavior" - }, - { - "defaultValue": "yes", - "description": "IsChecked", - "name": "Value", - "optional": true, - "type": "yesorno" } ], "objectGroups": [] @@ -24267,36 +23556,70 @@ ], "propertyDescriptors": [ { - "value": "", - "type": "Behavior", - "label": "Button finite state machine", + "value": "true", + "type": "Boolean", + "label": "", + "description": "Should check hovering", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ShouldCheckHovering" + }, + { + "value": "Idle", + "type": "Choice", + "label": "State", "description": "", "group": "", "extraInformation": [ - "SpriteToggleSwitch::ButtonFSM" + "Idle", + "Hovered", + "PressedInside", + "PressedOutside", + "Validated" ], - "hidden": false, - "name": "ButtonFSM" + "hidden": true, + "name": "State" }, { - "value": "false", + "value": "0", + "type": "Number", + "label": "Touch id", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TouchId" + }, + { + "value": "", "type": "Boolean", - "label": "Is checked", + "label": "Touch is inside", "description": "", "group": "", "extraInformation": [], - "hidden": false, - "name": "IsChecked" + "hidden": true, + "name": "TouchIsInside" }, { "value": "", "type": "Boolean", + "label": "Mouse is inside", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "MouseIsInside" + }, + { + "value": "", + "type": "Number", "label": "", "description": "", "group": "", "extraInformation": [], "hidden": true, - "name": "WasChecked" + "name": "Index" } ], "sharedPropertyDescriptors": [] From 82dace459e6e439655cbc03313ed15c3e8cbd8c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Mon, 23 Jan 2023 12:02:21 +0100 Subject: [PATCH 88/98] Upgrade slider extension for a multitouch fix. --- examples/resource-bar/game.json | 931 ++++++++++++++++---------------- 1 file changed, 463 insertions(+), 468 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index df3422e92..7cedea247 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -12132,7 +12132,7 @@ "name": "PanelSpriteButton", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Interface Elements/Interface Elements_interface_ui_button_ok_cta_clock_tap.svg", "shortDescription": "A button that can be customized.", - "version": "1.3.0", + "version": "1.3.1", "description": [ "The button can be customized with a background for each state and a label. It handles user interactions and a simple condition can be used to check if it is clicked.", "", @@ -12537,73 +12537,64 @@ }, { "type": { - "inverted": true, - "value": "PanelSpriteButton::ButtonFSM::PropertyTouchIsInside" + "value": "PanelSpriteButton::ButtonFSM::PropertyState" }, "parameters": [ "Object", - "Behavior" + "Behavior", + "=", + "\"Hovered\"" ] } ], - "actions": [], - "events": [ + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Hovered\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Idle\"" - ] - } + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior" ] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"PressedInside\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"PressedOutside\"" - ] - } + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" ] } ] @@ -12613,99 +12604,74 @@ "conditions": [ { "type": { - "value": "BuiltinCommonInstructions::Or" + "inverted": true, + "value": "PanelSpriteButton::ButtonFSM::PropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyMouseIsInside" - }, - "parameters": [ - "Object", - "Behavior" - ] - }, - { - "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyTouchIsInside" - }, - "parameters": [ - "Object", - "Behavior" - ] - } + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" ] } ], - "actions": [], - "events": [ + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"PressedOutside\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"PressedInside\"" - ] - } + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior" ] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "MouseButtonPressed" - }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Idle\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Hovered\"" - ] - } + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" ] } ] @@ -13163,6 +13129,46 @@ } ], "objectGroups": [] + }, + { + "description": "the touch id that is using the button or 0 if none.", + "fullName": "Touch id", + "functionType": "ExpressionAndCondition", + "name": "TouchId", + "sentence": "the touch id", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTouchId()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] } ], "propertyDescriptors": [ @@ -16210,10 +16216,10 @@ "name": "PanelSpriteSlider", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/UI Essentials/1678c39a3b2bd3df4f82a8a293770db4986a6bcfd3f78e738ddfc86e39176423_UI Essentials_sliders_options.svg", "shortDescription": "A draggable slider that users can move to select a numerical value.", - "version": "1.2.0", + "version": "1.2.1", "description": "A draggable slider that users can move to select a numerical value. The slider can be customized with sprites.", "origin": { - "identifier": "ResourceBar", + "identifier": "PanelSpriteSlider", "name": "gdevelop-extension-store" }, "tags": [ @@ -16227,29 +16233,7 @@ "gqDaZjCfevOOxBYkK6zlhtZnXCg1" ], "dependencies": [], - "eventsFunctions": [ - { - "fullName": "Any touch pressed", - "functionType": "Condition", - "name": "AnyTouchPressed", - "private": true, - "sentence": "Any touch is pressed", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": [ - "eventsFunctionContext.returnValue = runtimeScene.getGame().getInputManager()._touches.firstKey() !== null;", - "" - ], - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [], - "objectGroups": [] - } - ], + "eventsFunctions": [], "eventsBasedBehaviors": [ { "description": "Represent a value on a slider.", @@ -17092,73 +17076,64 @@ }, { "type": { - "inverted": true, - "value": "PanelSpriteSlider::ButtonFSM::PropertyTouchIsInside" + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" }, "parameters": [ "Object", - "Behavior" + "Behavior", + "=", + "\"Hovered\"" ] } ], - "actions": [], - "events": [ + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "PanelSpriteSlider::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Hovered\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Idle\"" - ] - } + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior" ] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "PanelSpriteSlider::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"PressedInside\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"PressedOutside\"" - ] - } + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" ] } ] @@ -17168,99 +17143,74 @@ "conditions": [ { "type": { - "value": "BuiltinCommonInstructions::Or" + "inverted": true, + "value": "PanelSpriteSlider::ButtonFSM::PropertyTouchIsInside" }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "PanelSpriteSlider::ButtonFSM::PropertyMouseIsInside" - }, - "parameters": [ - "Object", - "Behavior" - ] - }, - { - "type": { - "value": "PanelSpriteSlider::ButtonFSM::PropertyTouchIsInside" - }, - "parameters": [ - "Object", - "Behavior" - ] - } + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" ] } ], - "actions": [], - "events": [ + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "PanelSpriteSlider::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"PressedOutside\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"PressedInside\"" - ] - } + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior" ] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "MouseButtonPressed" - }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "value": "PanelSpriteSlider::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Idle\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Hovered\"" - ] - } + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" ] } ] @@ -17718,17 +17668,57 @@ } ], "objectGroups": [] - } - ], - "propertyDescriptors": [ + }, { - "value": "true", - "type": "Boolean", - "label": "", - "description": "Should check hovering", - "group": "", - "extraInformation": [], - "hidden": true, + "description": "the touch id that is using the button or 0 if none.", + "fullName": "Touch id", + "functionType": "ExpressionAndCondition", + "name": "TouchId", + "sentence": "the touch id", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTouchId()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "true", + "type": "Boolean", + "label": "", + "description": "Should check hovering", + "group": "", + "extraInformation": [], + "hidden": true, "name": "ShouldCheckHovering" }, { @@ -18189,7 +18179,7 @@ "parameters": [ "Object", "=", - "FillBar.Slider::MinValue() + FillBar.Slider::Size() * (MouseX() - Object.FullBarLeft()) / Object.FullBarWidth()", + "FillBar.Slider::MinValue() + FillBar.Slider::Size() * (TouchX(Background.ButtonFSM::TouchId(), Object.Layer()) - Object.FullBarLeft()) / Object.FullBarWidth()", "FillBar.Slider::MinValue() + FillBar.Slider::Size() * (MouseX() - Object.FullBarLeft()) / Object.FullBarWidth()" ] } @@ -18313,13 +18303,12 @@ "conditions": [ { "type": { - "value": "SourisSurObjet" + "value": "CollisionPoint" }, "parameters": [ "Thumb", - "", - "no", - "" + "MouseOnlyCursorX(Object.Layer(), 0)", + "MouseOnlyCursorY(Thumb.Layer(), 0)" ] } ], @@ -22199,7 +22188,7 @@ "name": "SpriteToggleSwitch", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/Interface Elements/8d0cd8cd0c9318f4f6efde6ee6b4c192bd19306467f80c9970387a259300f895_Interface Elements_interface_ui_toggle_switch_on_off.svg", "shortDescription": "Toggle switch that users can click or touch.", - "version": "1.1.0", + "version": "1.1.1", "description": "Toggle switch that users can click or touch. The switch can be customized with sprites.", "tags": [ "ui", @@ -22926,73 +22915,64 @@ }, { "type": { - "inverted": true, - "value": "SpriteToggleSwitch::ButtonFSM::PropertyTouchIsInside" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", - "Behavior" + "Behavior", + "=", + "\"Hovered\"" ] } ], - "actions": [], - "events": [ + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Hovered\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Idle\"" - ] - } + "type": { + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteToggleSwitch::ButtonFSM::PropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior" ] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"PressedInside\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"PressedOutside\"" - ] - } + "type": { + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" ] } ] @@ -23002,99 +22982,74 @@ "conditions": [ { "type": { - "value": "BuiltinCommonInstructions::Or" + "inverted": true, + "value": "SpriteToggleSwitch::ButtonFSM::PropertyTouchIsInside" }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::PropertyMouseIsInside" - }, - "parameters": [ - "Object", - "Behavior" - ] - }, - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::PropertyTouchIsInside" - }, - "parameters": [ - "Object", - "Behavior" - ] - } + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" ] } ], - "actions": [], - "events": [ + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"PressedOutside\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"PressedInside\"" - ] - } + "type": { + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteToggleSwitch::ButtonFSM::PropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior" ] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "MouseButtonPressed" - }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Idle\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Hovered\"" - ] - } + "type": { + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" ] } ] @@ -23552,6 +23507,46 @@ } ], "objectGroups": [] + }, + { + "description": "the touch id that is using the button or 0 if none.", + "fullName": "Touch id", + "functionType": "ExpressionAndCondition", + "name": "TouchId", + "sentence": "the touch id", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTouchId()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteToggleSwitch::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] } ], "propertyDescriptors": [ From 307f98b89a00a33fdfd30fff5d8f55994e362111 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Mon, 23 Jan 2023 12:21:43 +0100 Subject: [PATCH 89/98] Remove useless function. --- examples/resource-bar/game.json | 24 +----------------------- 1 file changed, 1 insertion(+), 23 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 7cedea247..67ba74201 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -22201,29 +22201,7 @@ "gqDaZjCfevOOxBYkK6zlhtZnXCg1" ], "dependencies": [], - "eventsFunctions": [ - { - "fullName": "Any touch pressed", - "functionType": "Condition", - "name": "AnyTouchPressed", - "private": true, - "sentence": "Any touch is pressed", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": [ - "eventsFunctionContext.returnValue = runtimeScene.getGame().getInputManager()._touches.firstKey() !== null;", - "" - ], - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [], - "objectGroups": [] - } - ], + "eventsFunctions": [], "eventsBasedBehaviors": [ { "description": "The finite state machine used internally by the switch object.", From 436e18d9b97601f8bbc2b873c8ba74230e1bd2b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Tue, 24 Jan 2023 11:57:12 +0100 Subject: [PATCH 90/98] Add an "activate" action to the button. --- examples/resource-bar/game.json | 227 +++++++++++++++++++++++++++++++- 1 file changed, 223 insertions(+), 4 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 67ba74201..374715002 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -3946,8 +3946,61 @@ }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [] + "conditions": [ + { + "type": { + "value": "KeyPressed" + }, + "parameters": [ + "", + "d" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::Activate" + }, + "parameters": [ + "YellowButton", + "", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "KeyReleased" + }, + "parameters": [ + "", + "d" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::Activate" + }, + "parameters": [ + "YellowButton", + "yes", + "" + ] + } + ] } ], "layers": [ @@ -12132,7 +12185,7 @@ "name": "PanelSpriteButton", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Interface Elements/Interface Elements_interface_ui_button_ok_cta_clock_tap.svg", "shortDescription": "A button that can be customized.", - "version": "1.3.1", + "version": "1.4.0", "description": [ "The button can be customized with a background for each state and a label. It handles user interactions and a simple condition can be used to check if it is clicked.", "", @@ -12810,6 +12863,56 @@ ], "objectGroups": [] }, + { + "fullName": "", + "functionType": "Action", + "name": "onDeActivate", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + }, + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, { "description": "Check if the button is not used.", "fullName": "Is idle", @@ -13246,7 +13349,7 @@ { "defaultName": "Button", "description": "A button that can be customized.", - "fullName": "Panel sprite button", + "fullName": "Button (panel sprite)", "name": "PanelSpriteButton", "eventsFunctions": [ { @@ -14421,6 +14524,122 @@ ] } ] + }, + { + "description": "De/activate interactions with the button.", + "fullName": "De/activate interactions", + "functionType": "Action", + "name": "Activate", + "sentence": "De/activate interactions with _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"ShouldActivate\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "Idle", + "ButtonFSM", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"ShouldActivate\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "Idle", + "ButtonFSM", + "no" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + }, + { + "description": "Activate", + "name": "ShouldActivate", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Check if interactions are activated on the button.", + "fullName": "Interactions activated", + "functionType": "Condition", + "name": "IsActivated", + "sentence": "Interactions on _PARAM0_ are activated", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BehaviorActivated" + }, + "parameters": [ + "Idle", + "ButtonFSM" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] } ], "propertyDescriptors": [ From 05fd6aef483776765234c81cb19abdc569cce138 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Tue, 24 Jan 2023 12:12:09 +0100 Subject: [PATCH 91/98] Fix sentence. --- examples/resource-bar/game.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 374715002..c7eb54a71 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -12185,7 +12185,7 @@ "name": "PanelSpriteButton", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Interface Elements/Interface Elements_interface_ui_button_ok_cta_clock_tap.svg", "shortDescription": "A button that can be customized.", - "version": "1.4.0", + "version": "1.4.1", "description": [ "The button can be customized with a background for each state and a label. It handles user interactions and a simple condition can be used to check if it is clicked.", "", @@ -14530,7 +14530,7 @@ "fullName": "De/activate interactions", "functionType": "Action", "name": "Activate", - "sentence": "De/activate interactions with _PARAM0_", + "sentence": "De/activate interactions with _PARAM0_: _PARAM1_", "events": [ { "type": "BuiltinCommonInstructions::Standard", From 4282974ca03c2b783a5a2a8773786289a0863224 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Tue, 24 Jan 2023 13:57:45 +0100 Subject: [PATCH 92/98] Add an "activate" action for toggles and sliders. --- examples/resource-bar/game.json | 1028 ++++++++++++++++++++++--------- 1 file changed, 723 insertions(+), 305 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index c7eb54a71..a61d8e0da 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -3165,21 +3165,6 @@ "stringProperties": [], "initialVariables": [] }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "RightCheckbox", - "persistentUuid": "be11b859-4dd3-494f-a5ce-b591419f0961", - "width": 0, - "x": 381, - "y": 224, - "zOrder": 3, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, { "angle": 0, "customSize": true, @@ -3195,51 +3180,6 @@ "stringProperties": [], "initialVariables": [] }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "IconButton2", - "persistentUuid": "42f23e6f-77a6-4544-b808-e27ec4dbe8ce", - "width": 0, - "x": 211, - "y": 409, - "zOrder": 4, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "IconButton", - "persistentUuid": "277ccb30-0223-4cf3-82df-e6640e8d387a", - "width": 0, - "x": 287, - "y": 409, - "zOrder": 5, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 15, - "layer": "", - "name": "NewSlider", - "persistentUuid": "b11108dc-c86c-4085-8167-b235471dd419", - "width": 113, - "x": 415, - "y": 426, - "zOrder": 6, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, { "angle": 0, "customSize": true, @@ -3255,21 +3195,6 @@ "stringProperties": [], "initialVariables": [] }, - { - "angle": 0, - "customSize": true, - "height": 24, - "layer": "", - "name": "NewSlider", - "persistentUuid": "c7b92c23-0955-4f75-a05c-9c255758b26e", - "width": 265, - "x": 404, - "y": 484, - "zOrder": 6, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, { "angle": 0, "customSize": true, @@ -3284,6 +3209,21 @@ "numberProperties": [], "stringProperties": [], "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "SmallPlasticGreenRoundSlider", + "persistentUuid": "763f381b-3803-44a3-8047-95f57a7babda", + "width": 0, + "x": 436, + "y": 486, + "zOrder": 9, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] } ], "objects": [ @@ -3886,6 +3826,67 @@ ] } } + }, + { + "assetStoreId": "", + "name": "SmallPlasticGreenRoundSlider", + "tags": "", + "type": "PanelSpriteSlider::PanelSpriteSlider", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "LabelMargin": 8, + "BarLeftPadding": 31, + "BarRightPadding": 31 + }, + "childrenContent": { + "Background": { + "bottomMargin": 31, + "height": 63, + "leftMargin": 31, + "rightMargin": 31, + "texture": "assets\\Sliders\\JellyCat\\Small Plastic Green Round Slider Border.png", + "tiled": false, + "topMargin": 31, + "width": 583 + }, + "FillBar": { + "bottomMargin": 0, + "height": 16, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Sliders\\JellyCat\\Transparent.png", + "tiled": false, + "topMargin": 0, + "width": 16 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "It displays the value when it changes.", + "font": "", + "textAlignment": "", + "characterSize": 20, + "color": { + "b": 221, + "g": 221, + "r": 221 + } + }, + "Thumb": { + "bottomMargin": 0, + "height": 59, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Sliders\\JellyCat\\Small Plastic Green Round Slider Thumb.png", + "tiled": false, + "topMargin": 0, + "width": 63 + } + } } ], "events": [ @@ -3973,6 +3974,26 @@ "", "" ] + }, + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::Activate" + }, + "parameters": [ + "SmallPlasticGreenRoundSlider", + "", + "" + ] + }, + { + "type": { + "value": "SpriteToggleSwitch::SpriteToggleSwitch::Activate" + }, + "parameters": [ + "Checkbox", + "", + "" + ] } ] }, @@ -3999,6 +4020,26 @@ "yes", "" ] + }, + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::Activate" + }, + "parameters": [ + "SmallPlasticGreenRoundSlider", + "yes", + "" + ] + }, + { + "type": { + "value": "SpriteToggleSwitch::SpriteToggleSwitch::Activate" + }, + "parameters": [ + "Checkbox", + "yes", + "" + ] } ] } @@ -16435,7 +16476,7 @@ "name": "PanelSpriteSlider", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/UI Essentials/1678c39a3b2bd3df4f82a8a293770db4986a6bcfd3f78e738ddfc86e39176423_UI Essentials_sliders_options.svg", "shortDescription": "A draggable slider that users can move to select a numerical value.", - "version": "1.2.1", + "version": "1.3.0", "description": "A draggable slider that users can move to select a numerical value. The slider can be customized with sprites.", "origin": { "identifier": "PanelSpriteSlider", @@ -17568,6 +17609,56 @@ ], "objectGroups": [] }, + { + "fullName": "", + "functionType": "Action", + "name": "onDeActivate", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, { "description": "Check if the button is not used.", "fullName": "Is idle", @@ -18343,89 +18434,184 @@ "conditions": [ { "type": { - "inverted": true, - "value": "DraggableBehavior::Dragged" - }, - "parameters": [ - "Thumb", - "Draggable" - ] - }, - { - "type": { - "inverted": true, - "value": "DraggableBehavior::Dropped" + "value": "BehaviorActivated" }, "parameters": [ - "Thumb", - "Draggable" + "Background", + "ButtonFSM" ] - }, + } + ], + "actions": [], + "events": [ { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "PanelSpriteSlider::ButtonFSM::IsPressed" + "inverted": true, + "value": "DraggableBehavior::Dragged" }, "parameters": [ - "Background", - "ButtonFSM", - "" + "Thumb", + "Draggable" ] }, { "type": { - "value": "PanelSpriteSlider::ButtonFSM::IsPressedOutside" + "inverted": true, + "value": "DraggableBehavior::Dropped" }, "parameters": [ - "Background", - "ButtonFSM", - "" + "Thumb", + "Draggable" ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteSlider::PanelSpriteSlider::SetValue" - }, - "parameters": [ - "Object", - "=", - "FillBar.Slider::MinValue() + FillBar.Slider::Size() * (TouchX(Background.ButtonFSM::TouchId(), Object.Layer()) - Object.FullBarLeft()) / Object.FullBarWidth()", - "FillBar.Slider::MinValue() + FillBar.Slider::Size() * (MouseX() - Object.FullBarLeft()) / Object.FullBarWidth()" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + }, { "type": { - "value": "PanelSpriteSlider::PanelSpriteSlider::PropertyShowLabelAtChanges" + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::IsPressed" + }, + "parameters": [ + "Background", + "ButtonFSM", + "" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::IsPressedOutside" + }, + "parameters": [ + "Background", + "ButtonFSM", + "" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::SetValue" }, "parameters": [ - "Object" + "Object", + "=", + "FillBar.Slider::MinValue() + FillBar.Slider::Size() * (TouchX(Background.ButtonFSM::TouchId(), Object.Layer()) - Object.FullBarLeft()) / Object.FullBarWidth()", + "FillBar.Slider::MinValue() + FillBar.Slider::Size() * (MouseX() - Object.FullBarLeft()) / Object.FullBarWidth()" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::PropertyShowLabelAtChanges" + }, + "parameters": [ + "Object" + ] + } + ], + "actions": [ + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Label", + "" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Label", + "\"HideBack\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableBehavior::Dragged" + }, + "parameters": [ + "Thumb", + "Draggable" ] } ], "actions": [ { "type": { - "value": "Montre" + "value": "PanelSpriteSlider::PanelSpriteSlider::SetValue" }, "parameters": [ - "Label", - "" + "Object", + "=", + "FillBar.Slider::MinValue() + FillBar.Slider::Size() * (Thumb.CenterX() - Object.FullBarLeft()) / Object.FullBarWidth()", + "FillBar.Slider::MinValue() + FillBar.Slider::Size() * (Thumb.CenterX() - Object.FullBarLeft()) / Object.FullBarWidth()" ] - }, + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::PropertyShowLabelAtChanges" + }, + "parameters": [ + "Object" + ] + } + ], + "actions": [ + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Label", + "" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableBehavior::Dropped" + }, + "parameters": [ + "Thumb", + "Draggable" + ] + } + ], + "actions": [ { "type": { "value": "ResetObjectTimer" @@ -18436,45 +18622,18 @@ ] } ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableBehavior::Dragged" - }, - "parameters": [ - "Thumb", - "Draggable" - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteSlider::PanelSpriteSlider::SetValue" - }, - "parameters": [ - "Object", - "=", - "FillBar.Slider::MinValue() + FillBar.Slider::Size() * (Thumb.CenterX() - Object.FullBarLeft()) / Object.FullBarWidth()", - "FillBar.Slider::MinValue() + FillBar.Slider::Size() * (Thumb.CenterX() - Object.FullBarLeft()) / Object.FullBarWidth()" - ] - } - ], - "events": [ + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "PanelSpriteSlider::PanelSpriteSlider::PropertyShowLabelAtChanges" + "value": "CollisionPoint" }, "parameters": [ - "Object" + "Thumb", + "MouseOnlyCursorX(Object.Layer(), 0)", + "MouseOnlyCursorY(Thumb.Layer(), 0)" ] } ], @@ -18487,102 +18646,51 @@ "Label", "" ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Label", + "\"HideBack\"" + ] } ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableBehavior::Dropped" - }, - "parameters": [ - "Thumb", - "Draggable" - ] - } - ], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Label", - "\"HideBack\"" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "CollisionPoint" - }, - "parameters": [ - "Thumb", - "MouseOnlyCursorX(Object.Layer(), 0)", - "MouseOnlyCursorY(Thumb.Layer(), 0)" - ] - } - ], - "actions": [ - { - "type": { - "value": "Montre" - }, - "parameters": [ - "Label", - "" - ] - }, - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Label", - "\"HideBack\"" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "CompareObjectTimer" - }, - "parameters": [ - "Label", - "\"HideBack\"", - ">", - "0.5" - ] - } - ], - "actions": [ - { - "type": { - "value": "Cache" - }, - "parameters": [ - "Label" - ] }, { - "type": { - "value": "RemoveObjectTimer" - }, - "parameters": [ - "Label", - "\"HideBack\"" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Label", + "\"HideBack\"", + ">", + "0.5" + ] + } + ], + "actions": [ + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Label" + ] + }, + { + "type": { + "value": "RemoveObjectTimer" + }, + "parameters": [ + "Label", + "\"HideBack\"" + ] + } ] } ] @@ -19529,85 +19637,229 @@ "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "SetReturnNumber" + }, + "parameters": [ + "Background.Width() - Object.PropertyBarLeftPadding() - Object.PropertyBarRightPadding()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Update the slider configuration.", + "fullName": "Update slider configuration", + "functionType": "Action", + "name": "UpdateSliderConfiguration", + "private": true, + "sentence": "Update the slider configuration of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Pass configuration to the behavior and update children.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::SetMinValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyMinValue()", + "Object.PropertyMaxValue()", + "" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::SetMaxValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyMaxValue()", + "Object.PropertyMaxValue()" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::SetStepSize" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyStepSize()", + "Object.PropertyMaxValue()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "De/activate interactions with the button.", + "fullName": "De/activate interactions", + "functionType": "Action", + "name": "Activate", + "sentence": "De/activate interactions with _PARAM0_: _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"ShouldActivate\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "Thumb", + "Draggable", + "yes" + ] + }, + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "Background", + "ButtonFSM", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"ShouldActivate\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ActivateBehavior" }, "parameters": [ - "Background.Width() - Object.PropertyBarLeftPadding() - Object.PropertyBarRightPadding()" + "Thumb", + "Draggable", + "no" + ] + }, + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "Background", + "ButtonFSM", + "no" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Label" ] } ] } ], - "expressionType": { - "type": "expression" - }, "parameters": [ { "description": "Object", "name": "Object", "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", "type": "object" + }, + { + "description": "Activate", + "name": "ShouldActivate", + "type": "yesorno" } ], "objectGroups": [] }, { - "description": "Update the slider configuration.", - "fullName": "Update slider configuration", - "functionType": "Action", - "name": "UpdateSliderConfiguration", - "private": true, - "sentence": "Update the slider configuration of _PARAM0_", + "description": "Check if interactions are activated on the button.", + "fullName": "Interactions activated", + "functionType": "Condition", + "name": "IsActivated", + "sentence": "Interactions on _PARAM0_ are activated", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Pass configuration to the behavior and update children.", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PanelSpriteSlider::PanelSpriteSlider::SetMinValue" - }, - "parameters": [ - "Object", - "=", - "Object.PropertyMinValue()", - "Object.PropertyMaxValue()", - "" - ] - }, + "conditions": [ { "type": { - "value": "PanelSpriteSlider::PanelSpriteSlider::SetMaxValue" + "value": "BehaviorActivated" }, "parameters": [ - "Object", - "=", - "Object.PropertyMaxValue()", - "Object.PropertyMaxValue()" + "Background", + "ButtonFSM" ] - }, + } + ], + "actions": [ { "type": { - "value": "PanelSpriteSlider::PanelSpriteSlider::SetStepSize" + "value": "SetReturnBoolean" }, "parameters": [ - "Object", - "=", - "Object.PropertyStepSize()", - "Object.PropertyMaxValue()" + "True" ] } ] @@ -22407,7 +22659,7 @@ "name": "SpriteToggleSwitch", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/Interface Elements/8d0cd8cd0c9318f4f6efde6ee6b4c192bd19306467f80c9970387a259300f895_Interface Elements_interface_ui_toggle_switch_on_off.svg", "shortDescription": "Toggle switch that users can click or touch.", - "version": "1.1.1", + "version": "1.2.0", "description": "Toggle switch that users can click or touch. The switch can be customized with sprites.", "tags": [ "ui", @@ -23385,6 +23637,56 @@ ], "objectGroups": [] }, + { + "fullName": "", + "functionType": "Action", + "name": "onDeActivate", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + }, + { + "type": { + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteToggleSwitch::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, { "description": "Check if the button is not used.", "fullName": "Is idle", @@ -24579,6 +24881,122 @@ } ], "objectGroups": [] + }, + { + "description": "De/activate interactions with the button.", + "fullName": "De/activate interactions", + "functionType": "Action", + "name": "Activate", + "sentence": "De/activate interactions with _PARAM0_: _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"ShouldActivate\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "State", + "ButtonFSM", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"ShouldActivate\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "State", + "ButtonFSM", + "no" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteToggleSwitch::SpriteToggleSwitch", + "type": "object" + }, + { + "description": "Activate", + "name": "ShouldActivate", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Check if interactions are activated on the button.", + "fullName": "Interactions activated", + "functionType": "Condition", + "name": "IsActivated", + "sentence": "Interactions on _PARAM0_ are activated", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BehaviorActivated" + }, + "parameters": [ + "State", + "ButtonFSM" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteToggleSwitch::SpriteToggleSwitch", + "type": "object" + } + ], + "objectGroups": [] } ], "propertyDescriptors": [ From b30f6b6d725aced9c4270ec7c36a682c5a9cf26e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Fri, 27 Jan 2023 13:32:18 +0100 Subject: [PATCH 93/98] Upgrade the joystick extension to fix useless behavior parameters. --- examples/resource-bar/game.json | 45 ++++++++++++++++++--------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index a61d8e0da..9c2a55861 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -7836,7 +7836,13 @@ } } ], - "events": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [] + } + ], "layers": [ { "ambientLightColorB": 15554296, @@ -7876,7 +7882,7 @@ "name": "SpriteMultitouchJoystick", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Videogames/Videogames_controller_joystick_arrows_direction.svg", "shortDescription": "Joysticks or buttons for touchscreens.", - "version": "1.0.0", + "version": "1.1.1", "description": [ "Multitouch joysticks can be used the same way as physical gamepads:", "- 4 or 8 directions", @@ -7885,7 +7891,7 @@ "- Controls mapping for top-down movement and platformer characters" ], "origin": { - "identifier": "MultitouchJoystick", + "identifier": "SpriteMultitouchJoystick", "name": "gdevelop-extension-store" }, "tags": [ @@ -10741,11 +10747,14 @@ }, { "value": "Primary", - "type": "String", + "type": "Choice", "label": "Joystick name", "description": "", "group": "Controls", - "extraInformation": [], + "extraInformation": [ + "Primary", + "Secondary" + ], "hidden": false, "name": "JoystickIdentifier" }, @@ -11300,11 +11309,14 @@ }, { "value": "Primary", - "type": "String", + "type": "Choice", "label": "Joystick name", "description": "", "group": "", - "extraInformation": [], + "extraInformation": [ + "Primary", + "Secondary" + ], "hidden": false, "name": "JoystickIdentifier" }, @@ -11708,12 +11720,6 @@ "name": "Object", "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", - "type": "behavior" } ], "objectGroups": [] @@ -11749,12 +11755,6 @@ "name": "Object", "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", - "type": "behavior" } ], "objectGroups": [] @@ -12089,11 +12089,14 @@ }, { "value": "Primary", - "type": "String", + "type": "Choice", "label": "Joystick name", "description": "", "group": "", - "extraInformation": [], + "extraInformation": [ + "Primary", + "Secondary" + ], "hidden": false, "name": "JoystickIdentifier" }, From 327d595f56c5181797f2ae6321f63e0cb4c999c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Sun, 29 Jan 2023 20:18:10 +0100 Subject: [PATCH 94/98] Fix a typo in the "activate" actions --- examples/resource-bar/game.json | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 9c2a55861..770b59bc7 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -44,7 +44,12 @@ "showGDevelopSplash": true, "showProgressBar": true }, + "watermark": { + "placement": "bottom-left", + "showWatermark": true + }, "authorIds": [], + "authorUsernames": [], "categories": [], "playableDevices": [], "extensionProperties": [], @@ -12229,7 +12234,7 @@ "name": "PanelSpriteButton", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Interface Elements/Interface Elements_interface_ui_button_ok_cta_clock_tap.svg", "shortDescription": "A button that can be customized.", - "version": "1.4.1", + "version": "1.4.2", "description": [ "The button can be customized with a background for each state and a label. It handles user interactions and a simple condition can be used to check if it is clicked.", "", @@ -14574,7 +14579,7 @@ "fullName": "De/activate interactions", "functionType": "Action", "name": "Activate", - "sentence": "De/activate interactions with _PARAM0_: _PARAM1_", + "sentence": "Activate interactions with _PARAM0_: _PARAM1_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -16479,7 +16484,7 @@ "name": "PanelSpriteSlider", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/UI Essentials/1678c39a3b2bd3df4f82a8a293770db4986a6bcfd3f78e738ddfc86e39176423_UI Essentials_sliders_options.svg", "shortDescription": "A draggable slider that users can move to select a numerical value.", - "version": "1.3.0", + "version": "1.3.1", "description": "A draggable slider that users can move to select a numerical value. The slider can be customized with sprites.", "origin": { "identifier": "PanelSpriteSlider", @@ -19739,7 +19744,7 @@ "fullName": "De/activate interactions", "functionType": "Action", "name": "Activate", - "sentence": "De/activate interactions with _PARAM0_: _PARAM1_", + "sentence": "Activate interactions with _PARAM0_: _PARAM1_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -22662,7 +22667,7 @@ "name": "SpriteToggleSwitch", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/Interface Elements/8d0cd8cd0c9318f4f6efde6ee6b4c192bd19306467f80c9970387a259300f895_Interface Elements_interface_ui_toggle_switch_on_off.svg", "shortDescription": "Toggle switch that users can click or touch.", - "version": "1.2.0", + "version": "1.2.1", "description": "Toggle switch that users can click or touch. The switch can be customized with sprites.", "tags": [ "ui", @@ -24890,7 +24895,7 @@ "fullName": "De/activate interactions", "functionType": "Action", "name": "Activate", - "sentence": "De/activate interactions with _PARAM0_: _PARAM1_", + "sentence": "Activate interactions with _PARAM0_: _PARAM1_", "events": [ { "type": "BuiltinCommonInstructions::Standard", From cb0bcdc53b34fe404e01a556bc7b53917a3601f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Mon, 30 Jan 2023 20:15:13 +0100 Subject: [PATCH 95/98] Add asset store links --- examples/resource-bar/game.json | 38 ++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 770b59bc7..4e1376386 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -7882,7 +7882,7 @@ "category": "Input", "extensionNamespace": "", "fullName": "Multitouch joystick and buttons (sprite)", - "helpPath": "https://wiki.gdevelop.io/gdevelop5/extensions/multitouch-joystick/start", + "helpPath": "/objects/multitouch-joystick", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMTYiIGN5PSIxNiIgcj0iMTMiLz4NCjxwb2x5bGluZSBjbGFzcz0ic3QwIiBwb2ludHM9IjI4LjQsMTIgMjAsMTIgMjAsMy42ICIvPg0KPHBvbHlsaW5lIGNsYXNzPSJzdDAiIHBvaW50cz0iMjAsMjguNCAyMCwyMCAyOC40LDIwICIvPg0KPHBvbHlsaW5lIGNsYXNzPSJzdDAiIHBvaW50cz0iMy42LDIwIDEyLDIwIDEyLDI4LjQgIi8+DQo8cG9seWxpbmUgY2xhc3M9InN0MCIgcG9pbnRzPSIxMiwzLjYgMTIsMTIgMy42LDEyICIvPg0KPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIxNiw2IDE2LjcsNyAxNS4zLDcgIi8+DQo8cG9seWdvbiBjbGFzcz0ic3QwIiBwb2ludHM9IjE2LDI2IDE1LjMsMjUgMTYuNywyNSAiLz4NCjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iNiwxNiA3LDE1LjMgNywxNi43ICIvPg0KPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIyNiwxNiAyNSwxNi43IDI1LDE1LjMgIi8+DQo8L3N2Zz4NCg==", "name": "SpriteMultitouchJoystick", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Videogames/Videogames_controller_joystick_arrows_direction.svg", @@ -7893,7 +7893,9 @@ "- 4 or 8 directions", "- Analogus pads", "- Player selection", - "- Controls mapping for top-down movement and platformer characters" + "- Controls mapping for top-down movement and platformer characters", + "", + "There are ready-to-use joysticks in the asset-store [multitouch joysticks pack](https://editor.gdevelop.io/?initial-dialog=asset-store&asset-pack=multitouch-joysticks-multitouch-joysticks)." ], "origin": { "identifier": "SpriteMultitouchJoystick", @@ -14868,9 +14870,13 @@ "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/063e9152cf65bc0f3be2a828afd950c3ecf1b1fc72feefdc2467252fe987dc0f_dots-horizontal.svg", "shortDescription": "A bar that represents a resource in the game (health, mana, ammo, etc).", "version": "1.1.2", - "description": "A bar that represents a resource in the game (health, mana, ammo, etc).", + "description": [ + "A bar that represents a resource in the game (health, mana, ammo, etc).", + "", + "There are ready-to-use resource bars in the asset-store [resource bars pack](https://editor.gdevelop.io/?initial-dialog=asset-store&asset-pack=resource-bars-resource-bars)." + ], "origin": { - "identifier": "ResourceBar", + "identifier": "TiledUnitsBar", "name": "gdevelop-extension-store" }, "tags": [ @@ -16485,7 +16491,11 @@ "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/UI Essentials/1678c39a3b2bd3df4f82a8a293770db4986a6bcfd3f78e738ddfc86e39176423_UI Essentials_sliders_options.svg", "shortDescription": "A draggable slider that users can move to select a numerical value.", "version": "1.3.1", - "description": "A draggable slider that users can move to select a numerical value. The slider can be customized with sprites.", + "description": [ + "A draggable slider that users can move to select a numerical value. The slider can be customized with sprites.", + "", + "There are ready-to-use sliders in the asset-store [settings UI pack](https://editor.gdevelop.io/?initial-dialog=asset-store&asset-pack=settings-ui-settings-ui)." + ], "origin": { "identifier": "PanelSpriteSlider", "name": "gdevelop-extension-store" @@ -20159,9 +20169,13 @@ "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Glyphster Pack/Master/SVG/Interface Elements/ea06363a57846caab544f536b78a952234b68d4941d41c1577852a1d61aefec3_Interface Elements_interface_ui_loading_progress_bar.svg", "shortDescription": "A bar that represents a resource in the game (health, mana, ammo, etc).", "version": "1.1.1", - "description": "A bar that represents a resource in the game (health, mana, ammo, etc).", + "description": [ + "A bar that represents a resource in the game (health, mana, ammo, etc).", + "", + "There are ready-to-use resource bars in the asset-store [resource bars pack](https://editor.gdevelop.io/?initial-dialog=asset-store&asset-pack=resource-bars-resource-bars)." + ], "origin": { - "identifier": "ResourceBar", + "identifier": "PanelSpriteContinuousBar", "name": "gdevelop-extension-store" }, "tags": [ @@ -22668,7 +22682,15 @@ "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/Interface Elements/8d0cd8cd0c9318f4f6efde6ee6b4c192bd19306467f80c9970387a259300f895_Interface Elements_interface_ui_toggle_switch_on_off.svg", "shortDescription": "Toggle switch that users can click or touch.", "version": "1.2.1", - "description": "Toggle switch that users can click or touch. The switch can be customized with sprites.", + "description": [ + "Toggle switch that users can click or touch. The switch can be customized with sprites.", + "", + "There are ready-to-use toggle switches in the asset-store [settings UI pack](https://editor.gdevelop.io/?initial-dialog=asset-store&asset-pack=settings-ui-settings-ui)." + ], + "origin": { + "identifier": "SpriteToggleSwitch", + "name": "gdevelop-extension-store" + }, "tags": [ "ui", "widget", From d48a24d9cd9bd8d8cce448423629591334170599 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Wed, 1 Feb 2023 13:49:10 +0100 Subject: [PATCH 96/98] Add missing joystick name choices --- examples/resource-bar/game.json | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 4e1376386..68a51e42f 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -7887,7 +7887,7 @@ "name": "SpriteMultitouchJoystick", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Videogames/Videogames_controller_joystick_arrows_direction.svg", "shortDescription": "Joysticks or buttons for touchscreens.", - "version": "1.1.1", + "version": "1.1.2", "description": [ "Multitouch joysticks can be used the same way as physical gamepads:", "- 4 or 8 directions", @@ -8776,7 +8776,8 @@ { "description": "Joystick name", "name": "JoystickIdentifier", - "type": "string" + "supplementaryInformation": "[\"Primary\",\"Secondary\"]", + "type": "stringWithSelector" }, { "description": "Direction", @@ -8856,8 +8857,8 @@ { "description": "Joystick name", "name": "JoystickIdentifier", - "supplementaryInformation": "MultitouchJoystick::MultitouchJoystick", - "type": "string" + "supplementaryInformation": "[\"Primary\",\"Secondary\"]", + "type": "stringWithSelector" }, { "description": "Direction", @@ -8902,7 +8903,8 @@ { "description": "Joystick name", "name": "JoystickIdentifier", - "type": "string" + "supplementaryInformation": "[\"Primary\",\"Secondary\"]", + "type": "stringWithSelector" } ], "objectGroups": [] @@ -8985,7 +8987,8 @@ { "description": "Joystick name", "name": "JoystickIdentifier", - "type": "string" + "supplementaryInformation": "[\"Primary\",\"Secondary\"]", + "type": "stringWithSelector" } ], "objectGroups": [] From 590e08d565792f7757988e961200fbea22f7e717 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Fri, 3 Feb 2023 16:53:36 +0100 Subject: [PATCH 97/98] Fix some sentences in toggle switch. --- examples/resource-bar/game.json | 243 +++++++++++++++++++++++++++++--- 1 file changed, 224 insertions(+), 19 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 68a51e42f..2ebb79c39 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -1368,7 +1368,7 @@ "customSize": false, "height": 0, "layer": "", - "name": "SquareGreenSlider", + "name": "SoundSlider", "persistentUuid": "e65ba35b-cf24-4571-9bfa-d4c893cc2888", "width": 0, "x": 122, @@ -1520,7 +1520,7 @@ }, { "assetStoreId": "", - "name": "SquareGreenSlider", + "name": "SoundSlider", "tags": "", "type": "PanelSpriteSlider::PanelSpriteSlider", "variables": [], @@ -1974,6 +1974,11 @@ ] } ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [] } ], "layers": [ @@ -2078,7 +2083,7 @@ "customSize": false, "height": 0, "layer": "", - "name": "SquareBlueToggle", + "name": "MuteToggleSwitch", "persistentUuid": "4a5626b4-c209-4204-a763-de3470c80994", "width": 0, "x": 560, @@ -2123,7 +2128,7 @@ "customSize": true, "height": 52, "layer": "", - "name": "SquareBlueToggle", + "name": "MuteToggleSwitch", "persistentUuid": "f10e7e60-3651-43fa-a4e3-c57101a0c028", "width": 50, "x": 548, @@ -2722,7 +2727,7 @@ }, { "assetStoreId": "", - "name": "SquareBlueToggle", + "name": "MuteToggleSwitch", "tags": "", "type": "SpriteToggleSwitch::SpriteToggleSwitch", "variables": [], @@ -7873,6 +7878,205 @@ } ], "behaviorsSharedData": [] + }, + { + "b": 209, + "disableInputWhenNotFocused": true, + "mangledName": "For_32doc_32screenshot", + "name": "For doc screenshot", + "r": 209, + "standardSortMethod": true, + "stopSoundsOnStartup": true, + "title": "", + "v": 209, + "uiSettings": { + "grid": false, + "gridType": "rectangular", + "gridWidth": 32, + "gridHeight": 32, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.8, + "snap": false, + "zoomFactor": 0.546875, + "windowMask": false + }, + "objectsGroups": [], + "variables": [], + "instances": [], + "objects": [ + { + "assetStoreId": "", + "name": "MuteToggleSwitch", + "tags": "", + "type": "SpriteToggleSwitch::SpriteToggleSwitch", + "variables": [], + "effects": [], + "behaviors": [], + "content": {}, + "childrenContent": { + "State": { + "updateIfNotVisible": false, + "animations": [ + { + "name": "Unchecked", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\ToggleIcons\\Wesley\\Square Blue Toggle_Off.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + }, + { + "name": "Checked", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\ToggleIcons\\Wesley\\Square Blue Toggle_On.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + } + } + }, + { + "assetStoreId": "", + "name": "SoundSlider", + "tags": "", + "type": "PanelSpriteSlider::PanelSpriteSlider", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "BarTopPadding": 3, + "BarLeftPadding": 3, + "BarRightPadding": 3, + "BarBottomPadding": 4, + "LabelMargin": 4 + }, + "childrenContent": { + "Background": { + "bottomMargin": 4, + "height": 18, + "leftMargin": 2, + "rightMargin": 2, + "texture": "assets\\Sliders\\Wesley\\Square Blue Slider Border.png", + "tiled": false, + "topMargin": 4, + "width": 215 + }, + "FillBar": { + "bottomMargin": 1, + "height": 11, + "leftMargin": 1, + "rightMargin": 1, + "texture": "assets\\Sliders\\Wesley\\Square Blue Slider Fill Bar.png", + "tiled": false, + "topMargin": 1, + "width": 11 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "It displays the value when it changes.", + "font": "", + "textAlignment": "", + "characterSize": 16, + "color": { + "b": 221, + "g": 221, + "r": 221 + } + }, + "Thumb": { + "bottomMargin": 3, + "height": 21, + "leftMargin": 3, + "rightMargin": 3, + "texture": "assets\\Sliders\\Wesley\\Square Blue Slider Thumb.png", + "tiled": false, + "topMargin": 3, + "width": 21 + } + } + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [] + } + ], + "layers": [ + { + "ambientLightColorB": 16777215, + "ambientLightColorG": 0, + "ambientLightColorR": 0, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "behaviorsSharedData": [] } ], "externalEvents": [], @@ -12234,7 +12438,7 @@ "category": "User interface", "extensionNamespace": "", "fullName": "Panel sprite button", - "helpPath": "", + "helpPath": "/objects/button", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTI5LDIzSDNjLTEuMSwwLTItMC45LTItMlYxMWMwLTEuMSwwLjktMiwyLTJoMjZjMS4xLDAsMiwwLjksMiwydjEwQzMxLDIyLjEsMzAuMSwyMywyOSwyM3oiLz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMywxOUwxMywxOWMtMS4xLDAtMi0wLjktMi0ydi0yYzAtMS4xLDAuOS0yLDItMmgwYzEuMSwwLDIsMC45LDIsMnYyQzE1LDE4LjEsMTQuMSwxOSwxMywxOXoiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIxOCIgeTE9IjEzIiB4Mj0iMTgiIHkyPSIxOSIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjIxIiB5MT0iMTMiIHgyPSIxOCIgeTI9IjE3Ii8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMjEiIHkxPSIxOSIgeDI9IjE5IiB5Mj0iMTYiLz4NCjwvc3ZnPg0K", "name": "PanelSpriteButton", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Interface Elements/Interface Elements_interface_ui_button_ok_cta_clock_tap.svg", @@ -14867,7 +15071,7 @@ "category": "User interface", "extensionNamespace": "", "fullName": "Resource bar (separated units)", - "helpPath": "", + "helpPath": "/objects/resource-bar", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWRvdHMtaG9yaXpvbnRhbCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNiwxMkEyLDIgMCAwLDEgMTgsMTBBMiwyIDAgMCwxIDIwLDEyQTIsMiAwIDAsMSAxOCwxNEEyLDIgMCAwLDEgMTYsMTJNMTAsMTJBMiwyIDAgMCwxIDEyLDEwQTIsMiAwIDAsMSAxNCwxMkEyLDIgMCAwLDEgMTIsMTRBMiwyIDAgMCwxIDEwLDEyTTQsMTJBMiwyIDAgMCwxIDYsMTBBMiwyIDAgMCwxIDgsMTJBMiwyIDAgMCwxIDYsMTRBMiwyIDAgMCwxIDQsMTJaIiAvPjwvc3ZnPg==", "name": "TiledUnitsBar", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/063e9152cf65bc0f3be2a828afd950c3ecf1b1fc72feefdc2467252fe987dc0f_dots-horizontal.svg", @@ -16488,7 +16692,7 @@ "category": "User interface", "extensionNamespace": "", "fullName": "Slider", - "helpPath": "", + "helpPath": "/objects/slider", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", "name": "PanelSpriteSlider", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/UI Essentials/1678c39a3b2bd3df4f82a8a293770db4986a6bcfd3f78e738ddfc86e39176423_UI Essentials_sliders_options.svg", @@ -20166,7 +20370,7 @@ "category": "User interface", "extensionNamespace": "", "fullName": "Resource bar (continuous)", - "helpPath": "", + "helpPath": "/objects/resource-bar", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8cGF0aCBkPSJNMjgsMTJIMTRINGMtMi4yLDAtNCwxLjgtNCw0czEuOCw0LDQsNGgxMGgxNGMyLjIsMCw0LTEuOCw0LTRTMzAuMiwxMiwyOCwxMnogTTQsMThjLTEuMSwwLTItMC45LTItMnMwLjktMiwyLTJoMTANCgljMS4xLDAsMiwwLjksMiwycy0wLjksMi0yLDJINHoiLz4NCjwvc3ZnPg0K", "name": "PanelSpriteContinuousBar", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Glyphster Pack/Master/SVG/Interface Elements/ea06363a57846caab544f536b78a952234b68d4941d41c1577852a1d61aefec3_Interface Elements_interface_ui_loading_progress_bar.svg", @@ -22679,12 +22883,12 @@ "category": "User interface", "extensionNamespace": "", "fullName": "Toggle switch", - "helpPath": "", + "helpPath": "/objects/toggle-switch", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTIzLDIzSDljLTMuOSwwLTctMy4xLTctN3YwYzAtMy45LDMuMS03LDctN2gxNGMzLjksMCw3LDMuMSw3LDd2MEMzMCwxOS45LDI2LjksMjMsMjMsMjN6Ii8+DQo8Y2lyY2xlIGNsYXNzPSJzdDAiIGN4PSI5IiBjeT0iMTYiIHI9IjQiLz4NCjwvc3ZnPg0K", "name": "SpriteToggleSwitch", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/Interface Elements/8d0cd8cd0c9318f4f6efde6ee6b4c192bd19306467f80c9970387a259300f895_Interface Elements_interface_ui_toggle_switch_on_off.svg", "shortDescription": "Toggle switch that users can click or touch.", - "version": "1.2.1", + "version": "1.2.2", "description": [ "Toggle switch that users can click or touch. The switch can be customized with sprites.", "", @@ -22846,7 +23050,7 @@ "objectGroups": [] }, { - "description": "Check if is checked.", + "description": "Check if the toggle switch is checked.", "fullName": "Is checked", "functionType": "Condition", "group": "Switch finite state machine configuration", @@ -22894,12 +23098,12 @@ "objectGroups": [] }, { - "description": "Change if is checked.", - "fullName": "Is checked", + "description": "Check (or uncheck) the toggle switch.", + "fullName": "Check (or uncheck)", "functionType": "Action", "group": "Switch finite state machine configuration", "name": "SetChecked", - "sentence": "_PARAM0_ is checked: _PARAM2_", + "sentence": "Check _PARAM0_: _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -24471,7 +24675,7 @@ "objectGroups": [] }, { - "description": "Check if is checked.", + "description": "Check if the toggle switch is checked.", "fullName": "Is checked", "functionType": "Condition", "name": "IsChecked", @@ -24514,11 +24718,11 @@ "objectGroups": [] }, { - "description": "Change if is checked.", - "fullName": "Is checked", + "description": "Check (or uncheck) the toggle switch.", + "fullName": "Check (or uncheck)", "functionType": "Action", "name": "SetChecked", - "sentence": "_PARAM0_ is checked: _PARAM1_", + "sentence": "Check _PARAM0_: _PARAM1_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -24815,6 +25019,7 @@ "fullName": "Update state animation", "functionType": "Action", "name": "UpdateStateAnimation", + "private": true, "sentence": "Update the state animation of _PARAM0_", "events": [ { From 8e9fc68e1987d1d33cf74c0b53a4214bc1097e60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Wed, 8 Feb 2023 19:08:00 +0100 Subject: [PATCH 98/98] Add some rotated custom objects. --- examples/resource-bar/game.json | 145 +++++++++++++++++++++++++++++--- 1 file changed, 132 insertions(+), 13 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 2ebb79c39..c06534356 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -1356,8 +1356,8 @@ "name": "SquareBlueSlider", "persistentUuid": "ac4f7a51-24f8-41c4-98e2-b0c5ca92fdf4", "width": 0, - "x": 122, - "y": 94, + "x": 41, + "y": 104, "zOrder": 9, "numberProperties": [], "stringProperties": [], @@ -1371,8 +1371,8 @@ "name": "SoundSlider", "persistentUuid": "e65ba35b-cf24-4571-9bfa-d4c893cc2888", "width": 0, - "x": 122, - "y": 154, + "x": 41, + "y": 164, "zOrder": 10, "numberProperties": [], "stringProperties": [], @@ -1386,8 +1386,8 @@ "name": "SquareWhiteSlider", "persistentUuid": "4e894e92-9667-49ee-b049-f01f263519e1", "width": 0, - "x": 104, - "y": 238, + "x": 23, + "y": 248, "zOrder": 11, "numberProperties": [], "stringProperties": [], @@ -1431,8 +1431,8 @@ "name": "SmallPlasticGreenRoundSlider", "persistentUuid": "8003e188-f1a0-4a43-8fe8-516a19aa4e19", "width": 0, - "x": 517, - "y": 63, + "x": 622, + "y": 71, "zOrder": 14, "numberProperties": [], "stringProperties": [], @@ -1446,12 +1446,57 @@ "name": "SmallPlasticGreenSquareSlider", "persistentUuid": "5fa601da-89be-4fef-ab58-441b35ec140b", "width": 0, - "x": 523, - "y": 204, + "x": 628, + "y": 212, "zOrder": 15, "numberProperties": [], "stringProperties": [], "initialVariables": [] + }, + { + "angle": -90, + "customSize": false, + "height": 0, + "layer": "", + "name": "SquareBlueSlider", + "persistentUuid": "d305041f-bc9b-4652-8da9-672fb6e1511d", + "width": 0, + "x": 370, + "y": 150, + "zOrder": 9, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": -90, + "customSize": false, + "height": 0, + "layer": "", + "name": "SoundSlider", + "persistentUuid": "4f072fc0-a39b-4966-83d2-30bf37afd29b", + "width": 0, + "x": 451, + "y": 155, + "zOrder": 10, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": -90, + "customSize": false, + "height": 0, + "layer": "", + "name": "SquareWhiteSlider", + "persistentUuid": "8eb1f08f-42b6-4738-be9e-3a965bd25e21", + "width": 0, + "x": 255, + "y": 142, + "zOrder": 11, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] } ], "objects": [ @@ -1948,7 +1993,6 @@ ], "events": [ { - "disabled": true, "type": "BuiltinCommonInstructions::Standard", "conditions": [ { @@ -6913,7 +6957,7 @@ "initialVariables": [] }, { - "angle": 0, + "angle": -90, "customSize": false, "height": 0, "layer": "", @@ -6921,7 +6965,7 @@ "persistentUuid": "aa2df1e0-adc2-4cfe-9a3b-39db1eda6ccd", "width": 0, "x": 640, - "y": 240, + "y": 160, "zOrder": 6, "numberProperties": [], "stringProperties": [], @@ -7847,6 +7891,33 @@ } ], "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DepartScene" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "DebuggerTools::EnableDebugDraw" + }, + "parameters": [ + "", + "", + "", + "no", + "no" + ] + } + ] + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], @@ -11647,6 +11718,22 @@ ] } ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::SpriteMultitouchJoystick::SetRotationCenter" + }, + "parameters": [ + "Object", + "0", + "0" + ] + } + ] } ], "parameters": [ @@ -18548,6 +18635,22 @@ ] } ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::SetRotationCenter" + }, + "parameters": [ + "Object", + "Background.CenterX()", + "Background.CenterY()" + ] + } + ] } ], "parameters": [ @@ -19670,6 +19773,22 @@ ] } ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::SetRotationCenter" + }, + "parameters": [ + "Object", + "Background.CenterX()", + "Background.CenterY()" + ] + } + ] } ], "parameters": [

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 Y2h`x94p4&OW&i*H07*qoM6N<$f(xWi&j0`b diff --git a/examples/resource-bar/assets/Playing Card_Spades 10.png b/examples/resource-bar/assets/Playing Card_Spades 10.png deleted file mode 100644 index d2086479e41ce5cc517a88e573803bb94138a223..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4423 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 N002ovPDHLkV1k(!z*+zR diff --git a/examples/resource-bar/assets/Playing Card_Spades A.png b/examples/resource-bar/assets/Playing Card_Spades A.png deleted file mode 100644 index 89cc0a8e4e8da84c7dc8591ec4a446c17c20a14c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2544 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 diff --git a/examples/resource-bar/assets/Silver shield.png b/examples/resource-bar/assets/Silver shield.png deleted file mode 100644 index 8db2cb9275e7b20526a911aa7cba20476bba25f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 745 zcmV$g)&59sc1Y2ln zH+9ocsRV*0HV|4PA;A(&8}rqCH9;*FjiwZ~dnTF9-6XrL*Bb}s$L`MFGkeb5nY$ul zzPe|avDA~DxV>mMOsf{zju`@GZ0}zF4^Y`3ZPJ^J!!?4dBC zRvs6-$GL?AKYyJdV8|=LIWCY59-emlwoV%iuW4N{%IrQ`U0o7D#|5%M!23!=D{$xX z2dxW6M>Jb`DlVXNCQQlo&5btTV*7&D+c*{^;LTz$dhjJ~eU zru6_1ksaw=soT9?PuWY2CanVo=jzLb#*Khy@qKzBUHbA*z=djq*0C~Ke|=rL$CD~i zDAG&KPFETD_^e86tS3|c`bs*}Tt=3733RCfv%X-^S6>&{8CUYaP}RBGYI_EQufCH; zva>7?3{{fc)2-KHt`e2}okE*_aZcCx!JN)pS^=WP~Um` znZFv8L$@G6B*$AQus{15vg2)qisTjwKdGJ11+BL`cILF=#_{YWnw`V*9zfXR+3^tI3g(`SItis~u;$Kze@s0V=2Hqg zlHu;;9$j@A`nXIzHyG&ep*GC6`CFr+8y}Il@Frhr2BR01_mY# zPZ!6Kid%1QUCce?Ai^4G<-s|{NmH{?D9Ficfr!_Q`i?0=8V3(@gm1{UJpaAt$$gDa zyA$0s+L?g{!oY#P8OvTK*X`-N!&q~!-+ZEV!~35f)r#0ZSli!oS@&PO#9;+0vEhHI z!wv*y`2V`01c(bDnBm`b#+N|+5Q_h-XTJ1zJ@X+b{t?f<kELz~Wk60I%VV|&KUCcf z(tw;YmcKw{ui|BFt=|3r!1kJd!Smn)@&EbQ3f@T^xGBBHz9IQIL*KoGJoXRu6-c-M li478`GT$B+y+HbgX#FW!@k#${Hg$tUJzf1=);T3K0RX7o7qkEX diff --git a/examples/resource-bar/assets/Star_LargeWide.png b/examples/resource-bar/assets/Star_LargeWide.png deleted file mode 100644 index cf35f1bdf739facdb8ffb4e35960ed34338afaca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 587 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSoCO|{#S9GGLLkg|>2BR01_s8z zo-U3d6}R4Ax#)Y?L4-BX%9C@-B%vTF)qt-5ib6{zbf)kLt>0VhcI*F<_viNPWdxc7 z13pJ~t$Tm_v+6G9A9v>IU)=h?k;~<6{Q{=M-=PY5`?)s6v%dPan&Efo0_t%NF!I&^ ztd@UWvF(0A;lz6nc@N@4ubm5iybzGFvtnuQ=R5fDv2(<<-?@?d>ZU!dmi_2v{Hp$c z{pa6r4OAseTkbLNmHoKr{DSAfgLZk-mY?hen-0IXZK-50_;mO^kk4jt^I<%Y&t~xR zVZ3R}XMTmUAL;xL_b_+J|BH0CxX&Q-Z>6)vc_5|gZ1E3BEp@hd#~@QTT~Q{Vfp7n7 zfj(n~c6p7Uq~sRMv}2*f+dBz!(#|Ae!;paqR>D3RrK*uV?suSTv!257Qg| q@P@x1xi;9xP*;*27I{EA_#=19Q;WbQ^EtPGL_J;oT-G@yGywpqw*xu= diff --git a/examples/resource-bar/assets/Star_Medium.png b/examples/resource-bar/assets/Star_Medium.png deleted file mode 100644 index 6bce4c7a6efd824aec3571aef4010b014acf09b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 354 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSoCO|{#S9GGLLkg|>2BR01_nkE zPZ!6Kid%25JMuO=h_D36C@h>bp<#-b!yzvxCsl<+ZqJ=x9WGCqH23=?TcJsR>)S4r z0*%57)K_i2x9zc7k@$j~c~*znb;Ge(!QUA+yJI#|x&O z*Oh+~8Ml@9sZH3DZQ^2R@{mUwy~K!!DLk5WG`Y m;qOBrK8SInvh11sm5&we2Cp0Tt6q{7qH&t;ucLK6TJON1u? diff --git a/examples/resource-bar/assets/Star_Small.png b/examples/resource-bar/assets/Star_Small.png deleted file mode 100644 index 0286d9fb50821fc878c2b1e90778ab7feae78ad0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSoCO|{#S9GGLLkg|>2BR0px^;d z7srr_TW>ENVK74FRd}boFyt I=akR{07xBH8~^|S diff --git a/examples/resource-bar/assets/Upgraded Potion Blue_No Shadow.png b/examples/resource-bar/assets/Upgraded Potion Blue_No Shadow.png deleted file mode 100644 index 8114b7fdea6f47a06f9dc00b8b9f4f833de13557..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 438 zcmV;n0ZIOeP)l_nx=!HM|Aj$8Sb8nKHf{2R0OtBZRoOIah zlP{eMFlc=-ruUn3dalms^KM9wm#6i*MMMQhdwPAV0T2KjO9cB?_Zym5OO=GW0xW>L z1{h0-uz-Z8y2&a~HvrxE?jGB>AJaNN7T^m4bUi6|BH`{`y8^NjCIM6dP#%O>m*scC zGOY;6{l6k0$3WA(60LVZ0IsTpc@Re6-se4336lW7fST1Q076=b8k35*iUcJ_T0` zq(tO#2S+D%fs{llIq>W^p;jUnuKE_>f;nIfT>UlVsTT$phoKDCz|GTgITv)nolVRC g#gEDU->{2(0cf%f6i#la`2YX_07*qoM6N<$f}#wyX#fBK diff --git a/examples/resource-bar/assets/Upgraded Potion Blue_Shadow.png b/examples/resource-bar/assets/Upgraded Potion Blue_Shadow.png deleted file mode 100644 index 9fc0758f08ae07960d148805d83958c33db3f8c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 503 zcmV1=Unk}zig z0)XME0mcy`EKp`4%e$s)6aj7khQUt{0hYk^_2+&Og9Z480A1|N8zJH0Q-=aF6D|Q{ z0Z=YNoQLUW0S3z$MW6_ zk?0j*cq+I{#4WIS{^SCOv9@(e+9DMdz-tEqgcpvnE&)x#BEtP8e6T=FMD|-*-}MW` zBw~>QPY@_SrB(?I?h*(kaKjX^1#Vc3Y6%32i-VyIw!n?calNw1y*6d!_*aW)PKXF;6L+o`VG*dI3}TqxV!)W002ovPDHLkV1oJx&{_Zh diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 0bf63aea6..0d365aba2 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -57,266 +57,6 @@ }, "resources": { "resources": [ - { - "alwaysLoaded": false, - "file": "assets/Fly_1.png", - "kind": "image", - "metadata": "", - "name": "Fly_1.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_1.png", - "name": "gdevelop-asset-store" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Fly_10.png", - "kind": "image", - "metadata": "", - "name": "Fly_10.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_10.png", - "name": "gdevelop-asset-store" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Fly_2.png", - "kind": "image", - "metadata": "", - "name": "Fly_2.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_2.png", - "name": "gdevelop-asset-store" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Fly_3.png", - "kind": "image", - "metadata": "", - "name": "Fly_3.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_3.png", - "name": "gdevelop-asset-store" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Fly_4.png", - "kind": "image", - "metadata": "", - "name": "Fly_4.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_4.png", - "name": "gdevelop-asset-store" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Fly_5.png", - "kind": "image", - "metadata": "", - "name": "Fly_5.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_5.png", - "name": "gdevelop-asset-store" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Fly_6.png", - "kind": "image", - "metadata": "", - "name": "Fly_6.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_6.png", - "name": "gdevelop-asset-store" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Fly_7.png", - "kind": "image", - "metadata": "", - "name": "Fly_7.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_7.png", - "name": "gdevelop-asset-store" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Fly_8.png", - "kind": "image", - "metadata": "", - "name": "Fly_8.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_8.png", - "name": "gdevelop-asset-store" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Fly_9.png", - "kind": "image", - "metadata": "", - "name": "Fly_9.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Enemy/Fly_9.png", - "name": "gdevelop-asset-store" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Star_LargeNarrow.png", - "kind": "image", - "metadata": "", - "name": "Star_LargeNarrow.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Simple Space/stars/Star_LargeNarrow.png", - "name": "gdevelop-asset-store" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Star_LargeWide.png", - "kind": "image", - "metadata": "", - "name": "Star_LargeWide.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Simple Space/stars/Star_LargeWide.png", - "name": "gdevelop-asset-store" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Star_Medium.png", - "kind": "image", - "metadata": "", - "name": "Star_Medium.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Simple Space/stars/Star_Medium.png", - "name": "gdevelop-asset-store" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Star_Small.png", - "kind": "image", - "metadata": "", - "name": "Star_Small.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Simple Space/stars/Star_Small.png", - "name": "gdevelop-asset-store" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Silver shield.png", - "kind": "image", - "metadata": "", - "name": "Silver shield.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Space Shooter/PNG/Power-ups/Silver shield.png", - "name": "gdevelop-asset-store" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Meteor Detailed_Large.png", - "kind": "image", - "metadata": "", - "name": "Meteor Detailed_Large.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Simple Space/meteors/Meteor Detailed_Large.png", - "name": "gdevelop-asset-store" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Meteor Detailed_Small.png", - "kind": "image", - "metadata": "", - "name": "Meteor Detailed_Small.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/Simple Space/meteors/Meteor Detailed_Small.png", - "name": "gdevelop-asset-store" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Upgraded Potion Blue_No Shadow.png", - "kind": "image", - "metadata": "", - "name": "Upgraded Potion Blue_No Shadow.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/32x32 Fantasy Icons Pack v2/Icons/Healing Items/Upgraded Potion Blue_No Shadow.png", - "name": "gdevelop-asset-store" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Upgraded Potion Blue_Shadow.png", - "kind": "image", - "metadata": "", - "name": "Upgraded Potion Blue_Shadow.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/32x32 Fantasy Icons Pack v2/Icons/Healing Items/Upgraded Potion Blue_Shadow.png", - "name": "gdevelop-asset-store" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Moon.png", - "kind": "image", - "metadata": "", - "name": "Moon.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://resources.gdevelop-app.com/assets/GDevelop examples/Platformer/Background/Moon.png", - "name": "gdevelop-asset-store" - } - }, { "alwaysLoaded": false, "file": "assets/Emote Heart.png", @@ -575,1018 +315,240 @@ }, { "alwaysLoaded": false, - "file": "assets/Playing Card_Back Blue 1.png", + "file": "assets/Energy Bar.png", "kind": "image", "metadata": "", - "name": "Playing Card_Back Blue 1.png", + "name": "Energy Bar.png", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/45d8c10efbc8b88551c4f3bbf86ad7c8fc4605c9a9c6d735eca88b42425e7cd0_Playing Card_Back Blue 1.png", - "name": "Playing Card_Back Blue 1.png" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Space Shooter by Pixel boy/Hud/Bar/5e8415764fad4e64bf3d6eb76c48ee5a89901545b96795315ec70b17fb0e1f7f_Energy Bar.png", + "name": "Energy Bar.png" } }, { "alwaysLoaded": false, - "file": "assets/Playing Card_Back Blue 2.png", + "file": "assets/Health Bar2.png", "kind": "image", "metadata": "", - "name": "Playing Card_Back Blue 2.png", + "name": "Health Bar.png2", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/702ac50f6b09f2fd9c8bedff300f69243e9b869be8bb167ba8f312d3da23d2d3_Playing Card_Back Blue 2.png", - "name": "Playing Card_Back Blue 2.png" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Western FPS 2D/Hud/Bar/ec41092214e9b23d9992e2885835085c8e5457268b3e054599e799cc8074fc52_Health Bar.png", + "name": "Health Bar.png" } }, { "alwaysLoaded": false, - "file": "assets/Playing Card_Back Brown 1.png", + "file": "assets/Health Bar Box2.png", "kind": "image", "metadata": "", - "name": "Playing Card_Back Brown 1.png", + "name": "Health Bar Box.png2", "smoothed": false, "userAdded": false, "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/2cd9e2c953aa53dbf5c6d0e47b4578be7f93b5efc3ea68956794d0b1289f6609_Playing Card_Back Brown 1.png", - "name": "Playing Card_Back Brown 1.png" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Western FPS 2D/Hud/Bar/e6e666707e06c429f6dd475d85d575a5b69a1dc27369a8f1d06a747afa2f1264_Health Bar Box.png", + "name": "Health Bar Box.png" } }, { "alwaysLoaded": false, - "file": "assets/Playing Card_Back Brown 2.png", + "file": "assets/Bar Frame_No Shadow.png", "kind": "image", "metadata": "", - "name": "Playing Card_Back Brown 2.png", - "smoothed": false, + "name": "Bar Frame_No Shadow.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/65cbd17e62582bacd5f00582d4bb5aeeb6ea4ee640e21818b6eba5081e587304_Playing Card_Back Brown 2.png", - "name": "Playing Card_Back Brown 2.png" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Interface/PX UI Basic/865ff85ac660aa3ab3f0a1a849b6fba686bc194b14615199485296be3f0b3538_Bar Frame_No Shadow.png", + "name": "Bar Frame_No Shadow.png" } }, { "alwaysLoaded": false, - "file": "assets/Playing Card_Back Red 1.png", + "file": "assets/Bar Frame_Shadow.png", "kind": "image", "metadata": "", - "name": "Playing Card_Back Red 1.png", - "smoothed": false, + "name": "Bar Frame_Shadow.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/4ff2180e54ad5fe99a9d640f2c60942286941b87c696e2cfadbd6443a8c19b5e_Playing Card_Back Red 1.png", - "name": "Playing Card_Back Red 1.png" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Interface/PX UI Basic/f5d82b20b6d272c55e875464502e683c31d7c94df786570897ac8e0b83161d82_Bar Frame_Shadow.png", + "name": "Bar Frame_Shadow.png" } }, { "alwaysLoaded": false, - "file": "assets/Playing Card_Back Red 2.png", + "file": "assets/Blue bar.png", "kind": "image", "metadata": "", - "name": "Playing Card_Back Red 2.png", - "smoothed": false, + "name": "Blue bar.png", + "smoothed": true, "userAdded": false, "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/fdac3c95127abee6786eef00b03a15658d0801fc7f1c11fc6d165f5ddbc7761f_Playing Card_Back Red 2.png", - "name": "Playing Card_Back Red 2.png" + "identifier": "https://asset-resources.gdevelop.io/public-resources/Interface/PX UI Basic/40832527439da97fe46056f6934206f3d943568e68a955f6ff29dbe882a1c083_Blue bar.png", + "name": "Blue bar.png" } }, { "alwaysLoaded": false, - "file": "assets/Playing Card_Clubs 02.png", + "file": "assets/Heart-1-0.png", "kind": "image", "metadata": "", - "name": "Playing Card_Clubs 02.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/1d01b932a889b44d89f2b96368f7b3fa3366e7ccb6de30bb22430133ca21bb42_Playing Card_Clubs 02.png", - "name": "Playing Card_Clubs 02.png" - } + "name": "assets\\Heart-1-0.png", + "smoothed": true, + "userAdded": true }, { "alwaysLoaded": false, - "file": "assets/Playing Card_Clubs 03.png", + "file": "assets/Heart-1-2.png", "kind": "image", "metadata": "", - "name": "Playing Card_Clubs 03.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/a59c3bc065a12015b69cad078fb3a74e2c18cf825be48cf69044010795482f45_Playing Card_Clubs 03.png", - "name": "Playing Card_Clubs 03.png" - } + "name": "assets\\Heart-1-2.png", + "smoothed": true, + "userAdded": true }, { "alwaysLoaded": false, - "file": "assets/Playing Card_Clubs 04.png", + "file": "assets/Health Bar.png", "kind": "image", "metadata": "", - "name": "Playing Card_Clubs 04.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/6e15b233c29d5f9b92c216d2dcba39a2f83720c3fc732dfa2abddabb332ba85e_Playing Card_Clubs 04.png", - "name": "Playing Card_Clubs 04.png" - } + "name": "assets\\Health Bar.png", + "smoothed": true, + "userAdded": true }, { "alwaysLoaded": false, - "file": "assets/Playing Card_Clubs 05.png", + "file": "assets/Bomb_No Shadow.png", "kind": "image", "metadata": "", - "name": "Playing Card_Clubs 05.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/37e6767258064bf343185e32a2878ab6f008acb4cdd737311267078e852b2a32_Playing Card_Clubs 05.png", - "name": "Playing Card_Clubs 05.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Clubs 06.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Clubs 06.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/cfdbccd7c1f67bfbbc04119d2df55fbe0411f82eef9c5779fdcce4e479ad3cde_Playing Card_Clubs 06.png", - "name": "Playing Card_Clubs 06.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Clubs 07.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Clubs 07.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/c76e0e677e1ddd6dd05848f51c49e0f4c87711c226b7deb94357de22282fd268_Playing Card_Clubs 07.png", - "name": "Playing Card_Clubs 07.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Clubs 08.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Clubs 08.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/245935a2431ddf72509e0f3cd12ec3b0229aa005310eed111818da8265760fbc_Playing Card_Clubs 08.png", - "name": "Playing Card_Clubs 08.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Clubs 09.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Clubs 09.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/352eb13ac79b60b8c650601b6495e0558de553604ce1124d0bdf75d6087d6049_Playing Card_Clubs 09.png", - "name": "Playing Card_Clubs 09.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Clubs 10.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Clubs 10.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/fb330a065248677911f6b14f8294e03777cb585c19e4aacabb53109c335d3575_Playing Card_Clubs 10.png", - "name": "Playing Card_Clubs 10.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Clubs A.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Clubs A.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/f97a1e91ad3f63787c6175b116d4999c14dc462a2e287494142a8b01f5c43d06_Playing Card_Clubs A.png", - "name": "Playing Card_Clubs A.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Clubs J.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Clubs J.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/6c143342e09e253c9d0446c2e59b27faadf330b15f1657d45a07850bb598a38a_Playing Card_Clubs J.png", - "name": "Playing Card_Clubs J.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Clubs K.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Clubs K.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/600a46d080fa5e086ef3c1a1f8515f8232273845f39ae25996d2db959b7f229c_Playing Card_Clubs K.png", - "name": "Playing Card_Clubs K.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Clubs Q.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Clubs Q.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/7c7d22520dd102f71744c6689c5b0a47417e4765e18c7789400da1676d538706_Playing Card_Clubs Q.png", - "name": "Playing Card_Clubs Q.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Diamond 02.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Diamond 02.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/d7d5824c27e5521de286fa6a9d294d9c3827ca003367dc9bb0c8e1c4d9ba45b7_Playing Card_Diamond 02.png", - "name": "Playing Card_Diamond 02.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Diamond 03.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Diamond 03.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/03bbe9833d1ff0faefacf07001f57db2bb2c82412b093ec0ce6c1fdc05034c7c_Playing Card_Diamond 03.png", - "name": "Playing Card_Diamond 03.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Diamond 04.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Diamond 04.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/b2a86bc52b75ab9fbaabd7041f7900e749eeeeaf46d90ebbac0abb4b9843df42_Playing Card_Diamond 04.png", - "name": "Playing Card_Diamond 04.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Diamond 05.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Diamond 05.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/673ac4ebb82a45d89b321a744a96fc9703f4cd6e69d2d0bd442372dfcece2c75_Playing Card_Diamond 05.png", - "name": "Playing Card_Diamond 05.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Diamond 06.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Diamond 06.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/0b0eb2394c93d49b4f978cfdf88a7dcfb796f16207d898acf9e3a8decd9bfc87_Playing Card_Diamond 06.png", - "name": "Playing Card_Diamond 06.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Diamond 07.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Diamond 07.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/942705e1185fb80c12ddbcd095f168495e938c44509f7832fcdbe186e66a914a_Playing Card_Diamond 07.png", - "name": "Playing Card_Diamond 07.png" - } + "name": "assets\\Bomb_No Shadow.png", + "smoothed": true, + "userAdded": true }, { "alwaysLoaded": false, - "file": "assets/Playing Card_Diamond 08.png", + "file": "assets/Full Heart.png", "kind": "image", "metadata": "", - "name": "Playing Card_Diamond 08.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/71811d6f57968e799c534df2df62762203ec073b9375d4026f8f4a1c04380421_Playing Card_Diamond 08.png", - "name": "Playing Card_Diamond 08.png" - } + "name": "assets\\Full Heart.png", + "smoothed": true, + "userAdded": true }, { "alwaysLoaded": false, - "file": "assets/Playing Card_Diamond 09.png", + "file": "assets/Empty Heart.png", "kind": "image", "metadata": "", - "name": "Playing Card_Diamond 09.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/82a1fca7de0ad3af5222008612f09081958a06aa5af07ef9d7000b293fd40162_Playing Card_Diamond 09.png", - "name": "Playing Card_Diamond 09.png" - } + "name": "assets\\Empty Heart.png", + "smoothed": true, + "userAdded": true }, { "alwaysLoaded": false, - "file": "assets/Playing Card_Diamond 10.png", + "file": "assets/Scroll.png", "kind": "image", "metadata": "", - "name": "Playing Card_Diamond 10.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/3ca86ef6e65fef7170ca7d3792ab14f1f52f7094cfac978210e51b42d560aaa8_Playing Card_Diamond 10.png", - "name": "Playing Card_Diamond 10.png" - } + "name": "assets\\Scroll.png", + "smoothed": true, + "userAdded": true }, { "alwaysLoaded": false, - "file": "assets/Playing Card_Diamond A.png", + "file": "assets/Flashy Empty Heart.png", "kind": "image", "metadata": "", - "name": "Playing Card_Diamond A.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/1907fdccf9cf1727959f8e554657c39fc7897cf6342a6577906096f333cc993a_Playing Card_Diamond A.png", - "name": "Playing Card_Diamond A.png" - } + "name": "assets\\Flashy Empty Heart.png", + "smoothed": true, + "userAdded": true }, { "alwaysLoaded": false, - "file": "assets/Playing Card_Diamond J.png", + "file": "assets/Flashy Full Heart.png", "kind": "image", "metadata": "", - "name": "Playing Card_Diamond J.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/b2db6ddff7ce5fa38afaf11255a080ace2d9b8fa6983c7734f7ba432bb91022c_Playing Card_Diamond J.png", - "name": "Playing Card_Diamond J.png" - } + "name": "assets\\Flashy Full Heart.png", + "smoothed": true, + "userAdded": true }, { "alwaysLoaded": false, - "file": "assets/Playing Card_Diamond K.png", + "file": "assets/Flashy Full Heart 2.png", "kind": "image", "metadata": "", - "name": "Playing Card_Diamond K.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/8cf19bd2048868217422ac1702a810e64ac5a1241c815dd43a6d86bc20228e06_Playing Card_Diamond K.png", - "name": "Playing Card_Diamond K.png" - } + "name": "assets\\Flashy Full Heart 2.png", + "smoothed": true, + "userAdded": true }, { "alwaysLoaded": false, - "file": "assets/Playing Card_Diamond Q.png", + "file": "assets/tiled_Health Bar Fill.png", "kind": "image", "metadata": "", - "name": "Playing Card_Diamond Q.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/62666ce404454229888659d2aa76ece6e40d69a0aed746b291341939580fde62_Playing Card_Diamond Q.png", - "name": "Playing Card_Diamond Q.png" - } + "name": "assets\\tiled_Health Bar Fill.png", + "smoothed": true, + "userAdded": false }, { "alwaysLoaded": false, - "file": "assets/Playing Card_Hearts 02.png", + "file": "assets/tiled_Energy Bar Fill.png", "kind": "image", "metadata": "", - "name": "Playing Card_Hearts 02.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/6759af6b5226a83322915bfed1b6cecd8efcad620b96ba0d63bbe9689c8db42c_Playing Card_Hearts 02.png", - "name": "Playing Card_Hearts 02.png" - } + "name": "assets\\tiled_Energy Bar Fill.png", + "smoothed": true, + "userAdded": false }, { "alwaysLoaded": false, - "file": "assets/Playing Card_Hearts 03.png", + "file": "assets/Health Bar Box.png", "kind": "image", "metadata": "", - "name": "Playing Card_Hearts 03.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/ec5f7db10e42a1d9e6c7d246193f7db5e507bc1b1ec561dc9f0aa60ecd04616b_Playing Card_Hearts 03.png", - "name": "Playing Card_Hearts 03.png" - } + "name": "assets\\Health Bar Box.png", + "smoothed": true, + "userAdded": false + } + ], + "resourceFolders": [] + }, + "objects": [], + "objectsGroups": [], + "variables": [], + "layouts": [ + { + "b": 68, + "disableInputWhenNotFocused": true, + "mangledName": "Sprite_32and_32Tiled_32Sprite", + "name": "Sprite and Tiled Sprite", + "r": 68, + "standardSortMethod": true, + "stopSoundsOnStartup": true, + "title": "", + "v": 68, + "uiSettings": { + "grid": true, + "gridType": "rectangular", + "gridWidth": 8, + "gridHeight": 8, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.2, + "snap": true, + "zoomFactor": 1.1599999938964847, + "windowMask": false }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Hearts 04.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Hearts 04.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/e356db36b32f4a7e7e7969504caeda79b8f9ee552b3518151c437ba663684273_Playing Card_Hearts 04.png", - "name": "Playing Card_Hearts 04.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Hearts 05.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Hearts 05.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/a337b7ec298507602bfd253623e4678e456ab6af70a39c938e6d07e642265a78_Playing Card_Hearts 05.png", - "name": "Playing Card_Hearts 05.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Hearts 06.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Hearts 06.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/6d06b53368b61e1d3237a9e555e041886db74e4b7cfd7b713b523256dc0a8274_Playing Card_Hearts 06.png", - "name": "Playing Card_Hearts 06.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Hearts 07.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Hearts 07.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/8cde3a832de612c2680c0ffa3b4bd094ace4d6073a1be2034370a0298677f626_Playing Card_Hearts 07.png", - "name": "Playing Card_Hearts 07.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Hearts 08.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Hearts 08.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/5607ed43a0667f9d88a28dd37d879588206da0b0e17865e592fab5c856a3a642_Playing Card_Hearts 08.png", - "name": "Playing Card_Hearts 08.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Hearts 09.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Hearts 09.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/a4a2b7ad1e25c76b520368fd96cb44f33024218b5bc5d499ac997ebbfdb56cd5_Playing Card_Hearts 09.png", - "name": "Playing Card_Hearts 09.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Hearts 10.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Hearts 10.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/ffcff1a17db2fe8890a788bd3069ff71621e036ace4aad2c73f4af0d6771e4f0_Playing Card_Hearts 10.png", - "name": "Playing Card_Hearts 10.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Hearts A.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Hearts A.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/1266821f3f5a138d1b387d4eb18b61bd802e74af9fd248acdd4c8308a5b6bf74_Playing Card_Hearts A.png", - "name": "Playing Card_Hearts A.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Hearts J.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Hearts J.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/5e4cfddc34a3bdc59e72c802faf36c574258b974fd41451525e0177a4e850ffc_Playing Card_Hearts J.png", - "name": "Playing Card_Hearts J.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Hearts K.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Hearts K.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/6463be18b9a44c4224fe12d34d8afc6f99e6dc39e6fac033e04f7295b331bc08_Playing Card_Hearts K.png", - "name": "Playing Card_Hearts K.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Hearts Q.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Hearts Q.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/0de8c8afc90d4084ad528060b7b01d22ec4bf68e6fe13d44c02e859445b89836_Playing Card_Hearts Q.png", - "name": "Playing Card_Hearts Q.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Joker Black.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Joker Black.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/ed5a7db38327142a6d26f1122ee0180f671d99fb72cad242a0fce2b7ca972eaa_Playing Card_Joker Black.png", - "name": "Playing Card_Joker Black.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Joker Red.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Joker Red.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/c694c06b970aa68c106844440df67c138b851141c43a8f2e717604c1c0807682_Playing Card_Joker Red.png", - "name": "Playing Card_Joker Red.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Spades 02.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Spades 02.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/c93fce6db7fb23b3a6e2736c364ec796c708db24a204de1daf4a670a7220d0b0_Playing Card_Spades 02.png", - "name": "Playing Card_Spades 02.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Spades 03.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Spades 03.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/c1c38935c1e8cc0a9442858f317dc370dfad0aa142354ecb33b7dc2c017f91c3_Playing Card_Spades 03.png", - "name": "Playing Card_Spades 03.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Spades 04.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Spades 04.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/fa91978a59d726ac490a26f610523115f58e84e1c2ff7379698dbd454b4e108c_Playing Card_Spades 04.png", - "name": "Playing Card_Spades 04.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Spades 05.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Spades 05.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/2386553aae77dacdc3bdb5cb36d2418cb534779ea5ae5c50536c3b593f9ac173_Playing Card_Spades 05.png", - "name": "Playing Card_Spades 05.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Spades 06.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Spades 06.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/d524989c528da32a21b024f0a930d8b01a2900672d911216ce4fffbcea3187f5_Playing Card_Spades 06.png", - "name": "Playing Card_Spades 06.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Spades 07.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Spades 07.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/f070b7efd25a8d1f303904f95611daf1cc24f0205c25fca92c8b93e787b21ee1_Playing Card_Spades 07.png", - "name": "Playing Card_Spades 07.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Spades 08.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Spades 08.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/18f2fc0be76a66e7c5ed5774371850f90e62173c23f328b44fd5d912a0f466aa_Playing Card_Spades 08.png", - "name": "Playing Card_Spades 08.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Spades 09.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Spades 09.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/3634469f717dae7070b4c5abd88412879706f44fa13fd0f2ad239f129302eaa3_Playing Card_Spades 09.png", - "name": "Playing Card_Spades 09.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Spades 10.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Spades 10.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/10cdac8fed60ae31c662be905c8c32321670af7eca3ac24e59905a1b8b6fc1f4_Playing Card_Spades 10.png", - "name": "Playing Card_Spades 10.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Spades A.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Spades A.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/d6c8fa7a19720e25768ac3cdddc4790cbd56ff04e861f5cc06157491289efb52_Playing Card_Spades A.png", - "name": "Playing Card_Spades A.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Spades J.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Spades J.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/136684a4f36434065d973b1ece901950de48a869b9fc16e07df140cdd702bc92_Playing Card_Spades J.png", - "name": "Playing Card_Spades J.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Spades K.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Spades K.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/80dea9fc24669c302a3d28f41c35765295c1d16098b99d123257ead12cdddd9a_Playing Card_Spades K.png", - "name": "Playing Card_Spades K.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Playing Card_Spades Q.png", - "kind": "image", - "metadata": "", - "name": "Playing Card_Spades Q.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Sylly/Large/88c238e3e05549f19877a9a2788496d7fa198ebb3270dd5099373cbd8ed1b71c_Playing Card_Spades Q.png", - "name": "Playing Card_Spades Q.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Energy Bar.png", - "kind": "image", - "metadata": "", - "name": "Energy Bar.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Space Shooter by Pixel boy/Hud/Bar/5e8415764fad4e64bf3d6eb76c48ee5a89901545b96795315ec70b17fb0e1f7f_Energy Bar.png", - "name": "Energy Bar.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Health Bar2.png", - "kind": "image", - "metadata": "", - "name": "Health Bar.png2", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Western FPS 2D/Hud/Bar/ec41092214e9b23d9992e2885835085c8e5457268b3e054599e799cc8074fc52_Health Bar.png", - "name": "Health Bar.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Health Bar Box2.png", - "kind": "image", - "metadata": "", - "name": "Health Bar Box.png2", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Western FPS 2D/Hud/Bar/e6e666707e06c429f6dd475d85d575a5b69a1dc27369a8f1d06a747afa2f1264_Health Bar Box.png", - "name": "Health Bar Box.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Bar Frame_No Shadow.png", - "kind": "image", - "metadata": "", - "name": "Bar Frame_No Shadow.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Interface/PX UI Basic/865ff85ac660aa3ab3f0a1a849b6fba686bc194b14615199485296be3f0b3538_Bar Frame_No Shadow.png", - "name": "Bar Frame_No Shadow.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Bar Frame_Shadow.png", - "kind": "image", - "metadata": "", - "name": "Bar Frame_Shadow.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Interface/PX UI Basic/f5d82b20b6d272c55e875464502e683c31d7c94df786570897ac8e0b83161d82_Bar Frame_Shadow.png", - "name": "Bar Frame_Shadow.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Blue bar.png", - "kind": "image", - "metadata": "", - "name": "Blue bar.png", - "smoothed": true, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/Interface/PX UI Basic/40832527439da97fe46056f6934206f3d943568e68a955f6ff29dbe882a1c083_Blue bar.png", - "name": "Blue bar.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Heart-1-0.png", - "kind": "image", - "metadata": "", - "name": "assets\\Heart-1-0.png", - "smoothed": true, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Heart-1-2.png", - "kind": "image", - "metadata": "", - "name": "assets\\Heart-1-2.png", - "smoothed": true, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Health Bar.png", - "kind": "image", - "metadata": "", - "name": "assets\\Health Bar.png", - "smoothed": true, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Bomb_No Shadow.png", - "kind": "image", - "metadata": "", - "name": "assets\\Bomb_No Shadow.png", - "smoothed": true, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Full Heart.png", - "kind": "image", - "metadata": "", - "name": "assets\\Full Heart.png", - "smoothed": true, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Empty Heart.png", - "kind": "image", - "metadata": "", - "name": "assets\\Empty Heart.png", - "smoothed": true, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Scroll.png", - "kind": "image", - "metadata": "", - "name": "assets\\Scroll.png", - "smoothed": true, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Flashy Empty Heart.png", - "kind": "image", - "metadata": "", - "name": "assets\\Flashy Empty Heart.png", - "smoothed": true, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Flashy Full Heart.png", - "kind": "image", - "metadata": "", - "name": "assets\\Flashy Full Heart.png", - "smoothed": true, - "userAdded": true - }, - { - "alwaysLoaded": false, - "file": "assets/Flashy Full Heart 2.png", - "kind": "image", - "metadata": "", - "name": "assets\\Flashy Full Heart 2.png", - "smoothed": true, - "userAdded": true - } - ], - "resourceFolders": [] - }, - "objects": [], - "objectsGroups": [], - "variables": [], - "layouts": [ - { - "b": 68, - "disableInputWhenNotFocused": true, - "mangledName": "Sprite_32and_32Tiled_32Sprite", - "name": "Sprite and Tiled Sprite", - "r": 68, - "standardSortMethod": true, - "stopSoundsOnStartup": true, - "title": "", - "v": 68, - "uiSettings": { - "grid": true, - "gridType": "rectangular", - "gridWidth": 8, - "gridHeight": 8, - "gridOffsetX": 0, - "gridOffsetY": 0, - "gridColor": 10401023, - "gridAlpha": 0.2, - "snap": true, - "zoomFactor": 1, - "windowMask": false - }, - "objectsGroups": [ - { - "name": "Buttons", - "objects": [ - { - "name": "PlusKey" - }, - { - "name": "MinusKey" - } - ] - }, - { - "name": "Sprites", - "objects": [ - { - "name": "BlueBar" - } - ] - }, - { - "name": "TiledSprites", - "objects": [ - { - "name": "HealthBarFill" - }, - { - "name": "EnergyBarFill" - }, - { - "name": "Heart_Pixel_Tiled" - }, - { - "name": "Tiled_ResourceBar" - } - ] + "objectsGroups": [ + { + "name": "Button", + "objects": [ + { + "name": "PlusKey" + }, + { + "name": "MinusKey" + } + ] } ], "variables": [], @@ -1791,7 +753,7 @@ "customSize": false, "height": 208, "layer": "", - "name": "NewResourceBar", + "name": "UnitsBar", "persistentUuid": "cd7ae08a-3045-436b-bda9-beda9d2b55db", "width": 208, "x": 536, @@ -1815,6 +777,21 @@ "numberProperties": [], "stringProperties": [], "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "ContinousBar", + "persistentUuid": "60a7c4ed-31bf-44a9-8513-09c9bfd8eb42", + "width": 0, + "x": 552, + "y": 312, + "zOrder": 40, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] } ], "objects": [ @@ -2322,9 +1299,9 @@ }, { "assetStoreId": "", - "name": "NewResourceBar", + "name": "UnitsBar", "tags": "", - "type": "ResourceBar::TiledResourceBar", + "type": "ResourceBar::TiledUnitsBar", "variables": [], "effects": [], "behaviors": [], @@ -2347,10 +1324,45 @@ "texture": "assets\\Empty Heart.png", "width": 26 }, - "Buffer": { + "Resource": { "height": 26, - "texture": "assets\\Flashy Full Heart 2.png", + "texture": "assets\\Full Heart.png", "width": 26 + } + } + }, + { + "assetStoreId": "", + "name": "ContinousBar", + "tags": "", + "type": "ResourceBar::TiledContinuousBar", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "MaxValue": 10, + "InitialValue": 7 + }, + "childrenContent": { + "Background": { + "bottomMargin": 4, + "height": 15, + "leftMargin": 8, + "rightMargin": 8, + "texture": "assets\\Health Bar Box.png", + "tiled": true, + "topMargin": 4, + "width": 96 + }, + "Bar": { + "height": 8, + "texture": "assets\\Empty Heart.png", + "width": 32 + }, + "Buffer": { + "height": 8, + "texture": "assets\\tiled_Energy Bar Fill.png", + "width": 32 }, "Label": { "bold": false, @@ -2359,7 +1371,7 @@ "underlined": false, "string": "Text", "font": "", - "characterSize": 20, + "characterSize": 8, "color": { "b": 0, "g": 0, @@ -2367,9 +1379,9 @@ } }, "Resource": { - "height": 26, - "texture": "assets\\Full Heart.png", - "width": 26 + "height": 8, + "texture": "assets\\tiled_Health Bar Fill.png", + "width": 32 } } } @@ -2460,7 +1472,7 @@ "value": "SourisSurObjet" }, "parameters": [ - "Buttons", + "Button", "", "", "" @@ -2473,7 +1485,7 @@ "value": "EnableEffect" }, "parameters": [ - "Buttons", + "Button", "\"Effect\"", "no" ] @@ -2488,7 +1500,7 @@ "value": "SourisSurObjet" }, "parameters": [ - "Buttons", + "Button", "", "", "" @@ -2501,7 +1513,7 @@ "value": "EnableEffect" }, "parameters": [ - "Buttons", + "Button", "\"Effect\"", "yes" ] @@ -2537,7 +1549,7 @@ "value": "ScaleWidth" }, "parameters": [ - "Buttons", + "Button", "=", "0.9" ] @@ -2563,10 +1575,21 @@ "actions": [ { "type": { - "value": "ResourceBar::TiledResourceBar::SetValue" + "value": "ResourceBar::TiledUnitsBar::SetValue" + }, + "parameters": [ + "UnitsBar", + "+", + "0.5", + "" + ] + }, + { + "type": { + "value": "ResourceBar::TiledContinuousBar::SetValue" }, "parameters": [ - "NewResourceBar", + "ContinousBar", "+", "0.5", "" @@ -2592,10 +1615,21 @@ "actions": [ { "type": { - "value": "ResourceBar::TiledResourceBar::SetValue" + "value": "ResourceBar::TiledUnitsBar::SetValue" + }, + "parameters": [ + "UnitsBar", + "-", + "0.5", + "" + ] + }, + { + "type": { + "value": "ResourceBar::TiledContinuousBar::SetValue" }, "parameters": [ - "NewResourceBar", + "ContinousBar", "-", "0.5", "" @@ -2646,7 +1680,7 @@ "value": "SourisSurObjet" }, "parameters": [ - "Buttons", + "Button", "", "", "" @@ -2659,7 +1693,7 @@ "value": "ChangeColor" }, "parameters": [ - "Buttons", + "Button", "\"189;16;224\"" ] }, @@ -2668,7 +1702,7 @@ "value": "ChangeScale" }, "parameters": [ - "Buttons", + "Button", "=", "0.9" ] @@ -2697,7 +1731,7 @@ "value": "ChangeColor" }, "parameters": [ - "Buttons", + "Button", "\"255;255;255\"" ] }, @@ -2706,7 +1740,7 @@ "value": "ChangeScale" }, "parameters": [ - "Buttons", + "Button", "=", "1" ] @@ -4852,214 +3886,543 @@ "actions": [ { "type": { - "value": "Cache" + "value": "Cache" + }, + "parameters": [ + "Moon" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionNP" + }, + "parameters": [ + "SilverShield", + "Fly", + "", + "", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Health::Shield::ActivateShield" + }, + "parameters": [ + "Fly", + "Shield", + "" + ] + }, + { + "type": { + "value": "Delete" + }, + "parameters": [ + "SilverShield", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionNP" + }, + "parameters": [ + "UpgradedPotionBlue", + "Fly", + "", + "", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Health::Health::Heal" + }, + "parameters": [ + "Fly", + "Health", + "100", + "" + ] + }, + { + "type": { + "value": "Delete" + }, + "parameters": [ + "UpgradedPotionBlue", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionNP" + }, + "parameters": [ + "MeteorDetailed", + "Fly", + "", + "", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Health::Shield::ShieldHit" + }, + "parameters": [ + "Fly", + "Shield", + "10", + "" + ] + }, + { + "type": { + "value": "Delete" + }, + "parameters": [ + "MeteorDetailed", + "" + ] + }, + { + "type": { + "value": "ShakeObject::ShakeObject_PositionAngleScale::ShakeObject_PositionAngleScale" + }, + "parameters": [ + "Fly", + "ShakeObject_PositionAngleScale", + "", + "10", + "10", + "5", + "", + "", + "", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 224, + "colorG": 16, + "colorR": 189, + "creationTime": 0, + "name": "Draw Resource bars", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "This resource shows the horizontal mouse position in scene, but it can be used for anything!", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarScene" }, "parameters": [ - "Moon" + "MyResource", + "=", + "MouseX()" ] } ] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Shape painter resource bar", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "CollisionNP" - }, - "parameters": [ - "SilverShield", - "Fly", - "", - "", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::DrawHealthBar" + }, + "parameters": [ + "MiniHealth_Bar", + "ResourceBar_ShapePainter", + "Fly", + "Health", + "" + ] + } ] }, { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::DrawShieldBar" + }, + "parameters": [ + "Shield_Bar", + "ResourceBar_ShapePainter", + "Fly", + "Shield", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::DrawResourceBar" + }, + "parameters": [ + "ResourceMouseX_Bar", + "ResourceBar_ShapePainter", + "Variable(MyResource)", + "Variable(MaxResource)", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar_ShapePainter::DrawHealthBar" + }, + "parameters": [ + "Health_Bar", + "ResourceBar_ShapePainter", + "Fly", + "Health", + "" + ] + } + ] } ], - "actions": [ + "parameters": [] + } + ], + "parameters": [] + } + ], + "layers": [ + { + "ambientLightColorB": 32, + "ambientLightColorG": 0, + "ambientLightColorR": 0, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "behaviorsSharedData": [ + { + "name": "Health", + "type": "Health::Health" + }, + { + "name": "ResourceBar_ShapePainter", + "type": "ResourceBar::ResourceBar_ShapePainter" + }, + { + "name": "ResourceBar_Sprite", + "type": "ResourceBar::ResourceBar_Sprite" + }, + { + "name": "ResourceBar_TiledSprite", + "type": "ResourceBar::ResourceBar" + }, + { + "name": "ShakeObject_PositionAngleScale", + "type": "ShakeObject::ShakeObject_PositionAngleScale" + }, + { + "name": "Shield", + "type": "Health::Shield" + }, + { + "name": "Sticker", + "type": "Sticker::Sticker" + } + ] + } + ], + "externalEvents": [], + "eventsFunctionsExtensions": [ + { + "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", + "category": "User interface", + "extensionNamespace": "", + "fullName": "Resource bar (tiled)", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", + "name": "ResourceBar", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/UI Essentials/UI Essentials_sliders_options.svg", + "shortDescription": "A bar that represents a resource in the game (health, mana, ammo, etc)", + "version": "0.0.1", + "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", + "origin": { + "identifier": "ResourceBar", + "name": "gdevelop-extension-store" + }, + "tags": [ + "resource", + "bar", + "health", + "mana", + "shield", + "hearts", + "lives", + "ammo" + ], + "authorIds": [ + "gqDaZjCfevOOxBYkK6zlhtZnXCg1", + "q8ubdigLvIRXLxsJDDTaokO41mc2" + ], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", + "fullName": "Resource bar", + "name": "ResourceBar", + "objectType": "", + "private": true, + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ { - "type": { - "value": "Health::Shield::ActivateShield" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "Fly", - "Shield", - "" - ] + "comment": "This is done after the events to allow users to read the previous value at the end of the change.", + "comment2": "" }, { - "type": { - "value": "Delete" - }, - "parameters": [ - "SilverShield", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__ResourceBar.LastValueChange\"", + ">", + "Object.Behavior::PropertyPreviousValueDuration()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar::UpdatePreviousValue" + }, + "parameters": [ + "Object", + "Behavior", + "=" + ] + } ] } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + ], + "parameters": [ { - "type": { - "value": "CollisionNP" - }, - "parameters": [ - "UpgradedPotionBlue", - "Fly", - "", - "", - "" - ] + "description": "Object", + "name": "Object", + "type": "object" }, { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar", + "type": "behavior" } ], - "actions": [ + "objectGroups": [] + }, + { + "fullName": "Full", + "functionType": "Condition", + "name": "IsFull", + "sentence": "", + "events": [], + "parameters": [ { - "type": { - "value": "Health::Health::Heal" - }, - "parameters": [ - "Fly", - "Health", - "100", - "" - ] + "description": "Object", + "name": "Object", + "type": "object" }, { - "type": { - "value": "Delete" - }, - "parameters": [ - "UpgradedPotionBlue", - "" - ] + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar", + "type": "behavior" } - ] + ], + "objectGroups": [] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "fullName": "Empty", + "functionType": "Condition", + "name": "IsEmpty", + "sentence": "", + "events": [], + "parameters": [ { - "type": { - "value": "CollisionNP" - }, - "parameters": [ - "MeteorDetailed", - "Fly", - "", - "", - "" - ] + "description": "Object", + "name": "Object", + "type": "object" }, { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar", + "type": "behavior" } ], - "actions": [ - { - "type": { - "value": "Health::Shield::ShieldHit" - }, - "parameters": [ - "Fly", - "Shield", - "10", - "" - ] - }, - { - "type": { - "value": "Delete" - }, - "parameters": [ - "MeteorDetailed", - "" - ] - }, + "objectGroups": [] + }, + { + "description": "the value of the object.", + "fullName": "Value", + "functionType": "ExpressionAndCondition", + "name": "Value", + "sentence": "the value", + "events": [ { - "type": { - "value": "ShakeObject::ShakeObject_PositionAngleScale::ShakeObject_PositionAngleScale" - }, - "parameters": [ - "Fly", - "ShakeObject_PositionAngleScale", - "", - "10", - "10", - "5", - "", - "", - "", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValue()" + ] + } ] } - ] - } - ], - "parameters": [] - }, - { - "colorB": 224, - "colorG": 16, - "colorR": 189, - "creationTime": 0, - "name": "Draw Resource bars", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + ], + "expressionType": { + "type": "expression" }, - "comment": "This resource shows the horizontal mouse position in scene, but it can be used for anything!", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "parameters": [ { - "type": { - "value": "ModVarScene" - }, - "parameters": [ - "MyResource", - "=", - "MouseX()" - ] + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar", + "type": "behavior" } - ] + ], + "objectGroups": [] }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Shape painter resource bar", - "source": "", - "type": "BuiltinCommonInstructions::Group", + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "Value", + "name": "SetValue", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -5067,224 +4430,229 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::DrawHealthBar" + "value": "ResourceBar::ResourceBar::SetPropertyValue" }, "parameters": [ - "MiniHealth_Bar", - "ResourceBar_ShapePainter", - "Fly", - "Health", - "" + "Object", + "Behavior", + "=", + "clamp(GetArgumentAsNumber(\"Value\"), 0, Object.Behavior::MaxValue())" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__ResourceBar.LastValueChange\"" ] } ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the maximum value of the object.", + "fullName": "Maximum value", + "functionType": "ExpressionAndCondition", + "group": "Resource bar configuration", + "name": "MaxValue", + "sentence": "the maximum value", + "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::DrawShieldBar" + "value": "SetReturnNumber" }, "parameters": [ - "Shield_Bar", - "ResourceBar_ShapePainter", - "Fly", - "Shield", - "" + "Object.Behavior::PropertyMaxValue()" ] } ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "MaxValue", + "name": "SetMaxValue", + "sentence": "", + "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::DrawResourceBar" + "value": "ResourceBar::ResourceBar::SetPropertyMaxValue" }, "parameters": [ - "ResourceMouseX_Bar", - "ResourceBar_ShapePainter", - "Variable(MyResource)", - "Variable(MaxResource)", - "" + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" ] } ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the previous value of the resource bar before the current change.", + "fullName": "Previous value", + "functionType": "ExpressionAndCondition", + "name": "PreviousValue", + "sentence": "the previous value", + "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::DrawHealthBar" + "value": "SetReturnNumber" }, "parameters": [ - "Health_Bar", - "ResourceBar_ShapePainter", - "Fly", - "Health", - "" + "Object.Behavior::PropertyPreviousValue()" ] } ] } ], - "parameters": [] - } - ], - "parameters": [] - } - ], - "layers": [ - { - "ambientLightColorB": 32, - "ambientLightColorG": 0, - "ambientLightColorR": 0, - "followBaseLayerCamera": false, - "isLightingLayer": false, - "name": "", - "visibility": true, - "cameras": [ - { - "defaultSize": true, - "defaultViewport": true, - "height": 0, - "viewportBottom": 1, - "viewportLeft": 0, - "viewportRight": 1, - "viewportTop": 0, - "width": 0 - } - ], - "effects": [] - } - ], - "behaviorsSharedData": [ - { - "name": "Health", - "type": "Health::Health" - }, - { - "name": "ResourceBar_ShapePainter", - "type": "ResourceBar::ResourceBar_ShapePainter" - }, - { - "name": "ResourceBar_Sprite", - "type": "ResourceBar::ResourceBar_Sprite" - }, - { - "name": "ResourceBar_TiledSprite", - "type": "ResourceBar::ResourceBar" - }, - { - "name": "ShakeObject_PositionAngleScale", - "type": "ShakeObject::ShakeObject_PositionAngleScale" - }, - { - "name": "Shield", - "type": "Health::Shield" - }, - { - "name": "Sticker", - "type": "Sticker::Sticker" - } - ] - } - ], - "externalEvents": [], - "eventsFunctionsExtensions": [ - { - "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", - "category": "User interface", - "extensionNamespace": "", - "fullName": "Resource bar (tiled)", - "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", - "name": "ResourceBar", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/UI Essentials/UI Essentials_sliders_options.svg", - "shortDescription": "A bar that represents a resource in the game (health, mana, ammo, etc)", - "version": "0.0.1", - "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", - "origin": { - "identifier": "ResourceBar", - "name": "gdevelop-extension-store" - }, - "tags": [ - "resource", - "bar", - "health", - "mana", - "shield", - "hearts", - "lives", - "ammo" - ], - "authorIds": [ - "gqDaZjCfevOOxBYkK6zlhtZnXCg1", - "q8ubdigLvIRXLxsJDDTaokO41mc2" - ], - "dependencies": [], - "eventsFunctions": [], - "eventsBasedBehaviors": [ - { - "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", - "fullName": "Resource bar", - "name": "ResourceBar", - "objectType": "", - "eventsFunctions": [ + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, { - "fullName": "", + "description": "Force the previous resource value to update to the current one.", + "fullName": "Update previous value", "functionType": "Action", - "name": "doStepPostEvents", - "sentence": "", + "name": "UpdatePreviousValue", + "sentence": "Update the previous resource value of _PARAM0_", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "This is done after the events to allow users to read the previous value at the end of the change.", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "conditions": [], + "actions": [ { "type": { - "value": "CompareObjectTimer" + "value": "ResourceBar::ResourceBar::SetPropertyPreviousValue" }, "parameters": [ "Object", - "\"__ResourceBar.LastValueChange\"", - ">", - "Object.Behavior::PropertyPreviousValueDuration()" + "Behavior", + "=", + "Object.Behavior::PropertyValue()" ] } - ], + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ResourceBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the previous value conservation duration (in seconds) of the object.", + "fullName": "Previous value conservation duration (in seconds)", + "functionType": "ExpressionAndCondition", + "group": "Resource bar configuration", + "name": "PreviousValueDuration", + "sentence": "the previous value conservation duration", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar::UpdatePreviousValue" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "Behavior", - "=" + "Object.Behavior::PropertyPreviousValueDuration()" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", @@ -5301,11 +4669,30 @@ "objectGroups": [] }, { - "fullName": "Full", - "functionType": "Condition", - "name": "IsFull", + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "PreviousValueDuration", + "name": "SetPreviousValueDuration", "sentence": "", - "events": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResourceBar::ResourceBar::SetPropertyPreviousValueDuration" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], "parameters": [ { "description": "Object", @@ -5322,11 +4709,51 @@ "objectGroups": [] }, { - "fullName": "Empty", + "description": "Check if the resource value is changing.", + "fullName": "Value is changing", "functionType": "Condition", - "name": "IsEmpty", - "sentence": "", - "events": [], + "name": "IsChanging", + "sentence": "_PARAM0_ value is changing", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ResourceBar::ResourceBar::PreviousValue" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "Object.Behavior::PropertyValue()", + "" + ] + }, + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__ResourceBar.LastValueChange\"", + "<=", + "Object.Behavior::PropertyPreviousValueDuration()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], "parameters": [ { "description": "Object", @@ -5341,103 +4768,348 @@ } ], "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "1", + "type": "Number", + "label": "Value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "Value" }, { - "description": "the value of the object.", - "fullName": "Value", - "functionType": "ExpressionAndCondition", - "name": "Value", - "sentence": "the value", + "value": "3", + "type": "Number", + "label": "Maximum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "MaxValue" + }, + { + "value": "", + "type": "Number", + "label": "Previous value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "PreviousValue" + }, + { + "value": "1", + "type": "Number", + "label": "Previous value conservation duration (in seconds)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "PreviousValueDuration" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [ + { + "defaultName": "StepByStepBar", + "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", + "fullName": "Step by step bar", + "name": "TiledUnitsBar", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Create one background instance for of each state.\nOnly the instance for the current state is shown.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Background", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Bar", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Resource", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Background", + "=", + "1" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Bar", + "=", + "2" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Resource", + "=", + "3" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Pass configuration to the behavior", + "comment2": "" + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "ResourceBar::TiledUnitsBar::SetValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyInitialValue()", + "" + ] + }, + { + "type": { + "value": "ResourceBar::TiledUnitsBar::SetMaxValue" }, "parameters": [ - "Object.Behavior::PropertyValue()" + "Object", + "=", + "Object.PropertyMaxValue()", + "" ] } ] } ], - "expressionType": { - "type": "expression" - }, "parameters": [ { "description": "Object", "name": "Object", + "supplementaryInformation": "ResourceBar::TiledUnitsBar", "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar", - "type": "behavior" } ], "objectGroups": [] }, { "fullName": "", - "functionType": "ActionWithOperator", - "getterName": "Value", - "name": "SetValue", + "functionType": "Action", + "name": "doStepPostEvents", "sentence": "", "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Resize", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "ResourceBar::ResourceBar::SetPropertyValue" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "Object", - "Behavior", - "=", - "clamp(GetArgumentAsNumber(\"Value\"), 0, Object.Behavior::MaxValue())" - ] + "comment": "Children instances must be resized when the button size change:\n- backgrounds for each state are resized to take the full dimensions of the button\n- the label is put back at the center of the button\n\nThe scale is set back to 1 because it means that the parent instance has the same dimensions as the union of its children instances.", + "comment2": "" }, { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__ResourceBar.LastValueChange\"" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Width()", + "!=", + "max(Background.Width(), Label.Width())" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Height()", + "!=", + "max(Background.Height(), Label.Height())" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Background", + "Width", + "=", + "Object.Width()" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Background", + "Height", + "=", + "Object.Height()" + ] + }, + { + "type": { + "value": "ResourceBar::Scale" + }, + "parameters": [ + "Object", + "=", + "1" + ] + }, + { + "type": { + "value": "PanelSpriteObject::Width" + }, + "parameters": [ + "Background", + "=", + "Background.Variable(Width)" + ] + }, + { + "type": { + "value": "PanelSpriteObject::Height" + }, + "parameters": [ + "Background", + "=", + "Background.Variable(Height)" + ] + }, + { + "type": { + "value": "ResourceBar::TiledUnitsBar::CenterBar" + }, + "parameters": [ + "Object", + "" + ] + } ] } - ] + ], + "parameters": [] } ], "parameters": [ { "description": "Object", "name": "Object", + "supplementaryInformation": "ResourceBar::TiledUnitsBar", "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar", - "type": "behavior" } ], "objectGroups": [] }, { - "description": "the maximum value of the object.", - "fullName": "Maximum value", - "functionType": "ExpressionAndCondition", - "group": "Resource bar configuration", - "name": "MaxValue", - "sentence": "the maximum value", + "description": "Center the bar according to the button configuration. This is used in doStepPostEvents when the button is resized.", + "fullName": "", + "functionType": "Action", + "name": "CenterBar", + "private": true, + "sentence": "Center the bar of _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -5445,53 +5117,64 @@ "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "SetCenter" }, "parameters": [ - "Object.Behavior::PropertyMaxValue()" + "Bar", + "=", + "Background.CenterX()", + "=", + "Background.CenterY()" + ] + }, + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Bar", + "+", + "0" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Bar", + "+", + "0" ] } ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "fullName": "", - "functionType": "ActionWithOperator", - "getterName": "MaxValue", - "name": "SetMaxValue", - "sentence": "", - "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar::SetPropertyMaxValue" + "value": "MettreXY" }, "parameters": [ - "Object", - "Behavior", + "Resource", "=", - "GetArgumentAsNumber(\"Value\")" + "Bar.X()", + "=", + "Bar.Y()" + ] + }, + { + "type": { + "value": "MettreXY" + }, + "parameters": [ + "Buffer", + "=", + "Bar.X()", + "=", + "Bar.Y()" ] } ] @@ -5501,23 +5184,18 @@ { "description": "Object", "name": "Object", + "supplementaryInformation": "ResourceBar::TiledUnitsBar", "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar", - "type": "behavior" } ], "objectGroups": [] }, { - "description": "the previous value of the resource bar before the current change.", - "fullName": "Previous value", + "description": "the value of the object.", + "fullName": "Value", "functionType": "ExpressionAndCondition", - "name": "PreviousValue", - "sentence": "the previous value", + "name": "Value", + "sentence": "the value", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -5528,7 +5206,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyPreviousValue()" + "Resource.ResourceBar::Value()" ] } ] @@ -5541,23 +5219,18 @@ { "description": "Object", "name": "Object", + "supplementaryInformation": "ResourceBar::TiledUnitsBar", "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar", - "type": "behavior" } ], "objectGroups": [] }, { - "description": "Force the previous resource value to update to the current one.", - "fullName": "Update previous value", - "functionType": "Action", - "name": "UpdatePreviousValue", - "sentence": "Update the previous resource value of _PARAM0_", + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "Value", + "name": "SetValue", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -5565,13 +5238,24 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar::SetPropertyPreviousValue" + "value": "ResourceBar::ResourceBar::SetValue" }, "parameters": [ - "Object", - "Behavior", + "Resource", + "ResourceBar", "=", - "Object.Behavior::PropertyValue()" + "GetArgumentAsNumber(\"Value\")", + "" + ] + }, + { + "type": { + "value": "TiledSpriteObject::Width" + }, + "parameters": [ + "Resource", + "=", + "Resource.ResourceBar::Value() * Object.PropertyUnitWidth()" ] } ] @@ -5581,6 +5265,7 @@ { "description": "Object", "name": "Object", + "supplementaryInformation": "ResourceBar::TiledUnitsBar", "type": "object" }, { @@ -5593,12 +5278,12 @@ "objectGroups": [] }, { - "description": "the previous value conservation duration (in seconds) of the object.", - "fullName": "Previous value conservation duration (in seconds)", + "description": "the maximum value of the object.", + "fullName": "Maximum value", "functionType": "ExpressionAndCondition", "group": "Resource bar configuration", - "name": "PreviousValueDuration", - "sentence": "the previous value conservation duration", + "name": "MaxValue", + "sentence": "the maximum value", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -5609,7 +5294,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyPreviousValueDuration()" + "Resource.ResourceBar::PropertyMaxValue()" ] } ] @@ -5622,13 +5307,8 @@ { "description": "Object", "name": "Object", + "supplementaryInformation": "ResourceBar::TiledUnitsBar", "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar", - "type": "behavior" } ], "objectGroups": [] @@ -5636,8 +5316,8 @@ { "fullName": "", "functionType": "ActionWithOperator", - "getterName": "PreviousValueDuration", - "name": "SetPreviousValueDuration", + "getterName": "MaxValue", + "name": "SetMaxValue", "sentence": "", "events": [ { @@ -5646,74 +5326,33 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar::SetPropertyPreviousValueDuration" + "value": "ResourceBar::ResourceBar::SetMaxValue" }, "parameters": [ - "Object", - "Behavior", + "Resource", + "ResourceBar", "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the resource value is changing.", - "fullName": "Value is changing", - "functionType": "Condition", - "name": "IsChanging", - "sentence": "_PARAM0_ value is changing", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ResourceBar::ResourceBar::PreviousValue" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "Object.Behavior::PropertyValue()", + "GetArgumentAsNumber(\"Value\")", "" ] }, { "type": { - "value": "CompareObjectTimer" + "value": "TiledSpriteObject::Width" }, "parameters": [ - "Object", - "\"__ResourceBar.LastValueChange\"", - "<=", - "Object.Behavior::PropertyPreviousValueDuration()" + "Bar", + "=", + "Object.PropertyMaxValue() * Object.PropertyUnitWidth()" ] - } - ], - "actions": [ + }, { "type": { - "value": "SetReturnBoolean" + "value": "ResourceBar::TiledUnitsBar::CenterBar" }, "parameters": [ - "True" + "Object", + "" ] } ] @@ -5723,6 +5362,7 @@ { "description": "Object", "name": "Object", + "supplementaryInformation": "ResourceBar::TiledUnitsBar", "type": "object" }, { @@ -5736,16 +5376,6 @@ } ], "propertyDescriptors": [ - { - "value": "1", - "type": "Number", - "label": "Value", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "Value" - }, { "value": "3", "type": "Number", @@ -5757,35 +5387,83 @@ "name": "MaxValue" }, { - "value": "", + "value": "3", "type": "Number", - "label": "Previous value", + "label": "Initial value", "description": "", "group": "", "extraInformation": [], - "hidden": true, - "name": "PreviousValue" + "hidden": false, + "name": "InitialValue" }, { - "value": "1", + "value": "24", "type": "Number", - "label": "Previous value conservation duration (in seconds)", + "label": "Unit width", "description": "", "group": "", "extraInformation": [], "hidden": false, - "name": "PreviousValueDuration" + "name": "UnitWidth" } ], - "sharedPropertyDescriptors": [] - } - ], - "eventsBasedObjects": [ + "objects": [ + { + "assetStoreId": "", + "height": 32, + "name": "Resource", + "tags": "", + "texture": "", + "type": "TiledSpriteObject::TiledSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "ResourceBar", + "type": "ResourceBar::ResourceBar", + "Value": 1, + "MaxValue": 3, + "PreviousValue": 0 + } + ] + }, + { + "assetStoreId": "", + "height": 32, + "name": "Bar", + "tags": "", + "texture": "", + "type": "TiledSpriteObject::TiledSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "", + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "name": "Background", + "rightMargin": 0, + "tags": "", + "texture": "", + "tiled": true, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [] + } + ] + }, { "defaultName": "", "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", - "fullName": "Resource bar (tiled)", - "name": "TiledResourceBar", + "fullName": "Continuous bar", + "name": "TiledContinuousBar", "eventsFunctions": [ { "fullName": "", @@ -5960,7 +5638,7 @@ }, { "type": { - "value": "ResourceBar::TiledResourceBar::CenterLabel" + "value": "ResourceBar::TiledContinuousBar::CenterLabel" }, "parameters": [ "Object", @@ -5988,7 +5666,7 @@ "actions": [ { "type": { - "value": "ResourceBar::TiledResourceBar::SetValue" + "value": "ResourceBar::TiledContinuousBar::SetValue" }, "parameters": [ "Object", @@ -5999,7 +5677,7 @@ }, { "type": { - "value": "ResourceBar::TiledResourceBar::SetMaxValue" + "value": "ResourceBar::TiledContinuousBar::SetMaxValue" }, "parameters": [ "Object", @@ -6010,7 +5688,7 @@ }, { "type": { - "value": "ResourceBar::TiledResourceBar::SetPreviousValueDuration" + "value": "ResourceBar::TiledContinuousBar::SetPreviousValueDuration" }, "parameters": [ "Object", @@ -6036,7 +5714,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledResourceBar", + "supplementaryInformation": "ResourceBar::TiledContinuousBar", "type": "object" } ], @@ -6157,7 +5835,7 @@ }, { "type": { - "value": "ResourceBar::TiledResourceBar::CenterLabel" + "value": "ResourceBar::TiledContinuousBar::CenterLabel" }, "parameters": [ "Object", @@ -6166,7 +5844,7 @@ }, { "type": { - "value": "ResourceBar::TiledResourceBar::CenterBar" + "value": "ResourceBar::TiledContinuousBar::CenterBar" }, "parameters": [ "Object", @@ -6184,11 +5862,11 @@ { "type": { "inverted": true, - "value": "ResourceBar::TiledResourceBar::IsChanging" + "value": "ResourceBar::TiledContinuousBar::IsChanging" }, "parameters": [ "Object", - "ResourceBar" + "" ] }, { @@ -6207,7 +5885,7 @@ "Buffer", "Tween", "\"ChangeValue\"", - "Resource.ResourceBar::Value() * Object.PropertyUnitWidth()", + "Object.WidthForValue()", "\"linear\"", "Object.PropertyEasingDuration() * 1000", "" @@ -6220,7 +5898,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledResourceBar", + "supplementaryInformation": "ResourceBar::TiledContinuousBar", "type": "object" } ], @@ -6303,7 +5981,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledResourceBar", + "supplementaryInformation": "ResourceBar::TiledContinuousBar", "type": "object" } ], @@ -6390,7 +6068,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledResourceBar", + "supplementaryInformation": "ResourceBar::TiledContinuousBar", "type": "object" } ], @@ -6425,7 +6103,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledResourceBar", + "supplementaryInformation": "ResourceBar::TiledContinuousBar", "type": "object" } ], @@ -6462,7 +6140,7 @@ "Resource", "Tween", "\"ChangeValue\"", - "Resource.ResourceBar::Value() * Object.PropertyUnitWidth()", + "Object.WidthForValue()", "\"linear\"", "Object.PropertyEasingDuration() * 1000", "" @@ -6475,7 +6153,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledResourceBar", + "supplementaryInformation": "ResourceBar::TiledContinuousBar", "type": "object" }, { @@ -6517,7 +6195,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledResourceBar", + "supplementaryInformation": "ResourceBar::TiledContinuousBar", "type": "object" } ], @@ -6553,17 +6231,27 @@ "parameters": [ "Bar", "=", - "Object.PropertyMaxValue() * Object.PropertyUnitWidth()" + "round(Bar.Width() * Resource.ResourceBar::Value() / Resource.ResourceBar::MaxValue())" ] }, { "type": { - "value": "ResourceBar::TiledResourceBar::CenterBar" + "value": "ResourceBar::TiledContinuousBar::CenterBar" }, "parameters": [ "Object", "" ] + }, + { + "type": { + "value": "TiledSpriteObject::Width" + }, + "parameters": [ + "Resource", + "=", + "Object.WidthForValue()" + ] } ] } @@ -6572,7 +6260,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledResourceBar", + "supplementaryInformation": "ResourceBar::TiledContinuousBar", "type": "object" }, { @@ -6614,7 +6302,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledResourceBar", + "supplementaryInformation": "ResourceBar::TiledContinuousBar", "type": "object" } ], @@ -6701,7 +6389,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledResourceBar", + "supplementaryInformation": "ResourceBar::TiledContinuousBar", "type": "object" }, { @@ -6750,7 +6438,42 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledResourceBar", + "supplementaryInformation": "ResourceBar::TiledContinuousBar", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "Value width", + "functionType": "Expression", + "name": "WidthForValue", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "round(Bar.Width() * Resource.ResourceBar::Value() / Resource.ResourceBar::MaxValue())" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "ResourceBar::TiledContinuousBar", "type": "object" } ], @@ -6818,16 +6541,6 @@ "hidden": false, "name": "InitialValue" }, - { - "value": "24", - "type": "Number", - "label": "Unit width", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "UnitWidth" - }, { "value": "1", "type": "Number", From 580af19f917c6ed6b91d4c856f4626319ea25818 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Tue, 29 Nov 2022 20:19:14 +0100 Subject: [PATCH 28/98] Fix the buffer. --- examples/resource-bar/game.json | 5775 +++++++++++-------------------- 1 file changed, 2094 insertions(+), 3681 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 0d365aba2..4dd924395 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -507,6 +507,24 @@ "name": "assets\\Health Bar Box.png", "smoothed": true, "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/tiled_Tiled Filler UI Heart.png", + "kind": "image", + "metadata": "", + "name": "assets\\tiled_Tiled Filler UI Heart.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/tiled_Tiled Empty UI Heart.png", + "kind": "image", + "metadata": "", + "name": "assets\\tiled_Tiled Empty UI Heart.png", + "smoothed": true, + "userAdded": true } ], "resourceFolders": [] @@ -535,7 +553,7 @@ "gridColor": 10401023, "gridAlpha": 0.2, "snap": true, - "zoomFactor": 1.1599999938964847, + "zoomFactor": 1, "windowMask": false }, "objectsGroups": [ @@ -553,96 +571,6 @@ ], "variables": [], "instances": [ - { - "angle": 0, - "customSize": true, - "height": 16, - "layer": "", - "name": "TiledEmptyUiHeart", - "persistentUuid": "a1be0010-4eb7-4e54-a651-7d77ae646149", - "width": 161, - "x": 305, - "y": 192, - "zOrder": 0, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 16, - "layer": "", - "name": "Tiled_ResourceBar", - "persistentUuid": "be98771a-978f-443c-80e8-197098aef457", - "width": 15, - "x": 306, - "y": 192, - "zOrder": 15, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 16, - "layer": "", - "name": "HealthBarFill", - "persistentUuid": "1e7ce7cc-5104-4c95-95a0-343f3d97e140", - "width": 63, - "x": 305, - "y": 236, - "zOrder": 17, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 62, - "layer": "", - "name": "HeartPixel_9patch", - "persistentUuid": "d0461165-f597-4574-b3e8-8e78014d1c61", - "width": 208, - "x": 304, - "y": 330, - "zOrder": 0, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 19, - "layer": "", - "name": "Heart_Pixel_Tiled", - "persistentUuid": "63560c9a-582e-4a76-9560-e929ab4a1fdf", - "width": 80, - "x": 344, - "y": 352, - "zOrder": 21, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "Heart_Pixel", - "persistentUuid": "19dc3b0f-137e-428c-ae37-9a64934186c6", - "width": 0, - "x": 344, - "y": 405, - "zOrder": 19, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, { "angle": 0, "customSize": false, @@ -652,7 +580,7 @@ "persistentUuid": "75acefa2-30d2-45f3-8955-bdbcc059a348", "width": 0, "x": 422, - "y": 86, + "y": 82, "zOrder": 25, "numberProperties": [], "stringProperties": [], @@ -666,8 +594,8 @@ "name": "MinusKey", "persistentUuid": "68d80c16-a4fc-4793-aa38-eb458b7c1a28", "width": 0, - "x": 326, - "y": 90, + "x": 322, + "y": 82, "zOrder": 26, "numberProperties": [], "stringProperties": [], @@ -676,14 +604,14 @@ { "angle": 0, "customSize": true, - "height": 12, + "height": 96, "layer": "", - "name": "EnergyBarFill", - "persistentUuid": "8cba0615-b7ce-4abe-9f1c-1d1b439f1408", - "width": 70, - "x": 306, - "y": 287, - "zOrder": 37, + "name": "UnitsBar", + "persistentUuid": "cd7ae08a-3045-436b-bda9-beda9d2b55db", + "width": 226, + "x": 408, + "y": 160, + "zOrder": 39, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -691,74 +619,74 @@ { "angle": 0, "customSize": true, - "height": 24, + "height": 40, "layer": "", - "name": "HealthBarBox", - "persistentUuid": "5bc7c3f2-900c-4e32-b8cb-a6f2179f9638", - "width": 176, - "x": 297, - "y": 232, - "zOrder": 0, + "name": "ContinousBar", + "persistentUuid": "60a7c4ed-31bf-44a9-8513-09c9bfd8eb42", + "width": 194, + "x": 430, + "y": 408, + "zOrder": 40, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, - "customSize": true, - "height": 26, + "customSize": false, + "height": 16, "layer": "", - "name": "EnergyBar", - "persistentUuid": "2513f81b-326c-4c90-9245-ca056617c153", - "width": 176, - "x": 297, - "y": 280, - "zOrder": 0, + "name": "NoBackgroundUnitsBar", + "persistentUuid": "850c5ba6-8615-4217-bc65-f0b4a149b4cc", + "width": 96, + "x": 240, + "y": 320, + "zOrder": 41, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, - "customSize": true, - "height": 35, + "customSize": false, + "height": 0, "layer": "", - "name": "BarFrame", - "persistentUuid": "c43eca46-b733-4930-802a-6187c1c5f0df", - "width": 200, - "x": 304, - "y": 453, - "zOrder": 0, + "name": "UnitsBar", + "persistentUuid": "20b69c52-a1a2-4f22-b7b7-4560d4da8dcb", + "width": 0, + "x": 184, + "y": 176, + "zOrder": 42, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, - "customSize": true, - "height": 19, + "customSize": false, + "height": 0, "layer": "", - "name": "BlueBar", - "persistentUuid": "b4c1e490-8579-4224-8124-3640eb8901dc", - "width": 72, - "x": 309, - "y": 461, - "zOrder": 38, + "name": "ContinousBar", + "persistentUuid": "a4664301-98a6-419b-a0d5-c5028371de9c", + "width": 0, + "x": 216, + "y": 424, + "zOrder": 43, "numberProperties": [], "stringProperties": [], "initialVariables": [] }, { "angle": 0, - "customSize": false, - "height": 208, + "customSize": true, + "height": 56, "layer": "", - "name": "UnitsBar", - "persistentUuid": "cd7ae08a-3045-436b-bda9-beda9d2b55db", - "width": 208, - "x": 536, - "y": 200, - "zOrder": 39, + "name": "NoBackgroundUnitsBar", + "persistentUuid": "a4a16b93-f588-4324-b306-5f85919b34ab", + "width": 200, + "x": 424, + "y": 304, + "zOrder": 44, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -766,14 +694,14 @@ { "angle": 0, "customSize": true, - "height": 16, + "height": 48, "layer": "", - "name": "EnergyBarFill", - "persistentUuid": "3a8fff9b-00b1-4f04-b81c-de2549e8a76a", - "width": 40, - "x": 368, - "y": 236, - "zOrder": 37, + "name": "NoLabelContinousBar", + "persistentUuid": "e7d18ac3-25ec-477d-86dd-c7e055964917", + "width": 176, + "x": 440, + "y": 488, + "zOrder": 46, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -783,234 +711,18 @@ "customSize": false, "height": 0, "layer": "", - "name": "ContinousBar", - "persistentUuid": "60a7c4ed-31bf-44a9-8513-09c9bfd8eb42", + "name": "NoLabelContinousBar", + "persistentUuid": "a55d7eb7-5856-4e57-9a53-e6eb6731dbfe", "width": 0, - "x": 552, - "y": 312, - "zOrder": 40, + "x": 216, + "y": 504, + "zOrder": 47, "numberProperties": [], "stringProperties": [], "initialVariables": [] } ], "objects": [ - { - "assetStoreId": "8d524a624fbc72a1fd6c3975369a7cd55b8a52035887ef664bcd93bf8e273881", - "name": "Heart_Unit", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Emote Heart.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "752e405ef67d9f9d1bd36f9763f1b6fc05633d64700982c0f3118a25a32e39b2", - "height": 16, - "name": "TiledEmptyUiHeart", - "tags": "", - "texture": "tiled_Tiled Empty UI Heart.png", - "type": "TiledSpriteObject::TiledSprite", - "width": 16, - "variables": [], - "effects": [], - "behaviors": [] - }, - { - "assetStoreId": "abf51d082db5a117d9ee2e65299660f6787d47664e4571bad6db3075b3393c5f", - "height": 16, - "name": "Tiled_ResourceBar", - "tags": "", - "texture": "tiled_Tiled Filler UI Heart.png", - "type": "TiledSpriteObject::TiledSprite", - "width": 16, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_TiledSprite", - "type": "ResourceBar::ResourceBar", - "StartingQuantity": 1, - "CurrentQuantity": 0, - "UnitWidth": 16, - "MaxQuantity": 10, - "Quantity": 1 - } - ] - }, - { - "assetStoreId": "45107bbfbc2b5cbc83e3785f802b99664a23d59e74414e332c9afafac63e1ca3", - "name": "HealthBar", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Health Bar.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "1f3dba67c868b7320572a6591d1d0418f23b7c132df0963cf77286a9149971d9", - "height": 16, - "name": "HealthBarFill", - "tags": "", - "texture": "tiled_Health Bar Fill.png", - "type": "TiledSpriteObject::TiledSprite", - "width": 128, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_TiledSprite", - "type": "ResourceBar::ResourceBar", - "StartingQuantity": 10, - "CurrentQuantity": 0, - "UnitWidth": 8, - "MaxQuantity": 20, - "Quantity": 10 - } - ] - }, - { - "assetStoreId": "3bd9517a10ad3d98341eea33f0c139f08a1b04f26500e85ac49bb7f9e157a303", - "height": 12, - "name": "EnergyBarFill", - "tags": "", - "texture": "tiled_Energy Bar Fill.png", - "type": "TiledSpriteObject::TiledSprite", - "width": 128, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_TiledSprite", - "type": "ResourceBar::ResourceBar", - "StartingQuantity": 10, - "CurrentQuantity": 0, - "UnitWidth": 8, - "MaxQuantity": 20, - "Quantity": 10 - } - ] - }, - { - "assetStoreId": "138ee716846635e3e0e5ab7b63752d1a36754f1ac874c70e1b5fa372d5a05474", - "bottomMargin": 6, - "height": 15, - "leftMargin": 11, - "name": "HealthBarBox", - "rightMargin": 9, - "tags": "", - "texture": "Health Bar Box.png", - "tiled": true, - "topMargin": 6, - "type": "PanelSpriteObject::PanelSprite", - "width": 96, - "variables": [], - "effects": [], - "behaviors": [] - }, - { - "assetStoreId": "", - "bottomMargin": 0, - "height": 62, - "leftMargin": 64, - "name": "HeartPixel_9patch", - "rightMargin": 64, - "tags": "", - "texture": "Health Bar.png", - "tiled": true, - "topMargin": 0, - "type": "PanelSpriteObject::PanelSprite", - "width": 154, - "variables": [], - "effects": [], - "behaviors": [] - }, - { - "assetStoreId": "", - "height": 19, - "name": "Heart_Pixel_Tiled", - "tags": "", - "texture": "assets\\Heart-1-1.png", - "type": "TiledSpriteObject::TiledSprite", - "width": 26, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_TiledSprite", - "type": "ResourceBar::ResourceBar", - "StartingQuantity": 1, - "CurrentQuantity": 0, - "UnitWidth": 26, - "MaxQuantity": 5, - "Quantity": 1 - } - ] - }, { "assetStoreId": "996e07c73069934a868dc8212a0d7d959dfdd245af964998aad12cf57d252ac3", "name": "PlusKey", @@ -1120,245 +832,156 @@ ] }, { - "assetStoreId": "603d81772c22a6401f0bb19588cb7bb6f384ae840c9e03391874c15a049ade25", - "bottomMargin": 12, - "height": 26, - "leftMargin": 10, - "name": "EnergyBar", - "rightMargin": 10, + "assetStoreId": "", + "name": "UnitsBar", "tags": "", - "texture": "Energy Bar.png", - "tiled": true, - "topMargin": 13, - "type": "PanelSpriteObject::PanelSprite", - "width": 78, + "type": "TiledUnitsBar::TiledUnitsBar", "variables": [], "effects": [], - "behaviors": [] + "behaviors": [], + "content": { + "UnitWidth": 26 + }, + "childrenContent": { + "Background": { + "bottomMargin": 30, + "height": 64, + "leftMargin": 64, + "rightMargin": 64, + "texture": "assets\\Scroll.png", + "tiled": false, + "topMargin": 30, + "width": 154 + }, + "Bar": { + "height": 26, + "texture": "assets\\Empty Heart.png", + "width": 26 + }, + "Resource": { + "height": 26, + "texture": "assets\\Full Heart.png", + "width": 26 + } + } }, { - "assetStoreId": "0ad03c70a5c5284cc85170b3852e425db0f4deed8225b1b10722ef26902186d8", - "bottomMargin": 2, - "height": 9, - "leftMargin": 3, - "name": "HealthBar2", - "rightMargin": 3, - "tags": "", - "texture": "Health Bar.png2", - "tiled": true, - "topMargin": 4, - "type": "PanelSpriteObject::PanelSprite", - "width": 78, - "variables": [], - "effects": [], - "behaviors": [] - }, - { - "assetStoreId": "138ee716846635e3e0e5ab7b63752d1a36754f1ac874c70e1b5fa372d5a05474", - "bottomMargin": 6, - "height": 15, - "leftMargin": 11, - "name": "HealthBarBox2", - "rightMargin": 9, - "tags": "", - "texture": "Health Bar Box.png2", - "tiled": true, - "topMargin": 6, - "type": "PanelSpriteObject::PanelSprite", - "width": 96, - "variables": [], - "effects": [], - "behaviors": [] - }, - { - "assetStoreId": "f353e7a7fcbe2d520d0901f187986570a9413978641b27454f285a705a2aba34", - "name": "BarFrame", + "assetStoreId": "", + "name": "NoBackgroundUnitsBar", "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, + "type": "TiledUnitsBar::TiledUnitsBar", "variables": [], "effects": [], "behaviors": [], - "animations": [ - { - "name": "No Shadow", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Bar Frame_No Shadow.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] + "content": { + "UnitWidth": 16, + "HideBackground": true, + "ShowBackground": false + }, + "childrenContent": { + "Background": { + "bottomMargin": 0, + "height": 16, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\tiled_Tiled Empty UI Heart.png", + "tiled": true, + "topMargin": 0, + "width": 48 }, - { - "name": "Shadow", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Bar Frame_Shadow.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "7cd73b60b8f9a67bc5405a8dd03008c0fb7931dbcf2bc28312089161e77a3b74", - "name": "BlueBar", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_Sprite", - "type": "ResourceBar::ResourceBar_Sprite", - "StartingQuantity": 12, - "CurrentQuantity": 0, - "MaxQuantity": 24, - "NextUnitToCreate": 0, - "EmptyUnitColorTint": "", - "EmptyUnitOpacity": 0, - "EmptyUnitAnimationNumber": 0, - "ActiveUnitOpacity": 255, - "ActiveUnitColorTint": "255;255;255", - "ActiveUnitAnimationNumber": 0, - "Quantity": 12 - } - ], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Blue bar.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] + "Bar": { + "height": 16, + "texture": "assets\\tiled_Tiled Empty UI Heart.png", + "width": 16 + }, + "Resource": { + "height": 16, + "texture": "assets\\tiled_Tiled Filler UI Heart.png", + "width": 16 } - ] + } }, { "assetStoreId": "", - "name": "UnitsBar", + "name": "ContinousBar", "tags": "", - "type": "ResourceBar::TiledUnitsBar", + "type": "TiledContinuousBar::TiledContinuousBar", "variables": [], "effects": [], "behaviors": [], "content": { - "UnitWidth": 26 + "MaxValue": 10, + "InitialValue": 7, + "BarLeftPadding": 9, + "BarRightPadding": 9, + "BarBottomPadding": 3, + "BarTopPadding": 3 }, "childrenContent": { "Background": { - "bottomMargin": 30, - "height": 64, - "leftMargin": 64, - "rightMargin": 64, - "texture": "assets\\Scroll.png", - "tiled": false, - "topMargin": 30, - "width": 154 + "bottomMargin": 6, + "height": 15, + "leftMargin": 11, + "rightMargin": 11, + "texture": "assets\\Health Bar Box.png", + "tiled": true, + "topMargin": 6, + "width": 96 }, - "Bar": { - "height": 26, - "texture": "assets\\Empty Heart.png", - "width": 26 + "Buffer": { + "height": 8, + "texture": "assets\\tiled_Energy Bar Fill.png", + "width": 32 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "2 / 3", + "font": "", + "characterSize": 8, + "color": { + "b": 255, + "g": 255, + "r": 255 + } }, "Resource": { - "height": 26, - "texture": "assets\\Full Heart.png", - "width": 26 + "height": 8, + "texture": "assets\\tiled_Health Bar Fill.png", + "width": 32 } } }, { "assetStoreId": "", - "name": "ContinousBar", + "name": "NoLabelContinousBar", "tags": "", - "type": "ResourceBar::TiledContinuousBar", + "type": "TiledContinuousBar::TiledContinuousBar", "variables": [], "effects": [], "behaviors": [], "content": { "MaxValue": 10, - "InitialValue": 7 + "InitialValue": 7, + "BarLeftPadding": 9, + "BarRightPadding": 9, + "BarBottomPadding": 3, + "BarTopPadding": 3, + "ShowLabel": false }, "childrenContent": { "Background": { - "bottomMargin": 4, + "bottomMargin": 6, "height": 15, - "leftMargin": 8, - "rightMargin": 8, + "leftMargin": 11, + "rightMargin": 11, "texture": "assets\\Health Bar Box.png", "tiled": true, - "topMargin": 4, + "topMargin": 6, "width": 96 }, - "Bar": { - "height": 8, - "texture": "assets\\Empty Heart.png", - "width": 32 - }, "Buffer": { "height": 8, "texture": "assets\\tiled_Energy Bar Fill.png", @@ -1369,13 +992,13 @@ "italic": false, "smoothed": true, "underlined": false, - "string": "Text", + "string": "2 / 3", "font": "", "characterSize": 8, "color": { - "b": 0, - "g": 0, - "r": 0 + "b": 255, + "g": 255, + "r": 255 } }, "Resource": { @@ -1575,7 +1198,7 @@ "actions": [ { "type": { - "value": "ResourceBar::TiledUnitsBar::SetValue" + "value": "TiledUnitsBar::TiledUnitsBar::SetValue" }, "parameters": [ "UnitsBar", @@ -1586,7 +1209,18 @@ }, { "type": { - "value": "ResourceBar::TiledContinuousBar::SetValue" + "value": "TiledUnitsBar::TiledUnitsBar::SetValue" + }, + "parameters": [ + "NoBackgroundUnitsBar", + "+", + "0.5", + "" + ] + }, + { + "type": { + "value": "TiledContinuousBar::TiledContinuousBar::SetValue" }, "parameters": [ "ContinousBar", @@ -1594,6 +1228,17 @@ "0.5", "" ] + }, + { + "type": { + "value": "TiledContinuousBar::TiledContinuousBar::SetValue" + }, + "parameters": [ + "NoLabelContinousBar", + "+", + "0.5", + "" + ] } ] }, @@ -1615,7 +1260,7 @@ "actions": [ { "type": { - "value": "ResourceBar::TiledUnitsBar::SetValue" + "value": "TiledUnitsBar::TiledUnitsBar::SetValue" }, "parameters": [ "UnitsBar", @@ -1626,7 +1271,18 @@ }, { "type": { - "value": "ResourceBar::TiledContinuousBar::SetValue" + "value": "TiledUnitsBar::TiledUnitsBar::SetValue" + }, + "parameters": [ + "NoBackgroundUnitsBar", + "-", + "0.5", + "" + ] + }, + { + "type": { + "value": "TiledContinuousBar::TiledContinuousBar::SetValue" }, "parameters": [ "ContinousBar", @@ -1634,6 +1290,17 @@ "0.5", "" ] + }, + { + "type": { + "value": "TiledContinuousBar::TiledContinuousBar::SetValue" + }, + "parameters": [ + "NoLabelContinousBar", + "-", + "0.5", + "" + ] } ] } @@ -1752,6 +1419,82 @@ } ], "parameters": [] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TiledContinuousBar::TiledContinuousBar::IsLabelShown" + }, + "parameters": [ + "NoLabelContinousBar", + "" + ] + }, + { + "type": { + "inverted": true, + "value": "SourisSurObjet" + }, + "parameters": [ + "NoLabelContinousBar", + "", + "", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TiledContinuousBar::TiledContinuousBar::SetLabelShown" + }, + "parameters": [ + "NoLabelContinousBar", + "no", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "TiledContinuousBar::TiledContinuousBar::IsLabelShown" + }, + "parameters": [ + "NoLabelContinousBar", + "" + ] + }, + { + "type": { + "value": "SourisSurObjet" + }, + "parameters": [ + "NoLabelContinousBar", + "", + "", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TiledContinuousBar::TiledContinuousBar::SetLabelShown" + }, + "parameters": [ + "NoLabelContinousBar", + "yes", + "" + ] + } + ] } ], "layers": [ @@ -1785,1758 +1528,163 @@ }, { "name": "ResourceBar_TiledSprite", - "type": "ResourceBar::ResourceBar" + "type": "TiledContinuousBar::ResourceBar" } ] - }, + } + ], + "externalEvents": [], + "eventsFunctionsExtensions": [ { - "b": 0, - "disableInputWhenNotFocused": true, - "mangledName": "Shape_32Painter_32_40Game_41", - "name": "Shape Painter (Game)", - "r": 0, - "standardSortMethod": true, - "stopSoundsOnStartup": true, - "title": "", - "v": 0, - "uiSettings": { - "grid": true, - "gridType": "rectangular", - "gridWidth": 8, - "gridHeight": 8, - "gridOffsetX": 0, - "gridOffsetY": 0, - "gridColor": 10401023, - "gridAlpha": 0.2, - "snap": true, - "zoomFactor": 1.06, - "windowMask": false - }, - "objectsGroups": [], - "variables": [], - "instances": [ - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "Shield_Bar", - "persistentUuid": "b581caf8-44ee-423e-b57e-cdd910fb7374", - "width": 0, - "x": 192, - "y": 216, - "zOrder": 2, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "ResourceMouseX_Bar", - "persistentUuid": "17a23f4a-a442-4b52-8380-9f2b6a9c2494", - "width": 0, - "x": 192, - "y": 536, - "zOrder": 3, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 80, - "layer": "", - "name": "Fly", - "persistentUuid": "e0b70af7-7a81-41c3-88ac-88305df91ed2", - "width": 128, - "x": 481.13275146484375, - "y": 293, - "zOrder": 4, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 128, - "layer": "", - "name": "Moon", - "persistentUuid": "8428ea9d-6d1e-41b0-9f54-1840f3378846", - "width": 129.1327362060547, - "x": 480, - "y": 272, - "zOrder": 0, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "Health_Text", - "persistentUuid": "921b2f28-8bee-4ab2-a6cc-1ee823c5215e", - "width": 0, - "x": 48, - "y": 96, - "zOrder": 9, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "Shield_Text", - "persistentUuid": "a231209b-a5d8-4280-868d-1e9beb31527b", - "width": 0, - "x": 48, - "y": 208, - "zOrder": 10, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "ResourceMouseX_Text", - "persistentUuid": "07fda015-55f8-4959-80fc-f1ee3074d028", - "width": 0, - "x": 32, - "y": 512, - "zOrder": 11, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "Title_Text", - "persistentUuid": "29ae792c-1331-430c-aadf-70fa8d9e36d6", - "width": 0, - "x": 208, - "y": 16, - "zOrder": 12, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "Health_Bar", - "persistentUuid": "c411b32c-f357-4b8f-9e87-f3fdde7657d5", - "width": 0, - "x": 192, - "y": 104, - "zOrder": 1, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - } - ], - "objects": [ - { - "assetStoreId": "", - "name": "Health_Bar", - "tags": "", - "type": "PrimitiveDrawing::Drawer", - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_ShapePainter", - "type": "ResourceBar::ResourceBar_ShapePainter", - "ValueMin": 0, - "ValueMax": 1, - "TickSpacing": 0, - "BarLength": 200, - "BarThickness": 16, - "InactiveBarColor": "11;255;0", - "InactiveBarOpacity": 96, - "ActiveBarColor": " 11;255;0", - "ActiveBarOpacity": 255, - "RoundedBar": true, - "Value": 0, - "ThumbOffset": 0, - "NeedRedraw": true - } - ], - "fillOpacity": 255, - "outlineSize": 1, - "outlineOpacity": 255, - "fillColor": { - "b": 255, - "g": 255, - "r": 255 - }, - "outlineColor": { - "b": 0, - "g": 0, - "r": 0 - }, - "absoluteCoordinates": false, - "clearBetweenFrames": true - }, - { - "assetStoreId": "", - "name": "MiniHealth_Bar", - "tags": "", - "type": "PrimitiveDrawing::Drawer", - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_ShapePainter", - "type": "ResourceBar::ResourceBar_ShapePainter", - "ValueMin": 0, - "ValueMax": 1, - "TickSpacing": 0, - "BarLength": 50, - "BarThickness": 4, - "InactiveBarColor": "11;255;0", - "InactiveBarOpacity": 96, - "ActiveBarColor": " 11;255;0", - "ActiveBarOpacity": 255, - "Value": 0, - "ThumbOffset": 0, - "NeedRedraw": true - }, - { - "name": "Sticker", - "type": "Sticker::Sticker", - "OnlyFollowPosition": true - } - ], - "fillOpacity": 255, - "outlineSize": 1, - "outlineOpacity": 255, - "fillColor": { - "b": 255, - "g": 255, - "r": 255 - }, - "outlineColor": { - "b": 0, - "g": 0, - "r": 0 - }, - "absoluteCoordinates": false, - "clearBetweenFrames": true - }, - { - "assetStoreId": "", - "name": "Shield_Bar", - "tags": "", - "type": "PrimitiveDrawing::Drawer", - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_ShapePainter", - "type": "ResourceBar::ResourceBar_ShapePainter", - "ValueMin": 0, - "ValueMax": 1, - "TickSpacing": 0, - "ThumbShape": "circle", - "ThumbWidth": 20, - "ThumbHeight": 20, - "ThumbColor": " 24;119;211", - "ThumbOpacity": 255, - "BarLength": 200, - "BarThickness": 16, - "InactiveBarColor": "144;19;254", - "InactiveBarOpacity": 96, - "ActiveBarColor": " 144;19;254", - "ActiveBarOpacity": 255, - "HaloRadius": 24, - "HaloOpacityHover": 32, - "HaloOpacityClick": 64, - "RoundedBar": true, - "Enabled": true, - "IsBeingDragged": false, - "Value": 0, - "ThumbOffset": 0, - "NeedRedraw": true, - "IsHovered": false, - "MouseX": 0, - "MouseY": 0, - "CurrentHaloRadius": 0, - "HaloGrowSpeed": 0.2, - "TargetHaloRadius": 0.19999992847442627 - } - ], - "fillOpacity": 255, - "outlineSize": 1, - "outlineOpacity": 255, - "fillColor": { - "b": 255, - "g": 255, - "r": 255 - }, - "outlineColor": { - "b": 0, - "g": 0, - "r": 0 - }, - "absoluteCoordinates": false, - "clearBetweenFrames": true - }, - { - "assetStoreId": "", - "name": "ResourceMouseX_Bar", - "tags": "", - "type": "PrimitiveDrawing::Drawer", - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_ShapePainter", - "type": "ResourceBar::ResourceBar_ShapePainter", - "ValueMin": 0, - "ValueMax": 1, - "TickSpacing": 0, - "ThumbShape": "circle", - "ThumbWidth": 20, - "ThumbHeight": 20, - "ThumbColor": "248;231;28", - "ThumbOpacity": 255, - "BarLength": 200, - "BarThickness": 16, - "InactiveBarColor": "248;231;28", - "InactiveBarOpacity": 96, - "ActiveBarColor": "248;231;28", - "ActiveBarOpacity": 255, - "HaloRadius": 24, - "HaloOpacityHover": 32, - "HaloOpacityClick": 64, - "RoundedBar": false, - "Enabled": true, - "IsBeingDragged": false, - "Value": 0, - "ThumbOffset": 0, - "NeedRedraw": true, - "IsHovered": false, - "MouseX": 0, - "MouseY": 0, - "CurrentHaloRadius": 0, - "HaloGrowSpeed": 0.2, - "TargetHaloRadius": 0.19999992847442627 - } - ], - "fillOpacity": 255, - "outlineSize": 1, - "outlineOpacity": 255, - "fillColor": { - "b": 255, - "g": 255, - "r": 255 - }, - "outlineColor": { - "b": 0, - "g": 0, - "r": 0 - }, - "absoluteCoordinates": false, - "clearBetweenFrames": true - }, - { - "assetStoreId": "48a2d179a1921276abe3f99ce3cf195fa7c310bc511fa215d9647c3fb9027921", - "name": "Fly", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "Health", - "type": "Health::Health", - "Health": 100, - "DamageCooldown": 0, - "MaxHealth": 100, - "IsJustDamaged": false, - "HealthRegenRate": 0, - "HealthRegenDelay": 0, - "AllowOverHealing": false, - "HitAtLeastOnce": false - }, - { - "name": "ShakeObject_PositionAngleScale", - "type": "ShakeObject::ShakeObject_PositionAngleScale" - }, - { - "name": "Shield", - "type": "Health::Shield", - "RequireHealth": "Health", - "MaxShieldPoints": 30, - "ShieldDuration": 5, - "ShieldPoints": 0, - "ShieldRegenRate": 0, - "ShieldBlocksExcessDamage": false, - "ShieldRegenDelay": 0, - "RegenShieldWhenZeroPoints": false, - "IsShieldJustDamaged": false - } - ], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.05000000074505806, - "sprites": [ - { - "hasCustomCollisionMask": true, - "image": "Fly_1.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_2.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_3.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_4.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_5.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_6.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_7.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_8.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_9.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - }, - { - "hasCustomCollisionMask": true, - "image": "Fly_10.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": false, - "name": "centre", - "x": 57.500244140625, - "y": 48.2830924987793 - }, - "customCollisionMask": [ - [ - { - "x": 35, - "y": 25 - }, - { - "x": 80, - "y": 25 - }, - { - "x": 80, - "y": 70 - }, - { - "x": 35, - "y": 70 - } - ] - ] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "574655a4565bd983af8f5dd98e0fd8cda3bd67cf929c00d3db317e898322e06b", - "name": "Star", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "LargeNarrow", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Star_LargeNarrow.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "LargeWide", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Star_LargeWide.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Medium", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Star_Medium.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Small", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Star_Small.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "794ab341df538c9b3bdad418dfdcccc7be5d90f3d0b5929d6d528a542c6ed3ae", - "name": "SilverShield", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [ - { - "effectType": "Outline", - "name": "Effect", - "doubleParameters": { - "padding": 2, - "thickness": 2 - }, - "stringParameters": { - "color": "255;255;255" - }, - "booleanParameters": {} - } - ], - "behaviors": [], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Silver shield.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 14.592423439025879, - "y": 15.103429794311523 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "d2bc2d266f5bb666ef68023abc14f51bc8fe8b5222af931efa378ac10c50f98a", - "name": "MeteorDetailed", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "Large", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": true, - "image": "Meteor Detailed_Large.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 65.07723999023438, - "y": 63.82252502441406 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [ - [ - { - "x": 20, - "y": 20 - }, - { - "x": 110, - "y": 20 - }, - { - "x": 110, - "y": 110 - }, - { - "x": 20, - "y": 110 - } - ] - ] - } - ] - } - ] - }, - { - "name": "Small", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": true, - "image": "Meteor Detailed_Small.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 65.07723999023438, - "y": 63.82252502441406 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [ - [ - { - "x": 20, - "y": 20 - }, - { - "x": 110, - "y": 20 - }, - { - "x": 110, - "y": 110 - }, - { - "x": 20, - "y": 110 - } - ] - ] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "a1e62f5a19d1fe476e2ad0b8977768d020cc1dc55423427f79a486664cebb631", - "name": "UpgradedPotionBlue", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "No Shadow", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Upgraded Potion Blue_No Shadow.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 15.793042182922363, - "y": 15.89681625366211 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Shadow", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Upgraded Potion Blue_Shadow.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 15.793042182922363, - "y": 15.89681625366211 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "c2ce913ddbcd055c4e49a1c01b63aff1a3d59e4e1c1845db4c38aedda3712d3a", - "name": "Moon", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "Sticker", - "type": "Sticker::Sticker", - "OnlyFollowPosition": false - } - ], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Moon.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "", - "bold": true, - "italic": false, - "name": "Health_Text", - "smoothed": true, - "tags": "", - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [], - "string": "Health", - "font": "", - "characterSize": 30, - "color": { - "b": 255, - "g": 255, - "r": 255 - } - }, - { - "assetStoreId": "", - "bold": true, - "italic": false, - "name": "Shield_Text", - "smoothed": true, - "tags": "", - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [], - "string": "Shield", - "font": "", - "characterSize": 30, - "color": { - "b": 255, - "g": 255, - "r": 255 - } - }, - { - "assetStoreId": "", - "bold": true, - "italic": false, - "name": "ResourceMouseX_Text", - "smoothed": true, - "tags": "", - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [], - "string": "Resource \n(Mouse X)", - "font": "", - "characterSize": 30, - "color": { - "b": 255, - "g": 255, - "r": 255 - } - }, - { - "assetStoreId": "", - "bold": true, - "italic": false, - "name": "Title_Text", - "smoothed": true, - "tags": "", - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [], - "string": "Extension: Resource Bar", - "font": "", - "characterSize": 30, - "color": { - "b": 255, - "g": 255, - "r": 255 - } - }, - { - "assetStoreId": "", - "name": "ResourceBarNew", - "tags": "", - "type": "PrimitiveDrawing::Drawer", - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_ShapePainter", - "type": "ResourceBar_ShapePainter::ResourceBar_ShapePainter", - "ValueMin": 0, - "ValueMax": 1, - "TickSpacing": 0, - "BarLength": 200, - "BarThickness": 4, - "InactiveBarColor": "11;255;0", - "InactiveBarOpacity": 96, - "ActiveBarColor": "11;255;0", - "ActiveBarOpacity": 255, - "RoundedBar": false, - "Value": 0, - "ThumbOffset": 0, - "NeedRedraw": true - } - ], - "fillOpacity": 255, - "outlineSize": 1, - "outlineOpacity": 255, - "fillColor": { - "b": 255, - "g": 255, - "r": 255 - }, - "outlineColor": { - "b": 0, - "g": 0, - "r": 0 - }, - "absoluteCoordinates": false, - "clearBetweenFrames": true - }, - { - "assetStoreId": "8d524a624fbc72a1fd6c3975369a7cd55b8a52035887ef664bcd93bf8e273881", - "name": "Unit_ResourceBar", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_Sprite", - "type": "ResourceBar::ResourceBar_Sprite", - "StartingUnits": 3, - "CurrentUnits": 3, - "MaxUnits": 3, - "UnitSpacing": 0, - "NextUnitToCreate": 0, - "HideEmptyUnits": false, - "EmptyUnitOpacity": 64, - "EmptyUnitAnimation": 0, - "EmptyColorTint": "255;255;255", - "ActiveUnitOpacity": 255 - } - ], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Emote Heart.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "8d524a624fbc72a1fd6c3975369a7cd55b8a52035887ef664bcd93bf8e273881", - "name": "Heart_Unit", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Emote Heart.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "752e405ef67d9f9d1bd36f9763f1b6fc05633d64700982c0f3118a25a32e39b2", - "height": 16, - "name": "TiledEmptyUiHeart", - "tags": "", - "texture": "tiled_Tiled Empty UI Heart.png", - "type": "TiledSpriteObject::TiledSprite", - "width": 16, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_TiledSprite", - "type": "ResourceBar::ResourceBar", - "StartingQuantity": 0, - "CurrentQuantity": 0, - "UnitWidth": 16, - "MaxQuantity": 0 - } - ] - }, - { - "assetStoreId": "abf51d082db5a117d9ee2e65299660f6787d47664e4571bad6db3075b3393c5f", - "height": 16, - "name": "Tiled_ResourceBar", - "tags": "", - "texture": "tiled_Tiled Filler UI Heart.png", - "type": "TiledSpriteObject::TiledSprite", - "width": 16, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar_TiledSprite", - "type": "ResourceBar::ResourceBar", - "StartingQuantity": 6, - "CurrentQuantity": 0, - "UnitWidth": 16 - } - ] - }, - { - "assetStoreId": "45107bbfbc2b5cbc83e3785f802b99664a23d59e74414e332c9afafac63e1ca3", - "name": "HealthBar", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Health Bar.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - } - ] - }, - { - "assetStoreId": "1f3dba67c868b7320572a6591d1d0418f23b7c132df0963cf77286a9149971d9", - "height": 128, - "name": "HealthBarFill", - "tags": "", - "texture": "tiled_Health Bar Fill.png", - "type": "TiledSpriteObject::TiledSprite", - "width": 128, - "variables": [], - "effects": [], - "behaviors": [] - }, - { - "assetStoreId": "3bd9517a10ad3d98341eea33f0c139f08a1b04f26500e85ac49bb7f9e157a303", - "height": 128, - "name": "EnergyBarFill", - "tags": "", - "texture": "tiled_Energy Bar Fill.png", - "type": "TiledSpriteObject::TiledSprite", - "width": 128, - "variables": [], - "effects": [], - "behaviors": [] - }, - { - "assetStoreId": "138ee716846635e3e0e5ab7b63752d1a36754f1ac874c70e1b5fa372d5a05474", - "bottomMargin": 6, - "height": 15, - "leftMargin": 11, - "name": "HealthBarBox", - "rightMargin": 9, - "tags": "", - "texture": "Health Bar Box.png", - "tiled": true, - "topMargin": 6, - "type": "PanelSpriteObject::PanelSprite", - "width": 96, - "variables": [], - "effects": [], - "behaviors": [] - }, + "author": "", + "category": "User interface", + "extensionNamespace": "", + "fullName": "Resource bar (tiled)", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWRvdHMtaG9yaXpvbnRhbCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNiwxMkEyLDIgMCAwLDEgMTgsMTBBMiwyIDAgMCwxIDIwLDEyQTIsMiAwIDAsMSAxOCwxNEEyLDIgMCAwLDEgMTYsMTJNMTAsMTJBMiwyIDAgMCwxIDEyLDEwQTIsMiAwIDAsMSAxNCwxMkEyLDIgMCAwLDEgMTIsMTRBMiwyIDAgMCwxIDEwLDEyTTQsMTJBMiwyIDAgMCwxIDYsMTBBMiwyIDAgMCwxIDgsMTJBMiwyIDAgMCwxIDYsMTRBMiwyIDAgMCwxIDQsMTJaIiAvPjwvc3ZnPg==", + "name": "TiledUnitsBar", + "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/063e9152cf65bc0f3be2a828afd950c3ecf1b1fc72feefdc2467252fe987dc0f_dots-horizontal.svg", + "shortDescription": "A bar that represents a resource in the game (health, mana, ammo, etc)", + "version": "1.0.0", + "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", + "origin": { + "identifier": "ResourceBar", + "name": "gdevelop-extension-store" + }, + "tags": [ + "resource", + "bar", + "health", + "mana", + "shield", + "hearts", + "lives", + "ammo" + ], + "authorIds": [ + "gqDaZjCfevOOxBYkK6zlhtZnXCg1", + "q8ubdigLvIRXLxsJDDTaokO41mc2", + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" + ], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ { - "assetStoreId": "7c1048053bc2d851157c4e0868c4ac0338f4ca93170d28990a7f64eaed2a1723", - "name": "HealthIndicator", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ + "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", + "fullName": "Resource bar", + "name": "ResourceBar", + "objectType": "", + "private": true, + "eventsFunctions": [ { - "name": "Black Outline Empty", - "useMultipleDirections": false, - "directions": [ + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Health Indicator_Black Outline Empty.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] - } - ] - }, - { - "name": "Black Outline Heart", - "useMultipleDirections": false, - "directions": [ + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "This is done after the events to allow users to read the previous value at the end of the change.", + "comment2": "" + }, { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "hasCustomCollisionMask": false, - "image": "Health Indicator_Black Outline Heart.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 + "type": { + "value": "CompareObjectTimer" }, - "customCollisionMask": [] + "parameters": [ + "Object", + "\"__ResourceBar.LastValueChange\"", + ">", + "Object.Behavior::PropertyPreviousHighValueDuration()" + ] } - ] - } - ] - }, - { - "name": "White Outline Empty", - "useMultipleDirections": false, - "directions": [ - { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ + ], + "actions": [ { - "hasCustomCollisionMask": false, - "image": "Health Indicator_White Outline Empty.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 + "type": { + "value": "TiledContinuousBar::ResourceBar::UpdatePreviousHighValue" }, - "customCollisionMask": [] + "parameters": [ + "Object", + "Behavior", + "=" + ] } ] } - ] - }, - { - "name": "White Outline Heart", - "useMultipleDirections": false, - "directions": [ + ], + "parameters": [ { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Health Indicator_White Outline Heart.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "type": "behavior" } - ] - } - ] - }, - { - "assetStoreId": "0714257da345b4ec7de558ac0e42290362b85a79c97160c0e09636cd2fc31e3c", - "name": "Heart", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ + ], + "objectGroups": [] + }, { - "name": "", - "useMultipleDirections": false, - "directions": [ + "description": "the value of the object.", + "fullName": "Value", + "functionType": "ExpressionAndCondition", + "name": "Value", + "sentence": "the value", + "events": [ { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "hasCustomCollisionMask": false, - "image": "Heart.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 + "type": { + "value": "SetReturnNumber" }, - "customCollisionMask": [] + "parameters": [ + "Object.Behavior::PropertyValue()" + ] } ] } - ] - } - ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Initialize game", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DepartScene" - }, - "parameters": [ - "" - ] - } ], - "actions": [ + "expressionType": { + "type": "expression" + }, + "parameters": [ { - "type": { - "value": "Opacity" - }, - "parameters": [ - "Moon", - "=", - "128" - ] + "description": "Object", + "name": "Object", + "type": "object" }, { - "type": { - "value": "ModVarScene" - }, - "parameters": [ - "MaxResource", - "=", - "CameraBorderRight()" - ] + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "type": "behavior" } ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "Value", + "name": "SetValue", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -3544,734 +1692,663 @@ "actions": [ { "type": { - "value": "ChangeColor" - }, - "parameters": [ - "Moon", - "\"144;19;254\"" - ] - }, - { - "type": { - "value": "SetCenter" + "value": "TiledContinuousBar::ResourceBar::SetPropertyValue" }, "parameters": [ - "Moon", - "=", - "Fly.CenterX()", + "Object", + "Behavior", "=", - "Fly.CenterY()-10" - ] - }, - { - "type": { - "value": "Sticker::Sticker::Stick" - }, - "parameters": [ - "Moon", - "Sticker", - "Fly", - "" + "clamp(GetArgumentAsNumber(\"Value\"), 0, Object.Behavior::MaxValue())" ] }, { "type": { - "value": "Cache" + "value": "ResetObjectTimer" }, "parameters": [ - "Moon" + "Object", + "\"__ResourceBar.LastValueChange\"" ] } ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the maximum value of the object.", + "fullName": "Maximum value", + "functionType": "ExpressionAndCondition", + "group": "Resource bar configuration", + "name": "MaxValue", + "sentence": "the maximum value", + "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "Create" - }, - "parameters": [ - "", - "MiniHealth_Bar", - "Fly.X()", - "Fly.Y()", - "\"\"" - ] - }, - { - "type": { - "value": "MettreXY" - }, - "parameters": [ - "MiniHealth_Bar", - "=", - "Fly.CenterX() - MiniHealth_Bar.ResourceBar_ShapePainter::BarLength()/2", - "=", - "Fly.BoundingBoxTop()" - ] - }, - { - "type": { - "value": "Sticker::Sticker::Stick" + "value": "SetReturnNumber" }, "parameters": [ - "MiniHealth_Bar", - "Sticker", - "Fly", - "" + "Object.Behavior::PropertyMaxValue()" ] } ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" }, { - "disabled": true, + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "MaxValue", + "name": "SetMaxValue", + "sentence": "", + "events": [ + { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "DebuggerTools::EnableDebugDraw" + "value": "TiledContinuousBar::ResourceBar::SetPropertyMaxValue" }, "parameters": [ - "", - "", - "", - "", - "" + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" ] } ] } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "folded": true, - "name": "Spawn items", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "RepeatEveryXSeconds::Repeat" - }, - "parameters": [ - "", - "\"SpawnShield\"", - "5", - "" - ] - } ], - "actions": [ - { - "type": { - "value": "Create" - }, - "parameters": [ - "", - "SilverShield", - "Fly.CenterX()", - "CameraBorderTop()", - "" - ] - }, + "parameters": [ { - "type": { - "value": "AddForceAL" - }, - "parameters": [ - "SilverShield", - "90", - "75", - "1" - ] + "description": "Object", + "name": "Object", + "type": "object" }, { - "type": { - "value": "ChangeColor" - }, - "parameters": [ - "SilverShield", - "\"144;19;254\"" - ] + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "type": "behavior" } - ] + ], + "objectGroups": [] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "description": "Check if the bar is empty.", + "fullName": "Empty", + "functionType": "Condition", + "name": "IsEmpty", + "sentence": "_PARAM0_ bar is empty", + "events": [ { - "type": { - "value": "RepeatEveryXSeconds::Repeat" - }, - "parameters": [ - "", - "\"SpawnHealth\"", - "12", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TiledContinuousBar::ResourceBar::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } ] } ], - "actions": [ + "parameters": [ { - "type": { - "value": "Create" - }, - "parameters": [ - "", - "UpgradedPotionBlue", - "Fly.CenterX()", - "CameraBorderBottom()", - "" - ] + "description": "Object", + "name": "Object", + "type": "object" }, { - "type": { - "value": "AddForceAL" - }, - "parameters": [ - "UpgradedPotionBlue", - "270", - "75", - "1" - ] + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "type": "behavior" } - ] + ], + "objectGroups": [] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "description": "Check if the bar is full.", + "fullName": "Full", + "functionType": "Condition", + "name": "IsFull", + "sentence": "_PARAM0_ bar is full", + "events": [ { - "type": { - "value": "RepeatEveryXSeconds::Repeat" - }, - "parameters": [ - "", - "\"SpawnRock\"", - "1", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TiledContinuousBar::ResourceBar::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyMaxValue()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } ] } ], - "actions": [ - { - "type": { - "value": "Create" - }, - "parameters": [ - "", - "MeteorDetailed", - "CameraBorderLeft()", - "Fly.CenterY()", - "" - ] - }, + "parameters": [ { - "type": { - "value": "AddForceAL" - }, - "parameters": [ - "MeteorDetailed", - "0", - "300", - "1" - ] + "description": "Object", + "name": "Object", + "type": "object" }, { - "type": { - "value": "ChangeScale" - }, - "parameters": [ - "MeteorDetailed", - "=", - "0.5" - ] + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "type": "behavior" } - ] + ], + "objectGroups": [] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Rotate" - }, - "parameters": [ - "MeteorDetailed", - "30", - "" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "folded": true, - "name": "Collisions", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "description": "the previous value of the resource bar before the current change.", + "fullName": "Previous value", + "functionType": "ExpressionAndCondition", + "name": "PreviousValue", + "sentence": "the previous value", + "events": [ { - "type": { - "value": "Health::Shield::IsShieldActive" - }, - "parameters": [ - "Fly", - "Shield", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyPreviousHighValue()" + ] + } ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] } ], - "actions": [ - { - "type": { - "value": "Montre" - }, - "parameters": [ - "Moon", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "expressionType": { + "type": "expression" + }, + "parameters": [ { - "type": { - "inverted": true, - "value": "Health::Shield::IsShieldActive" - }, - "parameters": [ - "Fly", - "Shield", - "" - ] + "description": "Object", + "name": "Object", + "type": "object" }, { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "type": "behavior" } ], - "actions": [ - { - "type": { - "value": "Cache" - }, - "parameters": [ - "Moon" - ] - } - ] + "objectGroups": [] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "description": "Force the previous resource value to update to the current one.", + "fullName": "Update previous value", + "functionType": "Action", + "name": "UpdatePreviousValue", + "sentence": "Update the previous resource value of _PARAM0_", + "events": [ { - "type": { - "value": "CollisionNP" - }, - "parameters": [ - "SilverShield", - "Fly", - "", - "", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TiledContinuousBar::ResourceBar::SetPropertyPreviousHighValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValue()" + ] + } ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] } ], - "actions": [ + "parameters": [ { - "type": { - "value": "Health::Shield::ActivateShield" - }, - "parameters": [ - "Fly", - "Shield", - "" - ] + "description": "Object", + "name": "Object", + "type": "object" }, { - "type": { - "value": "Delete" - }, - "parameters": [ - "SilverShield", - "" - ] + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "type": "behavior" } - ] + ], + "objectGroups": [] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "description": "the previous value conservation duration (in seconds) of the object.", + "fullName": "Previous value conservation duration", + "functionType": "ExpressionAndCondition", + "group": "Resource bar configuration", + "name": "PreviousValueDuration", + "sentence": "the previous value conservation duration", + "events": [ { - "type": { - "value": "CollisionNP" - }, - "parameters": [ - "UpgradedPotionBlue", - "Fly", - "", - "", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyPreviousHighValueDuration()" + ] + } ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] } ], - "actions": [ + "expressionType": { + "type": "expression" + }, + "parameters": [ { - "type": { - "value": "Health::Health::Heal" - }, - "parameters": [ - "Fly", - "Health", - "100", - "" - ] + "description": "Object", + "name": "Object", + "type": "object" }, { - "type": { - "value": "Delete" - }, - "parameters": [ - "UpgradedPotionBlue", - "" - ] + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "type": "behavior" } - ] + ], + "objectGroups": [] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "PreviousValueDuration", + "name": "SetPreviousValueDuration", + "sentence": "", + "events": [ { - "type": { - "value": "CollisionNP" - }, - "parameters": [ - "MeteorDetailed", - "Fly", - "", - "", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TiledContinuousBar::ResourceBar::SetPropertyPreviousHighValueDuration" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" }, { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "type": "behavior" } ], - "actions": [ + "objectGroups": [] + }, + { + "description": "Check if the resource value is changing.", + "fullName": "Value is changing", + "functionType": "Condition", + "name": "IsChanging", + "sentence": "_PARAM0_ value is changing", + "events": [ { - "type": { - "value": "Health::Shield::ShieldHit" - }, - "parameters": [ - "Fly", - "Shield", - "10", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TiledContinuousBar::ResourceBar::PreviousHighValue" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "Object.Behavior::PropertyValue()", + "" + ] + }, + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__ResourceBar.LastValueChange\"", + "<=", + "Object.Behavior::PropertyPreviousHighValueDuration()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } ] - }, + } + ], + "parameters": [ { - "type": { - "value": "Delete" - }, - "parameters": [ - "MeteorDetailed", - "" - ] + "description": "Object", + "name": "Object", + "type": "object" }, { - "type": { - "value": "ShakeObject::ShakeObject_PositionAngleScale::ShakeObject_PositionAngleScale" - }, - "parameters": [ - "Fly", - "ShakeObject_PositionAngleScale", - "", - "10", - "10", - "5", - "", - "", - "", - "" - ] + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "type": "behavior" } - ] + ], + "objectGroups": [] } ], - "parameters": [] - }, - { - "colorB": 224, - "colorG": 16, - "colorR": 189, - "creationTime": 0, - "name": "Draw Resource bars", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "propertyDescriptors": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "This resource shows the horizontal mouse position in scene, but it can be used for anything!", - "comment2": "" + "value": "1", + "type": "Number", + "label": "Value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "Value" }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ModVarScene" - }, - "parameters": [ - "MyResource", - "=", - "MouseX()" - ] - } - ] + "value": "3", + "type": "Number", + "label": "Maximum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "MaxValue" }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Shape painter resource bar", - "source": "", - "type": "BuiltinCommonInstructions::Group", + "value": "", + "type": "Number", + "label": "Previous value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "PreviousValue" + }, + { + "value": "1", + "type": "Number", + "label": "Previous value conservation duration (in seconds)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "PreviousValueDuration" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [ + { + "defaultName": "ResourceBar", + "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", + "fullName": "Resource bar (using separate units)", + "name": "TiledUnitsBar", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Create one background instance for of each state.\nOnly the instance for the current state is shown.", + "comment2": "" + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::DrawHealthBar" + "value": "Create" + }, + "parameters": [ + "", + "Background", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Bar", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Create" }, "parameters": [ - "MiniHealth_Bar", - "ResourceBar_ShapePainter", - "Fly", - "Health", + "", + "Resource", + "0", + "0", "" ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Background", + "=", + "1" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Bar", + "=", + "2" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Resource", + "=", + "3" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "TiledUnitsBar::TiledUnitsBar::PropertyShowBackground" + }, + "parameters": [ + "Object" + ] + } + ], + "actions": [ + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Background" + ] } ] }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Pass configuration to the behavior", + "comment2": "" + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::DrawShieldBar" + "value": "TiledUnitsBar::TiledUnitsBar::SetValue" }, "parameters": [ - "Shield_Bar", - "ResourceBar_ShapePainter", - "Fly", - "Shield", + "Object", + "=", + "Object.PropertyInitialValue()", "" ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + }, { "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::DrawResourceBar" + "value": "TiledUnitsBar::TiledUnitsBar::SetMaxValue" }, "parameters": [ - "ResourceMouseX_Bar", - "ResourceBar_ShapePainter", - "Variable(MyResource)", - "Variable(MaxResource)", + "Object", + "=", + "Object.PropertyMaxValue()", "" ] } ] - }, + } + ], + "parameters": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar_ShapePainter::DrawHealthBar" - }, - "parameters": [ - "Health_Bar", - "ResourceBar_ShapePainter", - "Fly", - "Health", - "" - ] - } - ] + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", + "type": "object" } ], - "parameters": [] - } - ], - "parameters": [] - } - ], - "layers": [ - { - "ambientLightColorB": 32, - "ambientLightColorG": 0, - "ambientLightColorR": 0, - "followBaseLayerCamera": false, - "isLightingLayer": false, - "name": "", - "visibility": true, - "cameras": [ - { - "defaultSize": true, - "defaultViewport": true, - "height": 0, - "viewportBottom": 1, - "viewportLeft": 0, - "viewportRight": 1, - "viewportTop": 0, - "width": 0 - } - ], - "effects": [] - } - ], - "behaviorsSharedData": [ - { - "name": "Health", - "type": "Health::Health" - }, - { - "name": "ResourceBar_ShapePainter", - "type": "ResourceBar::ResourceBar_ShapePainter" - }, - { - "name": "ResourceBar_Sprite", - "type": "ResourceBar::ResourceBar_Sprite" - }, - { - "name": "ResourceBar_TiledSprite", - "type": "ResourceBar::ResourceBar" - }, - { - "name": "ShakeObject_PositionAngleScale", - "type": "ShakeObject::ShakeObject_PositionAngleScale" - }, - { - "name": "Shield", - "type": "Health::Shield" - }, - { - "name": "Sticker", - "type": "Sticker::Sticker" - } - ] - } - ], - "externalEvents": [], - "eventsFunctionsExtensions": [ - { - "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", - "category": "User interface", - "extensionNamespace": "", - "fullName": "Resource bar (tiled)", - "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", - "name": "ResourceBar", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/UI Essentials/UI Essentials_sliders_options.svg", - "shortDescription": "A bar that represents a resource in the game (health, mana, ammo, etc)", - "version": "0.0.1", - "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", - "origin": { - "identifier": "ResourceBar", - "name": "gdevelop-extension-store" - }, - "tags": [ - "resource", - "bar", - "health", - "mana", - "shield", - "hearts", - "lives", - "ammo" - ], - "authorIds": [ - "gqDaZjCfevOOxBYkK6zlhtZnXCg1", - "q8ubdigLvIRXLxsJDDTaokO41mc2" - ], - "dependencies": [], - "eventsFunctions": [], - "eventsBasedBehaviors": [ - { - "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", - "fullName": "Resource bar", - "name": "ResourceBar", - "objectType": "", - "private": true, - "eventsFunctions": [ + "objectGroups": [] + }, { "fullName": "", "functionType": "Action", @@ -4279,100 +2356,208 @@ "sentence": "", "events": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "This is done after the events to allow users to read the previous value at the end of the change.", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Resize", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "CompareObjectTimer" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "Object", - "\"__ResourceBar.LastValueChange\"", - ">", - "Object.Behavior::PropertyPreviousValueDuration()" + "comment": "Children instances must be resized when the button size change:\n- backgrounds for each state are resized to take the full dimensions of the button\n- the label is put back at the center of the button\n\nThe scale is set back to 1 because it means that the parent instance has the same dimensions as the union of its children instances.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Width()", + "!=", + "max(Background.Width(), Label.Width())" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Height()", + "!=", + "max(Background.Height(), Label.Height())" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Background", + "Width", + "=", + "Object.Width()" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Background", + "Height", + "=", + "Object.Height()" + ] + }, + { + "type": { + "value": "TiledUnitsBar::Scale" + }, + "parameters": [ + "Object", + "=", + "1" + ] + }, + { + "type": { + "value": "PanelSpriteObject::Width" + }, + "parameters": [ + "Background", + "=", + "Background.Variable(Width)" + ] + }, + { + "type": { + "value": "PanelSpriteObject::Height" + }, + "parameters": [ + "Background", + "=", + "Background.Variable(Height)" + ] + }, + { + "type": { + "value": "TiledUnitsBar::TiledUnitsBar::CenterBar" + }, + "parameters": [ + "Object", + "" + ] + } ] } ], - "actions": [ - { - "type": { - "value": "ResourceBar::ResourceBar::UpdatePreviousValue" - }, - "parameters": [ - "Object", - "Behavior", - "=" - ] - } - ] + "parameters": [] } ], "parameters": [ { "description": "Object", "name": "Object", + "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar", - "type": "behavior" } ], "objectGroups": [] }, { - "fullName": "Full", - "functionType": "Condition", - "name": "IsFull", - "sentence": "", - "events": [], - "parameters": [ + "description": "Center the bar according to the button configuration. This is used in doStepPostEvents when the button is resized.", + "fullName": "", + "functionType": "Action", + "name": "CenterBar", + "private": true, + "sentence": "Center the bar of _PARAM0_", + "events": [ { - "description": "Object", - "name": "Object", - "type": "object" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetCenter" + }, + "parameters": [ + "Bar", + "=", + "Background.CenterX()", + "=", + "Background.CenterY()" + ] + }, + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Bar", + "+", + "0" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Bar", + "+", + "0" + ] + } + ] }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar", - "type": "behavior" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "MettreXY" + }, + "parameters": [ + "Resource", + "=", + "Bar.X()", + "=", + "Bar.Y()" + ] + } + ] } ], - "objectGroups": [] - }, - { - "fullName": "Empty", - "functionType": "Condition", - "name": "IsEmpty", - "sentence": "", - "events": [], "parameters": [ { "description": "Object", "name": "Object", + "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar", - "type": "behavior" } ], "objectGroups": [] @@ -4381,6 +2566,7 @@ "description": "the value of the object.", "fullName": "Value", "functionType": "ExpressionAndCondition", + "group": "Resource bar", "name": "Value", "sentence": "the value", "events": [ @@ -4393,7 +2579,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyValue()" + "Resource.ResourceBar::Value()" ] } ] @@ -4406,13 +2592,8 @@ { "description": "Object", "name": "Object", + "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar", - "type": "behavior" } ], "objectGroups": [] @@ -4430,22 +2611,24 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar::SetPropertyValue" + "value": "TiledContinuousBar::ResourceBar::SetValue" }, "parameters": [ - "Object", - "Behavior", + "Resource", + "ResourceBar", "=", - "clamp(GetArgumentAsNumber(\"Value\"), 0, Object.Behavior::MaxValue())" + "GetArgumentAsNumber(\"Value\")", + "" ] }, { "type": { - "value": "ResetObjectTimer" + "value": "TiledSpriteObject::Width" }, "parameters": [ - "Object", - "\"__ResourceBar.LastValueChange\"" + "Resource", + "=", + "Resource.ResourceBar::Value() * Object.PropertyUnitWidth()" ] } ] @@ -4455,12 +2638,13 @@ { "description": "Object", "name": "Object", + "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", "type": "behavior" } ], @@ -4483,7 +2667,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.Behavior::PropertyMaxValue()" + "Resource.ResourceBar::PropertyMaxValue()" ] } ] @@ -4496,13 +2680,8 @@ { "description": "Object", "name": "Object", + "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar", - "type": "behavior" } ], "objectGroups": [] @@ -4520,174 +2699,83 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar::SetPropertyMaxValue" + "value": "TiledContinuousBar::ResourceBar::SetMaxValue" }, "parameters": [ - "Object", - "Behavior", + "Resource", + "ResourceBar", "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "the previous value of the resource bar before the current change.", - "fullName": "Previous value", - "functionType": "ExpressionAndCondition", - "name": "PreviousValue", - "sentence": "the previous value", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyPreviousValue()" + "GetArgumentAsNumber(\"Value\")", + "" ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Force the previous resource value to update to the current one.", - "fullName": "Update previous value", - "functionType": "Action", - "name": "UpdatePreviousValue", - "sentence": "Update the previous resource value of _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + }, { "type": { - "value": "ResourceBar::ResourceBar::SetPropertyPreviousValue" + "value": "TiledSpriteObject::Width" }, "parameters": [ - "Object", - "Behavior", + "Bar", "=", - "Object.Behavior::PropertyValue()" + "Object.PropertyMaxValue() * Object.PropertyUnitWidth()" ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "the previous value conservation duration (in seconds) of the object.", - "fullName": "Previous value conservation duration (in seconds)", - "functionType": "ExpressionAndCondition", - "group": "Resource bar configuration", - "name": "PreviousValueDuration", - "sentence": "the previous value conservation duration", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + }, { "type": { - "value": "SetReturnNumber" + "value": "TiledUnitsBar::TiledUnitsBar::CenterBar" }, "parameters": [ - "Object.Behavior::PropertyPreviousValueDuration()" + "Object", + "" ] } ] } ], - "expressionType": { - "type": "expression" - }, "parameters": [ { "description": "Object", "name": "Object", + "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", "type": "behavior" } ], "objectGroups": [] }, { - "fullName": "", - "functionType": "ActionWithOperator", - "getterName": "PreviousValueDuration", - "name": "SetPreviousValueDuration", - "sentence": "", + "description": "Check if the bar is empty.", + "fullName": "Empty", + "functionType": "Condition", + "group": "Resource bar", + "name": "IsEmpty", + "sentence": "_PARAM0_ bar is empty", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "value": "TiledContinuousBar::ResourceBar::IsEmpty" + }, + "parameters": [ + "Resource", + "ResourceBar", + "=" + ] + } + ], "actions": [ { "type": { - "value": "ResourceBar::ResourceBar::SetPropertyPreviousValueDuration" + "value": "SetReturnBoolean" }, "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" + "True" ] } ] @@ -4697,48 +2785,31 @@ { "description": "Object", "name": "Object", + "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar", - "type": "behavior" } ], "objectGroups": [] }, { - "description": "Check if the resource value is changing.", - "fullName": "Value is changing", + "description": "Check if the bar is full.", + "fullName": "Full", "functionType": "Condition", - "name": "IsChanging", - "sentence": "_PARAM0_ value is changing", + "group": "Resource bar", + "name": "IsFull", + "sentence": "_PARAM0_ bar is full", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "ResourceBar::ResourceBar::PreviousValue" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "Object.Behavior::PropertyValue()", - "" - ] - }, - { - "type": { - "value": "CompareObjectTimer" + "value": "TiledContinuousBar::ResourceBar::IsFull" }, "parameters": [ - "Object", - "\"__ResourceBar.LastValueChange\"", - "<=", - "Object.Behavior::PropertyPreviousValueDuration()" + "Resource", + "ResourceBar", + "=" ] } ], @@ -4758,13 +2829,8 @@ { "description": "Object", "name": "Object", + "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar", - "type": "behavior" } ], "objectGroups": [] @@ -4772,60 +2838,145 @@ ], "propertyDescriptors": [ { - "value": "1", + "value": "3", "type": "Number", - "label": "Value", + "label": "Maximum value", "description": "", "group": "", "extraInformation": [], "hidden": false, - "name": "Value" + "name": "MaxValue" }, { "value": "3", "type": "Number", - "label": "Maximum value", + "label": "Initial value", "description": "", "group": "", "extraInformation": [], "hidden": false, - "name": "MaxValue" + "name": "InitialValue" }, { - "value": "", + "value": "24", "type": "Number", - "label": "Previous value", - "description": "", + "label": "Unit width", + "description": "How much pixels to show for a value of 1.", "group": "", "extraInformation": [], - "hidden": true, - "name": "PreviousValue" + "hidden": false, + "name": "UnitWidth" }, { - "value": "1", - "type": "Number", - "label": "Previous value conservation duration (in seconds)", + "value": "true", + "type": "Boolean", + "label": "Show the background", "description": "", "group": "", "extraInformation": [], "hidden": false, - "name": "PreviousValueDuration" + "name": "ShowBackground" } ], - "sharedPropertyDescriptors": [] + "objects": [ + { + "assetStoreId": "", + "height": 32, + "name": "Resource", + "tags": "", + "texture": "", + "type": "TiledSpriteObject::TiledSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "ResourceBar", + "type": "TiledContinuousBar::ResourceBar", + "Value": 1, + "MaxValue": 3, + "PreviousValue": 0 + } + ] + }, + { + "assetStoreId": "", + "height": 32, + "name": "Bar", + "tags": "", + "texture": "", + "type": "TiledSpriteObject::TiledSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "", + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "name": "Background", + "rightMargin": 0, + "tags": "", + "texture": "", + "tiled": true, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [] + } + ] } + ] + }, + { + "author": "", + "category": "User interface", + "extensionNamespace": "", + "fullName": "Resource bar (tiled)", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8cGF0aCBkPSJNMjgsMTJIMTRINGMtMi4yLDAtNCwxLjgtNCw0czEuOCw0LDQsNGgxMGgxNGMyLjIsMCw0LTEuOCw0LTRTMzAuMiwxMiwyOCwxMnogTTQsMThjLTEuMSwwLTItMC45LTItMnMwLjktMiwyLTJoMTANCgljMS4xLDAsMiwwLjksMiwycy0wLjksMi0yLDJINHoiLz4NCjwvc3ZnPg0K", + "name": "TiledContinuousBar", + "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Glyphster Pack/Master/SVG/Interface Elements/ea06363a57846caab544f536b78a952234b68d4941d41c1577852a1d61aefec3_Interface Elements_interface_ui_loading_progress_bar.svg", + "shortDescription": "A bar that represents a resource in the game (health, mana, ammo, etc)", + "version": "1.0.0", + "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", + "origin": { + "identifier": "ResourceBar", + "name": "gdevelop-extension-store" + }, + "tags": [ + "resource", + "bar", + "health", + "mana", + "shield", + "hearts", + "lives", + "ammo" ], - "eventsBasedObjects": [ + "authorIds": [ + "gqDaZjCfevOOxBYkK6zlhtZnXCg1", + "q8ubdigLvIRXLxsJDDTaokO41mc2", + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" + ], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ { - "defaultName": "StepByStepBar", "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", - "fullName": "Step by step bar", - "name": "TiledUnitsBar", + "fullName": "Resource bar", + "name": "ResourceBar", + "objectType": "", + "private": true, "eventsFunctions": [ { "fullName": "", "functionType": "Action", - "name": "onCreated", + "name": "doStepPostEvents", "sentence": "", "events": [ { @@ -4838,117 +2989,168 @@ "textG": 0, "textR": 0 }, - "comment": "Create one background instance for of each state.\nOnly the instance for the current state is shown.", + "comment": "This is done after the events to allow users to read the previous value at the end of the change.", "comment2": "" }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "conditions": [ { "type": { - "value": "Create" + "inverted": true, + "value": "CompareObjectTimer" }, "parameters": [ - "", - "Background", - "0", - "0", - "" + "Object", + "\"__ResourceBar.LastValueChange\"", + "<=", + "Object.Behavior::PropertyPreviousHighValueDuration()" ] - }, + } + ], + "actions": [ { "type": { - "value": "Create" + "value": "TiledContinuousBar::ResourceBar::UpdatePreviousHighValue" }, "parameters": [ - "", - "Bar", - "0", - "0", - "" + "Object", + "Behavior", + "=" ] - }, + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the value of the object.", + "fullName": "Value", + "functionType": "ExpressionAndCondition", + "name": "Value", + "sentence": "the value", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { "type": { - "value": "Create" + "value": "SetReturnNumber" }, "parameters": [ - "", - "Resource", - "0", - "0", - "" + "Object.Behavior::PropertyValue()" ] - }, + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "Value", + "name": "SetValue", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { "type": { - "value": "ChangePlan" + "value": "TiledContinuousBar::ResourceBar::SetPropertyValue" }, "parameters": [ - "Background", + "Object", + "Behavior", "=", - "1" + "clamp(GetArgumentAsNumber(\"Value\"), 0, Object.Behavior::MaxValue())" ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "ChangePlan" + "value": "TiledContinuousBar::ResourceBar::PropertyValue" }, "parameters": [ - "Bar", - "=", - "2" + "Object", + "Behavior", + "<", + "Object.Behavior::PreviousHighValue()" ] - }, + } + ], + "actions": [ { "type": { - "value": "ChangePlan" + "value": "ResetObjectTimer" }, "parameters": [ - "Resource", - "=", - "3" + "Object", + "\"__ResourceBar.LastValueChange\"" ] } ] }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Pass configuration to the behavior", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "conditions": [ { "type": { - "value": "ResourceBar::TiledUnitsBar::SetValue" + "value": "TiledContinuousBar::ResourceBar::PropertyValue" }, "parameters": [ "Object", - "=", - "Object.PropertyInitialValue()", - "" + "Behavior", + ">=", + "Object.Behavior::PropertyPreviousHighValue()" ] - }, + } + ], + "actions": [ { "type": { - "value": "ResourceBar::TiledUnitsBar::SetMaxValue" + "value": "TiledContinuousBar::ResourceBar::UpdatePreviousHighValue" }, "parameters": [ "Object", - "=", - "Object.PropertyMaxValue()", + "Behavior", "" ] } @@ -4959,157 +3161,64 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledUnitsBar", "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "type": "behavior" } ], "objectGroups": [] }, { - "fullName": "", - "functionType": "Action", - "name": "doStepPostEvents", - "sentence": "", + "description": "the maximum value of the object.", + "fullName": "Maximum value", + "functionType": "ExpressionAndCondition", + "group": "Resource bar configuration", + "name": "MaxValue", + "sentence": "the maximum value", "events": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Resize", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "SetReturnNumber" }, - "comment": "Children instances must be resized when the button size change:\n- backgrounds for each state are resized to take the full dimensions of the button\n- the label is put back at the center of the button\n\nThe scale is set back to 1 because it means that the parent instance has the same dimensions as the union of its children instances.", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "Object.Width()", - "!=", - "max(Background.Width(), Label.Width())" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "Object.Height()", - "!=", - "max(Background.Height(), Label.Height())" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Background", - "Width", - "=", - "Object.Width()" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Background", - "Height", - "=", - "Object.Height()" - ] - }, - { - "type": { - "value": "ResourceBar::Scale" - }, - "parameters": [ - "Object", - "=", - "1" - ] - }, - { - "type": { - "value": "PanelSpriteObject::Width" - }, - "parameters": [ - "Background", - "=", - "Background.Variable(Width)" - ] - }, - { - "type": { - "value": "PanelSpriteObject::Height" - }, - "parameters": [ - "Background", - "=", - "Background.Variable(Height)" - ] - }, - { - "type": { - "value": "ResourceBar::TiledUnitsBar::CenterBar" - }, - "parameters": [ - "Object", - "" - ] - } + "parameters": [ + "Object.Behavior::PropertyMaxValue()" ] } - ], - "parameters": [] + ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledUnitsBar", "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "type": "behavior" } ], "objectGroups": [] }, { - "description": "Center the bar according to the button configuration. This is used in doStepPostEvents when the button is resized.", "fullName": "", - "functionType": "Action", - "name": "CenterBar", - "private": true, - "sentence": "Center the bar of _PARAM0_", + "functionType": "ActionWithOperator", + "getterName": "MaxValue", + "name": "SetMaxValue", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -5117,64 +3226,111 @@ "actions": [ { "type": { - "value": "SetCenter" + "value": "TiledContinuousBar::ResourceBar::SetPropertyMaxValue" }, "parameters": [ - "Bar", - "=", - "Background.CenterX()", + "Object", + "Behavior", "=", - "Background.CenterY()" + "GetArgumentAsNumber(\"Value\")" ] - }, + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the bar is empty.", + "fullName": "Empty", + "functionType": "Condition", + "name": "IsEmpty", + "sentence": "_PARAM0_ bar is empty", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "MettreX" + "value": "TiledContinuousBar::ResourceBar::PropertyValue" }, "parameters": [ - "Bar", - "+", + "Object", + "Behavior", + "=", "0" ] - }, + } + ], + "actions": [ { "type": { - "value": "MettreY" + "value": "SetReturnBoolean" }, "parameters": [ - "Bar", - "+", - "0" + "True" ] } ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the bar is full.", + "fullName": "Full", + "functionType": "Condition", + "name": "IsFull", + "sentence": "_PARAM0_ bar is full", + "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "conditions": [ { "type": { - "value": "MettreXY" + "value": "TiledContinuousBar::ResourceBar::PropertyValue" }, "parameters": [ - "Resource", - "=", - "Bar.X()", + "Object", + "Behavior", "=", - "Bar.Y()" + "Object.Behavior::PropertyMaxValue()" ] - }, + } + ], + "actions": [ { "type": { - "value": "MettreXY" + "value": "SetReturnBoolean" }, "parameters": [ - "Buffer", - "=", - "Bar.X()", - "=", - "Bar.Y()" + "True" ] } ] @@ -5184,18 +3340,23 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledUnitsBar", "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "type": "behavior" } ], "objectGroups": [] }, { - "description": "the value of the object.", - "fullName": "Value", + "description": "the previous high value of the resource bar before the current change.", + "fullName": "Previous high value", "functionType": "ExpressionAndCondition", - "name": "Value", - "sentence": "the value", + "name": "PreviousHighValue", + "sentence": "the previous high value", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -5206,7 +3367,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Resource.ResourceBar::Value()" + "Object.Behavior::PropertyPreviousHighValue()" ] } ] @@ -5219,18 +3380,23 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledUnitsBar", "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "type": "behavior" } ], "objectGroups": [] }, { - "fullName": "", - "functionType": "ActionWithOperator", - "getterName": "Value", - "name": "SetValue", - "sentence": "", + "description": "Force the previous resource value to update to the current one.", + "fullName": "Update previous value", + "functionType": "Action", + "name": "UpdatePreviousHighValue", + "sentence": "Update the previous resource value of _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -5238,24 +3404,13 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar::SetValue" + "value": "TiledContinuousBar::ResourceBar::SetPropertyPreviousHighValue" }, "parameters": [ - "Resource", - "ResourceBar", - "=", - "GetArgumentAsNumber(\"Value\")", - "" - ] - }, - { - "type": { - "value": "TiledSpriteObject::Width" - }, - "parameters": [ - "Resource", + "Object", + "Behavior", "=", - "Resource.ResourceBar::Value() * Object.PropertyUnitWidth()" + "Object.Behavior::PropertyValue()" ] } ] @@ -5265,25 +3420,24 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledUnitsBar", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", "type": "behavior" } ], "objectGroups": [] }, { - "description": "the maximum value of the object.", - "fullName": "Maximum value", + "description": "the previous high value conservation duration (in seconds) of the object.", + "fullName": "Previous high value conservation duration", "functionType": "ExpressionAndCondition", "group": "Resource bar configuration", - "name": "MaxValue", - "sentence": "the maximum value", + "name": "PreviousHighValueDuration", + "sentence": "the previous high value conservation duration", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -5294,7 +3448,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Resource.ResourceBar::PropertyMaxValue()" + "Object.Behavior::PropertyPreviousHighValueDuration()" ] } ] @@ -5307,8 +3461,13 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledUnitsBar", "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "type": "behavior" } ], "objectGroups": [] @@ -5316,8 +3475,8 @@ { "fullName": "", "functionType": "ActionWithOperator", - "getterName": "MaxValue", - "name": "SetMaxValue", + "getterName": "PreviousHighValueDuration", + "name": "SetPreviousHighValueDuration", "sentence": "", "events": [ { @@ -5326,33 +3485,74 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar::SetMaxValue" + "value": "TiledContinuousBar::ResourceBar::SetPropertyPreviousHighValueDuration" }, "parameters": [ - "Resource", - "ResourceBar", + "Object", + "Behavior", "=", - "GetArgumentAsNumber(\"Value\")", - "" + "GetArgumentAsNumber(\"Value\")" ] - }, + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the resource value is changing.", + "fullName": "Value is changing", + "functionType": "Condition", + "name": "IsChanging", + "sentence": "_PARAM0_ value is changing", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "TiledSpriteObject::Width" + "value": "TiledContinuousBar::ResourceBar::PreviousHighValue" }, "parameters": [ - "Bar", - "=", - "Object.PropertyMaxValue() * Object.PropertyUnitWidth()" + "Object", + "Behavior", + "!=", + "Object.Behavior::PropertyValue()", + "" ] }, { "type": { - "value": "ResourceBar::TiledUnitsBar::CenterBar" + "value": "CompareObjectTimer" }, "parameters": [ "Object", - "" + "\"__ResourceBar.LastValueChange\"", + "<=", + "Object.Behavior::PropertyPreviousHighValueDuration()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" ] } ] @@ -5362,13 +3562,12 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledUnitsBar", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", "type": "behavior" } ], @@ -5376,6 +3575,16 @@ } ], "propertyDescriptors": [ + { + "value": "1", + "type": "Number", + "label": "Value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "Value" + }, { "value": "3", "type": "Number", @@ -5387,82 +3596,34 @@ "name": "MaxValue" }, { - "value": "3", + "value": "", "type": "Number", - "label": "Initial value", + "label": "Previous high value", "description": "", "group": "", "extraInformation": [], - "hidden": false, - "name": "InitialValue" + "hidden": true, + "name": "PreviousHighValue" }, { - "value": "24", + "value": "1", "type": "Number", - "label": "Unit width", + "label": "Previous high value conservation duration (in seconds)", "description": "", "group": "", "extraInformation": [], "hidden": false, - "name": "UnitWidth" + "name": "PreviousHighValueDuration" } ], - "objects": [ - { - "assetStoreId": "", - "height": 32, - "name": "Resource", - "tags": "", - "texture": "", - "type": "TiledSpriteObject::TiledSprite", - "width": 32, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar", - "type": "ResourceBar::ResourceBar", - "Value": 1, - "MaxValue": 3, - "PreviousValue": 0 - } - ] - }, - { - "assetStoreId": "", - "height": 32, - "name": "Bar", - "tags": "", - "texture": "", - "type": "TiledSpriteObject::TiledSprite", - "width": 32, - "variables": [], - "effects": [], - "behaviors": [] - }, - { - "assetStoreId": "", - "bottomMargin": 0, - "height": 32, - "leftMargin": 0, - "name": "Background", - "rightMargin": 0, - "tags": "", - "texture": "", - "tiled": true, - "topMargin": 0, - "type": "PanelSpriteObject::PanelSprite", - "width": 32, - "variables": [], - "effects": [], - "behaviors": [] - } - ] - }, + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [ { - "defaultName": "", + "defaultName": "ResourceBar", "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", - "fullName": "Continuous bar", + "fullName": "Resource bar (using a continuous tiled sprite)", "name": "TiledContinuousBar", "eventsFunctions": [ { @@ -5487,26 +3648,14 @@ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], - "actions": [ - { - "type": { - "value": "Create" - }, - "parameters": [ - "", - "Background", - "0", - "0", - "" - ] - }, + "actions": [ { "type": { "value": "Create" }, "parameters": [ "", - "Bar", + "Background", "0", "0", "" @@ -5546,16 +3695,6 @@ "1" ] }, - { - "type": { - "value": "ChangePlan" - }, - "parameters": [ - "Bar", - "=", - "2" - ] - }, { "type": { "value": "ChangePlan" @@ -5563,7 +3702,7 @@ "parameters": [ "Buffer", "=", - "3" + "2" ] }, { @@ -5573,7 +3712,7 @@ "parameters": [ "Resource", "=", - "4" + "3" ] } ] @@ -5592,7 +3731,6 @@ "comment2": "" }, { - "disabled": true, "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ @@ -5635,14 +3773,29 @@ "Label", "yes" ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "ResourceBar::TiledContinuousBar::CenterLabel" + "inverted": true, + "value": "TiledContinuousBar::TiledContinuousBar::PropertyShowLabel" }, "parameters": [ - "Object", - "" + "Object" + ] + } + ], + "actions": [ + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Label" ] } ] @@ -5666,45 +3819,55 @@ "actions": [ { "type": { - "value": "ResourceBar::TiledContinuousBar::SetValue" + "value": "TiledContinuousBar::TiledContinuousBar::SetMaxValue" }, "parameters": [ "Object", "=", - "Object.PropertyInitialValue()", - "" + "Object.PropertyMaxValue()", + "Object.PropertyMaxValue()" ] }, { "type": { - "value": "ResourceBar::TiledContinuousBar::SetMaxValue" + "value": "TiledContinuousBar::TiledContinuousBar::SetValue" }, "parameters": [ "Object", "=", - "Object.PropertyMaxValue()", - "" + "Object.PropertyInitialValue()", + "Object.PropertyInitialValue()" ] }, { "type": { - "value": "ResourceBar::TiledContinuousBar::SetPreviousValueDuration" + "value": "TiledContinuousBar::TiledContinuousBar::SetPreviousValueDuration" }, "parameters": [ "Object", "=", - "Object.PropertyPreviousValueDuration()", + "Object.PropertyPreviousHighValueDuration()", "" ] }, { "type": { - "value": "ResourceBar::ResourceBar::ResetPreviousValue" + "value": "Tween::RemoveTween" }, "parameters": [ "Resource", - "ResourceBar", - "" + "Tween", + "\"ChangeValue\"" + ] + }, + { + "type": { + "value": "TiledSpriteObject::Width" + }, + "parameters": [ + "Resource", + "=", + "Object.WidthForValue()" ] } ] @@ -5714,7 +3877,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledContinuousBar", + "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", "type": "object" } ], @@ -5805,7 +3968,7 @@ }, { "type": { - "value": "ResourceBar::Scale" + "value": "TiledContinuousBar::Scale" }, "parameters": [ "Object", @@ -5835,16 +3998,7 @@ }, { "type": { - "value": "ResourceBar::TiledContinuousBar::CenterLabel" - }, - "parameters": [ - "Object", - "" - ] - }, - { - "type": { - "value": "ResourceBar::TiledContinuousBar::CenterBar" + "value": "TiledContinuousBar::TiledContinuousBar::UpdateLayout" }, "parameters": [ "Object", @@ -5862,7 +4016,7 @@ { "type": { "inverted": true, - "value": "ResourceBar::TiledContinuousBar::IsChanging" + "value": "TiledContinuousBar::TiledContinuousBar::IsChanging" }, "parameters": [ "Object", @@ -5898,19 +4052,19 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledContinuousBar", + "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", "type": "object" } ], "objectGroups": [] }, { - "description": "Center the label according to the button configuration. This is used in doStepPostEvents when the button is resized.", - "fullName": "", + "description": "Center the bar according to the button configuration. This is used in doStepPostEvents when the button is resized.", + "fullName": "Update layout", "functionType": "Action", - "name": "CenterLabel", + "name": "UpdateLayout", "private": true, - "sentence": "Center the label of _PARAM0_", + "sentence": "Update layout of _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -5921,21 +4075,67 @@ "value": "MettreXY" }, "parameters": [ - "Label", + "Resource", "=", - "Object.PropertyLabelLeftPadding()", + "Object.PropertyBarLeftPadding()", "=", - "Object.PropertyLabelTopPadding()" + "Object.PropertyBarTopPadding()" ] }, { "type": { - "value": "TextObject::WrappingWidth" + "value": "TiledSpriteObject::SetSize" + }, + "parameters": [ + "Resource", + "Object.WidthForValue()", + "round(Background.Height() - Object.PropertyBarTopPadding() - Object.PropertyBarBottomPadding())" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "MettreXY" + }, + "parameters": [ + "Buffer", + "=", + "Resource.X()", + "=", + "Resource.Y()" + ] + }, + { + "type": { + "value": "TiledSpriteObject::SetSize" + }, + "parameters": [ + "Buffer", + "Resource.Width()", + "Resource.Height()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "MettreXY" }, "parameters": [ "Label", "=", - "Background.Width() - Object.PropertyLabelLeftPadding() - Object.PropertyLabelRightPadding()" + "Object.PropertyBarLeftPadding()", + "=", + "Object.PropertyBarTopPadding()" ] }, { @@ -5945,7 +4145,7 @@ "parameters": [ "Label", "=", - "Background.Width() - Object.PropertyLabelLeftPadding() - Object.PropertyLabelRightPadding()" + "Object.FullBarWidth()" ] }, { @@ -5955,45 +4155,74 @@ "parameters": [ "Label", "=", - "round(Background.CenterY() + (Object.PropertyLabelTopPadding() - Object.PropertyLabelBottomPadding()) / 2)" + "round(Resource.CenterY())" + ] + }, + { + "type": { + "value": "SetCenterX" + }, + "parameters": [ + "Label", + "=", + "round(Background.CenterX() + (Object.PropertyBarLeftPadding() - Object.PropertyBarRightPadding()) / 2)" ] } ] - }, + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the value of the object.", + "fullName": "Value", + "functionType": "ExpressionAndCondition", + "group": "Resource bar", + "name": "Value", + "sentence": "the value", + "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "SetCenterX" + "value": "SetReturnNumber" }, "parameters": [ - "Label", - "=", - "round(Background.CenterX() + (Object.PropertyLabelLeftPadding() - Object.PropertyLabelRightPadding()) / 2)" + "Resource.ResourceBar::Value()" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledContinuousBar", + "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", "type": "object" } ], "objectGroups": [] }, { - "description": "Center the bar according to the button configuration. This is used in doStepPostEvents when the button is resized.", "fullName": "", - "functionType": "Action", - "name": "CenterBar", - "private": true, - "sentence": "Center the bar of _PARAM0_", + "functionType": "ActionWithOperator", + "getterName": "Value", + "name": "SetValue", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -6001,64 +4230,99 @@ "actions": [ { "type": { - "value": "SetCenter" + "value": "TiledContinuousBar::ResourceBar::SetValue" }, "parameters": [ - "Bar", - "=", - "Background.CenterX()", + "Resource", + "ResourceBar", "=", - "Background.CenterY()" + "GetArgumentAsNumber(\"Value\")", + "" ] }, { "type": { - "value": "MettreX" + "value": "Tween::AddObjectWidthTween" }, "parameters": [ - "Bar", - "+", - "0" + "Resource", + "Tween", + "\"ChangeValue\"", + "Object.WidthForValue()", + "\"linear\"", + "Object.PropertyEasingDuration() * 1000", + "" ] }, { "type": { - "value": "MettreY" + "value": "TextObject::String" }, "parameters": [ - "Bar", - "+", - "0" + "Label", + "=", + "ToString(round(Object.Value())) + \" / \" + ToString(Object.MaxValue())" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "value": "TiledSpriteObject::Width" + }, + "parameters": [ + "Resource", + ">=", + "Buffer.Width()" + ] + } + ], "actions": [ { "type": { - "value": "MettreXY" + "value": "Cache" + }, + "parameters": [ + "Buffer" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TiledContinuousBar::ResourceBar::IsChanging" }, "parameters": [ "Resource", + "ResourceBar", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TiledSpriteObject::Width" + }, + "parameters": [ + "Buffer", "=", - "Bar.X()", - "=", - "Bar.Y()" + "round(Object.FullBarWidth() * Resource.ResourceBar::PreviousHighValue() / Resource.ResourceBar::MaxValue())" ] }, { "type": { - "value": "MettreXY" + "value": "Montre" }, "parameters": [ "Buffer", - "=", - "Bar.X()", - "=", - "Bar.Y()" + "" ] } ] @@ -6068,18 +4332,25 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledContinuousBar", + "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "type": "behavior" } ], "objectGroups": [] }, { - "description": "the value of the object.", - "fullName": "Value", + "description": "the maximum value of the object.", + "fullName": "Maximum value", "functionType": "ExpressionAndCondition", - "name": "Value", - "sentence": "the value", + "group": "Resource bar configuration", + "name": "MaxValue", + "sentence": "the maximum value", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -6090,7 +4361,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Resource.ResourceBar::Value()" + "Resource.ResourceBar::PropertyMaxValue()" ] } ] @@ -6103,7 +4374,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledContinuousBar", + "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", "type": "object" } ], @@ -6112,8 +4383,8 @@ { "fullName": "", "functionType": "ActionWithOperator", - "getterName": "Value", - "name": "SetValue", + "getterName": "MaxValue", + "name": "SetMaxValue", "sentence": "", "events": [ { @@ -6122,7 +4393,7 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar::SetValue" + "value": "TiledContinuousBar::ResourceBar::SetMaxValue" }, "parameters": [ "Resource", @@ -6134,15 +4405,10 @@ }, { "type": { - "value": "Tween::AddObjectWidthTween" - }, - "parameters": [ - "Resource", - "Tween", - "\"ChangeValue\"", - "Object.WidthForValue()", - "\"linear\"", - "Object.PropertyEasingDuration() * 1000", + "value": "TiledContinuousBar::TiledContinuousBar::UpdateLayout" + }, + "parameters": [ + "Object", "" ] } @@ -6153,104 +4419,91 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledContinuousBar", + "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", "type": "behavior" } ], "objectGroups": [] }, { - "description": "the maximum value of the object.", - "fullName": "Maximum value", - "functionType": "ExpressionAndCondition", - "group": "Resource bar configuration", - "name": "MaxValue", - "sentence": "the maximum value", + "description": "Check if the bar is empty.", + "fullName": "Empty", + "functionType": "Condition", + "group": "Resource bar", + "name": "IsEmpty", + "sentence": "_PARAM0_ is empty", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "value": "TiledContinuousBar::ResourceBar::IsEmpty" + }, + "parameters": [ + "Resource", + "ResourceBar", + "=" + ] + } + ], "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "SetReturnBoolean" }, "parameters": [ - "Resource.ResourceBar::PropertyMaxValue()" + "True" ] } ] } ], - "expressionType": { - "type": "expression" - }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledContinuousBar", + "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", "type": "object" } ], "objectGroups": [] }, { - "fullName": "", - "functionType": "ActionWithOperator", - "getterName": "MaxValue", - "name": "SetMaxValue", - "sentence": "", + "description": "Check if the bar is full.", + "fullName": "Full", + "functionType": "Condition", + "group": "Resource bar", + "name": "IsFull", + "sentence": "_PARAM0_ is full", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "conditions": [ { "type": { - "value": "ResourceBar::ResourceBar::SetMaxValue" + "value": "TiledContinuousBar::ResourceBar::IsFull" }, "parameters": [ "Resource", "ResourceBar", - "=", - "GetArgumentAsNumber(\"Value\")", - "" - ] - }, - { - "type": { - "value": "TiledSpriteObject::Width" - }, - "parameters": [ - "Bar", - "=", - "round(Bar.Width() * Resource.ResourceBar::Value() / Resource.ResourceBar::MaxValue())" - ] - }, - { - "type": { - "value": "ResourceBar::TiledContinuousBar::CenterBar" - }, - "parameters": [ - "Object", - "" + "=" ] - }, + } + ], + "actions": [ { "type": { - "value": "TiledSpriteObject::Width" + "value": "SetReturnBoolean" }, "parameters": [ - "Resource", - "=", - "Object.WidthForValue()" + "True" ] } ] @@ -6260,21 +4513,15 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledContinuousBar", + "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar", - "type": "behavior" } ], "objectGroups": [] }, { "description": "the previous value conservation duration (in seconds) of the object.", - "fullName": "Previous value conservation duration (in seconds)", + "fullName": "Previous value conservation duration", "functionType": "ExpressionAndCondition", "group": "Resource bar configuration", "name": "PreviousValueDuration", @@ -6289,7 +4536,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Resource.ResourceBar::PropertyPreviousValueDuration()" + "Resource.ResourceBar::PropertyPreviousHighValueDuration()" ] } ] @@ -6302,7 +4549,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledContinuousBar", + "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", "type": "object" } ], @@ -6321,7 +4568,7 @@ "actions": [ { "type": { - "value": "ResourceBar::ResourceBar::SetPreviousValueDuration" + "value": "TiledContinuousBar::ResourceBar::SetPreviousHighValueDuration" }, "parameters": [ "Resource", @@ -6389,13 +4636,13 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledContinuousBar", + "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ResourceBar::ResourceBar", + "supplementaryInformation": "TiledContinuousBar::ResourceBar", "type": "behavior" } ], @@ -6405,6 +4652,7 @@ "description": "Check if the resource value is changing.", "fullName": "Value is changing", "functionType": "Condition", + "group": "Resource bar", "name": "IsChanging", "sentence": "_PARAM0_ value is changing", "events": [ @@ -6413,7 +4661,7 @@ "conditions": [ { "type": { - "value": "ResourceBar::ResourceBar::IsChanging" + "value": "TiledContinuousBar::ResourceBar::IsChanging" }, "parameters": [ "Resource", @@ -6438,7 +4686,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledContinuousBar", + "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", "type": "object" } ], @@ -6460,7 +4708,42 @@ "value": "SetReturnNumber" }, "parameters": [ - "round(Bar.Width() * Resource.ResourceBar::Value() / Resource.ResourceBar::MaxValue())" + "round(Object.FullBarWidth() * Resource.ResourceBar::Value() / Resource.ResourceBar::MaxValue())" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Expression", + "name": "FullBarWidth", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Background.Width() - Object.PropertyBarLeftPadding() - Object.PropertyBarRightPadding()" ] } ] @@ -6473,8 +4756,140 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ResourceBar::TiledContinuousBar", + "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the label is shown.", + "fullName": "Label is shown", + "functionType": "Condition", + "group": "Resource bar configuration", + "name": "IsLabelShown", + "sentence": "_PARAM0_ label is shown", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TiledContinuousBar::TiledContinuousBar::PropertyShowLabel" + }, + "parameters": [ + "Object" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Show (or hide) the label on the bar.", + "fullName": "Show label", + "functionType": "Action", + "group": "Resource bar configuration", + "name": "SetLabelShown", + "sentence": "Show the label of _PARAM0_: _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "TiledContinuousBar::TiledContinuousBar::SetPropertyShowLabel" + }, + "parameters": [ + "Object", + "no" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Label" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "TiledContinuousBar::TiledContinuousBar::SetPropertyShowLabel" + }, + "parameters": [ + "Object", + "yes" + ] + }, + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Label", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", "type": "object" + }, + { + "description": "Show the label", + "name": "Value", + "type": "yesorno" } ], "objectGroups": [] @@ -6482,44 +4897,44 @@ ], "propertyDescriptors": [ { - "value": "", + "value": "0", "type": "Number", "label": "", "description": "", - "group": "Label", + "group": "Bar", "extraInformation": [], "hidden": false, - "name": "LabelLeftPadding" + "name": "BarLeftPadding" }, { - "value": "", + "value": "0", "type": "Number", "label": "", "description": "", - "group": "Label", + "group": "Bar", "extraInformation": [], "hidden": false, - "name": "LabelTopPadding" + "name": "BarTopPadding" }, { - "value": "", + "value": "0", "type": "Number", "label": "", "description": "", - "group": "Label", + "group": "Bar", "extraInformation": [], "hidden": false, - "name": "LabelRightPadding" + "name": "BarRightPadding" }, { - "value": "", + "value": "0", "type": "Number", "label": "", "description": "", - "group": "Label", + "group": "Bar", "extraInformation": [], "hidden": false, - "name": "LabelBottomPadding" + "name": "BarBottomPadding" }, { "value": "3", @@ -6544,12 +4959,12 @@ { "value": "1", "type": "Number", - "label": "Previous value conservation duration (in seconds)", + "label": "Previous high value conservation duration (in seconds)", "description": "", "group": "Animation", "extraInformation": [], "hidden": false, - "name": "PreviousValueDuration" + "name": "PreviousHighValueDuration" }, { "value": "0.25", @@ -6560,6 +4975,16 @@ "extraInformation": [], "hidden": false, "name": "EasingDuration" + }, + { + "value": "true", + "type": "Boolean", + "label": "Show the label", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ShowLabel" } ], "objects": [ @@ -6575,7 +5000,7 @@ "variables": [], "effects": [], "behaviors": [], - "string": "Text", + "string": "2 / 3", "font": "", "characterSize": 20, "color": { @@ -6597,7 +5022,7 @@ "behaviors": [ { "name": "ResourceBar", - "type": "ResourceBar::ResourceBar", + "type": "TiledContinuousBar::ResourceBar", "Value": 1, "MaxValue": 3, "PreviousValue": 0 @@ -6625,18 +5050,6 @@ } ] }, - { - "assetStoreId": "", - "height": 32, - "name": "Bar", - "tags": "", - "texture": "", - "type": "TiledSpriteObject::TiledSprite", - "width": 32, - "variables": [], - "effects": [], - "behaviors": [] - }, { "assetStoreId": "", "bottomMargin": 0, From bfa6bb26344cac45cdb9a38e6390d31cf144c4d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Tue, 29 Nov 2022 20:20:01 +0100 Subject: [PATCH 29/98] Remove useless extensions --- examples/resource-bar/game.json | 7330 ------------------------------- 1 file changed, 7330 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 4dd924395..f14363bd7 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -5070,7336 +5070,6 @@ ] } ] - }, - { - "author": "@4ian", - "category": "General", - "extensionNamespace": "", - "fullName": "Health (life) points and shield", - "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWhlYXJ0LWhhbGYtZnVsbCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNi41LDVDMTUsNSAxMy41OCw1LjkxIDEzLDcuMlYxNy43NEMxNy4yNSwxMy44NyAyMCwxMS4yIDIwLDguNUMyMCw2LjUgMTguNSw1IDE2LjUsNU0xNi41LDNDMTkuNTgsMyAyMiw1LjQxIDIyLDguNUMyMiwxMi4yNyAxOC42LDE1LjM2IDEzLjQ1LDIwLjAzTDEyLDIxLjM1TDEwLjU1LDIwLjAzQzUuNCwxNS4zNiAyLDEyLjI3IDIsOC41QzIsNS40MSA0LjQyLDMgNy41LDNDOS4yNCwzIDEwLjkxLDMuODEgMTIsNS4wOEMxMy4wOSwzLjgxIDE0Ljc2LDMgMTYuNSwzWiIgLz48L3N2Zz4=", - "name": "Health", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/heart-half-full.svg", - "shortDescription": "Manage life points and a protective shield.", - "version": "0.1.0", - "description": "Manage health (life) and shield points of an object. Health can be assigned to players, enemies, NPCs, or even inanimate objects such as breaking doors and mining rocks.\n\nHow to use:\n\n- Set desired values in \"Health\" and \"Shield\" behavior properties\n- To apply damage use “Damage an object” or “Damage an object protected by a shield”\n- To heal health, use “Heal object” action \n- To activate the shield, use “Activate Shield” action\n- Health and shield regeneration will happen automatically based on properties\n \nTips:\n\n- While damage cooldown is active, no damage will be applied to health or shield\n- Try using the “Blink” extension while damage cooldown is active\n- Use the “Is just damaged” condition to trigger audio and visual effects\n\nHealth properties:\n\n- Health (life points) Used for starting health\n- Maximum health (0 for no maximum)\n- Damage cooldown (seconds) Use \"0\" for no cooldown\n- Rate of health regeneration (points per second) Will not exceed max health, even with overhealing enabled\n- Delay (seconds) before health regeneration starts after being hit\n- Allow heal to increase health above max health (will not exceed max health)\n\nShield properties:\n\n- Max shield points (Shield will start with this many points when activated)\n- Duration of shield (seconds) Use \"0\" to disable shield timer\n- Rate of shield regeneration (points per second)\n- Shield will block all excess damage when shield is destroyed\n- Delay (seconds) before shield regeneration starts after being hit\n- Regenerate shield when it has zero points\n", - "origin": { - "identifier": "Health", - "name": "gdevelop-extension-store" - }, - "tags": [ - "health", - "life", - "damage", - "hit", - "heal", - "shield", - "regeneration" - ], - "authorIds": [ - "wWP8BSlAW0UP4NeaHa2LcmmDzmH2", - "xpwUwByyImTDcHEqDUqfyg0oRBt1", - "gqDaZjCfevOOxBYkK6zlhtZnXCg1" - ], - "dependencies": [], - "eventsFunctions": [], - "eventsBasedBehaviors": [ - { - "description": "Manage life points by damaging and healing the object.", - "fullName": "Health", - "name": "Health", - "objectType": "", - "eventsFunctions": [ - { - "fullName": "", - "functionType": "Action", - "name": "doStepPreEvents", - "sentence": "", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Regeneration", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Health", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Health::PropertyHealthRegenRate" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "0" - ] - }, - { - "type": { - "value": "Health::Health::PropertyHealth" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::MaxHealth()" - ] - }, - { - "type": { - "value": "CompareObjectTimer" - }, - "parameters": [ - "Object", - "\"__Health.TimeSinceLastHit\"", - ">", - "Object.Behavior::PropertyHealthRegenDelay()" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyHealth" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "Object.Behavior::PropertyHealthRegenRate() * TimeDelta()" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Correct any values above maximum limits", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Health::PropertyHealth" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "Object.Behavior::MaxHealth()" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyHealth" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyMaxHealth()" - ] - } - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Reset damage trigger", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyIsJustDamaged" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Apply damage directly to the object. Damage will not be affected by shield. Triggers damage cooldown.", - "fullName": "Damage an object", - "functionType": "Action", - "group": "Health", - "name": "Hit", - "sentence": "Damage _PARAM0_, removing _PARAM2_ points from its health", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Only consider damage if damage cooldown is NOT active", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "Health::Health::IsDamageCooldownActive" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Mark object was hit at least once (used for initial state of damage cooldown)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "Health::Health::PropertyHitAtLeastOnce" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyHitAtLeastOnce" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Restart time since last hit timer", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__Health.TimeSinceLastHit\"" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Apply damage", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyHealth" - }, - "parameters": [ - "Object", - "Behavior", - "-", - "GetArgumentAsNumber(\"DamageValue\")" - ] - }, - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__Health.DamageCooldown\"" - ] - }, - { - "type": { - "value": "Health::Health::SetPropertyIsJustDamaged" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - }, - { - "description": "Value of the damage to do (will be removed from object health)", - "name": "DamageValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change health points. This is not considered damage.", - "fullName": "Change health points", - "functionType": "Action", - "group": "Health", - "name": "SetHealth", - "sentence": "Set health of _PARAM0_ to _PARAM2_ points", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyHealth" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Health::PropertyMaxHealth" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyHealth" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::PropertyHealth(), Object.Behavior::PropertyMaxHealth())" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - }, - { - "description": "New health value", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Heal the object by increasing its life points.", - "fullName": "Heal object", - "functionType": "Action", - "group": "Health", - "name": "Heal", - "sentence": "Heal _PARAM0_ with _PARAM2_ health points", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Change health points", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyHealth" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "GetArgumentAsNumber(\"HealValue\")" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Prevent exceeding max health (unless overhealing is enabled)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Health::PropertyMaxHealth" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - }, - { - "type": { - "inverted": true, - "value": "Health::Health::PropertyAllowOverHealing" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyHealth" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::PropertyHealth(), Object.Behavior::PropertyMaxHealth())" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - }, - { - "description": "Points to heal (will be added to object health)", - "name": "HealValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the object maximum health points.", - "fullName": "Change maximum health points", - "functionType": "Action", - "group": "Health", - "name": "SetMaxHealth", - "sentence": "Set maximum health of _PARAM0_ to _PARAM2_ points", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyMaxHealth" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - }, - { - "description": "Maximum health", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change rate of health regeneration.", - "fullName": "Change rate of health regeneration", - "functionType": "Action", - "group": "Shield", - "name": "SetHealthRegenRate", - "sentence": "Set rate of health regen of _PARAM0_ to _PARAM2_ points per second", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyHealthRegenRate" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - }, - { - "description": "Rate of regen", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change duration of damage cooldown.", - "fullName": "Change duration of damage cooldown", - "functionType": "Action", - "group": "Health", - "name": "SetCooldownDuration", - "sentence": "Set duration of damage cooldown on _PARAM0_ to _PARAM2_ seconds", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyDamageCooldown" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - }, - { - "description": "Duration of damage cooldown (seconds)", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change delay before health regeneration starts after being hit.", - "fullName": "Change delay before health regeneration starts", - "functionType": "Action", - "group": "Health", - "name": "SetHealthRegenDelay", - "sentence": "Set delay before health regeneration starts on _PARAM0_ to _PARAM2_ seconds", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyHealthRegenDelay" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - }, - { - "description": "Delay (seconds)", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Allow over-healing.", - "fullName": "Allow over-healing", - "functionType": "Action", - "group": "Health", - "name": "AllowOverHealing", - "sentence": "Allow over-healing on _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyAllowOverHealing" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"Value\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyAllowOverHealing" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - }, - { - "description": "Allow over-healing", - "name": "Value", - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Mark object as hit at least once.", - "fullName": "Mark object as hit at least once", - "functionType": "Action", - "group": "Health", - "name": "SetHitAtLeastOnce", - "sentence": "Mark _PARAM0_ as hit at least once: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyHitAtLeastOnce" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"Value\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyHitAtLeastOnce" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - }, - { - "description": "Hit at least once", - "name": "Value", - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Mark object as just damaged.", - "fullName": "Mark object as just damaged", - "functionType": "Action", - "group": "Health", - "name": "SetJustDamaged", - "sentence": "Mark _PARAM0_ as just damaged: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyIsJustDamaged" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"Value\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::SetPropertyIsJustDamaged" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - }, - { - "description": "Just damaged", - "name": "Value", - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the object has been hit at least once.", - "fullName": "Object hit at least once", - "functionType": "Condition", - "group": "Health", - "name": "HitAtLeastOnce", - "sentence": "_PARAM0_ has just been hit at least once", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Health::PropertyHitAtLeastOnce" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the object was just damaged previously in the events.", - "fullName": "Is just damaged", - "functionType": "Condition", - "group": "Health", - "name": "IsJustDamaged", - "sentence": "_PARAM0_ has just been damaged", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Health::PropertyIsJustDamaged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if damage cooldown is active. Object (and shield) cannot be damaged while this is active.", - "fullName": "Is damage cooldown active", - "functionType": "Condition", - "group": "Health", - "name": "IsDamageCooldownActive", - "sentence": "Damage cooldown on _PARAM0_ is active", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Health::PropertyHitAtLeastOnce" - }, - "parameters": [ - "Object", - "Behavior" - ] - }, - { - "type": { - "value": "Health::Health::PropertyDamageCooldown" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - }, - { - "type": { - "value": "CompareObjectTimer" - }, - "parameters": [ - "Object", - "\"__Health.DamageCooldown\"", - "<", - "Object.Behavior::PropertyDamageCooldown()" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the object is considered dead (no health points).", - "fullName": "Is dead", - "functionType": "Condition", - "group": "Health", - "name": "IsDead", - "sentence": "_PARAM0_ is dead", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Health::PropertyHealth" - }, - "parameters": [ - "Object", - "Behavior", - "<=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Maximum health points of the object.", - "fullName": "Maximum health points", - "functionType": "Expression", - "group": "Health", - "name": "MaxHealth", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyMaxHealth()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Duration of damage cooldown (seconds).", - "fullName": "Duration of damage cooldown", - "functionType": "Expression", - "group": "Health", - "name": "DamageCooldownDuration", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyDamageCooldown()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Health points of the object.", - "fullName": "Health points", - "functionType": "Expression", - "group": "Health", - "name": "Health", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyHealth()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Delay before health regeneration starts after last hit (seconds).", - "fullName": "Delay before health regeneration starts", - "functionType": "Expression", - "group": "Health", - "name": "HealthRegenDelay", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyHealthRegenDelay()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Rate of health regeneration (points per second).", - "fullName": "Rate of health regeneration", - "functionType": "Expression", - "group": "Health", - "name": "HealthRegenRate", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyHealthRegenRate()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Time before damage cooldown ends (seconds).", - "fullName": "Time before damage cooldown ends", - "functionType": "Expression", - "group": "Health", - "name": "DamageCooldownRemaining", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "0" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Health::IsDamageCooldownActive" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "max(0,Object.Behavior::PropertyDamageCooldown() - Object.ObjectTimerElapsedTime(\"__Health.DamageCooldown\"))" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Time since last hit (seconds).", - "fullName": "Time since last hit", - "functionType": "Expression", - "group": "Health", - "name": "TimeSinceLastHit", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.ObjectTimerElapsedTime(\"__Health.TimeSinceLastHit\")" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "fullName": "", - "functionType": "Action", - "name": "onCreated", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__Health.DamageCooldown\"" - ] - }, - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__Health.TimeSinceLastHit\"" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Health", - "type": "behavior" - } - ], - "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "100", - "type": "Number", - "label": "Health (life points) Used for starting health", - "description": "", - "group": "Health", - "extraInformation": [], - "hidden": false, - "name": "Health" - }, - { - "value": "0", - "type": "Number", - "label": "Damage cooldown (seconds) Use \"0\" for no cooldown", - "description": "", - "group": "Health", - "extraInformation": [], - "hidden": false, - "name": "DamageCooldown" - }, - { - "value": "100", - "type": "Number", - "label": "Maximum health (0 for no maximum)", - "description": "", - "group": "Health", - "extraInformation": [], - "hidden": false, - "name": "MaxHealth" - }, - { - "value": "", - "type": "Boolean", - "label": "", - "description": "", - "group": "Health", - "extraInformation": [], - "hidden": true, - "name": "IsJustDamaged" - }, - { - "value": "0", - "type": "Number", - "label": "Rate of health regeneration (points per second) Will not exceed max health, even with overhealing enabled", - "description": "", - "group": "Health", - "extraInformation": [], - "hidden": false, - "name": "HealthRegenRate" - }, - { - "value": "0", - "type": "Number", - "label": "Delay (seconds) before health regen starts after being hit", - "description": "", - "group": "Health", - "extraInformation": [], - "hidden": false, - "name": "HealthRegenDelay" - }, - { - "value": "", - "type": "Boolean", - "label": "Allow heal to increase health above max health (regen will never exceed max health)", - "description": "", - "group": "Health", - "extraInformation": [], - "hidden": false, - "name": "AllowOverHealing" - }, - { - "value": "", - "type": "Boolean", - "label": "", - "description": "", - "group": "Health", - "extraInformation": [], - "hidden": true, - "name": "HitAtLeastOnce" - } - ], - "sharedPropertyDescriptors": [] - }, - { - "description": "Protective shield that prevents damage to health points.", - "fullName": "Shield", - "name": "Shield", - "objectType": "", - "eventsFunctions": [ - { - "fullName": "", - "functionType": "Action", - "name": "doStepPreEvents", - "sentence": "", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Regeneration", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Shield", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Shield::PropertyShieldRegenRate" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "0" - ] - }, - { - "type": { - "value": "Health::Shield::PropertyShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyMaxShieldPoints()" - ] - }, - { - "type": { - "value": "CompareObjectTimer" - }, - "parameters": [ - "Object", - "\"__Health.TimeSinceLastHit\"", - ">", - "Object.Behavior::PropertyShieldRegenDelay()" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Only regen when shield is active or when \"RegenShieldWhenZeroPoints\" is enabled", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "Health::Shield::IsShieldActive" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "Health::Shield::PropertyRegenShieldWhenZeroPoints" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "Object.Behavior::PropertyShieldRegenRate() * TimeDelta()" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Correct any values above maximum limits", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Shield::PropertyShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "Object.Behavior::PropertyMaxShieldPoints()" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyMaxShieldPoints()" - ] - } - ] - } - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Remove shield points if shield expired", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "Health::Shield::IsShieldActive" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Reset damage trigger", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyIsShieldJustDamaged" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Apply damage to the shield and object. If the shield is active, it will be damaged first and any excess damage will reduce health and trigger damage cooldown.", - "fullName": "Damage an object protected by a shield", - "functionType": "Action", - "group": "Health", - "name": "ShieldHit", - "sentence": "Damage shield and health of _PARAM0_ for _PARAM2_ points of damage", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Only consider damage if damage cooldown is NOT active", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "Health::Health::IsDamageCooldownActive" - }, - "parameters": [ - "Object", - "RequireHealth", - "" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Mark object was hit at least once (used for initial state of damage cooldown)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "Health::Health::HitAtLeastOnce" - }, - "parameters": [ - "Object", - "RequireHealth", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::SetHitAtLeastOnce" - }, - "parameters": [ - "Object", - "RequireHealth", - "yes", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Restart time since last hit timer", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__Health.TimeSinceLastHit\"" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "If shield is NOT active, perform normal damage", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "Health::Shield::IsShieldActive" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::SetHealth" - }, - "parameters": [ - "Object", - "RequireHealth", - "Object.RequireHealth::Health() - GetArgumentAsNumber(\"DamageValue\")", - "" - ] - }, - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__Health.DamageCooldown\"" - ] - }, - { - "type": { - "value": "Health::Health::SetJustDamaged" - }, - "parameters": [ - "Object", - "RequireHealth", - "yes", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "If shield is active, damage shield first", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Shield::IsShieldActive" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - "-", - "GetArgumentAsNumber(\"DamageValue\")" - ] - }, - { - "type": { - "value": "Health::Shield::SetPropertyIsShieldJustDamaged" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Excess damage is based on negative shield points", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Shield::PropertyShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "0" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Apply excess damage only if shield does NOT block excess damage", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "Health::Shield::PropertyShieldBlocksExcessDamage" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Health::SetHealth" - }, - "parameters": [ - "Object", - "RequireHealth", - "Object.RequireHealth::Health() + Object.Behavior::PropertyShieldPoints()", - "" - ] - }, - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__Health.DamageCooldown\"" - ] - }, - { - "type": { - "value": "Health::Health::SetJustDamaged" - }, - "parameters": [ - "Object", - "RequireHealth", - "yes", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "0" - ] - } - ] - } - ] - } - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - }, - { - "description": "Value of the damage to do (will be removed from object health)", - "name": "DamageValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the object maximum shield points.", - "fullName": "Change maximum shield points", - "functionType": "Action", - "group": "Shield", - "name": "SetMaxShield", - "sentence": "Set maximum shield of _PARAM0_ to _PARAM2_ points", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyMaxShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - }, - { - "description": "Maximum shield", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change shield points. This is not considered damage.", - "fullName": "Change shield points", - "functionType": "Action", - "group": "Shield", - "name": "SeShieldPoints", - "sentence": "Set shield on _PARAM0_ to _PARAM2_ points", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - }, - { - "description": "Shield points", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change rate of shield regeneration.", - "fullName": "Change rate of shield regeneration", - "functionType": "Action", - "group": "Shield", - "name": "SetShieldRegenRate", - "sentence": "Set rate of shield regeneration of _PARAM0_ to _PARAM2_ points per second", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyShieldRegenRate" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - }, - { - "description": "Rate of regen", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change delay before shield regeneration starts after being hit.", - "fullName": "Change delay before shield regeneration starts", - "functionType": "Action", - "group": "Shield", - "name": "SetShieldRegenDelay", - "sentence": "Set delay before shield regeneration starts on _PARAM0_ to _PARAM2_ seconds", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyShieldRegenDelay" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - }, - { - "description": "Delay (seconds)", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change duration of shield.", - "fullName": "Change duration of shield", - "functionType": "Action", - "group": "Shield", - "name": "SetShieldDuration", - "sentence": "Set duration of shield on _PARAM0_ to _PARAM2_ seconds", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyShieldDuration" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - }, - { - "description": "Duration of shield (seconds)", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Activate shield. If the shield was already active, this will reset it's points and timer.", - "fullName": "Activate shield", - "functionType": "Action", - "group": "Shield", - "name": "ActivateShield", - "sentence": "Activate (or renew) shield on _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Object", - "\"__Health.ShieldDuration\"" - ] - }, - { - "type": { - "value": "Health::Shield::SetPropertyShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyMaxShieldPoints()" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change max shield points. This value is used when the shield is activated or renewed.", - "fullName": "Change max shield points ", - "functionType": "Action", - "group": "Shield", - "name": "SetMaxShieldPoints", - "sentence": "Set max shield of _PARAM0_ to _PARAM2_ points", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyMaxShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - }, - { - "description": "Shield points", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Shield blocks excess damage when it breaks.", - "fullName": "Shield blocks excess damage when it breaks", - "functionType": "Action", - "group": "Shield", - "name": "ShieldBlockExcessDamage", - "sentence": "Shield on _PARAM0_ blocks excess damage when it breaks: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyShieldBlocksExcessDamage" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"Value\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyShieldBlocksExcessDamage" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - }, - { - "description": "Shield blocks excess damage", - "name": "Value", - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Regenerate shield when it has zero points.", - "fullName": "Regenerate shield when it has zero points", - "functionType": "Action", - "group": "Shield", - "name": "RegenShieldWhenZero", - "sentence": "Regenerate shield on _PARAM0_ when it has zero points: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyRegenShieldWhenZeroPoints" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"Value\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "Health::Shield::SetPropertyRegenShieldWhenZeroPoints" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - }, - { - "description": "Regen shield when it has zero points", - "name": "Value", - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the shield was just damaged previously in the events.", - "fullName": "Is shield just damaged", - "functionType": "Condition", - "group": "Shield", - "name": "IsShieldJustDamaged", - "sentence": "Shield on _PARAM0_ has just been damaged", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Shield::PropertyIsShieldJustDamaged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the shield is active (based on shield points and duration).", - "fullName": "Is shield active", - "functionType": "Condition", - "group": "Shield", - "name": "IsShieldActive", - "sentence": "Shield on _PARAM0_ is active", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "To be considered \"active\", a shield must have positive points AND not exceed duration", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Shield::PropertyShieldPoints" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Don't check the timer when duration is zero (or negative)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Shield::PropertyShieldDuration" - }, - "parameters": [ - "Object", - "Behavior", - "<=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Shield::PropertyShieldDuration" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - }, - { - "type": { - "value": "CompareObjectTimer" - }, - "parameters": [ - "Object", - "\"__Health.ShieldDuration\"", - "<", - "Object.Behavior::PropertyShieldDuration()" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Maximum shield points of the object.", - "fullName": "Maximum shield points", - "functionType": "Expression", - "group": "Shield", - "name": "MaxShield", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyMaxShieldPoints()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Duration of shield (seconds).", - "fullName": "Duration of shield", - "functionType": "Expression", - "group": "Shield", - "name": "ShieldDuration", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyShieldDuration()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Delay before shield regeneration starts after last hit (seconds).", - "fullName": "Delay before shield regeneration starts", - "functionType": "Expression", - "group": "Shield", - "name": "ShieldRegenDelay", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyShieldRegenDelay()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Rate of shield regeneration (points per second).", - "fullName": "Rate of shield regeneration", - "functionType": "Expression", - "group": "Shield", - "name": "ShieldRegenRate", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyShieldRegenRate()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Time before shield ends (seconds).", - "fullName": "Time before shield ends", - "functionType": "Expression", - "group": "Shield", - "name": "ShieldTimeRemaining", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "0" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Health::Shield::PropertyShieldDuration" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "max(0,Object.Behavior::PropertyShieldDuration() - Object.ObjectTimerElapsedTime(\"__Health.ShieldDuration\"))" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Shield points of the object.", - "fullName": "Shield points", - "functionType": "Expression", - "group": "Shield", - "name": "ShieldPoints", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyShieldPoints()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "Health::Shield", - "type": "behavior" - } - ], - "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "", - "type": "Behavior", - "label": "", - "description": "", - "group": "", - "extraInformation": [ - "Health::Health" - ], - "hidden": false, - "name": "RequireHealth" - }, - { - "value": "100", - "type": "Number", - "label": "Max shield points (Shield will start with this many points when activated)", - "description": "", - "group": "Shield", - "extraInformation": [], - "hidden": false, - "name": "MaxShieldPoints" - }, - { - "value": "5", - "type": "Number", - "label": "Duration of shield (seconds) Use \"0\" to disable shield timer", - "description": "", - "group": "Shield", - "extraInformation": [], - "hidden": false, - "name": "ShieldDuration" - }, - { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "Shield", - "extraInformation": [], - "hidden": true, - "name": "ShieldPoints" - }, - { - "value": "0", - "type": "Number", - "label": "Rate of shield regeneration (points per second)", - "description": "", - "group": "Shield", - "extraInformation": [], - "hidden": false, - "name": "ShieldRegenRate" - }, - { - "value": "", - "type": "Boolean", - "label": "Shield will block all excess damage when shield is destroyed", - "description": "", - "group": "Shield", - "extraInformation": [], - "hidden": false, - "name": "ShieldBlocksExcessDamage" - }, - { - "value": "", - "type": "Number", - "label": "Delay (seconds) before shield regeneration starts after being hit", - "description": "", - "group": "Shield", - "extraInformation": [], - "hidden": false, - "name": "ShieldRegenDelay" - }, - { - "value": "", - "type": "Boolean", - "label": "Regenerate shield when it has zero points", - "description": "", - "group": "Shield", - "extraInformation": [], - "hidden": false, - "name": "RegenShieldWhenZeroPoints" - }, - { - "value": "", - "type": "Boolean", - "label": "", - "description": "", - "group": "Shield", - "extraInformation": [], - "hidden": true, - "name": "IsShieldJustDamaged" - } - ], - "sharedPropertyDescriptors": [] - } - ], - "eventsBasedObjects": [] - }, - { - "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", - "category": "Input", - "extensionNamespace": "", - "fullName": "Draggable slider", - "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", - "name": "DraggableSliderControl", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/UI Essentials/UI Essentials_sliders_options.svg", - "shortDescription": "A draggable slider that users can move to select a numerical value.", - "version": "1.0.5", - "description": "Draws a draggable slider that users can move to select a numerical value.\nThe value range, tick spacing, and the appearance of the slider can be defined with properties.\n\nHow to use:\n- Add this behavior a **Shape Painter** object\n- Place an instance of that shape painter on the screen where you want the slider to appear\n- Use the \"Value\" expression to find the Value based on the position of the slider\n\nTips:\n- You can disable the slider to prevent a user from interacting with it\n- You can set the Value of the slider and the slider will move to the correct position\n\nFurther details can be found in [this tutorial video](https://youtu.be/iiTUwdAT_hs).\n\nBreaking changes (1.0.0)\n- Track thickness and length properties replaced track width and height. These 2 properties must be set again if they were different from the default size.\n- Hidden sliders can be dragged. The \"enable\" action must be used to disable them.\n", - "origin": { - "identifier": "DraggableSliderControl", - "name": "gdevelop-extension-store" - }, - "tags": [ - "draggable", - "slider", - "shape painter", - "ui", - "widget" - ], - "authorIds": [ - "IWykYNRvhCZBN3vEgKEbBPOR3Oc2", - "gqDaZjCfevOOxBYkK6zlhtZnXCg1" - ], - "dependencies": [], - "eventsFunctions": [], - "eventsBasedBehaviors": [ - { - "description": "Let users select a numerical value by dragging a slider.", - "fullName": "Draggable slider", - "name": "DraggableSliderControl", - "objectType": "PrimitiveDrawing::Drawer", - "eventsFunctions": [ - { - "fullName": "", - "functionType": "Action", - "name": "onCreated", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make sure object doesn't get re-drawn every frame", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::ClearBetweenFrames" - }, - "parameters": [ - "Object", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Use correct min value (instead of always starting at 0)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMin()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set track height function (which enforces valid thumb sizes)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTrackThickness" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyTrackThickness()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Start halo at same size as thumb", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::PropertyThumbHeight()/2,Object.Behavior::PropertyThumbWidth()/2)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "fullName": "", - "functionType": "Action", - "name": "doStepPreEvents", - "sentence": "", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Slider logic", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::IsEnabled" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Track where the mouse is (in relation to object)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyMouseX" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.ToDrawingX(MouseX(Object.Layer(), 0), MouseY(Object.Layer(), 0))" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyMouseY" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.ToDrawingY(MouseX(Object.Layer(), 0), MouseY(Object.Layer(), 0))" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move slider when being dragged", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbOffset" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyMouseX()" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "End sliding and update variables", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "MouseButtonReleased" - }, - "parameters": [ - "", - "Left" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Update \"Value\" based on the location of the thumb", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyValueMin() + (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin()) * Object.Behavior::PropertyThumbOffset() / Object.Behavior::PropertyTrackLength()", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Grow halo even more when pressed", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTargetHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "1.25 * Object.Behavior::PropertyHaloRadius()" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Detect hover/touch/click (but only if the layer and object is visible, and the object is not already being dragged)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Detect mouse clicks near track, start dragging", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SourisBouton" - }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseX()", - ">=", - "-Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseX()", - "<=", - "Object.Behavior::PropertyTrackLength() + Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseY()", - ">=", - "-Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseY()", - "<=", - "Object.Behavior::PropertyHaloRadius()" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Reset hover detection ", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsHovered" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Grow halo when hovered", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "SourisBouton" - }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseX()", - ">=", - "Object.Behavior::PropertyThumbOffset() - Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseX()", - "<=", - "Object.Behavior::PropertyThumbOffset() + Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseY()", - ">=", - "- Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseY()", - "<=", - "Object.Behavior::PropertyHaloRadius()" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsHovered" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTargetHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyHaloRadius()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Shrink halo to zero when not hovered", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsHovered" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTargetHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" - ] - } - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "Object.Behavior::PropertyTargetHaloRadius()" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Redraw slider only when halo is not at final size", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "abs(Object.Behavior::PropertyCurrentHaloRadius() - Object.Behavior::PropertyTargetHaloRadius())", - "<", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyTargetHaloRadius()" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "Object.Behavior::PropertyTargetHaloRadius()" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "lerp(Object.Behavior::PropertyCurrentHaloRadius(), Object.Behavior::PropertyTargetHaloRadius(), Object.Behavior::PropertyHaloGrowSpeed())" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "fullName": "", - "functionType": "Action", - "name": "doStepPostEvents", - "sentence": "", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Slider drawing", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior" - ] - }, - { - "type": { - "value": "Visible" - }, - "parameters": [ - "Object" - ] - }, - { - "type": { - "value": "LayerVisible" - }, - "parameters": [ - "", - "Object.Layer()" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::Drawer::ClearShapes" - }, - "parameters": [ - "Object" - ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Inactive track", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set inactive track parameters (by default, use thumb color)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyInactiveTrackColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyInactiveTrackColor" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyInactiveTrackColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyInactiveTrackOpacity()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::OutlineOpacity" - }, - "parameters": [ - "Object", - "=", - "0" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw inactive track", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset()", - "-Object.Behavior::PropertyTrackThickness() / 2", - "Object.Behavior::PropertyTrackLength()", - "Object.Behavior::PropertyTrackThickness() / 2" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw half circle at end of track (inactive side)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyRoundedTrack" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Arc" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyTrackLength()", - "0", - "Object.Behavior::PropertyTrackThickness() / 2", - "270", - "90", - "", - "yes" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Active track", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set active track parameters (by default, use thumb color)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyActiveTrackColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyActiveTrackColor" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyActiveTrackColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyActiveTrackOpacity()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw active track (2 pixels bigger than property) ", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "0", - "-(Object.Behavior::PropertyTrackThickness() / 2 + 1)", - "Object.Behavior::PropertyThumbOffset()", - "Object.Behavior::PropertyTrackThickness() / 2 + 1" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw half circle at end of track (active side)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyRoundedTrack" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Arc" - }, - "parameters": [ - "Object", - "0", - "0", - "1 + Object.Behavior::PropertyTrackThickness() / 2", - "90", - "270", - "", - "yes" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Halo", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Prepare halo", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbColor()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::OutlineOpacity" - }, - "parameters": [ - "Object", - "=", - "0" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw halo (it will grow or shrink as needed)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyHaloOpacityHover()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::Circle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset()", - "0", - "Object.Behavior::PropertyCurrentHaloRadius()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Use a more opaque halo while being dragged (it will grow or shrink as needed)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyHaloOpacityClick()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::Circle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset()", - "0", - "Object.Behavior::PropertyCurrentHaloRadius()" - ] - } - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Thumb", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Prepare thumb settings", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbColor()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyThumbOpacity()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw Circle thumb", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbShape" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"circle\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Circle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset()", - "0", - "ceil(max(Object.Behavior::PropertyThumbWidth(),Object.Behavior::PropertyThumbHeight())/2)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw Rectangle thumb", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbShape" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"rectangle\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset() - (Object.Behavior::PropertyThumbWidth() / 2)", - "-Object.Behavior::PropertyThumbHeight() / 2", - "Object.Behavior::PropertyThumbOffset() + (Object.Behavior::PropertyThumbWidth() / 2)", - "Object.Behavior::PropertyThumbHeight() / 2" - ] - } - ] - } - ], - "parameters": [] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the slider is being dragged.", - "fullName": "Being dragged", - "functionType": "Condition", - "group": "Slider", - "name": "IsBeingDragged", - "sentence": "_PARAM0_ is being dragged", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the slider interations are enabled.", - "fullName": "Interactions enabled", - "functionType": "Condition", - "group": "Slider", - "name": "IsEnabled", - "sentence": "Interactions of _PARAM0_ are enabled", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyEnabled" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Enable or disable the slider. Users cannot interact while it is disabled.", - "fullName": "Enable interactions", - "functionType": "Action", - "group": "Slider", - "name": "SetEnabled", - "sentence": "Enable interactions of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"Enable\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyEnabled" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Stop dragging (so the slider won't be dragging when it gets enabled)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Reset halo size (so halo won't appear when slider gets enabled)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTargetHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"Enable\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyEnabled" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Enable", - "name": "Enable", - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "The value of the slider (based on position of the thumb).", - "fullName": "Slider value", - "functionType": "Expression", - "group": "Slider", - "name": "Value", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyValue()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change the value of a slider (this will move the thumb to the correct position).", - "fullName": "Slider value", - "functionType": "Action", - "group": "Slider", - "name": "SetValue", - "sentence": "Change the value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - "<=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "round(GetArgumentAsNumber(\"Value\") / Object.Behavior::PropertyTickSpacing()) * Object.Behavior::PropertyTickSpacing()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyValueMin()" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMin()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "Object.Behavior::PropertyValueMax()" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMax()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set the proper offset (it moves the slider)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbOffset" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyTrackLength() * (Object.Behavior::PropertyValue() - Object.Behavior::PropertyValueMin()) / (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin())" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Slider value", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "The minimum value of a slider.", - "fullName": "Slider minimum value", - "functionType": "Expression", - "group": "Slider value configuration", - "name": "ValueMin", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyValueMin()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change the minimum value of a slider.", - "fullName": "Slider minimum value", - "functionType": "Action", - "group": "Slider value configuration", - "name": "SetValueMin", - "sentence": "Change the minimum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValueMin" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"ValueMin\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Minimum value", - "name": "ValueMin", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "The maximum value of a slider.", - "fullName": "Slider maximum value", - "functionType": "Expression", - "group": "Slider value configuration", - "name": "ValueMax", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyValueMax()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Thickness of track.", - "fullName": "Slider track thickness", - "functionType": "Expression", - "group": "Slider track configuration", - "name": "TrackThickness", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyTrackThickness()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Length of track.", - "fullName": "Slider track length", - "functionType": "Expression", - "group": "Slider track configuration", - "name": "TrackLength", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyTrackLength()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Height of thumb.", - "fullName": "Slider thumb height", - "functionType": "Expression", - "group": "Slider thumb configuration", - "name": "ThumbHeight", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyThumbHeight()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change the maximum value of a slider.", - "fullName": "Slider maximum value", - "functionType": "Action", - "group": "Slider value configuration", - "name": "SetValueMax", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValueMax" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"ValueMax\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Maximum value", - "name": "ValueMax", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "The tick spacing of a slider.", - "fullName": "Tick spacing", - "functionType": "Expression", - "group": "Slider value configuration", - "name": "TickSpacing", - "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyTickSpacing()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Tick spacing", - "name": "TickSpacing", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the tick spacing of a slider.", - "fullName": "Tick spacing", - "functionType": "Action", - "group": "Slider value configuration", - "name": "SetTickSpacing", - "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"TickSpacing\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Tick spacing", - "name": "TickSpacing", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change length of track.", - "fullName": "Track length", - "functionType": "Action", - "group": "Slider track configuration", - "name": "SetTrackLength", - "sentence": "Change track length of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTrackLength" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move thumb to correct place (based on new track size)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyValue()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Track width", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change thickness of track.", - "fullName": "Track thickness", - "functionType": "Action", - "group": "Slider track configuration", - "name": "SetTrackThickness", - "sentence": "Change track thickness of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTrackThickness" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make sure thumb width is not smaller than track height + 2 pixels (to prevent track ends from showing)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyTrackThickness() + 2" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyTrackThickness() + 2", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbHeight" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyTrackThickness() + 2" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetThumbHeight" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyTrackThickness() + 2", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Track thickness", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change width of thumb.", - "fullName": "Thumb width", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetThumbWidth", - "sentence": "Change thumb width of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Thumb cannot be less than track thickness (plus 2 pixels)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "max(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyTrackThickness() + 2)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Thumb width", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change height of thumb.", - "fullName": "Thumb height", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetThumbHeight", - "sentence": "Change thumb height of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Thumb cannot be less than track thickness (plus 2 pixels)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbHeight" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "max(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyTrackThickness() + 2)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Thumb height", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change radius of the halo around the thumb. This size is also used to detect interaction with the slider.", - "fullName": "Halo radius", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetHaloRadius", - "sentence": "Change halo radius of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Halo radius", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change opacity of halo when hovered.", - "fullName": "Halo opacity (hover)", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetHaloOpacityHover", - "sentence": "Change halo opacity when hovered of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyHaloOpacityHover" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Halo opacity (hover)", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change opacity of halo when pressed.", - "fullName": "Halo opacity (pressed)", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetHaloOpacityPressed", - "sentence": "Change halo opacity when pressed of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyHaloOpacityClick" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Halo opacity (pressed)", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change shape of thumb (circle or rectangle).", - "fullName": "Thumb shape", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetThumbShape", - "sentence": "Change shape of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbShape" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Shape\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make sure thumb width is not smaller than track height (to prevent track ends from showing)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbShape" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"rectangle\"" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyTrackThickness()" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyTrackThickness()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "New thumb shape", - "name": "Shape", - "supplementaryInformation": "[\"circle\",\"rectangle\"]", - "type": "stringWithSelector" - } - ], - "objectGroups": [] - }, - { - "description": "Make track use rounded ends.", - "fullName": "Rounded track ends", - "functionType": "Action", - "group": "Slider track configuration", - "name": "SetRoundedTrack", - "sentence": "Draw _PARAM0_ with a rounded track: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "GetArgumentAsNumber(\"Value\")", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyRoundedTrack" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "GetArgumentAsNumber(\"Value\")", - "=", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyRoundedTrack" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Rounded track", - "name": "Value", - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Change opacity of thumb.", - "fullName": "Thumb opacity", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetThumbOpacity", - "sentence": "Change thumb opacity of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbOpacity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Thumb opacity", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change opacity of inactive track.", - "fullName": "Inactive track opacity", - "functionType": "Action", - "group": "Slider track configuration", - "name": "SetInactiveTrackOpacity", - "sentence": "Change inactive track opacity of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyInactiveTrackOpacity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Inactive track opacity", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change opacity of active track.", - "fullName": "Active track opacity", - "functionType": "Action", - "group": "Slider track configuration", - "name": "SetActiveTrackOpacity", - "sentence": "Change active track opacity of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyActiveTrackOpacity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Active track opacity", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the color of the track that is LEFT of the thumb.", - "fullName": "Active track color ", - "functionType": "Action", - "group": "Slider track configuration", - "name": "SetActiveTrackColor", - "sentence": "Change active track color of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyActiveTrackColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Color\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Active track color", - "name": "Color", - "type": "color" - } - ], - "objectGroups": [] - }, - { - "description": "Change the color of the track that is RIGHT of the thumb.", - "fullName": "Inactive track color", - "functionType": "Action", - "group": "Slider track configuration", - "name": "SetInactiveTrackColor", - "sentence": "Change inactive track color of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyInactiveTrackColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Color\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Inactive track color", - "name": "Color", - "type": "color" - } - ], - "objectGroups": [] - }, - { - "description": "Change the thumb color to a specific value.", - "fullName": "Thumb color", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetThumbColor", - "sentence": "Change thumb color of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbColor" - }, - "parameters": [ - "Object", - "Behavior", - "GetArgumentAsString(\"Color\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Thumb color", - "name": "Color", - "type": "color" - } - ], - "objectGroups": [] - }, - { - "description": "Update the hitbox.", - "fullName": "Update hitbox", - "functionType": "Action", - "group": "Private", - "name": "UpdateHitbox", - "private": true, - "sentence": "Update the hitbox of _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::SetRotationCenter" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyTrackLength() / 2", - "Object.Behavior::PropertyTrackThickness() / 2" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::SetRectangularCollisionMask" - }, - "parameters": [ - "Object", - "-Object.Behavior::PropertyThumbWidth() / 2", - "-Object.Behavior::PropertyThumbHeight() / 2", - "Object.Behavior::PropertyTrackLength() + Object.Behavior::PropertyThumbWidth() / 2", - "Object.Behavior::PropertyThumbHeight() / 2" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "0", - "type": "Number", - "label": "Minimum value", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "ValueMin" - }, - { - "value": "1", - "type": "Number", - "label": "Maximum value", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "ValueMax" - }, - { - "value": "0", - "type": "Number", - "label": "Tick spacing", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "TickSpacing" - }, - { - "value": "circle", - "type": "Choice", - "label": "Thumb shape", - "description": "", - "group": "Thumb", - "extraInformation": [ - "circle", - "rectangle" - ], - "hidden": false, - "name": "ThumbShape" - }, - { - "value": "20", - "type": "Number", - "label": "Thumb width", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "ThumbWidth" - }, - { - "value": "20", - "type": "Number", - "label": "Thumb height", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "ThumbHeight" - }, - { - "value": " 24;119;211", - "type": "Color", - "label": "Thumb Color", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "ThumbColor" - }, - { - "value": "255", - "type": "Number", - "label": "Thumb opacity", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "ThumbOpacity" - }, - { - "value": "200", - "type": "Number", - "label": "Track length", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "TrackLength" - }, - { - "value": "4", - "type": "Number", - "label": "Track thickness", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "TrackThickness" - }, - { - "value": "", - "type": "String", - "label": "Inactive track color (thumb color by default)", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "InactiveTrackColor" - }, - { - "value": "96", - "type": "Number", - "label": "Inactive track opacity", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "InactiveTrackOpacity" - }, - { - "value": " ", - "type": "String", - "label": "Active track color (thumb color by default)", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "ActiveTrackColor" - }, - { - "value": "255", - "type": "Number", - "label": "Active track opacity", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "ActiveTrackOpacity" - }, - { - "value": "24", - "type": "Number", - "label": "Halo size (hover)", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "HaloRadius" - }, - { - "value": "32", - "type": "Number", - "label": "Halo opacity (hover)", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "HaloOpacityHover" - }, - { - "value": "64", - "type": "Number", - "label": "Halo opacity (pressed)", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "HaloOpacityClick" - }, - { - "value": "true", - "type": "Boolean", - "label": "Rounded track ends", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "RoundedTrack" - }, - { - "value": "true", - "type": "Boolean", - "label": "Enable interactions", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "Enabled" - }, - { - "value": "", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "IsBeingDragged" - }, - { - "value": "0", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "Value" - }, - { - "value": "0", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "ThumbOffset" - }, - { - "value": "true", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "NeedRedraw" - }, - { - "value": "", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "IsHovered" - }, - { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "MouseX" - }, - { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "MouseY" - }, - { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "CurrentHaloRadius" - }, - { - "value": "0.2", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "HaloGrowSpeed" - }, - { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "TargetHaloRadius" - } - ], - "sharedPropertyDescriptors": [] - } - ], - "eventsBasedObjects": [] } ], "externalLayouts": [], From 5e2ac713d870d2908af58bd8f4252c661974fc11 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 29 Nov 2022 19:25:22 +0000 Subject: [PATCH 30/98] Optimised images with calibre/image-actions --- examples/resource-bar/assets/Empty Heart.png | Bin 8179 -> 189 bytes .../assets/Flashy Empty Heart.png | Bin 11278 -> 189 bytes .../assets/Flashy Full Heart 2.png | Bin 349 -> 263 bytes .../resource-bar/assets/Flashy Full Heart.png | Bin 11426 -> 264 bytes examples/resource-bar/assets/Full Heart.png | Bin 11556 -> 264 bytes examples/resource-bar/assets/Scroll.png | Bin 10210 -> 770 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/resource-bar/assets/Empty Heart.png b/examples/resource-bar/assets/Empty Heart.png index 9a3f5e362763383c8ed0410abb29a8b0e1dcb1c1..a1e290f63bc8e8243a8675ec52790e6aca4e3c9a 100644 GIT binary patch delta 162 zcmV;T0A2s{KfM8vBYyx1a7bBm000XT000XT0n*)m`~Uy|Z%IT!R7l5TU>F5M8r+)H z@E?XLQA5xIO4ShU3z$LZV#N56;-Dhdfq2cprkD~-Ne((<4JX?YawD5=LB~K&FwiBF zlIkmxLV&J8htEQEiz#*#DF#r@_mmV#6qn#Mi$}U8k^#xgG#gLyqhLS)04u~*cc0ni QyZ`_I07*qoM6N<$g2W*}DF6Tf literal 8179 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ϧdp15U*n@eXPzHiR zLBCK21ph1+e6VBuQLPgAfAOJoXzH0?u{3GLkyX*grE{4AjQ&<4eEfytm9itrd&-&p(DM@D{jPGC;nrCEyT zmcEv{x!&^y^G;@fFdav1m6F@-NKmiSM0yNVA}V7t>akH94=s;I!^&pJFxIcKp43J6 zDo0G6^>UB36t7_M4K*qv!}EY;S87WpLg%@H-Np_o1AX3xM_wQGvl0YwzdZu>eDjEZ zpfmg>xJ~QSed_z*u4{Ftip}w2fh!Ds_e3Gwt=|aj2}I dSi_3-V;70w-)%IzvMHGY^tDa2$~7*B{SQ#_pc?=H diff --git a/examples/resource-bar/assets/Flashy Empty Heart.png b/examples/resource-bar/assets/Flashy Empty Heart.png index 0ea83b42370d8f7278be5a80faa0fd42d1a1b017..3b00a934e8e7328cfa071ccf925ad1eeb09b1a30 100644 GIT binary patch delta 144 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 diff --git a/examples/resource-bar/assets/Flashy Full Heart 2.png b/examples/resource-bar/assets/Flashy Full Heart 2.png index fcabd7eb053921ec0fa037bc4cefba9f9a728a6e..75d73cc53423acac81904350bbc05a8411bf8000 100644 GIT binary patch delta 236 zcmVF6o07fRx z|6!OCH3ThiSJj4Nbi-i$a79HpCdoo{OOOphHVj>yB+Ib*1ZEjFOXKw9P%zP!VY3LA z%js$nvV|lCA2Ale3`O@1U3^4xf*_RQsAAErNe%x&nADU9!)56C4Q3uqf)889#t8`d z4B29AB?q!k@cM|D%!@C`NGj`Kt|H_!Y(62%7o_+Mn?)2=6}Wtc%_kIFhF0000 delta 323 zcmV-J0lfZ)0^I_TBYy!TNkl~m-KGLowXr$sQ$q90$t z#a{DEpcn>Iqx$w9T+MA^C7c#A60$_#&o>l#m|@5kV3S9;jFFH}V3vJg;li+#o%b&a z|L13BoR%>WibR;<=$4QQm?+Ww^D{Ht7ciP?7Qupxo%b&sV}A=qbihK6FNpC0Nj{=9 zUa+RRTaz08GcYhPL@YYYKuXGkfe$QPDEVzgoGk+b0|SFvUIQah`G^#sePH3j$k;gJ z2<8%GpTS&FFZA3^9er77>RW)E}!A6gNQB}V5tUMoFS(!nt)rA8vY|&JPL*n003W` Vs9P;AI;H>s002ovPDHLkV1geAiIV^T diff --git a/examples/resource-bar/assets/Flashy Full Heart.png b/examples/resource-bar/assets/Flashy Full Heart.png index 06503da24dfcb9ad33f8a100bf682c45a0160cf3..8c4212622d53865ce222e89e41ef7d7b4dc6eb1e 100644 GIT binary patch delta 237 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 VpKOV-B+UQ-002ovPDHLkV1hHIVRirj literal 11556 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 diff --git a/examples/resource-bar/assets/Scroll.png b/examples/resource-bar/assets/Scroll.png index 002b569d9fe87f4e132e37927ba57c4104f3e9e5..72c3cc52f7b8bf025fc51724e30fd181fb353b53 100644 GIT binary patch delta 730 zcmV<00ww+8Pl5)JBa?9>6@LP>Nkl^W`#Bp=GJg;_3ACfgbhZO6 z;A*t@P}&0+!)L(gRsxq>9Mndo+Ri);aMe*Pg+>zHfEF0s3}pKu6KHIQB(dd&K^6lv zaYQ?Uwnvx4S4v6ol$fJsq4gR%X$}hydIC#9ldL-F0SXUB0Lwx1l+gE9d|+}~F$!32 zvvu3InFC30DF)Ci2!Ck(TxUO%`R$*Ud}puyvl-uX%_@@_(9A})J+RaSTvB0iv}$bq z`_hMOEy9iZKdI+n0$U22bQr76Q))%E8PKfM^O=BFiex>~L!~W^6^74Q!?l?r(b3Ry zo2|2;X+{&xIz7{if|-X?*xpz)qOAzc^Q7M$H0?%2+ zTWVs}2{PS?rupSIUpfxJe)s&IIp)~wAdOjQfEhn@)_j?z(99g~YdsJH9Ql2~XEw@P zOVCZ-`B4+qz<<>r-x0Lh^QUfrrOqm79rdHvN3@ptm-+kYjxLk|#9U}K5zOT~xsJfm z`yXqR7Bhr+=^Nn2W0OD&_f|nJ1ARRIT64E=%bmXxXxtMVI49gXkIh}Ib2i7!dr}vH z)@vakO(y|vfhw1tcb!P~DFGK4n#Bus0Jr!YO*^FrxKE(aa@c03zks&bVn8!jT)LPU za1J9{YA?-F0Rqs1tUA5sR>1}~pwZ^uFYNws3auTRcW^*+2+nK!1@^<7?lA#Ji~s-t M07*qoM6N<$f+%)b4FCWD literal 10210 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 From ce6fd44231bab86abc55d9e1a865de8edfad52e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Wed, 7 Dec 2022 21:02:44 +0100 Subject: [PATCH 31/98] Add extraInfo for layout --- examples/resource-bar/game.json | 104 +++++++++++++++++++++++++------- 1 file changed, 82 insertions(+), 22 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index f14363bd7..bca7a89a9 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -553,7 +553,7 @@ "gridColor": 10401023, "gridAlpha": 0.2, "snap": true, - "zoomFactor": 1, + "zoomFactor": 1.2933333099365252, "windowMask": false }, "objectsGroups": [ @@ -604,11 +604,11 @@ { "angle": 0, "customSize": true, - "height": 96, + "height": 88, "layer": "", "name": "UnitsBar", "persistentUuid": "cd7ae08a-3045-436b-bda9-beda9d2b55db", - "width": 226, + "width": 200, "x": 408, "y": 160, "zOrder": 39, @@ -679,11 +679,11 @@ { "angle": 0, "customSize": true, - "height": 56, + "height": 64, "layer": "", "name": "NoBackgroundUnitsBar", "persistentUuid": "a4a16b93-f588-4324-b306-5f85919b34ab", - "width": 200, + "width": 208, "x": 424, "y": 304, "zOrder": 44, @@ -840,7 +840,9 @@ "effects": [], "behaviors": [], "content": { - "UnitWidth": 26 + "UnitWidth": 26, + "BarLeftPadding": 32, + "BarRightPadding": 32 }, "childrenContent": { "Background": { @@ -856,12 +858,12 @@ "Bar": { "height": 26, "texture": "assets\\Empty Heart.png", - "width": 26 + "width": 78 }, "Resource": { "height": 26, "texture": "assets\\Full Heart.png", - "width": 26 + "width": 78 } } }, @@ -1521,16 +1523,7 @@ "effects": [] } ], - "behaviorsSharedData": [ - { - "name": "ResourceBar_Sprite", - "type": "ResourceBar::ResourceBar_Sprite" - }, - { - "name": "ResourceBar_TiledSprite", - "type": "TiledContinuousBar::ResourceBar" - } - ] + "behaviorsSharedData": [] } ], "externalEvents": [], @@ -2876,6 +2869,57 @@ "extraInformation": [], "hidden": false, "name": "ShowBackground" + }, + { + "value": "0", + "type": "Number", + "label": "Bar left margin", + "description": "", + "group": "", + "extraInformation": [ + "Resource", + "Bar" + ], + "hidden": false, + "name": "BarLeftPadding" + }, + { + "value": "0", + "type": "Number", + "label": "Bar right margin", + "description": "", + "group": "", + "extraInformation": [ + "Resource", + "Bar" + ], + "hidden": false, + "name": "BarRightPadding" + }, + { + "value": "Center", + "type": "String", + "label": "", + "description": "", + "group": "", + "extraInformation": [ + "Resource", + "Bar" + ], + "hidden": true, + "name": "BarVerticalAnchorOrigin" + }, + { + "value": "Center", + "type": "String", + "label": "", + "description": "", + "group": "", + "extraInformation": [ + "Background" + ], + "hidden": true, + "name": "BarVerticalAnchorTarget" } ], "objects": [ @@ -4902,7 +4946,11 @@ "label": "", "description": "", "group": "Bar", - "extraInformation": [], + "extraInformation": [ + "Label", + "Resource", + "Buffer" + ], "hidden": false, "name": "BarLeftPadding" }, @@ -4912,7 +4960,11 @@ "label": "", "description": "", "group": "Bar", - "extraInformation": [], + "extraInformation": [ + "Label", + "Resource", + "Buffer" + ], "hidden": false, "name": "BarTopPadding" }, @@ -4922,7 +4974,11 @@ "label": "", "description": "", "group": "Bar", - "extraInformation": [], + "extraInformation": [ + "Label", + "Resource", + "Buffer" + ], "hidden": false, "name": "BarRightPadding" }, @@ -4932,7 +4988,11 @@ "label": "", "description": "", "group": "Bar", - "extraInformation": [], + "extraInformation": [ + "Label", + "Resource", + "Buffer" + ], "hidden": false, "name": "BarBottomPadding" }, From c3a9d603ff82c85dcd785ee85e3bf5f01958b837 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Fri, 9 Dec 2022 16:27:06 +0100 Subject: [PATCH 32/98] Add metadata for scene editor rendering. --- examples/resource-bar/game.json | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index bca7a89a9..a22b3bf31 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -841,8 +841,8 @@ "behaviors": [], "content": { "UnitWidth": 26, - "BarLeftPadding": 32, - "BarRightPadding": 32 + "BarLeftPadding": 38, + "BarRightPadding": 38 }, "childrenContent": { "Background": { @@ -894,7 +894,7 @@ "Bar": { "height": 16, "texture": "assets\\tiled_Tiled Empty UI Heart.png", - "width": 16 + "width": 48 }, "Resource": { "height": 16, @@ -942,6 +942,7 @@ "underlined": false, "string": "2 / 3", "font": "", + "textAlignment": "", "characterSize": 8, "color": { "b": 255, @@ -996,6 +997,7 @@ "underlined": false, "string": "2 / 3", "font": "", + "textAlignment": "", "characterSize": 8, "color": { "b": 255, @@ -2866,7 +2868,9 @@ "label": "Show the background", "description": "", "group": "", - "extraInformation": [], + "extraInformation": [ + "Background" + ], "hidden": false, "name": "ShowBackground" }, @@ -2900,7 +2904,7 @@ "value": "Center", "type": "String", "label": "", - "description": "", + "description": "Only used by the scene editor", "group": "", "extraInformation": [ "Resource", @@ -2913,7 +2917,7 @@ "value": "Center", "type": "String", "label": "", - "description": "", + "description": "Only used by the scene editor", "group": "", "extraInformation": [ "Background" @@ -5042,9 +5046,23 @@ "label": "Show the label", "description": "", "group": "", - "extraInformation": [], + "extraInformation": [ + "Label" + ], "hidden": false, "name": "ShowLabel" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "Only used by the scene editor", + "group": "", + "extraInformation": [ + "Buffer" + ], + "hidden": true, + "name": "ShowBuffer" } ], "objects": [ @@ -5062,6 +5080,7 @@ "behaviors": [], "string": "2 / 3", "font": "", + "textAlignment": "", "characterSize": 20, "color": { "b": 0, From cd969d1aa67e36ee473a07c4aa1629bf30b3884c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Fri, 9 Dec 2022 20:33:45 +0100 Subject: [PATCH 33/98] IconButton experiment --- examples/resource-bar/game.json | 375 ++++++++++++++++++++++++++++++++ 1 file changed, 375 insertions(+) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index a22b3bf31..2a0c31dd4 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -525,6 +525,24 @@ "name": "assets\\tiled_Tiled Empty UI Heart.png", "smoothed": true, "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Bomb_Shadow.png", + "kind": "image", + "metadata": "", + "name": "assets\\Bomb_Shadow.png", + "smoothed": true, + "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Heart.png", + "kind": "image", + "metadata": "", + "name": "assets\\Heart.png", + "smoothed": true, + "userAdded": false } ], "resourceFolders": [] @@ -1526,6 +1544,263 @@ } ], "behaviorsSharedData": [] + }, + { + "b": 209, + "disableInputWhenNotFocused": true, + "mangledName": "Experiment", + "name": "Experiment", + "r": 209, + "standardSortMethod": true, + "stopSoundsOnStartup": true, + "title": "", + "v": 209, + "uiSettings": { + "grid": false, + "gridType": "rectangular", + "gridWidth": 32, + "gridHeight": 32, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.8, + "snap": false, + "zoomFactor": 1.3283333190917974, + "windowMask": false + }, + "objectsGroups": [], + "variables": [], + "instances": [ + { + "angle": 0, + "customSize": false, + "height": 32, + "layer": "", + "name": "IconButton", + "persistentUuid": "823931f4-c023-4442-9214-4d9bbe24d3ca", + "width": 32, + "x": 240, + "y": 191, + "zOrder": 1, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "IconButton2", + "persistentUuid": "6958c0d1-7d50-49d3-a137-625a0bb1e6e7", + "width": 0, + "x": 396, + "y": 316, + "zOrder": 2, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "IconButton", + "persistentUuid": "42f4217b-2c22-4699-90af-b06d88d6f263", + "width": 0, + "x": 299, + "y": 95, + "zOrder": 3, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "IconButton2", + "persistentUuid": "8f738f18-7cb8-4f0c-bf51-e189159824b2", + "width": 0, + "x": 445, + "y": 167, + "zOrder": 4, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "IconButton2", + "persistentUuid": "d5cc97a8-f996-49af-baff-a64e8670532d", + "width": 0, + "x": 338, + "y": 192, + "zOrder": 5, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ], + "objects": [ + { + "assetStoreId": "", + "name": "IconButton", + "tags": "", + "type": "IconButton::IconButton", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "LabelAnchorDeltaY": 0 + }, + "childrenContent": { + "Icon": { + "updateIfNotVisible": false, + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\Bomb_Shadow.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "Bomb", + "font": "", + "textAlignment": "left", + "characterSize": 20, + "color": { + "b": 0, + "g": 0, + "r": 0 + } + } + } + }, + { + "assetStoreId": "", + "name": "IconButton2", + "tags": "", + "type": "IconButton::IconButton", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "LabelAnchorDeltaY": 8 + }, + "childrenContent": { + "Icon": { + "updateIfNotVisible": false, + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\Heart.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "Heart", + "font": "", + "textAlignment": "left", + "characterSize": 20, + "color": { + "b": 0, + "g": 0, + "r": 0 + } + } + } + } + ], + "events": [], + "layers": [ + { + "ambientLightColorB": 8632048, + "ambientLightColorG": 150995054, + "ambientLightColorR": 1869182049, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "behaviorsSharedData": [] } ], "externalEvents": [], @@ -5149,6 +5424,106 @@ ] } ] + }, + { + "author": "", + "category": "", + "extensionNamespace": "", + "fullName": "", + "helpPath": "", + "iconUrl": "", + "name": "IconButton", + "previewIconUrl": "", + "shortDescription": "", + "version": "", + "description": "", + "tags": [], + "authorIds": [], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [], + "eventsBasedObjects": [ + { + "defaultName": "", + "description": "", + "fullName": "", + "name": "IconButton", + "eventsFunctions": [], + "propertyDescriptors": [ + { + "value": "Bottom-center", + "type": "String", + "label": "", + "description": "This is only used by the scene editor.", + "group": "", + "extraInformation": [ + "Icon" + ], + "hidden": true, + "name": "LabelAnchorTarget" + }, + { + "value": "Top-center", + "type": "String", + "label": "", + "description": "This is only used by the scene editor.", + "group": "", + "extraInformation": [ + "Label" + ], + "hidden": true, + "name": "LabelAnchorOrigin" + }, + { + "value": "0", + "type": "Number", + "label": "Label margin", + "description": "This is only used by the scene editor.", + "group": "", + "extraInformation": [ + "Label" + ], + "hidden": false, + "name": "LabelAnchorDeltaY" + } + ], + "objects": [ + { + "assetStoreId": "", + "bold": false, + "italic": false, + "name": "Label", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Text", + "font": "", + "textAlignment": "left", + "characterSize": 20, + "color": { + "b": 0, + "g": 0, + "r": 0 + } + }, + { + "assetStoreId": "", + "name": "Icon", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [] + } + ] + } + ] } ], "externalLayouts": [], From a3ed9b9d663da0c3adf886e326a0f28a7d494f18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Wed, 14 Dec 2022 16:57:25 +0100 Subject: [PATCH 34/98] Add some experiments about sliders. --- examples/resource-bar/game.json | 427 ++++++++++++++++++++++++++++---- 1 file changed, 376 insertions(+), 51 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 2a0c31dd4..28ce093e0 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -543,6 +543,15 @@ "name": "assets\\Heart.png", "smoothed": true, "userAdded": false + }, + { + "alwaysLoaded": false, + "file": "assets/Energy Bar.png", + "kind": "image", + "metadata": "", + "name": "assets\\Energy Bar.png", + "smoothed": true, + "userAdded": true } ], "resourceFolders": [] @@ -960,7 +969,7 @@ "underlined": false, "string": "2 / 3", "font": "", - "textAlignment": "", + "textAlignment": "center", "characterSize": 8, "color": { "b": 255, @@ -1546,15 +1555,15 @@ "behaviorsSharedData": [] }, { - "b": 209, + "b": 43, "disableInputWhenNotFocused": true, "mangledName": "Experiment", "name": "Experiment", - "r": 209, + "r": 43, "standardSortMethod": true, "stopSoundsOnStartup": true, "title": "", - "v": 209, + "v": 43, "uiSettings": { "grid": false, "gridType": "rectangular", @@ -1565,38 +1574,23 @@ "gridColor": 10401023, "gridAlpha": 0.8, "snap": false, - "zoomFactor": 1.3283333190917974, + "zoomFactor": 1, "windowMask": false }, "objectsGroups": [], "variables": [], "instances": [ - { - "angle": 0, - "customSize": false, - "height": 32, - "layer": "", - "name": "IconButton", - "persistentUuid": "823931f4-c023-4442-9214-4d9bbe24d3ca", - "width": 32, - "x": 240, - "y": 191, - "zOrder": 1, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, { "angle": 0, "customSize": false, "height": 0, "layer": "", - "name": "IconButton2", - "persistentUuid": "6958c0d1-7d50-49d3-a137-625a0bb1e6e7", + "name": "NewSlider", + "persistentUuid": "df1cddda-d857-4891-a140-fa82f6f3a9d3", "width": 0, - "x": 396, - "y": 316, - "zOrder": 2, + "x": 264, + "y": 319, + "zOrder": 1, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -1607,26 +1601,11 @@ "height": 0, "layer": "", "name": "IconButton", - "persistentUuid": "42f4217b-2c22-4699-90af-b06d88d6f263", - "width": 0, - "x": 299, - "y": 95, - "zOrder": 3, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "IconButton2", - "persistentUuid": "8f738f18-7cb8-4f0c-bf51-e189159824b2", + "persistentUuid": "d4a97d8d-da9e-47e2-afe5-ca384513f230", "width": 0, - "x": 445, - "y": 167, - "zOrder": 4, + "x": 314, + "y": 189, + "zOrder": 2, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -1637,11 +1616,11 @@ "height": 0, "layer": "", "name": "IconButton2", - "persistentUuid": "d5cc97a8-f996-49af-baff-a64e8670532d", + "persistentUuid": "94450521-102c-411b-b0fe-58b686903c2b", "width": 0, - "x": 338, - "y": 192, - "zOrder": 5, + "x": 399, + "y": 195, + "zOrder": 3, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -1720,7 +1699,7 @@ "effects": [], "behaviors": [], "content": { - "LabelAnchorDeltaY": 8 + "LabelAnchorDeltaY": 16 }, "childrenContent": { "Icon": { @@ -1773,6 +1752,105 @@ } } } + }, + { + "assetStoreId": "", + "name": "NewSprite", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\Bomb_Shadow.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "", + "name": "NewSlider", + "tags": "", + "type": "PanelSpriteSlider::PanelSpriteSlider", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "BarTopPadding": 3, + "BarBottomPadding": 3, + "BarLeftPadding": 9, + "BarRightPadding": 9, + "MaxValue": 4 + }, + "childrenContent": { + "Background": { + "bottomMargin": 6, + "height": 15, + "leftMargin": 11, + "rightMargin": 11, + "texture": "assets\\Health Bar Box.png", + "tiled": true, + "topMargin": 6, + "width": 96 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "", + "font": "", + "textAlignment": "", + "characterSize": 20, + "color": { + "b": 0, + "g": 0, + "r": 0 + } + }, + "Resource": { + "height": 8, + "texture": "assets\\tiled_Health Bar Fill.png", + "width": 32 + }, + "Thumb": { + "bottomMargin": 6, + "height": 32, + "leftMargin": 8, + "rightMargin": 8, + "texture": "assets\\Energy Bar.png", + "tiled": false, + "topMargin": 6, + "width": 16 + } + } } ], "events": [], @@ -3255,6 +3333,229 @@ } ] }, + { + "author": "", + "category": "User interface", + "extensionNamespace": "", + "fullName": "Slider (tiled)", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", + "name": "PanelSpriteSlider", + "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/UI Essentials/1678c39a3b2bd3df4f82a8a293770db4986a6bcfd3f78e738ddfc86e39176423_UI Essentials_sliders_options.svg", + "shortDescription": "", + "version": "1.0.0", + "description": "", + "origin": { + "identifier": "ResourceBar", + "name": "gdevelop-extension-store" + }, + "tags": [], + "authorIds": [], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [], + "eventsBasedObjects": [ + { + "defaultName": "Slider", + "description": "", + "fullName": "Slider", + "name": "PanelSpriteSlider", + "eventsFunctions": [], + "propertyDescriptors": [ + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "Bar", + "extraInformation": [ + "Label", + "Resource" + ], + "hidden": false, + "name": "BarLeftPadding" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "Bar", + "extraInformation": [ + "Label", + "Resource" + ], + "hidden": false, + "name": "BarTopPadding" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "Bar", + "extraInformation": [ + "Label", + "Resource" + ], + "hidden": false, + "name": "BarRightPadding" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "Bar", + "extraInformation": [ + "Label", + "Resource" + ], + "hidden": false, + "name": "BarBottomPadding" + }, + { + "value": "3", + "type": "Number", + "label": "Maximum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "MaxValue" + }, + { + "value": "3", + "type": "Number", + "label": "Initial value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "InitialValue" + }, + { + "value": "true", + "type": "Boolean", + "label": "Show the label", + "description": "", + "group": "", + "extraInformation": [ + "Label" + ], + "hidden": false, + "name": "ShowLabel" + }, + { + "value": "Center-center", + "type": "Number", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": [ + "Thumb" + ], + "hidden": true, + "name": "ThumbAnchorOrigin" + }, + { + "value": "Center-right", + "type": "Number", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": [ + "Resource" + ], + "hidden": true, + "name": "ThumbAnchorTarget" + } + ], + "objects": [ + { + "assetStoreId": "", + "bold": false, + "italic": false, + "name": "Label", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "2 / 3", + "font": "", + "textAlignment": "", + "characterSize": 20, + "color": { + "b": 0, + "g": 0, + "r": 0 + } + }, + { + "assetStoreId": "", + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "name": "Thumb", + "rightMargin": 0, + "tags": "", + "texture": "", + "tiled": false, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "", + "height": 32, + "name": "Resource", + "tags": "", + "texture": "", + "type": "TiledSpriteObject::TiledSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "ResourceBar", + "type": "TiledContinuousBar::ResourceBar", + "Value": 1, + "MaxValue": 3, + "PreviousValue": 0 + }, + { + "name": "Tween", + "type": "Tween::TweenBehavior" + } + ] + }, + { + "assetStoreId": "", + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "name": "Background", + "rightMargin": 0, + "tags": "", + "texture": "", + "tiled": true, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [] + } + ] + } + ] + }, { "author": "", "category": "User interface", @@ -5331,13 +5632,37 @@ "value": "", "type": "Boolean", "label": "", - "description": "Only used by the scene editor", + "description": "Only used by the scene editor.", "group": "", "extraInformation": [ "Buffer" ], "hidden": true, "name": "ShowBuffer" + }, + { + "value": "Center", + "type": "String", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": [ + "Label" + ], + "hidden": true, + "name": "LabelVerticalAnchorOrigin" + }, + { + "value": "Center", + "type": "String", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": [ + "Resource" + ], + "hidden": true, + "name": "LabelVerticalAnchorTarget" } ], "objects": [ @@ -5478,7 +5803,7 @@ "value": "0", "type": "Number", "label": "Label margin", - "description": "This is only used by the scene editor.", + "description": "", "group": "", "extraInformation": [ "Label" From fd54ac99b27cbf6439f0719dd89b6874a9ac136b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Thu, 15 Dec 2022 12:12:54 +0100 Subject: [PATCH 35/98] Handle hot reload. Fix resize. --- examples/resource-bar/game.json | 346 ++++++++++++++++++++++++++++++-- 1 file changed, 334 insertions(+), 12 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 28ce093e0..b00f4d0e0 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -869,7 +869,9 @@ "content": { "UnitWidth": 26, "BarLeftPadding": 38, - "BarRightPadding": 38 + "BarRightPadding": 38, + "MaxValue": 3, + "InitialValue": 3 }, "childrenContent": { "Background": { @@ -2536,6 +2538,35 @@ "name": "onCreated", "sentence": "", "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "This allows to detect a change of \"intitial value\" on hot reload.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TiledUnitsBar::TiledUnitsBar::SetPropertyPreviousInitialValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyInitialValue()" + ] + } + ] + }, { "type": "BuiltinCommonInstructions::Comment", "color": { @@ -2697,6 +2728,87 @@ ], "objectGroups": [] }, + { + "fullName": "", + "functionType": "Action", + "name": "onHotReloading", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TiledUnitsBar::TiledUnitsBar::CenterBar" + }, + "parameters": [ + "Object", + "" + ] + }, + { + "type": { + "value": "TiledUnitsBar::TiledUnitsBar::SetMaxValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyMaxValue()", + "Object.PropertyMaxValue()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TiledUnitsBar::TiledUnitsBar::PropertyInitialValue" + }, + "parameters": [ + "Object", + "!=", + "Object.PropertyPreviousInitialValue()" + ] + } + ], + "actions": [ + { + "type": { + "value": "TiledUnitsBar::TiledUnitsBar::SetPropertyPreviousInitialValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyInitialValue()" + ] + }, + { + "type": { + "value": "TiledUnitsBar::TiledUnitsBar::SetValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyInitialValue()", + "Object.PropertyInitialValue()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", + "type": "object" + } + ], + "objectGroups": [] + }, { "fullName": "", "functionType": "Action", @@ -2741,7 +2853,7 @@ "parameters": [ "Object.Width()", "!=", - "max(Background.Width(), Label.Width())" + "max(Background.BoundingBoxRight(), Bar.BoundingBoxRight()) - min(Background.BoundingBoxLeft(), Bar.BoundingBoxLeft())" ] }, { @@ -2751,7 +2863,7 @@ "parameters": [ "Object.Height()", "!=", - "max(Background.Height(), Label.Height())" + "max(Background.BoundingBoxBottom(), Bar.BoundingBoxBottom()) - min(Background.BoundingBoxTop(), Bar.BoundingBoxTop())" ] } ] @@ -3205,6 +3317,16 @@ "hidden": false, "name": "InitialValue" }, + { + "value": "", + "type": "Number", + "label": "", + "description": "It's used to detect a change at hot reload.", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "PreviousInitialValue" + }, { "value": "24", "type": "Number", @@ -3257,7 +3379,7 @@ "value": "Center", "type": "String", "label": "", - "description": "Only used by the scene editor", + "description": "Only used by the scene editor.", "group": "", "extraInformation": [ "Resource", @@ -3270,7 +3392,7 @@ "value": "Center", "type": "String", "label": "", - "description": "Only used by the scene editor", + "description": "Only used by the scene editor.", "group": "", "extraInformation": [ "Background" @@ -4256,6 +4378,35 @@ "name": "onCreated", "sentence": "", "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "This allows to detect a change of \"intitial value\" on hot reload.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TiledContinuousBar::TiledContinuousBar::SetPropertyPreviousInitialValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyInitialValue()" + ] + } + ] + }, { "type": "BuiltinCommonInstructions::Comment", "color": { @@ -4507,6 +4658,124 @@ ], "objectGroups": [] }, + { + "fullName": "", + "functionType": "Action", + "name": "onHotReloading", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TiledContinuousBar::TiledContinuousBar::UpdateLayout" + }, + "parameters": [ + "Object", + "" + ] + }, + { + "type": { + "value": "TiledContinuousBar::TiledContinuousBar::SetMaxValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyMaxValue()", + "Object.PropertyMaxValue()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TiledContinuousBar::TiledContinuousBar::PropertyInitialValue" + }, + "parameters": [ + "Object", + "!=", + "Object.PropertyPreviousInitialValue()" + ] + } + ], + "actions": [ + { + "type": { + "value": "TiledContinuousBar::TiledContinuousBar::SetPropertyPreviousInitialValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyInitialValue()" + ] + }, + { + "type": { + "value": "TiledContinuousBar::TiledContinuousBar::SetValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyInitialValue()", + "Object.PropertyInitialValue()" + ] + }, + { + "type": { + "value": "TiledContinuousBar::TiledContinuousBar::SetPreviousValueDuration" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyPreviousHighValueDuration()", + "" + ] + }, + { + "type": { + "value": "Tween::RemoveTween" + }, + "parameters": [ + "Resource", + "Tween", + "\"ChangeValue\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TiledSpriteObject::Width" + }, + "parameters": [ + "Resource", + "=", + "Object.WidthForValue()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", + "type": "object" + } + ], + "objectGroups": [] + }, { "fullName": "", "functionType": "Action", @@ -4532,7 +4801,7 @@ "textG": 0, "textR": 0 }, - "comment": "Children instances must be resized when the button size change:\n- backgrounds for each state are resized to take the full dimensions of the button\n- the label is put back at the center of the button\n\nThe scale is set back to 1 because it means that the parent instance has the same dimensions as the union of its children instances.", + "comment": "Children instances must be resized when the parent size change:\n- backgrounds is resized to take the full dimensions of the button\n- the label is put back at the center of the bar\n\nThe scale is set back to 1 because it means that the parent instance has the same dimensions as the union of its children instances.", "comment2": "" }, { @@ -4551,7 +4820,7 @@ "parameters": [ "Object.Width()", "!=", - "max(Background.Width(), Label.Width())" + "max(Background.BoundingBoxRight(), Label.BoundingBoxRight()) - min(Background.BoundingBoxLeft(), Label.BoundingBoxLeft())" ] }, { @@ -4561,7 +4830,7 @@ "parameters": [ "Object.Height()", "!=", - "max(Background.Height(), Label.Height())" + "max(Background.BoundingBoxBottom(), Label.BoundingBoxBottom()) - min(Background.BoundingBoxTop(), Label.BoundingBoxTop())" ] } ] @@ -4880,12 +5149,11 @@ }, { "type": { - "value": "TextObject::String" + "value": "TiledContinuousBar::TiledContinuousBar::UpdateLabel" }, "parameters": [ - "Label", - "=", - "ToString(round(Object.Value())) + \" / \" + ToString(Object.MaxValue())" + "Object", + "" ] } ] @@ -5027,6 +5295,15 @@ "" ] }, + { + "type": { + "value": "TiledContinuousBar::TiledContinuousBar::UpdateLabel" + }, + "parameters": [ + "Object", + "" + ] + }, { "type": { "value": "TiledContinuousBar::TiledContinuousBar::UpdateLayout" @@ -5517,6 +5794,41 @@ } ], "objectGroups": [] + }, + { + "description": "Update the text that display the current value and maximum value.", + "fullName": "Update label", + "functionType": "Action", + "name": "UpdateLabel", + "private": true, + "sentence": "Update label of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TextObject::String" + }, + "parameters": [ + "Label", + "=", + "ToString(round(Object.Value())) + \" / \" + ToString(Object.MaxValue())" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", + "type": "object" + } + ], + "objectGroups": [] } ], "propertyDescriptors": [ @@ -5596,6 +5908,16 @@ "hidden": false, "name": "InitialValue" }, + { + "value": "", + "type": "Number", + "label": "", + "description": "It's used to detect a change at hot reload.", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "PreviousInitialValue" + }, { "value": "1", "type": "Number", From 2ae7ba5fa01309b926874129ac6d9582d0ff6b51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Thu, 15 Dec 2022 15:08:24 +0100 Subject: [PATCH 36/98] Use a panel sprite instead of a tiled sprite for the continuous bar. --- examples/resource-bar/game.json | 464 ++++++++++++++++++++++---------- 1 file changed, 329 insertions(+), 135 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index b00f4d0e0..eb0a63c43 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -552,6 +552,15 @@ "name": "assets\\Energy Bar.png", "smoothed": true, "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Health Bar2.png", + "kind": "image", + "metadata": "", + "name": "assets\\Health Bar2.png", + "smoothed": true, + "userAdded": true } ], "resourceFolders": [] @@ -580,7 +589,7 @@ "gridColor": 10401023, "gridAlpha": 0.2, "snap": true, - "zoomFactor": 1.2933333099365252, + "zoomFactor": 1.239999978637697, "windowMask": false }, "objectsGroups": [ @@ -651,8 +660,8 @@ "name": "ContinousBar", "persistentUuid": "60a7c4ed-31bf-44a9-8513-09c9bfd8eb42", "width": 194, - "x": 430, - "y": 408, + "x": 424, + "y": 456, "zOrder": 40, "numberProperties": [], "stringProperties": [], @@ -696,8 +705,8 @@ "name": "ContinousBar", "persistentUuid": "a4664301-98a6-419b-a0d5-c5028371de9c", "width": 0, - "x": 216, - "y": 424, + "x": 224, + "y": 464, "zOrder": 43, "numberProperties": [], "stringProperties": [], @@ -727,7 +736,7 @@ "persistentUuid": "e7d18ac3-25ec-477d-86dd-c7e055964917", "width": 176, "x": 440, - "y": 488, + "y": 528, "zOrder": 46, "numberProperties": [], "stringProperties": [], @@ -741,12 +750,42 @@ "name": "NoLabelContinousBar", "persistentUuid": "a55d7eb7-5856-4e57-9a53-e6eb6731dbfe", "width": 0, - "x": 216, - "y": 504, + "x": 224, + "y": 544, "zOrder": 47, "numberProperties": [], "stringProperties": [], "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "NoBufferContinousBar", + "persistentUuid": "7089d4c5-79a2-47e6-876b-f78887bb43fb", + "width": 0, + "x": 224, + "y": 393, + "zOrder": 48, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 39, + "layer": "", + "name": "NoBufferContinousBar", + "persistentUuid": "7c30a69a-005e-4388-87fb-11758e8ed614", + "width": 184, + "x": 432, + "y": 385, + "zOrder": 48, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] } ], "objects": [ @@ -936,7 +975,7 @@ "assetStoreId": "", "name": "ContinousBar", "tags": "", - "type": "TiledContinuousBar::TiledContinuousBar", + "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "variables": [], "effects": [], "behaviors": [], @@ -960,8 +999,13 @@ "width": 96 }, "Buffer": { + "bottomMargin": 0, "height": 8, + "leftMargin": 0, + "rightMargin": 0, "texture": "assets\\tiled_Energy Bar Fill.png", + "tiled": false, + "topMargin": 0, "width": 32 }, "Label": { @@ -980,8 +1024,79 @@ } }, "Resource": { + "bottomMargin": 0, "height": 8, + "leftMargin": 0, + "rightMargin": 0, "texture": "assets\\tiled_Health Bar Fill.png", + "tiled": false, + "topMargin": 0, + "width": 32 + } + } + }, + { + "assetStoreId": "", + "name": "NoBufferContinousBar", + "tags": "", + "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "MaxValue": 10, + "InitialValue": 7, + "BarLeftPadding": 9, + "BarRightPadding": 9, + "BarBottomPadding": 3, + "BarTopPadding": 3, + "EasingDuration": 0, + "PreviousHighValueDuration": 0 + }, + "childrenContent": { + "Background": { + "bottomMargin": 6, + "height": 15, + "leftMargin": 11, + "rightMargin": 11, + "texture": "assets\\Health Bar Box.png", + "tiled": true, + "topMargin": 6, + "width": 96 + }, + "Buffer": { + "bottomMargin": 0, + "height": 8, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\Health Bar2.png", + "tiled": false, + "topMargin": 0, + "width": 32 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "2 / 3", + "font": "", + "textAlignment": "center", + "characterSize": 8, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + }, + "Resource": { + "bottomMargin": 3, + "height": 8, + "leftMargin": 4, + "rightMargin": 4, + "texture": "assets\\Health Bar2.png", + "tiled": false, + "topMargin": 3, "width": 32 } } @@ -990,7 +1105,7 @@ "assetStoreId": "", "name": "NoLabelContinousBar", "tags": "", - "type": "TiledContinuousBar::TiledContinuousBar", + "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "variables": [], "effects": [], "behaviors": [], @@ -1015,8 +1130,13 @@ "width": 96 }, "Buffer": { + "bottomMargin": 0, "height": 8, + "leftMargin": 0, + "rightMargin": 0, "texture": "assets\\tiled_Energy Bar Fill.png", + "tiled": false, + "topMargin": 0, "width": 32 }, "Label": { @@ -1035,8 +1155,13 @@ } }, "Resource": { + "bottomMargin": 0, "height": 8, + "leftMargin": 0, + "rightMargin": 0, "texture": "assets\\tiled_Health Bar Fill.png", + "tiled": false, + "topMargin": 0, "width": 32 } } @@ -1253,7 +1378,7 @@ }, { "type": { - "value": "TiledContinuousBar::TiledContinuousBar::SetValue" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" }, "parameters": [ "ContinousBar", @@ -1264,7 +1389,7 @@ }, { "type": { - "value": "TiledContinuousBar::TiledContinuousBar::SetValue" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" }, "parameters": [ "NoLabelContinousBar", @@ -1272,6 +1397,17 @@ "0.5", "" ] + }, + { + "type": { + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" + }, + "parameters": [ + "NoBufferContinousBar", + "+", + "0.5", + "" + ] } ] }, @@ -1315,7 +1451,7 @@ }, { "type": { - "value": "TiledContinuousBar::TiledContinuousBar::SetValue" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" }, "parameters": [ "ContinousBar", @@ -1326,7 +1462,7 @@ }, { "type": { - "value": "TiledContinuousBar::TiledContinuousBar::SetValue" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" }, "parameters": [ "NoLabelContinousBar", @@ -1334,6 +1470,17 @@ "0.5", "" ] + }, + { + "type": { + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" + }, + "parameters": [ + "NoBufferContinousBar", + "-", + "0.5", + "" + ] } ] } @@ -1458,7 +1605,7 @@ "conditions": [ { "type": { - "value": "TiledContinuousBar::TiledContinuousBar::IsLabelShown" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::IsLabelShown" }, "parameters": [ "NoLabelContinousBar", @@ -1481,7 +1628,7 @@ "actions": [ { "type": { - "value": "TiledContinuousBar::TiledContinuousBar::SetLabelShown" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetLabelShown" }, "parameters": [ "NoLabelContinousBar", @@ -1497,7 +1644,7 @@ { "type": { "inverted": true, - "value": "TiledContinuousBar::TiledContinuousBar::IsLabelShown" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::IsLabelShown" }, "parameters": [ "NoLabelContinousBar", @@ -1519,7 +1666,7 @@ "actions": [ { "type": { - "value": "TiledContinuousBar::TiledContinuousBar::SetLabelShown" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetLabelShown" }, "parameters": [ "NoLabelContinousBar", @@ -1963,7 +2110,7 @@ "actions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::UpdatePreviousHighValue" + "value": "PanelSpriteContinuousBar::ResourceBar::UpdatePreviousHighValue" }, "parameters": [ "Object", @@ -1983,7 +2130,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -2023,7 +2170,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -2042,7 +2189,7 @@ "actions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::SetPropertyValue" + "value": "PanelSpriteContinuousBar::ResourceBar::SetPropertyValue" }, "parameters": [ "Object", @@ -2072,7 +2219,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -2113,7 +2260,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -2132,7 +2279,7 @@ "actions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::SetPropertyMaxValue" + "value": "PanelSpriteContinuousBar::ResourceBar::SetPropertyMaxValue" }, "parameters": [ "Object", @@ -2153,7 +2300,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -2171,7 +2318,7 @@ "conditions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::PropertyValue" + "value": "PanelSpriteContinuousBar::ResourceBar::PropertyValue" }, "parameters": [ "Object", @@ -2202,7 +2349,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -2220,7 +2367,7 @@ "conditions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::PropertyValue" + "value": "PanelSpriteContinuousBar::ResourceBar::PropertyValue" }, "parameters": [ "Object", @@ -2251,7 +2398,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -2291,7 +2438,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -2310,7 +2457,7 @@ "actions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::SetPropertyPreviousHighValue" + "value": "PanelSpriteContinuousBar::ResourceBar::SetPropertyPreviousHighValue" }, "parameters": [ "Object", @@ -2331,7 +2478,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -2372,7 +2519,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -2391,7 +2538,7 @@ "actions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::SetPropertyPreviousHighValueDuration" + "value": "PanelSpriteContinuousBar::ResourceBar::SetPropertyPreviousHighValueDuration" }, "parameters": [ "Object", @@ -2412,7 +2559,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -2430,7 +2577,7 @@ "conditions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::PreviousHighValue" + "value": "PanelSpriteContinuousBar::ResourceBar::PreviousHighValue" }, "parameters": [ "Object", @@ -2473,7 +2620,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -3071,7 +3218,7 @@ "actions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::SetValue" + "value": "PanelSpriteContinuousBar::ResourceBar::SetValue" }, "parameters": [ "Resource", @@ -3104,7 +3251,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -3159,7 +3306,7 @@ "actions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::SetMaxValue" + "value": "PanelSpriteContinuousBar::ResourceBar::SetMaxValue" }, "parameters": [ "Resource", @@ -3201,7 +3348,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -3220,7 +3367,7 @@ "conditions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::IsEmpty" + "value": "PanelSpriteContinuousBar::ResourceBar::IsEmpty" }, "parameters": [ "Resource", @@ -3264,7 +3411,7 @@ "conditions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::IsFull" + "value": "PanelSpriteContinuousBar::ResourceBar::IsFull" }, "parameters": [ "Resource", @@ -3415,7 +3562,7 @@ "behaviors": [ { "name": "ResourceBar", - "type": "TiledContinuousBar::ResourceBar", + "type": "PanelSpriteContinuousBar::ResourceBar", "Value": 1, "MaxValue": 3, "PreviousValue": 0 @@ -3646,7 +3793,7 @@ "behaviors": [ { "name": "ResourceBar", - "type": "TiledContinuousBar::ResourceBar", + "type": "PanelSpriteContinuousBar::ResourceBar", "Value": 1, "MaxValue": 3, "PreviousValue": 0 @@ -3685,7 +3832,7 @@ "fullName": "Resource bar (tiled)", "helpPath": "", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8cGF0aCBkPSJNMjgsMTJIMTRINGMtMi4yLDAtNCwxLjgtNCw0czEuOCw0LDQsNGgxMGgxNGMyLjIsMCw0LTEuOCw0LTRTMzAuMiwxMiwyOCwxMnogTTQsMThjLTEuMSwwLTItMC45LTItMnMwLjktMiwyLTJoMTANCgljMS4xLDAsMiwwLjksMiwycy0wLjksMi0yLDJINHoiLz4NCjwvc3ZnPg0K", - "name": "TiledContinuousBar", + "name": "PanelSpriteContinuousBar", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Glyphster Pack/Master/SVG/Interface Elements/ea06363a57846caab544f536b78a952234b68d4941d41c1577852a1d61aefec3_Interface Elements_interface_ui_loading_progress_bar.svg", "shortDescription": "A bar that represents a resource in the game (health, mana, ammo, etc)", "version": "1.0.0", @@ -3757,7 +3904,7 @@ "actions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::UpdatePreviousHighValue" + "value": "PanelSpriteContinuousBar::ResourceBar::UpdatePreviousHighValue" }, "parameters": [ "Object", @@ -3777,7 +3924,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -3817,7 +3964,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -3836,7 +3983,7 @@ "actions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::SetPropertyValue" + "value": "PanelSpriteContinuousBar::ResourceBar::SetPropertyValue" }, "parameters": [ "Object", @@ -3852,7 +3999,7 @@ "conditions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::PropertyValue" + "value": "PanelSpriteContinuousBar::ResourceBar::PropertyValue" }, "parameters": [ "Object", @@ -3879,7 +4026,7 @@ "conditions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::PropertyValue" + "value": "PanelSpriteContinuousBar::ResourceBar::PropertyValue" }, "parameters": [ "Object", @@ -3892,7 +4039,7 @@ "actions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::UpdatePreviousHighValue" + "value": "PanelSpriteContinuousBar::ResourceBar::UpdatePreviousHighValue" }, "parameters": [ "Object", @@ -3912,7 +4059,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -3953,7 +4100,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -3972,7 +4119,7 @@ "actions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::SetPropertyMaxValue" + "value": "PanelSpriteContinuousBar::ResourceBar::SetPropertyMaxValue" }, "parameters": [ "Object", @@ -3993,7 +4140,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -4011,7 +4158,7 @@ "conditions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::PropertyValue" + "value": "PanelSpriteContinuousBar::ResourceBar::PropertyValue" }, "parameters": [ "Object", @@ -4042,7 +4189,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -4060,7 +4207,7 @@ "conditions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::PropertyValue" + "value": "PanelSpriteContinuousBar::ResourceBar::PropertyValue" }, "parameters": [ "Object", @@ -4091,7 +4238,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -4131,7 +4278,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -4150,7 +4297,7 @@ "actions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::SetPropertyPreviousHighValue" + "value": "PanelSpriteContinuousBar::ResourceBar::SetPropertyPreviousHighValue" }, "parameters": [ "Object", @@ -4171,7 +4318,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -4212,7 +4359,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -4231,7 +4378,7 @@ "actions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::SetPropertyPreviousHighValueDuration" + "value": "PanelSpriteContinuousBar::ResourceBar::SetPropertyPreviousHighValueDuration" }, "parameters": [ "Object", @@ -4252,7 +4399,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -4270,7 +4417,7 @@ "conditions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::PreviousHighValue" + "value": "PanelSpriteContinuousBar::ResourceBar::PreviousHighValue" }, "parameters": [ "Object", @@ -4313,7 +4460,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -4369,8 +4516,8 @@ { "defaultName": "ResourceBar", "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", - "fullName": "Resource bar (using a continuous tiled sprite)", - "name": "TiledContinuousBar", + "fullName": "Resource bar (using a continuous panel sprite)", + "name": "PanelSpriteContinuousBar", "eventsFunctions": [ { "fullName": "", @@ -4397,7 +4544,7 @@ "actions": [ { "type": { - "value": "TiledContinuousBar::TiledContinuousBar::SetPropertyPreviousInitialValue" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetPropertyPreviousInitialValue" }, "parameters": [ "Object", @@ -4475,19 +4622,36 @@ "value": "ChangePlan" }, "parameters": [ - "Buffer", + "Resource", "=", - "2" + "3" ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::PropertyPreviousHighValueDuration" + }, + "parameters": [ + "Object", + ">", + "0" + ] + } + ], + "actions": [ { "type": { "value": "ChangePlan" }, "parameters": [ - "Resource", + "Buffer", "=", - "3" + "2" ] } ] @@ -4557,7 +4721,7 @@ { "type": { "inverted": true, - "value": "TiledContinuousBar::TiledContinuousBar::PropertyShowLabel" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::PropertyShowLabel" }, "parameters": [ "Object" @@ -4594,7 +4758,7 @@ "actions": [ { "type": { - "value": "TiledContinuousBar::TiledContinuousBar::SetMaxValue" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetMaxValue" }, "parameters": [ "Object", @@ -4605,7 +4769,7 @@ }, { "type": { - "value": "TiledContinuousBar::TiledContinuousBar::SetValue" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" }, "parameters": [ "Object", @@ -4616,7 +4780,7 @@ }, { "type": { - "value": "TiledContinuousBar::TiledContinuousBar::SetPreviousValueDuration" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetPreviousValueDuration" }, "parameters": [ "Object", @@ -4637,7 +4801,7 @@ }, { "type": { - "value": "TiledSpriteObject::Width" + "value": "PanelSpriteObject::Width" }, "parameters": [ "Resource", @@ -4652,7 +4816,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", + "supplementaryInformation": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "type": "object" } ], @@ -4670,7 +4834,7 @@ "actions": [ { "type": { - "value": "TiledContinuousBar::TiledContinuousBar::UpdateLayout" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::UpdateLayout" }, "parameters": [ "Object", @@ -4679,7 +4843,7 @@ }, { "type": { - "value": "TiledContinuousBar::TiledContinuousBar::SetMaxValue" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetMaxValue" }, "parameters": [ "Object", @@ -4695,7 +4859,7 @@ "conditions": [ { "type": { - "value": "TiledContinuousBar::TiledContinuousBar::PropertyInitialValue" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::PropertyInitialValue" }, "parameters": [ "Object", @@ -4707,7 +4871,7 @@ "actions": [ { "type": { - "value": "TiledContinuousBar::TiledContinuousBar::SetPropertyPreviousInitialValue" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetPropertyPreviousInitialValue" }, "parameters": [ "Object", @@ -4717,7 +4881,7 @@ }, { "type": { - "value": "TiledContinuousBar::TiledContinuousBar::SetValue" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" }, "parameters": [ "Object", @@ -4728,7 +4892,7 @@ }, { "type": { - "value": "TiledContinuousBar::TiledContinuousBar::SetPreviousValueDuration" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetPreviousValueDuration" }, "parameters": [ "Object", @@ -4770,7 +4934,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", + "supplementaryInformation": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "type": "object" } ], @@ -4861,7 +5025,7 @@ }, { "type": { - "value": "TiledContinuousBar::Scale" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::Scale" }, "parameters": [ "Object", @@ -4891,7 +5055,7 @@ }, { "type": { - "value": "TiledContinuousBar::TiledContinuousBar::UpdateLayout" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::UpdateLayout" }, "parameters": [ "Object", @@ -4909,7 +5073,7 @@ { "type": { "inverted": true, - "value": "TiledContinuousBar::TiledContinuousBar::IsChanging" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::IsChanging" }, "parameters": [ "Object", @@ -4945,7 +5109,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", + "supplementaryInformation": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "type": "object" } ], @@ -4977,11 +5141,21 @@ }, { "type": { - "value": "TiledSpriteObject::SetSize" + "value": "PanelSpriteObject::Width" }, "parameters": [ "Resource", - "Object.WidthForValue()", + "=", + "Object.WidthForValue()" + ] + }, + { + "type": { + "value": "PanelSpriteObject::Height" + }, + "parameters": [ + "Resource", + "=", "round(Background.Height() - Object.PropertyBarTopPadding() - Object.PropertyBarBottomPadding())" ] } @@ -5005,11 +5179,21 @@ }, { "type": { - "value": "TiledSpriteObject::SetSize" + "value": "PanelSpriteObject::Width" + }, + "parameters": [ + "Buffer", + "=", + "Resource.Width()" + ] + }, + { + "type": { + "value": "PanelSpriteObject::Height" }, "parameters": [ "Buffer", - "Resource.Width()", + "=", "Resource.Height()" ] } @@ -5068,7 +5252,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", + "supplementaryInformation": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "type": "object" } ], @@ -5104,7 +5288,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", + "supplementaryInformation": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "type": "object" } ], @@ -5123,7 +5307,7 @@ "actions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::SetValue" + "value": "PanelSpriteContinuousBar::ResourceBar::SetValue" }, "parameters": [ "Resource", @@ -5149,7 +5333,7 @@ }, { "type": { - "value": "TiledContinuousBar::TiledContinuousBar::UpdateLabel" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::UpdateLabel" }, "parameters": [ "Object", @@ -5163,7 +5347,7 @@ "conditions": [ { "type": { - "value": "TiledSpriteObject::Width" + "value": "PanelSpriteObject::Width" }, "parameters": [ "Resource", @@ -5188,7 +5372,7 @@ "conditions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::IsChanging" + "value": "PanelSpriteContinuousBar::ResourceBar::IsChanging" }, "parameters": [ "Resource", @@ -5200,7 +5384,7 @@ "actions": [ { "type": { - "value": "TiledSpriteObject::Width" + "value": "PanelSpriteObject::Width" }, "parameters": [ "Buffer", @@ -5224,13 +5408,13 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", + "supplementaryInformation": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -5266,7 +5450,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", + "supplementaryInformation": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "type": "object" } ], @@ -5285,7 +5469,7 @@ "actions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::SetMaxValue" + "value": "PanelSpriteContinuousBar::ResourceBar::SetMaxValue" }, "parameters": [ "Resource", @@ -5297,7 +5481,7 @@ }, { "type": { - "value": "TiledContinuousBar::TiledContinuousBar::UpdateLabel" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::UpdateLabel" }, "parameters": [ "Object", @@ -5306,7 +5490,7 @@ }, { "type": { - "value": "TiledContinuousBar::TiledContinuousBar::UpdateLayout" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::UpdateLayout" }, "parameters": [ "Object", @@ -5320,13 +5504,13 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", + "supplementaryInformation": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -5345,7 +5529,7 @@ "conditions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::IsEmpty" + "value": "PanelSpriteContinuousBar::ResourceBar::IsEmpty" }, "parameters": [ "Resource", @@ -5370,7 +5554,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", + "supplementaryInformation": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "type": "object" } ], @@ -5389,7 +5573,7 @@ "conditions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::IsFull" + "value": "PanelSpriteContinuousBar::ResourceBar::IsFull" }, "parameters": [ "Resource", @@ -5414,7 +5598,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", + "supplementaryInformation": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "type": "object" } ], @@ -5450,7 +5634,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", + "supplementaryInformation": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "type": "object" } ], @@ -5469,7 +5653,7 @@ "actions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::SetPreviousHighValueDuration" + "value": "PanelSpriteContinuousBar::ResourceBar::SetPreviousHighValueDuration" }, "parameters": [ "Resource", @@ -5537,13 +5721,13 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", + "supplementaryInformation": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "type": "object" }, { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "TiledContinuousBar::ResourceBar", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", "type": "behavior" } ], @@ -5562,7 +5746,7 @@ "conditions": [ { "type": { - "value": "TiledContinuousBar::ResourceBar::IsChanging" + "value": "PanelSpriteContinuousBar::ResourceBar::IsChanging" }, "parameters": [ "Resource", @@ -5587,7 +5771,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", + "supplementaryInformation": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "type": "object" } ], @@ -5622,7 +5806,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", + "supplementaryInformation": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "type": "object" } ], @@ -5657,7 +5841,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", + "supplementaryInformation": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "type": "object" } ], @@ -5676,7 +5860,7 @@ "conditions": [ { "type": { - "value": "TiledContinuousBar::TiledContinuousBar::PropertyShowLabel" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::PropertyShowLabel" }, "parameters": [ "Object" @@ -5699,7 +5883,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", + "supplementaryInformation": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "type": "object" } ], @@ -5729,7 +5913,7 @@ "actions": [ { "type": { - "value": "TiledContinuousBar::TiledContinuousBar::SetPropertyShowLabel" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetPropertyShowLabel" }, "parameters": [ "Object", @@ -5761,7 +5945,7 @@ "actions": [ { "type": { - "value": "TiledContinuousBar::TiledContinuousBar::SetPropertyShowLabel" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetPropertyShowLabel" }, "parameters": [ "Object", @@ -5784,7 +5968,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", + "supplementaryInformation": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "type": "object" }, { @@ -5824,7 +6008,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledContinuousBar::TiledContinuousBar", + "supplementaryInformation": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", "type": "object" } ], @@ -6012,18 +6196,23 @@ }, { "assetStoreId": "", + "bottomMargin": 0, "height": 32, + "leftMargin": 0, "name": "Resource", + "rightMargin": 0, "tags": "", "texture": "", - "type": "TiledSpriteObject::TiledSprite", + "tiled": true, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", "width": 32, "variables": [], "effects": [], "behaviors": [ { "name": "ResourceBar", - "type": "TiledContinuousBar::ResourceBar", + "type": "PanelSpriteContinuousBar::ResourceBar", "Value": 1, "MaxValue": 3, "PreviousValue": 0 @@ -6036,11 +6225,16 @@ }, { "assetStoreId": "", + "bottomMargin": 0, "height": 32, + "leftMargin": 0, "name": "Buffer", + "rightMargin": 0, "tags": "", "texture": "", - "type": "TiledSpriteObject::TiledSprite", + "tiled": true, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", "width": 32, "variables": [], "effects": [], From 41a9a0b4359f54c0380257b5de24dcba8bb5b283 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Thu, 15 Dec 2022 15:14:32 +0100 Subject: [PATCH 37/98] Hide a condition --- examples/resource-bar/game.json | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index eb0a63c43..bffe63a3a 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -5739,6 +5739,7 @@ "functionType": "Condition", "group": "Resource bar", "name": "IsChanging", + "private": true, "sentence": "_PARAM0_ value is changing", "events": [ { From 76e3109287e351c61a57902d2b5d4b754b336619 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Thu, 15 Dec 2022 15:25:56 +0100 Subject: [PATCH 38/98] Update the behavior from one extension to the other. --- examples/resource-bar/game.json | 121 ++++++++++++++++++++++---------- 1 file changed, 84 insertions(+), 37 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index bffe63a3a..6f7c9d5d2 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -2097,12 +2097,13 @@ "conditions": [ { "type": { + "inverted": true, "value": "CompareObjectTimer" }, "parameters": [ "Object", "\"__ResourceBar.LastValueChange\"", - ">", + "<=", "Object.Behavior::PropertyPreviousHighValueDuration()" ] } @@ -2110,7 +2111,7 @@ "actions": [ { "type": { - "value": "PanelSpriteContinuousBar::ResourceBar::UpdatePreviousHighValue" + "value": "TiledUnitsBar::ResourceBar::UpdatePreviousHighValue" }, "parameters": [ "Object", @@ -2130,7 +2131,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", "type": "behavior" } ], @@ -2170,7 +2171,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", "type": "behavior" } ], @@ -2189,7 +2190,7 @@ "actions": [ { "type": { - "value": "PanelSpriteContinuousBar::ResourceBar::SetPropertyValue" + "value": "TiledUnitsBar::ResourceBar::SetPropertyValue" }, "parameters": [ "Object", @@ -2197,7 +2198,25 @@ "=", "clamp(GetArgumentAsNumber(\"Value\"), 0, Object.Behavior::MaxValue())" ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TiledUnitsBar::ResourceBar::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PreviousHighValue()" + ] + } + ], + "actions": [ { "type": { "value": "ResetObjectTimer" @@ -2208,6 +2227,34 @@ ] } ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TiledUnitsBar::ResourceBar::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + ">=", + "Object.Behavior::PropertyPreviousHighValue()" + ] + } + ], + "actions": [ + { + "type": { + "value": "TiledUnitsBar::ResourceBar::UpdatePreviousHighValue" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] } ], "parameters": [ @@ -2219,7 +2266,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", "type": "behavior" } ], @@ -2260,7 +2307,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", "type": "behavior" } ], @@ -2279,7 +2326,7 @@ "actions": [ { "type": { - "value": "PanelSpriteContinuousBar::ResourceBar::SetPropertyMaxValue" + "value": "TiledUnitsBar::ResourceBar::SetPropertyMaxValue" }, "parameters": [ "Object", @@ -2300,7 +2347,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", "type": "behavior" } ], @@ -2318,7 +2365,7 @@ "conditions": [ { "type": { - "value": "PanelSpriteContinuousBar::ResourceBar::PropertyValue" + "value": "TiledUnitsBar::ResourceBar::PropertyValue" }, "parameters": [ "Object", @@ -2349,7 +2396,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", "type": "behavior" } ], @@ -2367,7 +2414,7 @@ "conditions": [ { "type": { - "value": "PanelSpriteContinuousBar::ResourceBar::PropertyValue" + "value": "TiledUnitsBar::ResourceBar::PropertyValue" }, "parameters": [ "Object", @@ -2398,18 +2445,18 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", "type": "behavior" } ], "objectGroups": [] }, { - "description": "the previous value of the resource bar before the current change.", - "fullName": "Previous value", + "description": "the previous high value of the resource bar before the current change.", + "fullName": "Previous high value", "functionType": "ExpressionAndCondition", - "name": "PreviousValue", - "sentence": "the previous value", + "name": "PreviousHighValue", + "sentence": "the previous high value", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -2438,7 +2485,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", "type": "behavior" } ], @@ -2448,7 +2495,7 @@ "description": "Force the previous resource value to update to the current one.", "fullName": "Update previous value", "functionType": "Action", - "name": "UpdatePreviousValue", + "name": "UpdatePreviousHighValue", "sentence": "Update the previous resource value of _PARAM0_", "events": [ { @@ -2457,7 +2504,7 @@ "actions": [ { "type": { - "value": "PanelSpriteContinuousBar::ResourceBar::SetPropertyPreviousHighValue" + "value": "TiledUnitsBar::ResourceBar::SetPropertyPreviousHighValue" }, "parameters": [ "Object", @@ -2478,19 +2525,19 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", "type": "behavior" } ], "objectGroups": [] }, { - "description": "the previous value conservation duration (in seconds) of the object.", - "fullName": "Previous value conservation duration", + "description": "the previous high value conservation duration (in seconds) of the object.", + "fullName": "Previous high value conservation duration", "functionType": "ExpressionAndCondition", "group": "Resource bar configuration", - "name": "PreviousValueDuration", - "sentence": "the previous value conservation duration", + "name": "PreviousHighValueDuration", + "sentence": "the previous high value conservation duration", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -2519,7 +2566,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", "type": "behavior" } ], @@ -2528,8 +2575,8 @@ { "fullName": "", "functionType": "ActionWithOperator", - "getterName": "PreviousValueDuration", - "name": "SetPreviousValueDuration", + "getterName": "PreviousHighValueDuration", + "name": "SetPreviousHighValueDuration", "sentence": "", "events": [ { @@ -2538,7 +2585,7 @@ "actions": [ { "type": { - "value": "PanelSpriteContinuousBar::ResourceBar::SetPropertyPreviousHighValueDuration" + "value": "TiledUnitsBar::ResourceBar::SetPropertyPreviousHighValueDuration" }, "parameters": [ "Object", @@ -2559,7 +2606,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", "type": "behavior" } ], @@ -2577,7 +2624,7 @@ "conditions": [ { "type": { - "value": "PanelSpriteContinuousBar::ResourceBar::PreviousHighValue" + "value": "TiledUnitsBar::ResourceBar::PreviousHighValue" }, "parameters": [ "Object", @@ -2620,7 +2667,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", "type": "behavior" } ], @@ -2651,22 +2698,22 @@ { "value": "", "type": "Number", - "label": "Previous value", + "label": "Previous high value", "description": "", "group": "", "extraInformation": [], "hidden": true, - "name": "PreviousValue" + "name": "PreviousHighValue" }, { "value": "1", "type": "Number", - "label": "Previous value conservation duration (in seconds)", + "label": "Previous high value conservation duration (in seconds)", "description": "", "group": "", "extraInformation": [], "hidden": false, - "name": "PreviousValueDuration" + "name": "PreviousHighValueDuration" } ], "sharedPropertyDescriptors": [] From bb117d8dc97a3a594cf868270c976ece26d04437 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Thu, 15 Dec 2022 16:01:14 +0100 Subject: [PATCH 39/98] Wording --- examples/resource-bar/game.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 6f7c9d5d2..ba0a58b4b 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -3876,7 +3876,7 @@ "author": "", "category": "User interface", "extensionNamespace": "", - "fullName": "Resource bar (tiled)", + "fullName": "Resource bar (continuous)", "helpPath": "", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8cGF0aCBkPSJNMjgsMTJIMTRINGMtMi4yLDAtNCwxLjgtNCw0czEuOCw0LDQsNGgxMGgxNGMyLjIsMCw0LTEuOCw0LTRTMzAuMiwxMiwyOCwxMnogTTQsMThjLTEuMSwwLTItMC45LTItMnMwLjktMiwyLTJoMTANCgljMS4xLDAsMiwwLjksMiwycy0wLjksMi0yLDJINHoiLz4NCjwvc3ZnPg0K", "name": "PanelSpriteContinuousBar", From f84faf3b03625fd936e2d11e76797415b238eef4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Fri, 16 Dec 2022 16:15:04 +0100 Subject: [PATCH 40/98] Try checkbox layout. --- examples/resource-bar/Checked.png | Bin 0 -> 511 bytes examples/resource-bar/Unchecked.png | Bin 0 -> 308 bytes examples/resource-bar/game.json | 1994 ++++++++++++++++----------- 3 files changed, 1167 insertions(+), 827 deletions(-) create mode 100644 examples/resource-bar/Checked.png create mode 100644 examples/resource-bar/Unchecked.png diff --git a/examples/resource-bar/Checked.png b/examples/resource-bar/Checked.png new file mode 100644 index 0000000000000000000000000000000000000000..246b1188b7754c5c8dc816f0d529dea7d9b5817a GIT binary patch literal 511 zcmV%waY6|WPDM|pM)sWHi zcdi}SK*JdDaFAwClwagY2a0H%h{>_hg>5v?kHe0k%bIkHl&l%dNfyxm3a#}nt)aC{ zj9ey0&JAnnfXpt@?A_~C^FN(bmz?e7OTWkhc3KK;JYNoAasy?w3M~;L_NPKp501Xc-hY(+z2l_6a}eL$>I zq~{v-g%v!jMgoYl7uoWBXv8G&$|RA#yWXv`(?A9qPkyl~kbyTPURYJgP`jsbSe3}o z+q^-nYNYS3cbf*LLAm3oKMnlT##usQ8py?w&H_3w(Ape0Yla1Px+^0l6{C=*B;Zk3 zq=3hKlCtRk5WB2%*zU5+h$FvQeeQ@!C7+}W@Czh#7s#tdk9w? literal 0 HcmV?d00001 diff --git a/examples/resource-bar/Unchecked.png b/examples/resource-bar/Unchecked.png new file mode 100644 index 0000000000000000000000000000000000000000..8c4623a42c8a1a057bcce102d1d5ffcb5d6a7dcd GIT binary patch literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^S|H591|*LjJ{b+9etWt&hD02Gd&AI=*-)VMVZGaH zU-m~bf!~-4nx|$sPoCGI{6t~l@`P*^0rdwAKUAh{ROLVF#Zgv$ZQ`@3)4Kh?`Fwuz z_w8e*h6(QjcOG7|xUHimC`X~)y@9PEwC>Og!^N{^lybX*_i*0=;5HmhD=2GZh3oyKV;j-9MYxi_5*` xde_YJOA2JBzZ5Auz&J62H-C$a$3w;k($|^Xlcoi7F9QYxgQu&X%Q~loCIG8;iMap( literal 0 HcmV?d00001 diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index ba0a58b4b..6faa5c858 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -561,6 +561,24 @@ "name": "assets\\Health Bar2.png", "smoothed": true, "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "Checked.png", + "kind": "image", + "metadata": "", + "name": "Checked.png", + "smoothed": true, + "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "Unchecked.png", + "kind": "image", + "metadata": "", + "name": "Unchecked.png", + "smoothed": true, + "userAdded": true } ], "resourceFolders": [] @@ -570,41 +588,29 @@ "variables": [], "layouts": [ { - "b": 68, + "b": 43, "disableInputWhenNotFocused": true, - "mangledName": "Sprite_32and_32Tiled_32Sprite", - "name": "Sprite and Tiled Sprite", - "r": 68, + "mangledName": "Experiment", + "name": "Experiment", + "r": 43, "standardSortMethod": true, "stopSoundsOnStartup": true, "title": "", - "v": 68, + "v": 43, "uiSettings": { - "grid": true, + "grid": false, "gridType": "rectangular", - "gridWidth": 8, - "gridHeight": 8, + "gridWidth": 32, + "gridHeight": 32, "gridOffsetX": 0, "gridOffsetY": 0, "gridColor": 10401023, - "gridAlpha": 0.2, - "snap": true, - "zoomFactor": 1.239999978637697, + "gridAlpha": 0.8, + "snap": false, + "zoomFactor": 0.9733333343505859, "windowMask": false }, - "objectsGroups": [ - { - "name": "Button", - "objects": [ - { - "name": "PlusKey" - }, - { - "name": "MinusKey" - } - ] - } - ], + "objectsGroups": [], "variables": [], "instances": [ { @@ -612,12 +618,12 @@ "customSize": false, "height": 0, "layer": "", - "name": "PlusKey", - "persistentUuid": "75acefa2-30d2-45f3-8955-bdbcc059a348", + "name": "Checkbox", + "persistentUuid": "c76646f5-db56-47a8-94dc-e41cb42ead76", "width": 0, - "x": 422, - "y": 82, - "zOrder": 25, + "x": 300, + "y": 219, + "zOrder": 2, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -627,27 +633,12 @@ "customSize": false, "height": 0, "layer": "", - "name": "MinusKey", - "persistentUuid": "68d80c16-a4fc-4793-aa38-eb458b7c1a28", + "name": "RightCheckbox", + "persistentUuid": "be11b859-4dd3-494f-a5ce-b591419f0961", "width": 0, - "x": 322, - "y": 82, - "zOrder": 26, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 88, - "layer": "", - "name": "UnitsBar", - "persistentUuid": "cd7ae08a-3045-436b-bda9-beda9d2b55db", - "width": 200, - "x": 408, - "y": 160, - "zOrder": 39, + "x": 300, + "y": 283, + "zOrder": 3, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -655,44 +646,14 @@ { "angle": 0, "customSize": true, - "height": 40, - "layer": "", - "name": "ContinousBar", - "persistentUuid": "60a7c4ed-31bf-44a9-8513-09c9bfd8eb42", - "width": 194, - "x": 424, - "y": 456, - "zOrder": 40, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 16, - "layer": "", - "name": "NoBackgroundUnitsBar", - "persistentUuid": "850c5ba6-8615-4217-bc65-f0b4a149b4cc", - "width": 96, - "x": 240, - "y": 320, - "zOrder": 41, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, + "height": 49, "layer": "", - "name": "UnitsBar", - "persistentUuid": "20b69c52-a1a2-4f22-b7b7-4560d4da8dcb", - "width": 0, - "x": 184, - "y": 176, - "zOrder": 42, + "name": "Checkbox", + "persistentUuid": "115bc60a-ae4b-4c0c-bf35-376430f801d9", + "width": 78, + "x": 300, + "y": 142, + "zOrder": 2, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -702,42 +663,12 @@ "customSize": false, "height": 0, "layer": "", - "name": "ContinousBar", - "persistentUuid": "a4664301-98a6-419b-a0d5-c5028371de9c", + "name": "IconButton2", + "persistentUuid": "42f23e6f-77a6-4544-b808-e27ec4dbe8ce", "width": 0, - "x": 224, - "y": 464, - "zOrder": 43, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 64, - "layer": "", - "name": "NoBackgroundUnitsBar", - "persistentUuid": "a4a16b93-f588-4324-b306-5f85919b34ab", - "width": 208, - "x": 424, - "y": 304, - "zOrder": 44, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 48, - "layer": "", - "name": "NoLabelContinousBar", - "persistentUuid": "e7d18ac3-25ec-477d-86dd-c7e055964917", - "width": 176, - "x": 440, - "y": 528, - "zOrder": 46, + "x": 211, + "y": 409, + "zOrder": 4, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -747,12 +678,12 @@ "customSize": false, "height": 0, "layer": "", - "name": "NoLabelContinousBar", - "persistentUuid": "a55d7eb7-5856-4e57-9a53-e6eb6731dbfe", + "name": "IconButton", + "persistentUuid": "277ccb30-0223-4cf3-82df-e6640e8d387a", "width": 0, - "x": 224, - "y": 544, - "zOrder": 47, + "x": 287, + "y": 409, + "zOrder": 5, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -762,27 +693,12 @@ "customSize": false, "height": 0, "layer": "", - "name": "NoBufferContinousBar", - "persistentUuid": "7089d4c5-79a2-47e6-876b-f78887bb43fb", + "name": "NewSlider", + "persistentUuid": "b11108dc-c86c-4085-8167-b235471dd419", "width": 0, - "x": 224, - "y": 393, - "zOrder": 48, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 39, - "layer": "", - "name": "NoBufferContinousBar", - "persistentUuid": "7c30a69a-005e-4388-87fb-11758e8ed614", - "width": 184, - "x": 432, - "y": 385, - "zOrder": 48, + "x": 415, + "y": 426, + "zOrder": 6, "numberProperties": [], "stringProperties": [], "initialVariables": [] @@ -790,80 +706,139 @@ ], "objects": [ { - "assetStoreId": "996e07c73069934a868dc8212a0d7d959dfdd245af964998aad12cf57d252ac3", - "name": "PlusKey", + "assetStoreId": "", + "name": "IconButton", "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, + "type": "IconButton::IconButton", "variables": [], - "effects": [ - { - "effectType": "Outline", - "name": "Effect", - "doubleParameters": { - "padding": 2, - "thickness": 2 - }, - "stringParameters": { - "color": "255;255;255" - }, - "booleanParameters": {} - } - ], + "effects": [], "behaviors": [], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ + "content": { + "LabelAnchorDeltaY": 0 + }, + "childrenContent": { + "Icon": { + "updateIfNotVisible": false, + "animations": [ { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ + "name": "", + "useMultipleDirections": false, + "directions": [ { - "hasCustomCollisionMask": false, - "image": "Plus Key.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 50, - "y": 50 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\Bomb_Shadow.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] } ] } ] - } - ] - }, + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "Bomb", + "font": "", + "textAlignment": "left", + "characterSize": 20, + "color": { + "b": 155, + "g": 155, + "r": 155 + } + } + } + }, { - "assetStoreId": "90731de0069b2f3684767c392c6e4c48255a2647bc849497f25b672771290626", - "name": "MinusKey", + "assetStoreId": "", + "name": "IconButton2", + "tags": "", + "type": "IconButton::IconButton", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "LabelAnchorDeltaY": 16 + }, + "childrenContent": { + "Icon": { + "updateIfNotVisible": false, + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "assets\\Heart.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "Heart", + "font": "", + "textAlignment": "left", + "characterSize": 20, + "color": { + "b": 155, + "g": 155, + "r": 155 + } + } + } + }, + { + "assetStoreId": "", + "name": "NewSprite", "tags": "", "type": "Sprite", "updateIfNotVisible": false, "variables": [], - "effects": [ - { - "effectType": "Outline", - "name": "Effect", - "doubleParameters": { - "padding": 2, - "thickness": 2 - }, - "stringParameters": { - "color": "255;255;255" - }, - "booleanParameters": {} - } - ], + "effects": [], "behaviors": [], "animations": [ { @@ -871,17 +846,17 @@ "useMultipleDirections": false, "directions": [ { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, + "looping": false, + "timeBetweenFrames": 0.08, "sprites": [ { "hasCustomCollisionMask": false, - "image": "Minus Key.png", + "image": "assets\\Bomb_Shadow.png", "points": [], "originPoint": { "name": "origine", - "x": 50, - "y": 50 + "x": 0, + "y": 0 }, "centerPoint": { "automatic": true, @@ -899,159 +874,675 @@ }, { "assetStoreId": "", - "name": "UnitsBar", + "name": "NewSlider", "tags": "", - "type": "TiledUnitsBar::TiledUnitsBar", + "type": "PanelSpriteSlider::PanelSpriteSlider", "variables": [], "effects": [], "behaviors": [], "content": { - "UnitWidth": 26, - "BarLeftPadding": 38, - "BarRightPadding": 38, - "MaxValue": 3, - "InitialValue": 3 + "BarTopPadding": 3, + "BarBottomPadding": 3, + "BarLeftPadding": 9, + "BarRightPadding": 9, + "MaxValue": 4 }, "childrenContent": { "Background": { - "bottomMargin": 30, - "height": 64, - "leftMargin": 64, - "rightMargin": 64, - "texture": "assets\\Scroll.png", - "tiled": false, - "topMargin": 30, - "width": 154 + "bottomMargin": 6, + "height": 15, + "leftMargin": 11, + "rightMargin": 11, + "texture": "assets\\Health Bar Box.png", + "tiled": true, + "topMargin": 6, + "width": 96 }, - "Bar": { - "height": 26, - "texture": "assets\\Empty Heart.png", - "width": 78 + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "", + "font": "", + "textAlignment": "", + "characterSize": 20, + "color": { + "b": 0, + "g": 0, + "r": 0 + } }, "Resource": { - "height": 26, - "texture": "assets\\Full Heart.png", - "width": 78 + "height": 8, + "texture": "assets\\tiled_Health Bar Fill.png", + "width": 32 + }, + "Thumb": { + "bottomMargin": 6, + "height": 32, + "leftMargin": 8, + "rightMargin": 8, + "texture": "assets\\Energy Bar.png", + "tiled": false, + "topMargin": 6, + "width": 16 } } }, { "assetStoreId": "", - "name": "NoBackgroundUnitsBar", + "name": "Checkbox", "tags": "", - "type": "TiledUnitsBar::TiledUnitsBar", + "type": "Checkbox::Checkbox", "variables": [], "effects": [], "behaviors": [], "content": { - "UnitWidth": 16, - "HideBackground": true, - "ShowBackground": false + "CheckboxHorizontalAnchorTargetValue": "Left", + "LabelAnchorDeltaX": -16, + "CheckboxAnchorDeltaX": -8 }, "childrenContent": { - "Background": { + "Checked": { "bottomMargin": 0, - "height": 16, + "height": 42, "leftMargin": 0, "rightMargin": 0, - "texture": "assets\\tiled_Tiled Empty UI Heart.png", - "tiled": true, + "texture": "Checked.png", + "tiled": false, "topMargin": 0, - "width": 48 + "width": 42 }, - "Bar": { - "height": 16, - "texture": "assets\\tiled_Tiled Empty UI Heart.png", - "width": 48 + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "Screen shakes!", + "font": "", + "textAlignment": "left", + "characterSize": 20, + "color": { + "b": 206, + "g": 206, + "r": 206 + } }, - "Resource": { - "height": 16, - "texture": "assets\\tiled_Tiled Filler UI Heart.png", - "width": 16 + "Unchecked": { + "bottomMargin": 0, + "height": 42, + "leftMargin": 0, + "rightMargin": 0, + "texture": "Unchecked.png", + "tiled": false, + "topMargin": 0, + "width": 42 } } }, { "assetStoreId": "", - "name": "ContinousBar", + "name": "RightCheckbox", "tags": "", - "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", + "type": "Checkbox::Checkbox", "variables": [], "effects": [], "behaviors": [], "content": { - "MaxValue": 10, - "InitialValue": 7, - "BarLeftPadding": 9, - "BarRightPadding": 9, - "BarBottomPadding": 3, - "BarTopPadding": 3 + "CheckboxHorizontalAnchorTargetValue": "Right", + "LabelAnchorDeltaX": -16, + "CheckboxAnchorDeltaX": 8 }, "childrenContent": { - "Background": { - "bottomMargin": 6, - "height": 15, - "leftMargin": 11, - "rightMargin": 11, - "texture": "assets\\Health Bar Box.png", - "tiled": true, - "topMargin": 6, - "width": 96 - }, - "Buffer": { + "Checked": { "bottomMargin": 0, - "height": 8, + "height": 42, "leftMargin": 0, "rightMargin": 0, - "texture": "assets\\tiled_Energy Bar Fill.png", + "texture": "Checked.png", "tiled": false, "topMargin": 0, - "width": 32 + "width": 42 }, "Label": { "bold": false, "italic": false, "smoothed": true, "underlined": false, - "string": "2 / 3", + "string": "اهتزاز الشاشة", "font": "", - "textAlignment": "center", - "characterSize": 8, + "textAlignment": "right", + "characterSize": 20, "color": { - "b": 255, - "g": 255, - "r": 255 + "b": 206, + "g": 206, + "r": 206 } }, - "Resource": { + "Unchecked": { "bottomMargin": 0, - "height": 8, + "height": 42, "leftMargin": 0, "rightMargin": 0, - "texture": "assets\\tiled_Health Bar Fill.png", + "texture": "Unchecked.png", "tiled": false, "topMargin": 0, - "width": 32 + "width": 42 } } - }, + } + ], + "events": [], + "layers": [ { - "assetStoreId": "", - "name": "NoBufferContinousBar", - "tags": "", - "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", - "variables": [], - "effects": [], - "behaviors": [], - "content": { - "MaxValue": 10, - "InitialValue": 7, - "BarLeftPadding": 9, - "BarRightPadding": 9, - "BarBottomPadding": 3, - "BarTopPadding": 3, - "EasingDuration": 0, - "PreviousHighValueDuration": 0 + "ambientLightColorB": 8632048, + "ambientLightColorG": 150995054, + "ambientLightColorR": 1869182049, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "name": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "behaviorsSharedData": [] + }, + { + "b": 68, + "disableInputWhenNotFocused": true, + "mangledName": "Sprite_32and_32Tiled_32Sprite", + "name": "Sprite and Tiled Sprite", + "r": 68, + "standardSortMethod": true, + "stopSoundsOnStartup": true, + "title": "", + "v": 68, + "uiSettings": { + "grid": true, + "gridType": "rectangular", + "gridWidth": 8, + "gridHeight": 8, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.2, + "snap": true, + "zoomFactor": 1.239999978637697, + "windowMask": false + }, + "objectsGroups": [ + { + "name": "Button", + "objects": [ + { + "name": "PlusKey" + }, + { + "name": "MinusKey" + } + ] + } + ], + "variables": [], + "instances": [ + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "PlusKey", + "persistentUuid": "75acefa2-30d2-45f3-8955-bdbcc059a348", + "width": 0, + "x": 422, + "y": 82, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "MinusKey", + "persistentUuid": "68d80c16-a4fc-4793-aa38-eb458b7c1a28", + "width": 0, + "x": 322, + "y": 82, + "zOrder": 26, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 88, + "layer": "", + "name": "UnitsBar", + "persistentUuid": "cd7ae08a-3045-436b-bda9-beda9d2b55db", + "width": 200, + "x": 408, + "y": 160, + "zOrder": 39, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 40, + "layer": "", + "name": "ContinousBar", + "persistentUuid": "60a7c4ed-31bf-44a9-8513-09c9bfd8eb42", + "width": 194, + "x": 424, + "y": 456, + "zOrder": 40, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 16, + "layer": "", + "name": "NoBackgroundUnitsBar", + "persistentUuid": "850c5ba6-8615-4217-bc65-f0b4a149b4cc", + "width": 96, + "x": 240, + "y": 320, + "zOrder": 41, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "UnitsBar", + "persistentUuid": "20b69c52-a1a2-4f22-b7b7-4560d4da8dcb", + "width": 0, + "x": 184, + "y": 176, + "zOrder": 42, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "ContinousBar", + "persistentUuid": "a4664301-98a6-419b-a0d5-c5028371de9c", + "width": 0, + "x": 224, + "y": 464, + "zOrder": 43, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 64, + "layer": "", + "name": "NoBackgroundUnitsBar", + "persistentUuid": "a4a16b93-f588-4324-b306-5f85919b34ab", + "width": 208, + "x": 424, + "y": 304, + "zOrder": 44, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 48, + "layer": "", + "name": "NoLabelContinousBar", + "persistentUuid": "e7d18ac3-25ec-477d-86dd-c7e055964917", + "width": 176, + "x": 440, + "y": 528, + "zOrder": 46, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "NoLabelContinousBar", + "persistentUuid": "a55d7eb7-5856-4e57-9a53-e6eb6731dbfe", + "width": 0, + "x": 224, + "y": 544, + "zOrder": 47, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "", + "name": "NoBufferContinousBar", + "persistentUuid": "7089d4c5-79a2-47e6-876b-f78887bb43fb", + "width": 0, + "x": 224, + "y": 393, + "zOrder": 48, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 39, + "layer": "", + "name": "NoBufferContinousBar", + "persistentUuid": "7c30a69a-005e-4388-87fb-11758e8ed614", + "width": 184, + "x": 432, + "y": 385, + "zOrder": 48, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ], + "objects": [ + { + "assetStoreId": "996e07c73069934a868dc8212a0d7d959dfdd245af964998aad12cf57d252ac3", + "name": "PlusKey", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [ + { + "effectType": "Outline", + "name": "Effect", + "doubleParameters": { + "padding": 2, + "thickness": 2 + }, + "stringParameters": { + "color": "255;255;255" + }, + "booleanParameters": {} + } + ], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Plus Key.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 50, + "y": 50 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "90731de0069b2f3684767c392c6e4c48255a2647bc849497f25b672771290626", + "name": "MinusKey", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [ + { + "effectType": "Outline", + "name": "Effect", + "doubleParameters": { + "padding": 2, + "thickness": 2 + }, + "stringParameters": { + "color": "255;255;255" + }, + "booleanParameters": {} + } + ], + "behaviors": [], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": true, + "timeBetweenFrames": 0.02500000037252903, + "sprites": [ + { + "hasCustomCollisionMask": false, + "image": "Minus Key.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 50, + "y": 50 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [] + } + ] + } + ] + } + ] + }, + { + "assetStoreId": "", + "name": "UnitsBar", + "tags": "", + "type": "TiledUnitsBar::TiledUnitsBar", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "UnitWidth": 26, + "BarLeftPadding": 38, + "BarRightPadding": 38, + "MaxValue": 3, + "InitialValue": 3 + }, + "childrenContent": { + "Background": { + "bottomMargin": 30, + "height": 64, + "leftMargin": 64, + "rightMargin": 64, + "texture": "assets\\Scroll.png", + "tiled": false, + "topMargin": 30, + "width": 154 + }, + "Bar": { + "height": 26, + "texture": "assets\\Empty Heart.png", + "width": 78 + }, + "Resource": { + "height": 26, + "texture": "assets\\Full Heart.png", + "width": 78 + } + } + }, + { + "assetStoreId": "", + "name": "NoBackgroundUnitsBar", + "tags": "", + "type": "TiledUnitsBar::TiledUnitsBar", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "UnitWidth": 16, + "HideBackground": true, + "ShowBackground": false + }, + "childrenContent": { + "Background": { + "bottomMargin": 0, + "height": 16, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\tiled_Tiled Empty UI Heart.png", + "tiled": true, + "topMargin": 0, + "width": 48 + }, + "Bar": { + "height": 16, + "texture": "assets\\tiled_Tiled Empty UI Heart.png", + "width": 48 + }, + "Resource": { + "height": 16, + "texture": "assets\\tiled_Tiled Filler UI Heart.png", + "width": 16 + } + } + }, + { + "assetStoreId": "", + "name": "ContinousBar", + "tags": "", + "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "MaxValue": 10, + "InitialValue": 7, + "BarLeftPadding": 9, + "BarRightPadding": 9, + "BarBottomPadding": 3, + "BarTopPadding": 3 + }, + "childrenContent": { + "Background": { + "bottomMargin": 6, + "height": 15, + "leftMargin": 11, + "rightMargin": 11, + "texture": "assets\\Health Bar Box.png", + "tiled": true, + "topMargin": 6, + "width": 96 + }, + "Buffer": { + "bottomMargin": 0, + "height": 8, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\tiled_Energy Bar Fill.png", + "tiled": false, + "topMargin": 0, + "width": 32 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "2 / 3", + "font": "", + "textAlignment": "center", + "characterSize": 8, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + }, + "Resource": { + "bottomMargin": 0, + "height": 8, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\tiled_Health Bar Fill.png", + "tiled": false, + "topMargin": 0, + "width": 32 + } + } + }, + { + "assetStoreId": "", + "name": "NoBufferContinousBar", + "tags": "", + "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "MaxValue": 10, + "InitialValue": 7, + "BarLeftPadding": 9, + "BarRightPadding": 9, + "BarBottomPadding": 3, + "BarTopPadding": 3, + "EasingDuration": 0, + "PreviousHighValueDuration": 0 }, "childrenContent": { "Background": { @@ -1433,581 +1924,255 @@ }, "parameters": [ "UnitsBar", - "-", - "0.5", - "" - ] - }, - { - "type": { - "value": "TiledUnitsBar::TiledUnitsBar::SetValue" - }, - "parameters": [ - "NoBackgroundUnitsBar", - "-", - "0.5", - "" - ] - }, - { - "type": { - "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" - }, - "parameters": [ - "ContinousBar", - "-", - "0.5", - "" - ] - }, - { - "type": { - "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" - }, - "parameters": [ - "NoLabelContinousBar", - "-", - "0.5", - "" - ] - }, - { - "type": { - "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" - }, - "parameters": [ - "NoBufferContinousBar", - "-", - "0.5", - "" - ] - } - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Press", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "MouseButtonPressed" - }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SourisSurObjet" - }, - "parameters": [ - "Button", - "", - "", + "-", + "0.5", "" ] - } - ], - "actions": [ + }, { "type": { - "value": "ChangeColor" + "value": "TiledUnitsBar::TiledUnitsBar::SetValue" }, "parameters": [ - "Button", - "\"189;16;224\"" + "NoBackgroundUnitsBar", + "-", + "0.5", + "" ] }, { "type": { - "value": "ChangeScale" + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" }, "parameters": [ - "Button", - "=", - "0.9" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "MouseButtonPressed" - }, - "parameters": [ - "", - "Left" - ] - } - ], - "actions": [ - { - "type": { - "value": "ChangeColor" - }, - "parameters": [ - "Button", - "\"255;255;255\"" - ] - }, - { - "type": { - "value": "ChangeScale" - }, - "parameters": [ - "Button", - "=", - "1" - ] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::IsLabelShown" - }, - "parameters": [ - "NoLabelContinousBar", - "" - ] - }, - { - "type": { - "inverted": true, - "value": "SourisSurObjet" - }, - "parameters": [ - "NoLabelContinousBar", - "", - "", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetLabelShown" - }, - "parameters": [ - "NoLabelContinousBar", - "no", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::IsLabelShown" - }, - "parameters": [ - "NoLabelContinousBar", - "" - ] - }, - { - "type": { - "value": "SourisSurObjet" - }, - "parameters": [ - "NoLabelContinousBar", - "", - "", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetLabelShown" - }, - "parameters": [ - "NoLabelContinousBar", - "yes", - "" - ] - } - ] - } - ], - "layers": [ - { - "ambientLightColorB": 32, - "ambientLightColorG": 0, - "ambientLightColorR": 0, - "followBaseLayerCamera": false, - "isLightingLayer": false, - "name": "", - "visibility": true, - "cameras": [ - { - "defaultSize": true, - "defaultViewport": true, - "height": 0, - "viewportBottom": 1, - "viewportLeft": 0, - "viewportRight": 1, - "viewportTop": 0, - "width": 0 - } - ], - "effects": [] - } - ], - "behaviorsSharedData": [] - }, - { - "b": 43, - "disableInputWhenNotFocused": true, - "mangledName": "Experiment", - "name": "Experiment", - "r": 43, - "standardSortMethod": true, - "stopSoundsOnStartup": true, - "title": "", - "v": 43, - "uiSettings": { - "grid": false, - "gridType": "rectangular", - "gridWidth": 32, - "gridHeight": 32, - "gridOffsetX": 0, - "gridOffsetY": 0, - "gridColor": 10401023, - "gridAlpha": 0.8, - "snap": false, - "zoomFactor": 1, - "windowMask": false - }, - "objectsGroups": [], - "variables": [], - "instances": [ - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "NewSlider", - "persistentUuid": "df1cddda-d857-4891-a140-fa82f6f3a9d3", - "width": 0, - "x": 264, - "y": 319, - "zOrder": 1, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "IconButton", - "persistentUuid": "d4a97d8d-da9e-47e2-afe5-ca384513f230", - "width": 0, - "x": 314, - "y": 189, - "zOrder": 2, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "IconButton2", - "persistentUuid": "94450521-102c-411b-b0fe-58b686903c2b", - "width": 0, - "x": 399, - "y": 195, - "zOrder": 3, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - } - ], - "objects": [ - { - "assetStoreId": "", - "name": "IconButton", - "tags": "", - "type": "IconButton::IconButton", - "variables": [], - "effects": [], - "behaviors": [], - "content": { - "LabelAnchorDeltaY": 0 - }, - "childrenContent": { - "Icon": { - "updateIfNotVisible": false, - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ - { - "looping": false, - "timeBetweenFrames": 0.08, - "sprites": [ + "ContinousBar", + "-", + "0.5", + "" + ] + }, { - "hasCustomCollisionMask": false, - "image": "assets\\Bomb_Shadow.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 + "type": { + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 + "parameters": [ + "NoLabelContinousBar", + "-", + "0.5", + "" + ] + }, + { + "type": { + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" }, - "customCollisionMask": [] + "parameters": [ + "NoBufferContinousBar", + "-", + "0.5", + "" + ] } ] } ] } - ] + ], + "parameters": [] }, - "Label": { - "bold": false, - "italic": false, - "smoothed": true, - "underlined": false, - "string": "Bomb", - "font": "", - "textAlignment": "left", - "characterSize": 20, - "color": { - "b": 0, - "g": 0, - "r": 0 - } - } - } - }, - { - "assetStoreId": "", - "name": "IconButton2", - "tags": "", - "type": "IconButton::IconButton", - "variables": [], - "effects": [], - "behaviors": [], - "content": { - "LabelAnchorDeltaY": 16 - }, - "childrenContent": { - "Icon": { - "updateIfNotVisible": false, - "animations": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Press", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "name": "", - "useMultipleDirections": false, - "directions": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "looping": false, - "timeBetweenFrames": 0.08, - "sprites": [ + "type": { + "value": "MouseButtonPressed" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "hasCustomCollisionMask": false, - "image": "assets\\Heart.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 + "type": { + "value": "SourisSurObjet" }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 + "parameters": [ + "Button", + "", + "", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeColor" }, - "customCollisionMask": [] + "parameters": [ + "Button", + "\"189;16;224\"" + ] + }, + { + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "Button", + "=", + "0.9" + ] } ] } ] - } - ] - }, - "Label": { - "bold": false, - "italic": false, - "smoothed": true, - "underlined": false, - "string": "Heart", - "font": "", - "textAlignment": "left", - "characterSize": 20, - "color": { - "b": 0, - "g": 0, - "r": 0 - } - } - } - }, - { - "assetStoreId": "", - "name": "NewSprite", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ + }, { - "looping": false, - "timeBetweenFrames": 0.08, - "sprites": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "hasCustomCollisionMask": false, - "image": "assets\\Bomb_Shadow.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 + "type": { + "inverted": true, + "value": "MouseButtonPressed" }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 + "parameters": [ + "", + "Left" + ] + } + ], + "actions": [ + { + "type": { + "value": "ChangeColor" }, - "customCollisionMask": [] + "parameters": [ + "Button", + "\"255;255;255\"" + ] + }, + { + "type": { + "value": "ChangeScale" + }, + "parameters": [ + "Button", + "=", + "1" + ] } ] } + ], + "parameters": [] + } + ], + "parameters": [] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::IsLabelShown" + }, + "parameters": [ + "NoLabelContinousBar", + "" + ] + }, + { + "type": { + "inverted": true, + "value": "SourisSurObjet" + }, + "parameters": [ + "NoLabelContinousBar", + "", + "", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetLabelShown" + }, + "parameters": [ + "NoLabelContinousBar", + "no", + "" ] } ] }, { - "assetStoreId": "", - "name": "NewSlider", - "tags": "", - "type": "PanelSpriteSlider::PanelSpriteSlider", - "variables": [], - "effects": [], - "behaviors": [], - "content": { - "BarTopPadding": 3, - "BarBottomPadding": 3, - "BarLeftPadding": 9, - "BarRightPadding": 9, - "MaxValue": 4 - }, - "childrenContent": { - "Background": { - "bottomMargin": 6, - "height": 15, - "leftMargin": 11, - "rightMargin": 11, - "texture": "assets\\Health Bar Box.png", - "tiled": true, - "topMargin": 6, - "width": 96 - }, - "Label": { - "bold": false, - "italic": false, - "smoothed": true, - "underlined": false, - "string": "", - "font": "", - "textAlignment": "", - "characterSize": 20, - "color": { - "b": 0, - "g": 0, - "r": 0 - } - }, - "Resource": { - "height": 8, - "texture": "assets\\tiled_Health Bar Fill.png", - "width": 32 + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::IsLabelShown" + }, + "parameters": [ + "NoLabelContinousBar", + "" + ] }, - "Thumb": { - "bottomMargin": 6, - "height": 32, - "leftMargin": 8, - "rightMargin": 8, - "texture": "assets\\Energy Bar.png", - "tiled": false, - "topMargin": 6, - "width": 16 + { + "type": { + "value": "SourisSurObjet" + }, + "parameters": [ + "NoLabelContinousBar", + "", + "", + "" + ] } - } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetLabelShown" + }, + "parameters": [ + "NoLabelContinousBar", + "yes", + "" + ] + } + ] } ], - "events": [], "layers": [ { - "ambientLightColorB": 8632048, - "ambientLightColorG": 150995054, - "ambientLightColorR": 1869182049, + "ambientLightColorB": 32, + "ambientLightColorG": 0, + "ambientLightColorR": 0, "followBaseLayerCamera": false, "isLightingLayer": false, "name": "", @@ -6314,6 +6479,181 @@ } ] }, + { + "author": "", + "category": "", + "extensionNamespace": "", + "fullName": "", + "helpPath": "", + "iconUrl": "", + "name": "Checkbox", + "previewIconUrl": "", + "shortDescription": "", + "version": "", + "description": "", + "tags": [], + "authorIds": [], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [], + "eventsBasedObjects": [ + { + "defaultName": "", + "description": "", + "fullName": "", + "name": "Checkbox", + "eventsFunctions": [], + "propertyDescriptors": [ + { + "value": "Left", + "type": "Choice", + "label": "Checkbox side", + "description": "", + "group": "", + "extraInformation": [ + "Left", + "Right" + ], + "hidden": false, + "name": "CheckboxHorizontalAnchorTargetValue" + }, + { + "value": "CheckboxHorizontalAnchorTargetValue", + "type": "String", + "label": "", + "description": "This is only used by the scene editor.", + "group": "", + "extraInformation": [ + "Label" + ], + "hidden": true, + "name": "CheckboxHorizontalAnchorTarget" + }, + { + "value": "Opposite", + "type": "String", + "label": "", + "description": "This is only used by the scene editor.", + "group": "", + "extraInformation": [ + "Checked", + "Unchecked" + ], + "hidden": true, + "name": "CheckboxHorizontalAnchorOrigin" + }, + { + "value": "-8", + "type": "Number", + "label": "Checkbox X offset", + "description": "", + "group": "", + "extraInformation": [ + "Checked", + "Unchecked" + ], + "hidden": false, + "name": "CheckboxAnchorDeltaX" + }, + { + "value": "Center", + "type": "String", + "label": "", + "description": "", + "group": "", + "extraInformation": [ + "Label" + ], + "hidden": true, + "name": "CheckboxVerticalAnchorTarget" + }, + { + "value": "Center", + "type": "String", + "label": "", + "description": "", + "group": "", + "extraInformation": [ + "Checked", + "Unchecked" + ], + "hidden": true, + "name": "CheckboxVerticalAnchorOrigin" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [ + "Unchecked" + ], + "hidden": true, + "name": "ShowUnchecked" + } + ], + "objects": [ + { + "assetStoreId": "", + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "name": "Checked", + "rightMargin": 0, + "tags": "", + "texture": "", + "tiled": false, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "", + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "name": "Unchecked", + "rightMargin": 0, + "tags": "", + "texture": "", + "tiled": false, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "", + "bold": false, + "italic": false, + "name": "Label", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Text", + "font": "", + "textAlignment": "left", + "characterSize": 20, + "color": { + "b": 0, + "g": 0, + "r": 0 + } + } + ] + } + ] + }, { "author": "", "category": "", From 4b2f00fba8c77ffcfc707cac7ca099d7cdce894d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 16 Dec 2022 15:19:08 +0000 Subject: [PATCH 41/98] Optimised images with calibre/image-actions --- examples/resource-bar/Checked.png | Bin 511 -> 401 bytes examples/resource-bar/Unchecked.png | Bin 308 -> 252 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/resource-bar/Checked.png b/examples/resource-bar/Checked.png index 246b1188b7754c5c8dc816f0d529dea7d9b5817a..6b70776c2fa214b6b11b5b53b579423cdd199ca2 100644 GIT binary patch delta 375 zcmV--0f_$p1CaxeBYyx1a7bBm000XT000XT0n*)m`~Uy}LrFwIR9M69*|816Fc1Y$ z*KEKfjKCx;zy{d?5Q35(IyyGM3WN%nfQmNVkwX}vC~8)!5c-wVpd VrZJpc#c2Ql002ovPDHLkV1g7?qlEwf delta 486 zcmV%waY6|WPDM|pM)sWHicdi}SK*JdDaFAwClz(63Ne7B(oQTP>(S>a^ z&yT~7q05?di43~G(d^yl-oCg4R&}cAAd>77 z&0b|~U7$nAe(Y~@KuQPbSmcGxZpYzNhh_?eoHjHxa+=UTAw8jj;TO*W=?WFlj9YA4 z21m0-jve@YR7T|a$5tWu=s8uf)0JgY_mh_e^j@_cB-B=E{4k-od$ zt+LZV1{zO(u_};(Hzi(JRmf1gr*T-7$k5xoL9A+|?_aKWn+B#qx#Orm4gAx_SwdnO z$iBfnXF?ubbx cpQH@%3nX+G$g4)=2mk;807*qoM6N<$f}N`AMF0Q* diff --git a/examples/resource-bar/Unchecked.png b/examples/resource-bar/Unchecked.png index 8c4623a42c8a1a057bcce102d1d5ffcb5d6a7dcd..625292dd7387b7548ec171e3b5c3ad3b295dba74 100644 GIT binary patch delta 224 zcmdnO^oMbRNKTRnhgY6AI@2DJeTi^ za7i$e?~#*>PFD%MPAl#QzVN4+@8s;^CaHg#IJ|2Ln{PyW7r%+xU9ec;Z+YZkY4)CA=yw7WO3 zHH6k3dSSSD){IgP+0`{?HQ!7zdv92k)qC;sv%N~2mVWEVnSIlzepOANSB%KAT?=nK zeQ%hNHr=ap$+xn=jM;GxdH-%$PPVwRkgs%wv+S#Yb}Lk-t@w*Q@}aT)f1gY`zdXCk zcY%`N=CkKLH?Gd?{PljOf?#LY&49oAXY+b-xwl;Jnt6Unfz0%mB4q~{Cr0q*Z;|nM c$oN3|I+Kul(zHPCWeh;z>FVdQ&MBb@04T7BMF0Q* From 24c85e3898be7b1d5cfbc5d0c008e569ddcbf626 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Fri, 16 Dec 2022 20:51:17 +0100 Subject: [PATCH 42/98] Add some interactions with the slider object. --- .../assets/Yellow Button_Hovered.png | Bin 0 -> 2270 bytes .../assets/Yellow Button_Idle.png | Bin 0 -> 2285 bytes .../assets/Yellow Button_Pressed.png | Bin 0 -> 2187 bytes examples/resource-bar/game.json | 11017 ++++++++++++++-- 4 files changed, 9953 insertions(+), 1064 deletions(-) create mode 100644 examples/resource-bar/assets/Yellow Button_Hovered.png create mode 100644 examples/resource-bar/assets/Yellow Button_Idle.png create mode 100644 examples/resource-bar/assets/Yellow Button_Pressed.png diff --git a/examples/resource-bar/assets/Yellow Button_Hovered.png b/examples/resource-bar/assets/Yellow Button_Hovered.png new file mode 100644 index 0000000000000000000000000000000000000000..d575c5e6104c3f4f77ab0e19c6f700bef0819c25 GIT binary patch literal 2270 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Yellow Button_Idle.png b/examples/resource-bar/assets/Yellow Button_Idle.png new file mode 100644 index 0000000000000000000000000000000000000000..b8b5b35afdfca3753c93e298416b3fd085d2922d GIT binary patch literal 2285 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 6faa5c858..a34d58824 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -579,6 +579,45 @@ "name": "Unchecked.png", "smoothed": true, "userAdded": true + }, + { + "alwaysLoaded": false, + "file": "assets/Yellow Button_Hovered.png", + "kind": "image", + "metadata": "", + "name": "Yellow Button_Hovered.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/Menu buttons/c1e14acb64b9963341656c997853154dc4c86cd1c46fb12bfbe012d99712ef61_Yellow Button_Hovered.png", + "name": "Yellow Button_Hovered.png" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Yellow Button_Idle.png", + "kind": "image", + "metadata": "", + "name": "Yellow Button_Idle.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/Menu buttons/1cacfd123a1eb708837337c27982f6871f5127c5890dbf0775e0f411958fcbf1_Yellow Button_Idle.png", + "name": "Yellow Button_Idle.png" + } + }, + { + "alwaysLoaded": false, + "file": "assets/Yellow Button_Pressed.png", + "kind": "image", + "metadata": "", + "name": "Yellow Button_Pressed.png", + "smoothed": true, + "userAdded": false, + "origin": { + "identifier": "https://asset-resources.gdevelop.io/public-resources/Menu buttons/928c3ea4db1da835c9f8cc5b7089a47228350209d2ff489e1484c31e5ce41b3d_Yellow Button_Pressed.png", + "name": "Yellow Button_Pressed.png" + } } ], "resourceFolders": [] @@ -607,7 +646,7 @@ "gridColor": 10401023, "gridAlpha": 0.8, "snap": false, - "zoomFactor": 0.9733333343505859, + "zoomFactor": 1.960000134277341, "windowMask": false }, "objectsGroups": [], @@ -690,18 +729,33 @@ }, { "angle": 0, - "customSize": false, - "height": 0, + "customSize": true, + "height": 15, "layer": "", "name": "NewSlider", "persistentUuid": "b11108dc-c86c-4085-8167-b235471dd419", - "width": 0, + "width": 113, "x": 415, "y": 426, "zOrder": 6, "numberProperties": [], "stringProperties": [], "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 129, + "layer": "", + "name": "YellowButton", + "persistentUuid": "fccba2d2-ef4c-4982-93c6-bb5090b8ac64", + "width": 256, + "x": 497, + "y": 56, + "zOrder": 7, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] } ], "objects": [ @@ -885,7 +939,8 @@ "BarBottomPadding": 3, "BarLeftPadding": 9, "BarRightPadding": 9, - "MaxValue": 4 + "MaxValue": 100, + "InitialValue": 50 }, "childrenContent": { "Background": { @@ -908,14 +963,19 @@ "textAlignment": "", "characterSize": 20, "color": { - "b": 0, - "g": 0, - "r": 0 + "b": 211, + "g": 211, + "r": 211 } }, "Resource": { + "bottomMargin": 0, "height": 8, + "leftMargin": 0, + "rightMargin": 0, "texture": "assets\\tiled_Health Bar Fill.png", + "tiled": false, + "topMargin": 0, "width": 32 }, "Thumb": { @@ -1031,9 +1091,130 @@ "width": 42 } } + }, + { + "assetStoreId": "615de0316452630b9f4f6a39decc82e2449b82c1afd1ff24d6470dad2922177b", + "name": "YellowButton", + "tags": "", + "type": "PanelSpriteButton::PanelSpriteButton", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "LeftPadding": 16, + "RightPadding": 16, + "PressedLabelOffsetY": 10, + "IdleLabelOffsetY": -8, + "BottomPadding": 32, + "TopPadding": 16, + "MinimalWidth": 300 + }, + "childrenContent": { + "Hovered": { + "bottomMargin": 32, + "height": 106, + "leftMargin": 16, + "rightMargin": 16, + "texture": "Yellow Button_Hovered.png", + "tiled": true, + "topMargin": 16, + "width": 256 + }, + "Idle": { + "bottomMargin": 32, + "height": 106, + "leftMargin": 16, + "rightMargin": 16, + "texture": "Yellow Button_Idle.png", + "tiled": true, + "topMargin": 16, + "width": 256 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "Button with a lot of text", + "font": "", + "textAlignment": "left", + "characterSize": 60, + "color": { + "b": 42, + "g": 87, + "r": 139 + } + }, + "Pressed": { + "bottomMargin": 16, + "height": 106, + "leftMargin": 16, + "rightMargin": 16, + "texture": "Yellow Button_Pressed.png", + "tiled": true, + "topMargin": 32, + "width": 256 + } + } + } + ], + "events": [ + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DepartScene" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "DebuggerTools::EnableDebugDraw" + }, + "parameters": [ + "", + "", + "", + "no", + "no" + ] + } + ] + }, + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsClicked" + }, + "parameters": [ + "YellowButton", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::Height" + }, + "parameters": [ + "YellowButton", + "+", + "8" + ] + } + ] } ], - "events": [], "layers": [ { "ambientLightColorB": 8632048, @@ -2201,40 +2382,54 @@ "author": "", "category": "User interface", "extensionNamespace": "", - "fullName": "Resource bar (tiled)", + "fullName": "Panel sprite button", "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWRvdHMtaG9yaXpvbnRhbCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNiwxMkEyLDIgMCAwLDEgMTgsMTBBMiwyIDAgMCwxIDIwLDEyQTIsMiAwIDAsMSAxOCwxNEEyLDIgMCAwLDEgMTYsMTJNMTAsMTJBMiwyIDAgMCwxIDEyLDEwQTIsMiAwIDAsMSAxNCwxMkEyLDIgMCAwLDEgMTIsMTRBMiwyIDAgMCwxIDEwLDEyTTQsMTJBMiwyIDAgMCwxIDYsMTBBMiwyIDAgMCwxIDgsMTJBMiwyIDAgMCwxIDYsMTRBMiwyIDAgMCwxIDQsMTJaIiAvPjwvc3ZnPg==", - "name": "TiledUnitsBar", - "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/063e9152cf65bc0f3be2a828afd950c3ecf1b1fc72feefdc2467252fe987dc0f_dots-horizontal.svg", - "shortDescription": "A bar that represents a resource in the game (health, mana, ammo, etc)", - "version": "1.0.0", - "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTI5LDIzSDNjLTEuMSwwLTItMC45LTItMlYxMWMwLTEuMSwwLjktMiwyLTJoMjZjMS4xLDAsMiwwLjksMiwydjEwQzMxLDIyLjEsMzAuMSwyMywyOSwyM3oiLz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMywxOUwxMywxOWMtMS4xLDAtMi0wLjktMi0ydi0yYzAtMS4xLDAuOS0yLDItMmgwYzEuMSwwLDIsMC45LDIsMnYyQzE1LDE4LjEsMTQuMSwxOSwxMywxOXoiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIxOCIgeTE9IjEzIiB4Mj0iMTgiIHkyPSIxOSIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjIxIiB5MT0iMTMiIHgyPSIxOCIgeTI9IjE3Ii8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMjEiIHkxPSIxOSIgeDI9IjE5IiB5Mj0iMTYiLz4NCjwvc3ZnPg0K", + "name": "PanelSpriteButton", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Interface Elements/Interface Elements_interface_ui_button_ok_cta_clock_tap.svg", + "shortDescription": "A button that can be customized.", + "version": "1.1.3", + "description": "The button can be customized with a background for each state and a label. It handles user interactions and a simple condition can be used to check if it is clicked.", "origin": { - "identifier": "ResourceBar", + "identifier": "PanelSpriteButton", "name": "gdevelop-extension-store" }, "tags": [ - "resource", - "bar", - "health", - "mana", - "shield", - "hearts", - "lives", - "ammo" + "button", + "ui" ], "authorIds": [ - "gqDaZjCfevOOxBYkK6zlhtZnXCg1", - "q8ubdigLvIRXLxsJDDTaokO41mc2", "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" ], "dependencies": [], - "eventsFunctions": [], + "eventsFunctions": [ + { + "fullName": "Any touch pressed", + "functionType": "Condition", + "name": "AnyTouchPressed", + "private": true, + "sentence": "Any touch is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "eventsFunctionContext.returnValue = runtimeScene.getGame().getInputManager()._touches.firstKey() !== null;", + "" + ], + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [], + "objectGroups": [] + } + ], "eventsBasedBehaviors": [ { - "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", - "fullName": "Resource bar", - "name": "ResourceBar", + "description": "The finite state machine used internally by the button object.", + "fullName": "Button finite state machine", + "name": "ButtonFSM", "objectType": "", "private": true, "eventsFunctions": [ @@ -2254,7 +2449,7 @@ "textG": 0, "textR": 0 }, - "comment": "This is done after the events to allow users to read the previous value at the end of the change.", + "comment": "We don't use the touch capability condition because the device could have both touch and cursor.", "comment2": "" }, { @@ -2262,227 +2457,9079 @@ "conditions": [ { "type": { - "inverted": true, - "value": "CompareObjectTimer" + "value": "PanelSpriteButton::AnyTouchPressed" }, "parameters": [ - "Object", - "\"__ResourceBar.LastValueChange\"", - "<=", - "Object.Behavior::PropertyPreviousHighValueDuration()" + "", + "" ] } ], "actions": [ { "type": { - "value": "TiledUnitsBar::ResourceBar::UpdatePreviousHighValue" + "value": "PanelSpriteButton::ButtonFSM::SetPropertyShouldCheckHovering" }, "parameters": [ "Object", "Behavior", - "=" + "" ] } ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "TiledUnitsBar::ResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "the value of the object.", - "fullName": "Value", - "functionType": "ExpressionAndCondition", - "name": "Value", - "sentence": "the value", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Finite state machine", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "value": "SetReturnNumber" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "Object.Behavior::PropertyValue()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "TiledUnitsBar::ResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "fullName": "", - "functionType": "ActionWithOperator", - "getterName": "Value", - "name": "SetValue", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "comment": "The \"Validated\" state only last one frame.", + "comment2": "" + }, { - "type": { - "value": "TiledUnitsBar::ResourceBar::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "clamp(GetArgumentAsNumber(\"Value\"), 0, Object.Behavior::MaxValue())" - ] - } - ] - }, - { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Check position", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure the cursor position is only checked once per frame.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PanelSpriteButton::AnyTouchPressed" + }, + "parameters": [ + "", + "" + ] + }, + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::ShouldCheckMousePosition" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "SourisSurObjet" + }, + "parameters": [ + "Object", + "", + "no", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Touches are always pressed, so ShouldCheckHovering doesn't matter.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + }, + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "TouchX(Object.Behavior::PropertyTouchId(), Object.Layer(), 0)", + "TouchY(Object.Behavior::PropertyTouchId(), Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Handle touch start", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "HasAnyTouchStarted" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyIndex" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "StartedTouchCount()", + "conditions": [], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "TouchX(StartedTouchId(Object.Behavior::PropertyIndex()), Object.Layer(), 0)", + "TouchY(StartedTouchId(Object.Behavior::PropertyIndex()), Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "StartedTouchId(Object.Behavior::PropertyIndex())" + ] + }, + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + }, + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyIndex" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Ignore mouse events when a touch is active because the mouse is probably an echo of touch events.\nThe mouse press could be a touch that has not the right TouchId.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "MouseButtonPressed" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PanelSpriteButton::AnyTouchPressed" + }, + "parameters": [ + "", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "The trigger once must be before the state condition to detect a new press.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + }, + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Apply position changes", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PanelSpriteButton::ButtonFSM::PropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "inverted": true, + "value": "PanelSpriteButton::ButtonFSM::PropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "MouseButtonPressed" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Handle touch end", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Ignore mouse events when a touch is active because the mouse is probably an echo of touch events.\nThe mouse release could be a touch release that has not the right TouchId.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "MouseButtonReleased" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "inverted": true, + "value": "PanelSpriteButton::AnyTouchPressed" + }, + "parameters": [ + "", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + }, + { + "type": { + "inverted": true, + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "HasTouchEnded" + }, + "parameters": [ + "", + "Object.Behavior::PropertyTouchId()" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + }, + { + "type": { + "inverted": true, + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is not used.", + "fullName": "Is idle", + "functionType": "Condition", + "name": "IsIdle", + "sentence": "_PARAM0_ is idle", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button was just clicked.", + "fullName": "Is clicked", + "functionType": "Condition", + "name": "IsClicked", + "sentence": "_PARAM0_ is clicked", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the cursor is hovered over the button.", + "fullName": "Is hovered", + "functionType": "Condition", + "name": "IsHovered", + "sentence": "_PARAM0_ is hovered", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is either hovered or pressed but not hovered.", + "fullName": "Is focused", + "functionType": "Condition", + "name": "IsFocused", + "sentence": "_PARAM0_ is focused", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is currently being pressed with mouse or touch.", + "fullName": "Is pressed", + "functionType": "Condition", + "name": "IsPressed", + "sentence": "_PARAM0_ is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "Should check mouse position", + "functionType": "Condition", + "name": "ShouldCheckMousePosition", + "private": true, + "sentence": "_PARAM0_ should check mouse position", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Using a function avoid the OR to unselect Object when the property is not set.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "MouseButtonPressed" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyShouldCheckHovering" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "true", + "type": "Boolean", + "label": "", + "description": "Should check hovering", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ShouldCheckHovering" + }, + { + "value": "Idle", + "type": "Choice", + "label": "State", + "description": "", + "group": "", + "extraInformation": [ + "Idle", + "Hovered", + "PressedInside", + "PressedOutside", + "Validated" + ], + "hidden": true, + "name": "State" + }, + { + "value": "0", + "type": "Number", + "label": "Touch id", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TouchId" + }, + { + "value": "", + "type": "Boolean", + "label": "Touch is inside", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TouchIsInside" + }, + { + "value": "", + "type": "Boolean", + "label": "Mouse is inside", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "MouseIsInside" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "Index" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [ + { + "defaultName": "Button", + "description": "A button that can be customized.", + "fullName": "Panel sprite button", + "name": "PanelSpriteButton", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Create one background instance for of each state.\nOnly the instance for the current state is shown.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Idle", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Hovered", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Pressed", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Hovered" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Pressed" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Hovered", + "=", + "1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Place the label over the backgrounds.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Label", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Label", + "=", + "2" + ] + }, + { + "type": { + "value": "TextObject::SetTextAlignment" + }, + "parameters": [ + "Label", + "\"center\"" + ] + }, + { + "type": { + "value": "TextObject::SetWrapping" + }, + "parameters": [ + "Label", + "yes" + ] + }, + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::CenterLabel" + }, + "parameters": [ + "Object", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [ + { + "name": "Background", + "objects": [ + { + "name": "Idle" + }, + { + "name": "Hovered" + }, + { + "name": "Pressed" + } + ] + } + ] + }, + { + "fullName": "", + "functionType": "Action", + "name": "onHotReloading", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::CenterLabel" + }, + "parameters": [ + "Object", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Apply states", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Show the right background accordingly to the new state.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsIdle" + }, + "parameters": [ + "Object", + "ButtonFSM" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "SetCenterY" + }, + "parameters": [ + "Label", + "=", + "Object.CenterWithPaddingY()" + ] + }, + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Idle", + "" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Pressed" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Visible" + }, + "parameters": [ + "Hovered" + ] + }, + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::PropertyHoveredFadeOutDuration" + }, + "parameters": [ + "Object", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "Tween::AddObjectOpacityTween" + }, + "parameters": [ + "Hovered", + "Tween", + "\"Fadeout\"", + "0", + "\"linear\"", + "Object.PropertyHoveredFadeOutDuration() * 1000", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::PropertyHoveredFadeOutDuration" + }, + "parameters": [ + "Object", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Hovered" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteObject::Opacity" + }, + "parameters": [ + "Hovered", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Hovered" + ] + }, + { + "type": { + "value": "PanelSpriteObject::SetOpacity" + }, + "parameters": [ + "Hovered", + "=", + "255" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsHovered" + }, + "parameters": [ + "Object", + "ButtonFSM" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "SetCenterY" + }, + "parameters": [ + "Label", + "=", + "Object.CenterWithPaddingY()" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Idle" + ] + }, + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Hovered", + "" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Pressed" + ] + }, + { + "type": { + "value": "Tween::RemoveTween" + }, + "parameters": [ + "Hovered", + "Tween", + "\"Fadeout\"" + ] + }, + { + "type": { + "value": "PanelSpriteObject::SetOpacity" + }, + "parameters": [ + "Hovered", + "=", + "255" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsPressed" + }, + "parameters": [ + "Object", + "ButtonFSM" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "SetCenterY" + }, + "parameters": [ + "Label", + "=", + "Object.CenterWithPaddingY() + Object.PropertyPressedLabelOffsetY()" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Idle" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Hovered" + ] + }, + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Pressed", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsFocused" + }, + "parameters": [ + "Object", + "ButtonFSM" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "SetCenterY" + }, + "parameters": [ + "Label", + "=", + "Object.CenterWithPaddingY()" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Idle" + ] + }, + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Hovered", + "" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Pressed" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Resize", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Children instances must be resized when the button size change:\n- backgrounds for each state are resized to take the full dimensions of the button\n- the label is put back at the center of the button\n\nThe scale is set back to 1 because it means that the parent instance has the same dimensions as the union of its children instances.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Width()", + "!=", + "max(Idle.BoundingBoxRight(), Label.BoundingBoxRight()) - min(Idle.BoundingBoxLeft(), Label.BoundingBoxLeft())" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Height()", + "!=", + "max(Idle.BoundingBoxBottom(), Label.BoundingBoxBottom()) - min(Idle.BoundingBoxTop(), Label.BoundingBoxTop())" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Idle", + "Width", + "=", + "Object.Width()" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Idle", + "Height", + "=", + "Object.Height()" + ] + }, + { + "type": { + "value": "PanelSpriteButton::Scale" + }, + "parameters": [ + "Object", + "=", + "1" + ] + }, + { + "type": { + "value": "PanelSpriteObject::Width" + }, + "parameters": [ + "Background", + "=", + "Idle.Variable(Width)" + ] + }, + { + "type": { + "value": "PanelSpriteObject::Height" + }, + "parameters": [ + "Background", + "=", + "Idle.Variable(Height)" + ] + }, + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::CenterLabel" + }, + "parameters": [ + "Object", + "" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [ + { + "name": "Background", + "objects": [ + { + "name": "Idle" + }, + { + "name": "Hovered" + }, + { + "name": "Pressed" + } + ] + } + ] + }, + { + "description": "Check if the button is not used.", + "fullName": "Is idle", + "functionType": "Condition", + "name": "IsIdle", + "sentence": "_PARAM0_ is idle", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::IsIdle" + }, + "parameters": [ + "Idle", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button was just clicked.", + "fullName": "Is clicked", + "functionType": "Condition", + "name": "IsClicked", + "sentence": "_PARAM0_ is clicked", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::IsClicked" + }, + "parameters": [ + "Idle", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the cursor is hovered over the button.", + "fullName": "Is hovered", + "functionType": "Condition", + "name": "IsHovered", + "sentence": "_PARAM0_ is hovered", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::IsHovered" + }, + "parameters": [ + "Idle", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is either hovered or pressed but not hovered.", + "fullName": "Is focused", + "functionType": "Condition", + "name": "IsFocused", + "sentence": "_PARAM0_ is focused", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::IsFocused" + }, + "parameters": [ + "Idle", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is currently being pressed with mouse or touch.", + "fullName": "Is pressed", + "functionType": "Condition", + "name": "IsPressed", + "sentence": "_PARAM0_ is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::IsPressed" + }, + "parameters": [ + "Idle", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Change the text of the button label.", + "fullName": "Label text", + "functionType": "Action", + "name": "SetLabelText", + "sentence": "Change the text of _PARAM0_ to _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TextObject::String" + }, + "parameters": [ + "Label", + "=", + "GetArgumentAsString(\"LabelText\")" + ] + }, + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::CenterLabel" + }, + "parameters": [ + "Object", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + }, + { + "description": "", + "name": "LabelText", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Return the label text.", + "fullName": "Label text", + "functionType": "StringExpression", + "name": "LabelText", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "Label.String()" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Return the label center Y according to the button configuration. This expression is used in doStepPostEvents when the button is pressed or released.", + "fullName": "", + "functionType": "Expression", + "name": "CenterWithPaddingY", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Idle.CenterY() + (Object.PropertyTopPadding() - Object.PropertyBottomPadding()) / 2" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Center the label according to the button configuration. This is used in doStepPostEvents when the button is resized.", + "fullName": "", + "functionType": "Action", + "name": "CenterLabel", + "private": true, + "sentence": "Center the label of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "MettreXY" + }, + "parameters": [ + "Label", + "=", + "Object.PropertyLeftPadding()", + "=", + "Object.PropertyTopPadding()" + ] + }, + { + "type": { + "value": "TextObject::WrappingWidth" + }, + "parameters": [ + "Label", + "=", + "Idle.Width() - Object.PropertyLeftPadding() - Object.PropertyRightPadding()" + ] + }, + { + "type": { + "value": "TextObject::WrappingWidth" + }, + "parameters": [ + "Label", + "=", + "Idle.Width() - Object.PropertyLeftPadding() - Object.PropertyRightPadding()" + ] + }, + { + "type": { + "value": "SetCenterY" + }, + "parameters": [ + "Label", + "=", + "Object.CenterWithPaddingY()" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetCenterX" + }, + "parameters": [ + "Label", + "=", + "Background.CenterX() + (Object.PropertyLeftPadding() - Object.PropertyRightPadding()) / 2" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsPressed" + }, + "parameters": [ + "Object", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Label", + "+", + "Object.PropertyPressedLabelOffsetY()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [ + { + "name": "Background", + "objects": [ + { + "name": "Idle" + }, + { + "name": "Hovered" + }, + { + "name": "Pressed" + } + ] + } + ] + } + ], + "propertyDescriptors": [ + { + "value": "0", + "type": "Number", + "label": "Label offset on Y axis when pressed", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "PressedLabelOffsetY" + }, + { + "value": "0", + "type": "Number", + "label": "Left padding", + "description": "", + "group": "Padding", + "extraInformation": [], + "hidden": false, + "name": "LeftPadding" + }, + { + "value": "0", + "type": "Number", + "label": "Right padding", + "description": "", + "group": "Padding", + "extraInformation": [], + "hidden": false, + "name": "RightPadding" + }, + { + "value": "0", + "type": "Number", + "label": "Top padding", + "description": "", + "group": "Padding", + "extraInformation": [], + "hidden": false, + "name": "TopPadding" + }, + { + "value": "0", + "type": "Number", + "label": "Bottom padding", + "description": "", + "group": "Padding", + "extraInformation": [], + "hidden": false, + "name": "BottomPadding" + }, + { + "value": "0.25", + "type": "Number", + "label": "Hovered fade out duration (in seconds)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "HoveredFadeOutDuration" + } + ], + "objects": [ + { + "assetStoreId": "", + "bold": false, + "italic": false, + "name": "Label", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Text", + "font": "", + "textAlignment": "center", + "characterSize": 20, + "color": { + "b": 0, + "g": 0, + "r": 0 + } + }, + { + "assetStoreId": "", + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "name": "Idle", + "rightMargin": 0, + "tags": "", + "texture": "", + "tiled": false, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", + "width": 32, + "variables": [ + { + "folded": true, + "name": "State", + "type": "string", + "value": "Idle" + } + ], + "effects": [], + "behaviors": [ + { + "name": "ButtonFSM", + "type": "PanelSpriteButton::ButtonFSM", + "ShouldCheckHovering": true + } + ] + }, + { + "assetStoreId": "", + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "name": "Hovered", + "rightMargin": 0, + "tags": "", + "texture": "", + "tiled": false, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Tween", + "type": "Tween::TweenBehavior" + } + ] + }, + { + "assetStoreId": "", + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "name": "Pressed", + "rightMargin": 0, + "tags": "", + "texture": "", + "tiled": false, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [] + } + ] + } + ] + }, + { + "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", + "category": "User interface", + "extensionNamespace": "", + "fullName": "Draggable slider", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", + "name": "DraggableSliderControl", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/UI Essentials/UI Essentials_sliders_options.svg", + "shortDescription": "A draggable slider that users can move to select a numerical value.", + "version": "1.0.6", + "description": [ + "Draws a draggable slider that users can move to select a numerical value.", + "The value range, tick spacing, and the appearance of the slider can be defined with properties.", + "", + "How to use:", + "- Add this behavior a **Shape Painter** object", + "- Place an instance of that shape painter on the screen where you want the slider to appear", + "- Use the \"Value\" expression to find the Value based on the position of the slider", + "", + "Tips:", + "- You can disable the slider to prevent a user from interacting with it", + "- You can set the Value of the slider and the slider will move to the correct position", + "", + "Further details can be found in [this tutorial video](https://youtu.be/iiTUwdAT_hs).", + "", + "Breaking changes (1.0.0)", + "- Track thickness and length properties replaced track width and height. These 2 properties must be set again if they were different from the default size.", + "- Hidden sliders can be dragged. The \"enable\" action must be used to disable them.", + "" + ], + "origin": { + "identifier": "DraggableSliderControl", + "name": "gdevelop-extension-store" + }, + "tags": [ + "draggable", + "slider", + "shape painter", + "ui", + "widget" + ], + "authorIds": [ + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2", + "gqDaZjCfevOOxBYkK6zlhtZnXCg1" + ], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "Let users select a numerical value by dragging a slider.", + "fullName": "Draggable slider", + "name": "DraggableSliderControl", + "objectType": "PrimitiveDrawing::Drawer", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure object doesn't get re-drawn every frame", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::ClearBetweenFrames" + }, + "parameters": [ + "Object", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Use correct min value (instead of always starting at 0)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValueMin()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set track height function (which enforces valid thumb sizes)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTrackThickness" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyTrackThickness()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Start halo at same size as thumb", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::PropertyThumbHeight()/2,Object.Behavior::PropertyThumbWidth()/2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Slider logic", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::IsEnabled" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Track where the mouse is (in relation to object)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyMouseX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.ToDrawingX(MouseX(Object.Layer(), 0), MouseY(Object.Layer(), 0))" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyMouseY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.ToDrawingY(MouseX(Object.Layer(), 0), MouseY(Object.Layer(), 0))" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move slider when being dragged", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbOffset" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyMouseX()" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "End sliding and update variables", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "MouseButtonReleased" + }, + "parameters": [ + "", + "Left" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Update \"Value\" based on the location of the thumb", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyValueMin() + (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin()) * Object.Behavior::PropertyThumbOffset() / Object.Behavior::PropertyTrackLength()", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Grow halo even more when pressed", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTargetHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "1.25 * Object.Behavior::PropertyHaloRadius()" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Detect hover/touch/click (but only if the layer and object is visible, and the object is not already being dragged)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Detect mouse clicks near track, start dragging", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SourisBouton" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseX()", + ">=", + "-Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseX()", + "<=", + "Object.Behavior::PropertyTrackLength() + Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseY()", + ">=", + "-Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseY()", + "<=", + "Object.Behavior::PropertyHaloRadius()" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Reset hover detection ", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsHovered" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Grow halo when hovered", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SourisBouton" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseX()", + ">=", + "Object.Behavior::PropertyThumbOffset() - Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseX()", + "<=", + "Object.Behavior::PropertyThumbOffset() + Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseY()", + ">=", + "- Object.Behavior::PropertyHaloRadius()" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::PropertyMouseY()", + "<=", + "Object.Behavior::PropertyHaloRadius()" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsHovered" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTargetHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyHaloRadius()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Shrink halo to zero when not hovered", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsHovered" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTargetHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "Object.Behavior::PropertyTargetHaloRadius()" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Redraw slider only when halo is not at final size", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "abs(Object.Behavior::PropertyCurrentHaloRadius() - Object.Behavior::PropertyTargetHaloRadius())", + "<", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyTargetHaloRadius()" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "Object.Behavior::PropertyTargetHaloRadius()" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "lerp(Object.Behavior::PropertyCurrentHaloRadius(), Object.Behavior::PropertyTargetHaloRadius(), Object.Behavior::PropertyHaloGrowSpeed())" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Slider drawing", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "Visible" + }, + "parameters": [ + "Object" + ] + }, + { + "type": { + "value": "LayerVisible" + }, + "parameters": [ + "", + "Object.Layer()" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::Drawer::ClearShapes" + }, + "parameters": [ + "Object" + ] + } + ], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Inactive track", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set inactive track parameters (by default, use thumb color)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyInactiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyInactiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyInactiveTrackColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyInactiveTrackOpacity()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::OutlineOpacity" + }, + "parameters": [ + "Object", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw inactive track", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset()", + "-Object.Behavior::PropertyTrackThickness() / 2", + "Object.Behavior::PropertyTrackLength()", + "Object.Behavior::PropertyTrackThickness() / 2" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw half circle at end of track (inactive side)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyRoundedTrack" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Arc" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyTrackLength()", + "0", + "Object.Behavior::PropertyTrackThickness() / 2", + "270", + "90", + "", + "yes" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Active track", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set active track parameters (by default, use thumb color)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyActiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyActiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyActiveTrackColor()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyActiveTrackOpacity()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw active track (2 pixels bigger than property) ", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "Object", + "0", + "-(Object.Behavior::PropertyTrackThickness() / 2 + 1)", + "Object.Behavior::PropertyThumbOffset()", + "Object.Behavior::PropertyTrackThickness() / 2 + 1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw half circle at end of track (active side)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyRoundedTrack" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Arc" + }, + "parameters": [ + "Object", + "0", + "0", + "1 + Object.Behavior::PropertyTrackThickness() / 2", + "90", + "270", + "", + "yes" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Halo", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyCurrentHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Prepare halo", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbColor()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::OutlineOpacity" + }, + "parameters": [ + "Object", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw halo (it will grow or shrink as needed)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyHaloOpacityHover()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::Circle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset()", + "0", + "Object.Behavior::PropertyCurrentHaloRadius()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Use a more opaque halo while being dragged (it will grow or shrink as needed)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyHaloOpacityClick()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::Circle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset()", + "0", + "Object.Behavior::PropertyCurrentHaloRadius()" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Thumb", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Prepare thumb settings", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillColor" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbColor()" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::PropertyThumbOpacity()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw Circle thumb", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbShape" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"circle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Circle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset()", + "0", + "ceil(max(Object.Behavior::PropertyThumbWidth(),Object.Behavior::PropertyThumbHeight())/2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Draw Rectangle thumb", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbShape" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"rectangle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyThumbOffset() - (Object.Behavior::PropertyThumbWidth() / 2)", + "-Object.Behavior::PropertyThumbHeight() / 2", + "Object.Behavior::PropertyThumbOffset() + (Object.Behavior::PropertyThumbWidth() / 2)", + "Object.Behavior::PropertyThumbHeight() / 2" + ] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the slider is being dragged.", + "fullName": "Being dragged", + "functionType": "Condition", + "group": "Slider", + "name": "IsBeingDragged", + "sentence": "_PARAM0_ is being dragged", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the slider interations are enabled.", + "fullName": "Interactions enabled", + "functionType": "Condition", + "group": "Slider", + "name": "IsEnabled", + "sentence": "Interactions of _PARAM0_ are enabled", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyEnabled" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Enable or disable the slider. Users cannot interact while it is disabled.", + "fullName": "Enable interactions", + "functionType": "Action", + "group": "Slider", + "name": "SetEnabled", + "sentence": "Enable interactions of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Enable\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyEnabled" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Stop dragging (so the slider won't be dragging when it gets enabled)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsBeingDragged" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Reset halo size (so halo won't appear when slider gets enabled)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTargetHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Enable\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyEnabled" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Enable", + "name": "Enable", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "The value of the slider (based on position of the thumb).", + "fullName": "Slider value", + "functionType": "Expression", + "group": "Slider", + "name": "Value", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValue()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the value of a slider (this will move the thumb to the correct position).", + "fullName": "Slider value", + "functionType": "Action", + "group": "Slider", + "name": "SetValue", + "sentence": "Change the value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + "<=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "round(GetArgumentAsNumber(\"Value\") / Object.Behavior::PropertyTickSpacing()) * Object.Behavior::PropertyTickSpacing()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyValueMin()" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValueMin()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::PropertyValueMax()" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValueMax()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Set the proper offset (it moves the slider)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbOffset" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyTrackLength() * (Object.Behavior::PropertyValue() - Object.Behavior::PropertyValueMin()) / (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin())" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Slider value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "The minimum value of a slider.", + "fullName": "Slider minimum value", + "functionType": "Expression", + "group": "Slider value configuration", + "name": "ValueMin", + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValueMin()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the minimum value of a slider.", + "fullName": "Slider minimum value", + "functionType": "Action", + "group": "Slider value configuration", + "name": "SetValueMin", + "sentence": "Change the minimum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValueMin" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"ValueMin\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::Value()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Minimum value", + "name": "ValueMin", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "The maximum value of a slider.", + "fullName": "Slider maximum value", + "functionType": "Expression", + "group": "Slider value configuration", + "name": "ValueMax", + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValueMax()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Thickness of track.", + "fullName": "Slider track thickness", + "functionType": "Expression", + "group": "Slider track configuration", + "name": "TrackThickness", + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTrackThickness()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Length of track.", + "fullName": "Slider track length", + "functionType": "Expression", + "group": "Slider track configuration", + "name": "TrackLength", + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTrackLength()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Height of thumb.", + "fullName": "Slider thumb height", + "functionType": "Expression", + "group": "Slider thumb configuration", + "name": "ThumbHeight", + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyThumbHeight()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the maximum value of a slider.", + "fullName": "Slider maximum value", + "functionType": "Action", + "group": "Slider value configuration", + "name": "SetValueMax", + "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValueMax" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"ValueMax\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::Value()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Maximum value", + "name": "ValueMax", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "The tick spacing of a slider.", + "fullName": "Tick spacing", + "functionType": "Expression", + "group": "Slider value configuration", + "name": "TickSpacing", + "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTickSpacing()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Tick spacing", + "name": "TickSpacing", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the tick spacing of a slider.", + "fullName": "Tick spacing", + "functionType": "Action", + "group": "Slider value configuration", + "name": "SetTickSpacing", + "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTickSpacing" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"TickSpacing\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::Value()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Tick spacing", + "name": "TickSpacing", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change length of track.", + "fullName": "Track length", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetTrackLength", + "sentence": "Change track length of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTrackLength" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move thumb to correct place (based on new track size)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyValue()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Track width", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change thickness of track.", + "fullName": "Track thickness", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetTrackThickness", + "sentence": "Change track thickness of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTrackThickness" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure thumb width is not smaller than track height + 2 pixels (to prevent track ends from showing)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyTrackThickness() + 2" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyTrackThickness() + 2", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbHeight" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyTrackThickness() + 2" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetThumbHeight" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyTrackThickness() + 2", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Track thickness", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change width of thumb.", + "fullName": "Thumb width", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetThumbWidth", + "sentence": "Change thumb width of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Thumb cannot be less than track thickness (plus 2 pixels)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyTrackThickness() + 2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Thumb width", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change height of thumb.", + "fullName": "Thumb height", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetThumbHeight", + "sentence": "Change thumb height of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Thumb cannot be less than track thickness (plus 2 pixels)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbHeight" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyTrackThickness() + 2)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Thumb height", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change radius of the halo around the thumb. This size is also used to detect interaction with the slider.", + "fullName": "Halo radius", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetHaloRadius", + "sentence": "Change halo radius of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyHaloRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Halo radius", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the halo opacity when the thumb is hovered.", + "fullName": "Halo opacity (hover)", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetHaloOpacityHover", + "sentence": "Change the halo opacity when hovered of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyHaloOpacityHover" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Halo opacity (hover)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change opacity of halo when pressed.", + "fullName": "Halo opacity (pressed)", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetHaloOpacityPressed", + "sentence": "Change halo opacity when pressed of _PARAM0_ to _PARAM2_ px", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyHaloOpacityClick" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Halo opacity (pressed)", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change shape of thumb (circle or rectangle).", + "fullName": "Thumb shape", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetThumbShape", + "sentence": "Change shape of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbShape" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Shape\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure thumb width is not smaller than track height (to prevent track ends from showing)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbShape" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"rectangle\"" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyTrackThickness()" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetThumbWidth" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyTrackThickness()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "New thumb shape", + "name": "Shape", + "supplementaryInformation": "[\"circle\",\"rectangle\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Make track use rounded ends.", + "fullName": "Rounded track ends", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetRoundedTrack", + "sentence": "Draw _PARAM0_ with a rounded track: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "GetArgumentAsNumber(\"Value\")", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyRoundedTrack" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "GetArgumentAsNumber(\"Value\")", + "=", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyRoundedTrack" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Rounded track", + "name": "Value", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Change opacity of thumb.", + "fullName": "Thumb opacity", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetThumbOpacity", + "sentence": "Change thumb opacity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Thumb opacity", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change opacity of inactive track.", + "fullName": "Inactive track opacity", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetInactiveTrackOpacity", + "sentence": "Change inactive track opacity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyInactiveTrackOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Inactive track opacity", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change opacity of active track.", + "fullName": "Active track opacity", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetActiveTrackOpacity", + "sentence": "Change active track opacity of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyActiveTrackOpacity" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Active track opacity", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the color of the track that is LEFT of the thumb.", + "fullName": "Active track color ", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetActiveTrackColor", + "sentence": "Change active track color of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyActiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Color\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Active track color", + "name": "Color", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "Change the color of the track that is RIGHT of the thumb.", + "fullName": "Inactive track color", + "functionType": "Action", + "group": "Slider track configuration", + "name": "SetInactiveTrackColor", + "sentence": "Change inactive track color of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyInactiveTrackColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Color\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Inactive track color", + "name": "Color", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "Change the thumb color to a specific value.", + "fullName": "Thumb color", + "functionType": "Action", + "group": "Slider thumb configuration", + "name": "SetThumbColor", + "sentence": "Change thumb color of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbColor" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Color\")" + ] + }, + { + "type": { + "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + }, + { + "description": "Thumb color", + "name": "Color", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "Update the hitbox.", + "fullName": "Update hitbox", + "functionType": "Action", + "group": "Private", + "name": "UpdateHitbox", + "private": true, + "sentence": "Update the hitbox of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::SetRotationCenter" + }, + "parameters": [ + "Object", + "Object.Behavior::PropertyTrackLength() / 2", + "Object.Behavior::PropertyTrackThickness() / 2" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::SetRectangularCollisionMask" + }, + "parameters": [ + "Object", + "-Object.Behavior::PropertyThumbWidth() / 2", + "-Object.Behavior::PropertyThumbHeight() / 2", + "Object.Behavior::PropertyTrackLength() + Object.Behavior::PropertyThumbWidth() / 2", + "Object.Behavior::PropertyThumbHeight() / 2" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0", + "type": "Number", + "label": "Minimum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ValueMin" + }, + { + "value": "1", + "type": "Number", + "label": "Maximum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ValueMax" + }, + { + "value": "0", + "type": "Number", + "label": "Tick spacing", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "TickSpacing" + }, + { + "value": "circle", + "type": "Choice", + "label": "Thumb shape", + "description": "", + "group": "Thumb", + "extraInformation": [ + "circle", + "rectangle" + ], + "hidden": false, + "name": "ThumbShape" + }, + { + "value": "20", + "type": "Number", + "label": "Thumb width", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "ThumbWidth" + }, + { + "value": "20", + "type": "Number", + "label": "Thumb height", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "ThumbHeight" + }, + { + "value": " 24;119;211", + "type": "Color", + "label": "Thumb Color", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "ThumbColor" + }, + { + "value": "255", + "type": "Number", + "label": "Thumb opacity", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "ThumbOpacity" + }, + { + "value": "200", + "type": "Number", + "label": "Track length", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "TrackLength" + }, + { + "value": "4", + "type": "Number", + "label": "Track thickness", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "TrackThickness" + }, + { + "value": "", + "type": "String", + "label": "Inactive track color (thumb color by default)", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "InactiveTrackColor" + }, + { + "value": "96", + "type": "Number", + "label": "Inactive track opacity", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "InactiveTrackOpacity" + }, + { + "value": " ", + "type": "String", + "label": "Active track color (thumb color by default)", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "ActiveTrackColor" + }, + { + "value": "255", + "type": "Number", + "label": "Active track opacity", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "ActiveTrackOpacity" + }, + { + "value": "24", + "type": "Number", + "label": "Halo size (hover)", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "HaloRadius" + }, + { + "value": "32", + "type": "Number", + "label": "Halo opacity (hover)", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "HaloOpacityHover" + }, + { + "value": "64", + "type": "Number", + "label": "Halo opacity (pressed)", + "description": "", + "group": "Thumb", + "extraInformation": [], + "hidden": false, + "name": "HaloOpacityClick" + }, + { + "value": "true", + "type": "Boolean", + "label": "Rounded track ends", + "description": "", + "group": "Track", + "extraInformation": [], + "hidden": false, + "name": "RoundedTrack" + }, + { + "value": "true", + "type": "Boolean", + "label": "Enable interactions", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "Enabled" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "IsBeingDragged" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "Value" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ThumbOffset" + }, + { + "value": "true", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "NeedRedraw" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "IsHovered" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "MouseX" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "MouseY" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "CurrentHaloRadius" + }, + { + "value": "0.2", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "HaloGrowSpeed" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TargetHaloRadius" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [] + }, + { + "author": "", + "category": "User interface", + "extensionNamespace": "", + "fullName": "Resource bar (tiled)", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWRvdHMtaG9yaXpvbnRhbCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNiwxMkEyLDIgMCAwLDEgMTgsMTBBMiwyIDAgMCwxIDIwLDEyQTIsMiAwIDAsMSAxOCwxNEEyLDIgMCAwLDEgMTYsMTJNMTAsMTJBMiwyIDAgMCwxIDEyLDEwQTIsMiAwIDAsMSAxNCwxMkEyLDIgMCAwLDEgMTIsMTRBMiwyIDAgMCwxIDEwLDEyTTQsMTJBMiwyIDAgMCwxIDYsMTBBMiwyIDAgMCwxIDgsMTJBMiwyIDAgMCwxIDYsMTRBMiwyIDAgMCwxIDQsMTJaIiAvPjwvc3ZnPg==", + "name": "TiledUnitsBar", + "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/063e9152cf65bc0f3be2a828afd950c3ecf1b1fc72feefdc2467252fe987dc0f_dots-horizontal.svg", + "shortDescription": "A bar that represents a resource in the game (health, mana, ammo, etc)", + "version": "1.0.0", + "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", + "origin": { + "identifier": "ResourceBar", + "name": "gdevelop-extension-store" + }, + "tags": [ + "resource", + "bar", + "health", + "mana", + "shield", + "hearts", + "lives", + "ammo" + ], + "authorIds": [ + "gqDaZjCfevOOxBYkK6zlhtZnXCg1", + "q8ubdigLvIRXLxsJDDTaokO41mc2", + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" + ], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", + "fullName": "Resource bar", + "name": "ResourceBar", + "objectType": "", + "private": true, + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "This is done after the events to allow users to read the previous value at the end of the change.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__ResourceBar.LastValueChange\"", + "<=", + "Object.Behavior::PropertyPreviousHighValueDuration()" + ] + } + ], + "actions": [ + { + "type": { + "value": "TiledUnitsBar::ResourceBar::UpdatePreviousHighValue" + }, + "parameters": [ + "Object", + "Behavior", + "=" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the value of the object.", + "fullName": "Value", + "functionType": "ExpressionAndCondition", + "name": "Value", + "sentence": "the value", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValue()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "Value", + "name": "SetValue", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TiledUnitsBar::ResourceBar::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "clamp(GetArgumentAsNumber(\"Value\"), 0, Object.Behavior::MaxValue())" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TiledUnitsBar::ResourceBar::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PreviousHighValue()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"__ResourceBar.LastValueChange\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TiledUnitsBar::ResourceBar::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + ">=", + "Object.Behavior::PropertyPreviousHighValue()" + ] + } + ], + "actions": [ + { + "type": { + "value": "TiledUnitsBar::ResourceBar::UpdatePreviousHighValue" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the maximum value of the object.", + "fullName": "Maximum value", + "functionType": "ExpressionAndCondition", + "group": "Resource bar configuration", + "name": "MaxValue", + "sentence": "the maximum value", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyMaxValue()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "MaxValue", + "name": "SetMaxValue", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TiledUnitsBar::ResourceBar::SetPropertyMaxValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the bar is empty.", + "fullName": "Empty", + "functionType": "Condition", + "name": "IsEmpty", + "sentence": "_PARAM0_ bar is empty", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TiledUnitsBar::ResourceBar::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the bar is full.", + "fullName": "Full", + "functionType": "Condition", + "name": "IsFull", + "sentence": "_PARAM0_ bar is full", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TiledUnitsBar::ResourceBar::PropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyMaxValue()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the previous high value of the resource bar before the current change.", + "fullName": "Previous high value", + "functionType": "ExpressionAndCondition", + "name": "PreviousHighValue", + "sentence": "the previous high value", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyPreviousHighValue()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Force the previous resource value to update to the current one.", + "fullName": "Update previous value", + "functionType": "Action", + "name": "UpdatePreviousHighValue", + "sentence": "Update the previous resource value of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TiledUnitsBar::ResourceBar::SetPropertyPreviousHighValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyValue()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the previous high value conservation duration (in seconds) of the object.", + "fullName": "Previous high value conservation duration", + "functionType": "ExpressionAndCondition", + "group": "Resource bar configuration", + "name": "PreviousHighValueDuration", + "sentence": "the previous high value conservation duration", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyPreviousHighValueDuration()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "PreviousHighValueDuration", + "name": "SetPreviousHighValueDuration", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TiledUnitsBar::ResourceBar::SetPropertyPreviousHighValueDuration" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the resource value is changing.", + "fullName": "Value is changing", + "functionType": "Condition", + "name": "IsChanging", + "sentence": "_PARAM0_ value is changing", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TiledUnitsBar::ResourceBar::PreviousHighValue" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "Object.Behavior::PropertyValue()", + "" + ] + }, + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"__ResourceBar.LastValueChange\"", + "<=", + "Object.Behavior::PropertyPreviousHighValueDuration()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "TiledUnitsBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "1", + "type": "Number", + "label": "Value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "Value" + }, + { + "value": "3", + "type": "Number", + "label": "Maximum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "MaxValue" + }, + { + "value": "", + "type": "Number", + "label": "Previous high value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "PreviousHighValue" + }, + { + "value": "1", + "type": "Number", + "label": "Previous high value conservation duration (in seconds)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "PreviousHighValueDuration" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [ + { + "defaultName": "ResourceBar", + "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", + "fullName": "Resource bar (using separate units)", + "name": "TiledUnitsBar", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "This allows to detect a change of \"intitial value\" on hot reload.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TiledUnitsBar::TiledUnitsBar::SetPropertyPreviousInitialValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyInitialValue()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Create one background instance for of each state.\nOnly the instance for the current state is shown.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Background", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Bar", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Resource", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Background", + "=", + "1" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Bar", + "=", + "2" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Resource", + "=", + "3" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "TiledUnitsBar::TiledUnitsBar::PropertyShowBackground" + }, + "parameters": [ + "Object" + ] + } + ], + "actions": [ + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Background" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Pass configuration to the behavior", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TiledUnitsBar::TiledUnitsBar::SetValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyInitialValue()", + "" + ] + }, + { + "type": { + "value": "TiledUnitsBar::TiledUnitsBar::SetMaxValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyMaxValue()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "onHotReloading", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TiledUnitsBar::TiledUnitsBar::CenterBar" + }, + "parameters": [ + "Object", + "" + ] + }, + { + "type": { + "value": "TiledUnitsBar::TiledUnitsBar::SetMaxValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyMaxValue()", + "Object.PropertyMaxValue()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TiledUnitsBar::TiledUnitsBar::PropertyInitialValue" + }, + "parameters": [ + "Object", + "!=", + "Object.PropertyPreviousInitialValue()" + ] + } + ], + "actions": [ + { + "type": { + "value": "TiledUnitsBar::TiledUnitsBar::SetPropertyPreviousInitialValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyInitialValue()" + ] + }, + { + "type": { + "value": "TiledUnitsBar::TiledUnitsBar::SetValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyInitialValue()", + "Object.PropertyInitialValue()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Resize", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Children instances must be resized when the button size change:\n- backgrounds for each state are resized to take the full dimensions of the button\n- the label is put back at the center of the button\n\nThe scale is set back to 1 because it means that the parent instance has the same dimensions as the union of its children instances.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Width()", + "!=", + "max(Background.BoundingBoxRight(), Bar.BoundingBoxRight()) - min(Background.BoundingBoxLeft(), Bar.BoundingBoxLeft())" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Height()", + "!=", + "max(Background.BoundingBoxBottom(), Bar.BoundingBoxBottom()) - min(Background.BoundingBoxTop(), Bar.BoundingBoxTop())" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Background", + "Width", + "=", + "Object.Width()" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Background", + "Height", + "=", + "Object.Height()" + ] + }, + { + "type": { + "value": "TiledUnitsBar::Scale" + }, + "parameters": [ + "Object", + "=", + "1" + ] + }, + { + "type": { + "value": "PanelSpriteObject::Width" + }, + "parameters": [ + "Background", + "=", + "Background.Variable(Width)" + ] + }, + { + "type": { + "value": "PanelSpriteObject::Height" + }, + "parameters": [ + "Background", + "=", + "Background.Variable(Height)" + ] + }, + { + "type": { + "value": "TiledUnitsBar::TiledUnitsBar::CenterBar" + }, + "parameters": [ + "Object", + "" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Center the bar according to the button configuration. This is used in doStepPostEvents when the button is resized.", + "fullName": "", + "functionType": "Action", + "name": "CenterBar", + "private": true, + "sentence": "Center the bar of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetCenter" + }, + "parameters": [ + "Bar", + "=", + "Background.CenterX()", + "=", + "Background.CenterY()" + ] + }, + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Bar", + "+", + "0" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Bar", + "+", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "MettreXY" + }, + "parameters": [ + "Resource", + "=", + "Bar.X()", + "=", + "Bar.Y()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the value of the object.", + "fullName": "Value", + "functionType": "ExpressionAndCondition", + "group": "Resource bar", + "name": "Value", + "sentence": "the value", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Resource.ResourceBar::Value()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "Value", + "name": "SetValue", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteContinuousBar::ResourceBar::SetValue" + }, + "parameters": [ + "Resource", + "ResourceBar", + "=", + "GetArgumentAsNumber(\"Value\")", + "" + ] + }, + { + "type": { + "value": "TiledSpriteObject::Width" + }, + "parameters": [ + "Resource", + "=", + "Resource.ResourceBar::Value() * Object.PropertyUnitWidth()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the maximum value of the object.", + "fullName": "Maximum value", + "functionType": "ExpressionAndCondition", + "group": "Resource bar configuration", + "name": "MaxValue", + "sentence": "the maximum value", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Resource.ResourceBar::PropertyMaxValue()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "MaxValue", + "name": "SetMaxValue", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteContinuousBar::ResourceBar::SetMaxValue" + }, + "parameters": [ + "Resource", + "ResourceBar", + "=", + "GetArgumentAsNumber(\"Value\")", + "" + ] + }, + { + "type": { + "value": "TiledSpriteObject::Width" + }, + "parameters": [ + "Bar", + "=", + "Object.PropertyMaxValue() * Object.PropertyUnitWidth()" + ] + }, + { + "type": { + "value": "TiledUnitsBar::TiledUnitsBar::CenterBar" + }, + "parameters": [ + "Object", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the bar is empty.", + "fullName": "Empty", + "functionType": "Condition", + "group": "Resource bar", + "name": "IsEmpty", + "sentence": "_PARAM0_ bar is empty", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteContinuousBar::ResourceBar::IsEmpty" + }, + "parameters": [ + "Resource", + "ResourceBar", + "=" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the bar is full.", + "fullName": "Full", + "functionType": "Condition", + "group": "Resource bar", + "name": "IsFull", + "sentence": "_PARAM0_ bar is full", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteContinuousBar::ResourceBar::IsFull" + }, + "parameters": [ + "Resource", + "ResourceBar", + "=" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", + "type": "object" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "3", + "type": "Number", + "label": "Maximum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "MaxValue" + }, + { + "value": "3", + "type": "Number", + "label": "Initial value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "InitialValue" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "It's used to detect a change at hot reload.", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "PreviousInitialValue" + }, + { + "value": "24", + "type": "Number", + "label": "Unit width", + "description": "How much pixels to show for a value of 1.", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "UnitWidth" + }, + { + "value": "true", + "type": "Boolean", + "label": "Show the background", + "description": "", + "group": "", + "extraInformation": [ + "Background" + ], + "hidden": false, + "name": "ShowBackground" + }, + { + "value": "0", + "type": "Number", + "label": "Bar left margin", + "description": "", + "group": "", + "extraInformation": [ + "Resource", + "Bar" + ], + "hidden": false, + "name": "BarLeftPadding" + }, + { + "value": "0", + "type": "Number", + "label": "Bar right margin", + "description": "", + "group": "", + "extraInformation": [ + "Resource", + "Bar" + ], + "hidden": false, + "name": "BarRightPadding" + }, + { + "value": "Center", + "type": "String", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": [ + "Resource", + "Bar" + ], + "hidden": true, + "name": "BarVerticalAnchorOrigin" + }, + { + "value": "Center", + "type": "String", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": [ + "Background" + ], + "hidden": true, + "name": "BarVerticalAnchorTarget" + } + ], + "objects": [ + { + "assetStoreId": "", + "height": 32, + "name": "Resource", + "tags": "", + "texture": "", + "type": "TiledSpriteObject::TiledSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "ResourceBar", + "type": "PanelSpriteContinuousBar::ResourceBar", + "Value": 1, + "MaxValue": 3, + "PreviousValue": 0 + } + ] + }, + { + "assetStoreId": "", + "height": 32, + "name": "Bar", + "tags": "", + "texture": "", + "type": "TiledSpriteObject::TiledSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [] + }, + { + "assetStoreId": "", + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "name": "Background", + "rightMargin": 0, + "tags": "", + "texture": "", + "tiled": true, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [] + } + ] + } + ] + }, + { + "author": "", + "category": "User interface", + "extensionNamespace": "", + "fullName": "Slider (tiled)", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", + "name": "PanelSpriteSlider", + "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/UI Essentials/1678c39a3b2bd3df4f82a8a293770db4986a6bcfd3f78e738ddfc86e39176423_UI Essentials_sliders_options.svg", + "shortDescription": "", + "version": "1.0.0", + "description": "", + "origin": { + "identifier": "ResourceBar", + "name": "gdevelop-extension-store" + }, + "tags": [], + "authorIds": [], + "dependencies": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", + "fullName": "Resource bar", + "name": "Slider", + "objectType": "", + "private": true, + "eventsFunctions": [ + { + "description": "the value of the object.", + "fullName": "Value", + "functionType": "ExpressionAndCondition", + "name": "Value", + "sentence": "the value", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValue()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "Value", + "name": "SetValue", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::Slider::PropertyStepSize" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::Slider::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "clamp(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyMinValue(), Object.Behavior::PropertyMaxValue())" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::Slider::PropertyStepSize" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::Slider::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "clamp(round(GetArgumentAsNumber(\"Value\") / Object.Behavior::PropertyStepSize()) * Object.Behavior::PropertyStepSize(), Object.Behavior::PropertyMinValue(), Object.Behavior::PropertyMaxValue())" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the minValue of the object.", + "fullName": "MinValue", + "functionType": "ExpressionAndCondition", + "group": "Resource bar configuration", + "name": "MinValue", + "sentence": "the minValue", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyMinValue()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "MinValue", + "name": "SetMinValue", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::Slider::SetPropertyMinValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the maximum value of the object.", + "fullName": "Maximum value", + "functionType": "ExpressionAndCondition", + "group": "Resource bar configuration", + "name": "MaxValue", + "sentence": "the maximum value", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyMaxValue()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "MaxValue", + "name": "SetMaxValue", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteContinuousBar::ResourceBar::SetPropertyMaxValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "Size", + "functionType": "Expression", + "name": "Size", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::MaxValue() - Object.Behavior::MinValue()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the step size of the object.", + "fullName": "Step size", + "functionType": "ExpressionAndCondition", + "group": "Resource bar configuration", + "name": "StepSize", + "sentence": "the step size", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyStepSize()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "StepSize", + "name": "SetStepSize", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::Slider::SetPropertyStepSize" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0", + "type": "Number", + "label": "Value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "Value" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "MinValue" + }, + { + "value": "1", + "type": "Number", + "label": "Maximum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "MaxValue" + }, + { + "value": "0", + "type": "Number", + "label": "Step size", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "StepSize" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [ + { + "defaultName": "Slider", + "description": "", + "fullName": "Slider", + "name": "PanelSpriteSlider", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "This allows to detect a change of \"intitial value\" on hot reload.", + "comment2": "" + }, + { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "conditions": [], + "actions": [ { "type": { - "value": "TiledUnitsBar::ResourceBar::PropertyValue" + "value": "PanelSpriteSlider::PanelSpriteSlider::SetPropertyPreviousInitialValue" }, "parameters": [ "Object", - "Behavior", - "<", - "Object.Behavior::PreviousHighValue()" + "=", + "Object.PropertyInitialValue()" ] } - ], + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Create one background instance for of each state.\nOnly the instance for the current state is shown.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], "actions": [ { "type": { - "value": "ResetObjectTimer" + "value": "Create" }, "parameters": [ - "Object", - "\"__ResourceBar.LastValueChange\"" + "", + "Background", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Resource", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Thumb", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Background", + "=", + "1" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Resource", + "=", + "2" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Thumb", + "=", + "3" ] } ] }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Place the label over the backgrounds.", + "comment2": "" + }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "conditions": [], + "actions": [ { "type": { - "value": "TiledUnitsBar::ResourceBar::PropertyValue" + "value": "Create" }, "parameters": [ - "Object", - "Behavior", - ">=", - "Object.Behavior::PropertyPreviousHighValue()" + "", + "Label", + "0", + "0", + "" ] - } - ], - "actions": [ + }, { "type": { - "value": "TiledUnitsBar::ResourceBar::UpdatePreviousHighValue" + "value": "ChangePlan" }, "parameters": [ - "Object", - "Behavior", - "" + "Label", + "=", + "4" + ] + }, + { + "type": { + "value": "TextObject::SetTextAlignment" + }, + "parameters": [ + "Label", + "\"center\"" + ] + }, + { + "type": { + "value": "TextObject::SetWrapping" + }, + "parameters": [ + "Label", + "no" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Label" ] } ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "TiledUnitsBar::ResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "the maximum value of the object.", - "fullName": "Maximum value", - "functionType": "ExpressionAndCondition", - "group": "Resource bar configuration", - "name": "MaxValue", - "sentence": "the maximum value", - "events": [ + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Pass configuration to the behavior", + "comment2": "" + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "PanelSpriteSlider::PanelSpriteSlider::SetMaxValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyMaxValue()", + "Object.PropertyMaxValue()" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::SetValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyInitialValue()", + "Object.PropertyInitialValue()" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateThumbPosition" }, "parameters": [ - "Object.Behavior::PropertyMaxValue()" + "Object", + "" ] } ] } ], - "expressionType": { - "type": "expression" - }, "parameters": [ { "description": "Object", "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "TiledUnitsBar::ResourceBar", - "type": "behavior" } ], "objectGroups": [] }, { "fullName": "", - "functionType": "ActionWithOperator", - "getterName": "MaxValue", - "name": "SetMaxValue", + "functionType": "Action", + "name": "onHotReloading", "sentence": "", "events": [ { @@ -2491,597 +11538,601 @@ "actions": [ { "type": { - "value": "TiledUnitsBar::ResourceBar::SetPropertyMaxValue" + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateLayout" + }, + "parameters": [ + "Object", + "" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::SetMaxValue" }, "parameters": [ "Object", - "Behavior", "=", - "GetArgumentAsNumber(\"Value\")" + "Object.PropertyMaxValue()", + "Object.PropertyMaxValue()" ] } ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "TiledUnitsBar::ResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the bar is empty.", - "fullName": "Empty", - "functionType": "Condition", - "name": "IsEmpty", - "sentence": "_PARAM0_ bar is empty", - "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "TiledUnitsBar::ResourceBar::PropertyValue" + "value": "PanelSpriteSlider::PanelSpriteSlider::PropertyInitialValue" }, "parameters": [ "Object", - "Behavior", - "=", - "0" + "!=", + "Object.PropertyPreviousInitialValue()" ] } ], "actions": [ { "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "TiledUnitsBar::ResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the bar is full.", - "fullName": "Full", - "functionType": "Condition", - "name": "IsFull", - "sentence": "_PARAM0_ bar is full", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "TiledUnitsBar::ResourceBar::PropertyValue" + "value": "PanelSpriteSlider::PanelSpriteSlider::SetPropertyPreviousInitialValue" }, "parameters": [ "Object", - "Behavior", "=", - "Object.Behavior::PropertyMaxValue()" + "Object.PropertyInitialValue()" ] - } - ], - "actions": [ + }, { "type": { - "value": "SetReturnBoolean" + "value": "PanelSpriteSlider::PanelSpriteSlider::SetValue" }, "parameters": [ - "True" + "Object", + "=", + "Object.PropertyInitialValue()", + "Object.PropertyInitialValue()" ] } ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "TiledUnitsBar::ResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "the previous high value of the resource bar before the current change.", - "fullName": "Previous high value", - "functionType": "ExpressionAndCondition", - "name": "PreviousHighValue", - "sentence": "the previous high value", - "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "PanelSpriteObject::Width" }, "parameters": [ - "Object.Behavior::PropertyPreviousHighValue()" + "Resource", + "=", + "Object.WidthForValue()" ] } ] } ], - "expressionType": { - "type": "expression" - }, "parameters": [ { "description": "Object", "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "TiledUnitsBar::ResourceBar", - "type": "behavior" } ], "objectGroups": [] }, { - "description": "Force the previous resource value to update to the current one.", - "fullName": "Update previous value", + "fullName": "", "functionType": "Action", - "name": "UpdatePreviousHighValue", - "sentence": "Update the previous resource value of _PARAM0_", + "name": "doStepPostEvents", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "inverted": true, + "value": "DraggableBehavior::Dragged" + }, + "parameters": [ + "Thumb", + "Draggable" + ] + }, + { + "type": { + "value": "MouseButtonReleased" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "SourisSurObjet" + }, + "parameters": [ + "Background", + "", + "", + "" + ] + } + ], "actions": [ { "type": { - "value": "TiledUnitsBar::ResourceBar::SetPropertyPreviousHighValue" + "value": "PanelSpriteSlider::Slider::SetValue" }, "parameters": [ - "Object", - "Behavior", + "Resource", + "Slider", "=", - "Object.Behavior::PropertyValue()" + "Resource.Slider::MinValue() + Resource.Slider::Size() * (MouseX() - Object.FullBarLeft()) / Object.FullBarWidth()", + "" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateThumbPosition" + }, + "parameters": [ + "Object", + "" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::PropertyShowLabel" + }, + "parameters": [ + "Object" + ] + } + ], + "actions": [ + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Label", + "" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Label", + "\"HideBack\"" + ] + } ] } ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "TiledUnitsBar::ResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "the previous high value conservation duration (in seconds) of the object.", - "fullName": "Previous high value conservation duration", - "functionType": "ExpressionAndCondition", - "group": "Resource bar configuration", - "name": "PreviousHighValueDuration", - "sentence": "the previous high value conservation duration", - "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "conditions": [ { "type": { - "value": "SetReturnNumber" + "value": "CompareObjectTimer" }, "parameters": [ - "Object.Behavior::PropertyPreviousHighValueDuration()" + "Label", + "\"HideBack\"", + ">", + "0.5" ] } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "TiledUnitsBar::ResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "fullName": "", - "functionType": "ActionWithOperator", - "getterName": "PreviousHighValueDuration", - "name": "SetPreviousHighValueDuration", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + ], "actions": [ { "type": { - "value": "TiledUnitsBar::ResourceBar::SetPropertyPreviousHighValueDuration" + "value": "Cache" }, "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" + "Label" + ] + }, + { + "type": { + "value": "RemoveObjectTimer" + }, + "parameters": [ + "Label", + "\"HideBack\"" ] } ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "TiledUnitsBar::ResourceBar", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the resource value is changing.", - "fullName": "Value is changing", - "functionType": "Condition", - "name": "IsChanging", - "sentence": "_PARAM0_ value is changing", - "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "TiledUnitsBar::ResourceBar::PreviousHighValue" + "value": "DraggableBehavior::Dragged" }, "parameters": [ - "Object", - "Behavior", - "!=", - "Object.Behavior::PropertyValue()", + "Thumb", + "Draggable" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::Slider::SetValue" + }, + "parameters": [ + "Resource", + "Slider", + "=", + "Resource.Slider::MinValue() + Resource.Slider::Size() * (Thumb.CenterX() - Object.FullBarLeft()) / Object.FullBarWidth()", "" ] }, { "type": { - "value": "CompareObjectTimer" + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateThumbPosition" }, "parameters": [ "Object", - "\"__ResourceBar.LastValueChange\"", - "<=", - "Object.Behavior::PropertyPreviousHighValueDuration()" + "" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::PropertyShowLabel" + }, + "parameters": [ + "Object" + ] + } + ], + "actions": [ + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Label", + "" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableBehavior::Dropped" + }, + "parameters": [ + "Thumb", + "Draggable" ] } ], "actions": [ { "type": { - "value": "SetReturnBoolean" + "value": "ResetObjectTimer" }, "parameters": [ - "True" + "Label", + "\"HideBack\"" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Resize", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Children instances must be resized when the parent size change:\n- backgrounds is resized to take the full dimensions of the button\n- the label is put back at the center of the bar\n\nThe scale is set back to 1 because it means that the parent instance has the same dimensions as the union of its children instances.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Width()", + "!=", + "max(Background.BoundingBoxRight(), max(Label.BoundingBoxRight(), Thumb.BoundingBoxRight())) - min(Background.BoundingBoxLeft(), min(Label.BoundingBoxLeft(), Thumb.BoundingBoxLeft()))" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Height()", + "!=", + "max(Background.BoundingBoxBottom(), max(Label.BoundingBoxBottom(), Thumb.BoundingBoxBottom())) - min(Background.BoundingBoxTop(), min(Label.BoundingBoxTop(), Thumb.BoundingBoxTop()))" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Background", + "Width", + "=", + "Object.Width()" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Background", + "Height", + "=", + "Object.Height()" + ] + }, + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "ToString(max(Background.BoundingBoxBottom(), max(Label.BoundingBoxBottom(), Thumb.BoundingBoxBottom())) - min(Background.BoundingBoxTop(), min(Label.BoundingBoxTop(), Thumb.BoundingBoxTop())))", + "", + "" + ] + }, + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Height: \" + ToString(Background.Height()) + \" --> \" + ToString(Object.Height())", + "", + "" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::Scale" + }, + "parameters": [ + "Object", + "=", + "1" + ] + }, + { + "type": { + "value": "PanelSpriteObject::Width" + }, + "parameters": [ + "Background", + "=", + "Background.Variable(Width)" + ] + }, + { + "type": { + "value": "PanelSpriteObject::Height" + }, + "parameters": [ + "Background", + "=", + "Background.Variable(Height)" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateLayout" + }, + "parameters": [ + "Object", + "" + ] + } ] } - ] + ], + "parameters": [] } ], "parameters": [ { "description": "Object", "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "TiledUnitsBar::ResourceBar", - "type": "behavior" } ], "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "1", - "type": "Number", - "label": "Value", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "Value" - }, - { - "value": "3", - "type": "Number", - "label": "Maximum value", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "MaxValue" - }, - { - "value": "", - "type": "Number", - "label": "Previous high value", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "PreviousHighValue" }, { - "value": "1", - "type": "Number", - "label": "Previous high value conservation duration (in seconds)", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "PreviousHighValueDuration" - } - ], - "sharedPropertyDescriptors": [] - } - ], - "eventsBasedObjects": [ - { - "defaultName": "ResourceBar", - "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", - "fullName": "Resource bar (using separate units)", - "name": "TiledUnitsBar", - "eventsFunctions": [ - { - "fullName": "", + "description": "Center the bar according to the button configuration. This is used in doStepPostEvents when the button is resized.", + "fullName": "Update layout", "functionType": "Action", - "name": "onCreated", - "sentence": "", + "name": "UpdateLayout", + "private": true, + "sentence": "Update layout of _PARAM0_", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "This allows to detect a change of \"intitial value\" on hot reload.", - "comment2": "" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "TiledUnitsBar::TiledUnitsBar::SetPropertyPreviousInitialValue" + "value": "MettreXY" }, "parameters": [ - "Object", + "Resource", "=", - "Object.PropertyInitialValue()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Create one background instance for of each state.\nOnly the instance for the current state is shown.", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Create" - }, - "parameters": [ - "", - "Background", - "0", - "0", - "" + "Object.PropertyBarLeftPadding()", + "=", + "Object.PropertyBarTopPadding()" ] }, { "type": { - "value": "Create" + "value": "PanelSpriteObject::Width" }, "parameters": [ - "", - "Bar", - "0", - "0", - "" + "Resource", + "=", + "Object.WidthForValue()" ] }, { "type": { - "value": "Create" + "value": "PanelSpriteObject::Height" }, "parameters": [ - "", "Resource", - "0", - "0", - "" + "=", + "round(Background.Height() - Object.PropertyBarTopPadding() - Object.PropertyBarBottomPadding())" ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { "type": { - "value": "ChangePlan" + "value": "MettreXY" }, "parameters": [ - "Background", + "Label", "=", - "1" + "Object.PropertyBarLeftPadding()", + "=", + "Object.PropertyBarTopPadding()" ] }, { "type": { - "value": "ChangePlan" + "value": "TextObject::WrappingWidth" }, "parameters": [ - "Bar", + "Label", "=", - "2" + "Object.FullBarWidth()" ] }, { "type": { - "value": "ChangePlan" + "value": "SetCenterY" }, "parameters": [ - "Resource", + "Label", "=", - "3" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "TiledUnitsBar::TiledUnitsBar::PropertyShowBackground" - }, - "parameters": [ - "Object" + "round(Resource.CenterY())" ] - } - ], - "actions": [ + }, { "type": { - "value": "Cache" + "value": "SetCenterX" }, "parameters": [ - "Background" + "Label", + "=", + "round(Background.CenterX() + (Object.PropertyBarLeftPadding() - Object.PropertyBarRightPadding()) / 2)" ] } ] - }, + } + ], + "parameters": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Pass configuration to the behavior", - "comment2": "" - }, + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the value of the object.", + "fullName": "Value", + "functionType": "ExpressionAndCondition", + "group": "Resource bar", + "name": "Value", + "sentence": "the value", + "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "TiledUnitsBar::TiledUnitsBar::SetValue" - }, - "parameters": [ - "Object", - "=", - "Object.PropertyInitialValue()", - "" - ] - }, - { - "type": { - "value": "TiledUnitsBar::TiledUnitsBar::SetMaxValue" + "value": "SetReturnNumber" }, "parameters": [ - "Object", - "=", - "Object.PropertyMaxValue()", - "" + "Resource.Slider::Value()" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", "type": "object" } ], @@ -3089,8 +12140,9 @@ }, { "fullName": "", - "functionType": "Action", - "name": "onHotReloading", + "functionType": "ActionWithOperator", + "getterName": "Value", + "name": "SetValue", "sentence": "", "events": [ { @@ -3099,60 +12151,37 @@ "actions": [ { "type": { - "value": "TiledUnitsBar::TiledUnitsBar::CenterBar" + "value": "PanelSpriteSlider::Slider::SetValue" }, "parameters": [ - "Object", + "Resource", + "Slider", + "=", + "GetArgumentAsNumber(\"Value\")", "" ] }, { "type": { - "value": "TiledUnitsBar::TiledUnitsBar::SetMaxValue" - }, - "parameters": [ - "Object", - "=", - "Object.PropertyMaxValue()", - "Object.PropertyMaxValue()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "TiledUnitsBar::TiledUnitsBar::PropertyInitialValue" - }, - "parameters": [ - "Object", - "!=", - "Object.PropertyPreviousInitialValue()" - ] - } - ], - "actions": [ - { - "type": { - "value": "TiledUnitsBar::TiledUnitsBar::SetPropertyPreviousInitialValue" + "value": "Tween::AddObjectWidthTween" }, "parameters": [ - "Object", - "=", - "Object.PropertyInitialValue()" + "Resource", + "Tween", + "\"ChangeValue\"", + "Object.WidthForValue()", + "\"linear\"", + "Object.PropertyEasingDuration() * 1000", + "" ] }, { "type": { - "value": "TiledUnitsBar::TiledUnitsBar::SetValue" + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateLabel" }, "parameters": [ "Object", - "=", - "Object.PropertyInitialValue()", - "Object.PropertyInitialValue()" + "" ] } ] @@ -3162,157 +12191,60 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" } ], "objectGroups": [] }, { - "fullName": "", - "functionType": "Action", - "name": "doStepPostEvents", - "sentence": "", + "description": "the maximum value of the object.", + "fullName": "Maximum value", + "functionType": "ExpressionAndCondition", + "group": "Resource bar configuration", + "name": "MaxValue", + "sentence": "the maximum value", "events": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Resize", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "SetReturnNumber" }, - "comment": "Children instances must be resized when the button size change:\n- backgrounds for each state are resized to take the full dimensions of the button\n- the label is put back at the center of the button\n\nThe scale is set back to 1 because it means that the parent instance has the same dimensions as the union of its children instances.", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "Object.Width()", - "!=", - "max(Background.BoundingBoxRight(), Bar.BoundingBoxRight()) - min(Background.BoundingBoxLeft(), Bar.BoundingBoxLeft())" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "Object.Height()", - "!=", - "max(Background.BoundingBoxBottom(), Bar.BoundingBoxBottom()) - min(Background.BoundingBoxTop(), Bar.BoundingBoxTop())" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Background", - "Width", - "=", - "Object.Width()" - ] - }, - { - "type": { - "value": "ModVarObjet" - }, - "parameters": [ - "Background", - "Height", - "=", - "Object.Height()" - ] - }, - { - "type": { - "value": "TiledUnitsBar::Scale" - }, - "parameters": [ - "Object", - "=", - "1" - ] - }, - { - "type": { - "value": "PanelSpriteObject::Width" - }, - "parameters": [ - "Background", - "=", - "Background.Variable(Width)" - ] - }, - { - "type": { - "value": "PanelSpriteObject::Height" - }, - "parameters": [ - "Background", - "=", - "Background.Variable(Height)" - ] - }, - { - "type": { - "value": "TiledUnitsBar::TiledUnitsBar::CenterBar" - }, - "parameters": [ - "Object", - "" - ] - } + "parameters": [ + "Resource.Slider::PropertyMaxValue()" ] } - ], - "parameters": [] + ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", "type": "object" } ], "objectGroups": [] }, { - "description": "Center the bar according to the button configuration. This is used in doStepPostEvents when the button is resized.", "fullName": "", - "functionType": "Action", - "name": "CenterBar", - "private": true, - "sentence": "Center the bar of _PARAM0_", + "functionType": "ActionWithOperator", + "getterName": "MaxValue", + "name": "SetMaxValue", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -3320,74 +12252,129 @@ "actions": [ { "type": { - "value": "SetCenter" + "value": "PanelSpriteSlider::Slider::SetMaxValue" }, "parameters": [ - "Bar", - "=", - "Background.CenterX()", + "Resource", + "Slider", "=", - "Background.CenterY()" + "GetArgumentAsNumber(\"Value\")", + "" ] }, { "type": { - "value": "MettreX" + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateLabel" }, "parameters": [ - "Bar", - "+", - "0" + "Object", + "" ] }, { "type": { - "value": "MettreY" + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateLayout" }, "parameters": [ - "Bar", - "+", - "0" + "Object", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "Value width", + "functionType": "Expression", + "name": "WidthForValue", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "round(Object.FullBarWidth() * Resource.ResourceBar::Value() / Resource.ResourceBar::MaxValue())" ] } ] - }, + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Expression", + "name": "FullBarWidth", + "private": true, + "sentence": "", + "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "MettreXY" + "value": "SetReturnNumber" }, "parameters": [ - "Resource", - "=", - "Bar.X()", - "=", - "Bar.Y()" + "Background.Width() - Object.PropertyBarLeftPadding() - Object.PropertyBarRightPadding()" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", "type": "object" } ], "objectGroups": [] }, { - "description": "the value of the object.", - "fullName": "Value", - "functionType": "ExpressionAndCondition", - "group": "Resource bar", - "name": "Value", - "sentence": "the value", + "fullName": "", + "functionType": "Expression", + "name": "FullBarRight", + "private": true, + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -3398,7 +12385,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Resource.ResourceBar::Value()" + "Background.Width() - Object.PropertyBarRightPadding()" ] } ] @@ -3411,7 +12398,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", "type": "object" } ], @@ -3419,9 +12406,9 @@ }, { "fullName": "", - "functionType": "ActionWithOperator", - "getterName": "Value", - "name": "SetValue", + "functionType": "Expression", + "name": "FullBarLeft", + "private": true, "sentence": "", "events": [ { @@ -3430,120 +12417,139 @@ "actions": [ { "type": { - "value": "PanelSpriteContinuousBar::ResourceBar::SetValue" - }, - "parameters": [ - "Resource", - "ResourceBar", - "=", - "GetArgumentAsNumber(\"Value\")", - "" - ] - }, - { - "type": { - "value": "TiledSpriteObject::Width" + "value": "SetReturnNumber" }, "parameters": [ - "Resource", - "=", - "Resource.ResourceBar::Value() * Object.PropertyUnitWidth()" + "Object.PropertyBarLeftPadding()" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", - "type": "behavior" } ], "objectGroups": [] }, { - "description": "the maximum value of the object.", - "fullName": "Maximum value", - "functionType": "ExpressionAndCondition", + "description": "Check if the label is shown.", + "fullName": "Label is shown", + "functionType": "Condition", "group": "Resource bar configuration", - "name": "MaxValue", - "sentence": "the maximum value", + "name": "IsLabelShown", + "sentence": "_PARAM0_ label is shown", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::PropertyShowLabel" + }, + "parameters": [ + "Object" + ] + } + ], "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "SetReturnBoolean" }, "parameters": [ - "Resource.ResourceBar::PropertyMaxValue()" + "True" ] } ] } ], - "expressionType": { - "type": "expression" - }, "parameters": [ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", "type": "object" } ], "objectGroups": [] }, { - "fullName": "", - "functionType": "ActionWithOperator", - "getterName": "MaxValue", - "name": "SetMaxValue", - "sentence": "", + "description": "Show (or hide) the label on the bar.", + "fullName": "Show label", + "functionType": "Action", + "group": "Resource bar configuration", + "name": "SetLabelShown", + "sentence": "Show the label of _PARAM0_: _PARAM1_", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], "actions": [ { "type": { - "value": "PanelSpriteContinuousBar::ResourceBar::SetMaxValue" + "value": "PanelSpriteSlider::PanelSpriteSlider::SetPropertyShowLabel" }, "parameters": [ - "Resource", - "ResourceBar", - "=", - "GetArgumentAsNumber(\"Value\")", - "" + "Object", + "no" ] }, { "type": { - "value": "TiledSpriteObject::Width" + "value": "Cache" }, "parameters": [ - "Bar", - "=", - "Object.PropertyMaxValue() * Object.PropertyUnitWidth()" + "Label" ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "TiledUnitsBar::TiledUnitsBar::CenterBar" + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::SetPropertyShowLabel" }, "parameters": [ "Object", + "yes" + ] + }, + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Label", "" ] } @@ -3554,47 +12560,37 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", "type": "object" }, { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "PanelSpriteContinuousBar::ResourceBar", - "type": "behavior" + "description": "Show the label", + "name": "Value", + "type": "yesorno" } ], "objectGroups": [] }, { - "description": "Check if the bar is empty.", - "fullName": "Empty", - "functionType": "Condition", - "group": "Resource bar", - "name": "IsEmpty", - "sentence": "_PARAM0_ bar is empty", + "description": "Update the text that display the current value and maximum value.", + "fullName": "Update label", + "functionType": "Action", + "name": "UpdateLabel", + "private": true, + "sentence": "Update label of _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "PanelSpriteContinuousBar::ResourceBar::IsEmpty" - }, - "parameters": [ - "Resource", - "ResourceBar", - "=" - ] - } - ], + "conditions": [], "actions": [ { "type": { - "value": "SetReturnBoolean" + "value": "TextObject::String" }, "parameters": [ - "True" + "Label", + "=", + "ToString(Object.Value())" ] } ] @@ -3604,41 +12600,93 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", "type": "object" } ], "objectGroups": [] }, { - "description": "Check if the bar is full.", - "fullName": "Full", - "functionType": "Condition", - "group": "Resource bar", - "name": "IsFull", - "sentence": "_PARAM0_ bar is full", + "fullName": "Update thumb position", + "functionType": "Action", + "name": "UpdateThumbPosition", + "private": true, + "sentence": "Update the thumb position of _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteObject::Width" + }, + "parameters": [ + "Resource", + "=", + "Object.FullBarWidth() * (Resource.Slider::Value() - Resource.Slider::MinValue()) / Resource.Slider::Size()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetCenterX" + }, + "parameters": [ + "Thumb", + "=", + "Object.FullBarLeft() + Resource.Width()" + ] + }, + { + "type": { + "value": "SetCenterY" + }, + "parameters": [ + "Thumb", + "=", + "Resource.CenterY()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { "type": { - "value": "PanelSpriteContinuousBar::ResourceBar::IsFull" + "value": "TextObject::String" }, "parameters": [ - "Resource", - "ResourceBar", - "=" + "Label", + "=", + "ToString(Object.Value())" ] - } - ], - "actions": [ + }, { "type": { - "value": "SetReturnBoolean" + "value": "SetCenterX" }, "parameters": [ - "True" + "Label", + "=", + "Thumb.CenterX()" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Label", + "=", + "Thumb.Y() - Label.Height() - 8" ] } ] @@ -3648,200 +12696,13 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "TiledUnitsBar::TiledUnitsBar", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", "type": "object" } ], "objectGroups": [] } ], - "propertyDescriptors": [ - { - "value": "3", - "type": "Number", - "label": "Maximum value", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "MaxValue" - }, - { - "value": "3", - "type": "Number", - "label": "Initial value", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "InitialValue" - }, - { - "value": "", - "type": "Number", - "label": "", - "description": "It's used to detect a change at hot reload.", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "PreviousInitialValue" - }, - { - "value": "24", - "type": "Number", - "label": "Unit width", - "description": "How much pixels to show for a value of 1.", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "UnitWidth" - }, - { - "value": "true", - "type": "Boolean", - "label": "Show the background", - "description": "", - "group": "", - "extraInformation": [ - "Background" - ], - "hidden": false, - "name": "ShowBackground" - }, - { - "value": "0", - "type": "Number", - "label": "Bar left margin", - "description": "", - "group": "", - "extraInformation": [ - "Resource", - "Bar" - ], - "hidden": false, - "name": "BarLeftPadding" - }, - { - "value": "0", - "type": "Number", - "label": "Bar right margin", - "description": "", - "group": "", - "extraInformation": [ - "Resource", - "Bar" - ], - "hidden": false, - "name": "BarRightPadding" - }, - { - "value": "Center", - "type": "String", - "label": "", - "description": "Only used by the scene editor.", - "group": "", - "extraInformation": [ - "Resource", - "Bar" - ], - "hidden": true, - "name": "BarVerticalAnchorOrigin" - }, - { - "value": "Center", - "type": "String", - "label": "", - "description": "Only used by the scene editor.", - "group": "", - "extraInformation": [ - "Background" - ], - "hidden": true, - "name": "BarVerticalAnchorTarget" - } - ], - "objects": [ - { - "assetStoreId": "", - "height": 32, - "name": "Resource", - "tags": "", - "texture": "", - "type": "TiledSpriteObject::TiledSprite", - "width": 32, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "ResourceBar", - "type": "PanelSpriteContinuousBar::ResourceBar", - "Value": 1, - "MaxValue": 3, - "PreviousValue": 0 - } - ] - }, - { - "assetStoreId": "", - "height": 32, - "name": "Bar", - "tags": "", - "texture": "", - "type": "TiledSpriteObject::TiledSprite", - "width": 32, - "variables": [], - "effects": [], - "behaviors": [] - }, - { - "assetStoreId": "", - "bottomMargin": 0, - "height": 32, - "leftMargin": 0, - "name": "Background", - "rightMargin": 0, - "tags": "", - "texture": "", - "tiled": true, - "topMargin": 0, - "type": "PanelSpriteObject::PanelSprite", - "width": 32, - "variables": [], - "effects": [], - "behaviors": [] - } - ] - } - ] - }, - { - "author": "", - "category": "User interface", - "extensionNamespace": "", - "fullName": "Slider (tiled)", - "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", - "name": "PanelSpriteSlider", - "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/UI Essentials/1678c39a3b2bd3df4f82a8a293770db4986a6bcfd3f78e738ddfc86e39176423_UI Essentials_sliders_options.svg", - "shortDescription": "", - "version": "1.0.0", - "description": "", - "origin": { - "identifier": "ResourceBar", - "name": "gdevelop-extension-store" - }, - "tags": [], - "authorIds": [], - "dependencies": [], - "eventsFunctions": [], - "eventsBasedBehaviors": [], - "eventsBasedObjects": [ - { - "defaultName": "Slider", - "description": "", - "fullName": "Slider", - "name": "PanelSpriteSlider", - "eventsFunctions": [], "propertyDescriptors": [ { "value": "0", @@ -3895,6 +12756,16 @@ "hidden": false, "name": "BarBottomPadding" }, + { + "value": "", + "type": "Number", + "label": "Minimum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "MinValue" + }, { "value": "3", "type": "Number", @@ -3915,6 +12786,16 @@ "hidden": false, "name": "InitialValue" }, + { + "value": "", + "type": "Number", + "label": "", + "description": "It's used to detect a change at hot reload.", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "PreviousInitialValue" + }, { "value": "true", "type": "Boolean", @@ -3990,29 +12871,37 @@ "width": 32, "variables": [], "effects": [], - "behaviors": [] + "behaviors": [ + { + "name": "Draggable", + "type": "DraggableBehavior::Draggable", + "checkCollisionMask": false + } + ] }, { "assetStoreId": "", + "bottomMargin": 0, "height": 32, + "leftMargin": 0, "name": "Resource", + "rightMargin": 0, "tags": "", "texture": "", - "type": "TiledSpriteObject::TiledSprite", + "tiled": true, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", "width": 32, "variables": [], "effects": [], "behaviors": [ { - "name": "ResourceBar", - "type": "PanelSpriteContinuousBar::ResourceBar", - "Value": 1, - "MaxValue": 3, - "PreviousValue": 0 - }, - { - "name": "Tween", - "type": "Tween::TweenBehavior" + "name": "Slider", + "type": "PanelSpriteSlider::Slider", + "Value": 0, + "MinValue": 0, + "MaxValue": 100, + "StepSize": 1 } ] }, @@ -5131,7 +14020,7 @@ "actions": [ { "type": { - "value": "TiledSpriteObject::Width" + "value": "PanelSpriteObject::Width" }, "parameters": [ "Resource", From b8a11630b0969b8830835214633ab2ba01548bca Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 16 Dec 2022 19:54:58 +0000 Subject: [PATCH 43/98] Optimised images with calibre/image-actions --- .../assets/Yellow Button_Hovered.png | Bin 2270 -> 1797 bytes .../assets/Yellow Button_Idle.png | Bin 2285 -> 1812 bytes .../assets/Yellow Button_Pressed.png | Bin 2187 -> 1791 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/resource-bar/assets/Yellow Button_Hovered.png b/examples/resource-bar/assets/Yellow Button_Hovered.png index d575c5e6104c3f4f77ab0e19c6f700bef0819c25..9bb3ab612e8fd2b7c53581a07b6dfe5ce4b5b065 100644 GIT binary patch literal 1797 zcmbVNX;70_7k=|*VM+L?B5R=p+gc3B+KLb$q^v3m;zlH3S~i1ASX2-u@KUM;L<2@3 z0okNdSw7MR5!sSZP#VP`62Ty{l~jTO!zPFcX`KG(bo%F;@5jC8nP<+NXU;kIoSPH8 z-(OGHOcwwEz1;ymApii=Kp;*VrMVBrG3GT!Cq96b1OOI4d^j+MbRil5P%XQCh=)=} z=0?L#F{90U7x;OBc}H&`hz14&XnT+F3+RN(oF7uKl|5m!?2iP9&wG5}zhkTBv~!Gc z6IKPa4%$EGINekDQ3m6+3!3Fm&c8eoI$|->$mkywEtI#NnGGDDd%vy1_BC~yn$Gup zv*hU;b5XySy_e67seYCOvuHK8|BX#=v77esz%NVVcLv_3O>+i$fY{Pac2uB z@8);76i_q9-u283{3MR=cSM;gG6VY)4C^x<)Fb?sw-fgXkpxcChR^SN_go==LxEL1 z)?OEJmdFMQvWa*wi!RbyEe{JzZL7dnA4+Wx5t`lF%&>XZ8BqJ&{MJp7Qpd_;H?aFY zudt7K67`GErseRI-f+-LB5e~9QY92QF?`&!YO$3tYG2|(Qg#odr8q;ml}#*iW0NeQ zq?|u{&dnh{l5g9QHh+9{I+B`=E0mp%=d-A#GpA7Iw*wCExwW%3v9$B$?X6mMWlhkP zdT2&E^_2Y*DY#*{h_puB|w*V=Xa3iJr5t`0dBm|Dc%+qSpg*UFnBY@c0vno*}nKbWWc$KFb74IrchREF>?uEtlCe zZ$jy?iu}%8in^GW{Jr<09UK`*D1aJ@bIkw9>_b4Zq{riA8B=IJ35kE+2CS)X@a1>- z;sc>37@?hND_rw>ID6@*tt6zxE}B#C6%{wwxXZ68E&Fu07n1g7N6gu**KX>Jb1YSN z8|g^t$((h4i{bn62h@3S^bVLneUp>#TIR7-7{T;ix?lcFr;53210)rv{3jUCTGRY% Oz;56DK8;^fzWWmkKQFxi literal 2270 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 diff --git a/examples/resource-bar/assets/Yellow Button_Idle.png b/examples/resource-bar/assets/Yellow Button_Idle.png index b8b5b35afdfca3753c93e298416b3fd085d2922d..86bf6cf37909a0bf032238b61f011f67f411a146 100644 GIT binary patch literal 1812 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 From fce34473ce891b717ce732bb3347ff81196978ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Sat, 17 Dec 2022 17:23:30 +0100 Subject: [PATCH 44/98] Add properties for the slider. --- examples/resource-bar/game.json | 2492 +++++++++++++++++++++++++------ 1 file changed, 2062 insertions(+), 430 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index a34d58824..cfdf8a732 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -646,7 +646,7 @@ "gridColor": 10401023, "gridAlpha": 0.8, "snap": false, - "zoomFactor": 1.960000134277341, + "zoomFactor": 1.1600001617431615, "windowMask": false }, "objectsGroups": [], @@ -958,7 +958,7 @@ "italic": false, "smoothed": true, "underlined": false, - "string": "", + "string": "It displays the value when it changes.", "font": "", "textAlignment": "", "characterSize": 20, @@ -10944,12 +10944,12 @@ "objectGroups": [] }, { - "description": "the minValue of the object.", - "fullName": "MinValue", + "description": "the minimum value of the object.", + "fullName": "Minimum value", "functionType": "ExpressionAndCondition", "group": "Resource bar configuration", "name": "MinValue", - "sentence": "the minValue", + "sentence": "the minimum value", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -11240,32 +11240,1429 @@ { "value": "0", "type": "Number", + "label": "Minimum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "MinValue" + }, + { + "value": "1", + "type": "Number", + "label": "Maximum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "MaxValue" + }, + { + "value": "0", + "type": "Number", + "label": "Step size", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "StepSize" + } + ], + "sharedPropertyDescriptors": [] + }, + { + "description": "The finite state machine used internally by the button object.", + "fullName": "Button finite state machine", + "name": "ButtonFSM", + "objectType": "", + "private": true, + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "We don't use the touch capability condition because the device could have both touch and cursor.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::AnyTouchPressed" + }, + "parameters": [ + "", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyShouldCheckHovering" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Finite state machine", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "The \"Validated\" state only last one frame.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Check position", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure the cursor position is only checked once per frame.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PanelSpriteButton::AnyTouchPressed" + }, + "parameters": [ + "", + "" + ] + }, + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::ShouldCheckMousePosition" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "SourisSurObjet" + }, + "parameters": [ + "Object", + "", + "no", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Touches are always pressed, so ShouldCheckHovering doesn't matter.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + }, + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "TouchX(Object.Behavior::PropertyTouchId(), Object.Layer(), 0)", + "TouchY(Object.Behavior::PropertyTouchId(), Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Handle touch start", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "HasAnyTouchStarted" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyIndex" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "StartedTouchCount()", + "conditions": [], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "TouchX(StartedTouchId(Object.Behavior::PropertyIndex()), Object.Layer(), 0)", + "TouchY(StartedTouchId(Object.Behavior::PropertyIndex()), Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "StartedTouchId(Object.Behavior::PropertyIndex())" + ] + }, + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + }, + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyIndex" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Ignore mouse events when a touch is active because the mouse is probably an echo of touch events.\nThe mouse press could be a touch that has not the right TouchId.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "MouseButtonPressed" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PanelSpriteButton::AnyTouchPressed" + }, + "parameters": [ + "", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "The trigger once must be before the state condition to detect a new press.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + }, + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Apply position changes", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PanelSpriteButton::ButtonFSM::PropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "inverted": true, + "value": "PanelSpriteButton::ButtonFSM::PropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "MouseButtonPressed" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Handle touch end", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Ignore mouse events when a touch is active because the mouse is probably an echo of touch events.\nThe mouse release could be a touch release that has not the right TouchId.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "MouseButtonReleased" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "inverted": true, + "value": "PanelSpriteButton::AnyTouchPressed" + }, + "parameters": [ + "", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + }, + { + "type": { + "inverted": true, + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "HasTouchEnded" + }, + "parameters": [ + "", + "Object.Behavior::PropertyTouchId()" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + }, + { + "type": { + "inverted": true, + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is not used.", + "fullName": "Is idle", + "functionType": "Condition", + "name": "IsIdle", + "sentence": "_PARAM0_ is idle", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button was just clicked.", + "fullName": "Is clicked", + "functionType": "Condition", + "name": "IsClicked", + "sentence": "_PARAM0_ is clicked", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the cursor is hovered over the button.", + "fullName": "Is hovered", + "functionType": "Condition", + "name": "IsHovered", + "sentence": "_PARAM0_ is hovered", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is either hovered or pressed but not hovered.", + "fullName": "Is focused", + "functionType": "Condition", + "name": "IsFocused", + "sentence": "_PARAM0_ is focused", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is currently being pressed with mouse or touch.", + "fullName": "Is pressed", + "functionType": "Condition", + "name": "IsPressed", + "sentence": "_PARAM0_ is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "Should check mouse position", + "functionType": "Condition", + "name": "ShouldCheckMousePosition", + "private": true, + "sentence": "_PARAM0_ should check mouse position", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Using a function avoid the OR to unselect Object when the property is not set.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "MouseButtonPressed" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyShouldCheckHovering" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "true", + "type": "Boolean", "label": "", - "description": "", + "description": "Should check hovering", "group": "", "extraInformation": [], - "hidden": false, - "name": "MinValue" + "hidden": true, + "name": "ShouldCheckHovering" }, { - "value": "1", + "value": "Idle", + "type": "Choice", + "label": "State", + "description": "", + "group": "", + "extraInformation": [ + "Idle", + "Hovered", + "PressedInside", + "PressedOutside", + "Validated" + ], + "hidden": true, + "name": "State" + }, + { + "value": "0", "type": "Number", - "label": "Maximum value", + "label": "Touch id", "description": "", "group": "", "extraInformation": [], - "hidden": false, - "name": "MaxValue" + "hidden": true, + "name": "TouchId" }, { - "value": "0", + "value": "", + "type": "Boolean", + "label": "Touch is inside", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TouchIsInside" + }, + { + "value": "", + "type": "Boolean", + "label": "Mouse is inside", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "MouseIsInside" + }, + { + "value": "", "type": "Number", - "label": "Step size", + "label": "", "description": "", "group": "", "extraInformation": [], - "hidden": false, - "name": "StepSize" + "hidden": true, + "name": "Index" } ], "sharedPropertyDescriptors": [] @@ -11484,13 +12881,11 @@ "actions": [ { "type": { - "value": "PanelSpriteSlider::PanelSpriteSlider::SetMaxValue" + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateSliderConfiguration" }, "parameters": [ "Object", - "=", - "Object.PropertyMaxValue()", - "Object.PropertyMaxValue()" + "" ] }, { @@ -11503,15 +12898,6 @@ "Object.PropertyInitialValue()", "Object.PropertyInitialValue()" ] - }, - { - "type": { - "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateThumbPosition" - }, - "parameters": [ - "Object", - "" - ] } ] } @@ -11547,13 +12933,11 @@ }, { "type": { - "value": "PanelSpriteSlider::PanelSpriteSlider::SetMaxValue" + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateSliderConfiguration" }, "parameters": [ "Object", - "=", - "Object.PropertyMaxValue()", - "Object.PropertyMaxValue()" + "" ] } ] @@ -11595,22 +12979,6 @@ ] } ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PanelSpriteObject::Width" - }, - "parameters": [ - "Resource", - "=", - "Object.WidthForValue()" - ] - } - ] } ], "parameters": [ @@ -11630,72 +12998,177 @@ "sentence": "", "events": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Handle touches", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ { - "type": { - "inverted": true, - "value": "DraggableBehavior::Dragged" - }, - "parameters": [ - "Thumb", - "Draggable" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "DraggableBehavior::Dragged" + }, + "parameters": [ + "Thumb", + "Draggable" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::IsClicked" + }, + "parameters": [ + "Background", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::SetValue" + }, + "parameters": [ + "Object", + "=", + "Resource.Slider::MinValue() + Resource.Slider::Size() * (MouseX() - Object.FullBarLeft()) / Object.FullBarWidth()", + "Resource.Slider::MinValue() + Resource.Slider::Size() * (MouseX() - Object.FullBarLeft()) / Object.FullBarWidth()" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::PropertyShowLabelAtChanges" + }, + "parameters": [ + "Object" + ] + } + ], + "actions": [ + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Label", + "" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Label", + "\"HideBack\"" + ] + } + ] + } ] }, { - "type": { - "value": "MouseButtonReleased" - }, - "parameters": [ - "", - "Left" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableBehavior::Dragged" + }, + "parameters": [ + "Thumb", + "Draggable" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::SetValue" + }, + "parameters": [ + "Object", + "=", + "Resource.Slider::MinValue() + Resource.Slider::Size() * (Thumb.CenterX() - Object.FullBarLeft()) / Object.FullBarWidth()", + "Resource.Slider::MinValue() + Resource.Slider::Size() * (Thumb.CenterX() - Object.FullBarLeft()) / Object.FullBarWidth()" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::PropertyShowLabelAtChanges" + }, + "parameters": [ + "Object" + ] + } + ], + "actions": [ + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Label", + "" + ] + } + ] + } ] }, { - "type": { - "value": "SourisSurObjet" - }, - "parameters": [ - "Background", - "", - "", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteSlider::Slider::SetValue" - }, - "parameters": [ - "Resource", - "Slider", - "=", - "Resource.Slider::MinValue() + Resource.Slider::Size() * (MouseX() - Object.FullBarLeft()) / Object.FullBarWidth()", - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableBehavior::Dropped" + }, + "parameters": [ + "Thumb", + "Draggable" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Label", + "\"HideBack\"" + ] + } ] }, - { - "type": { - "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateThumbPosition" - }, - "parameters": [ - "Object", - "" - ] - } - ], - "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "PanelSpriteSlider::PanelSpriteSlider::PropertyShowLabel" + "value": "SourisSurObjet" }, "parameters": [ - "Object" + "Thumb", + "", + "no", + "" ] } ], @@ -11719,131 +13192,44 @@ ] } ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "CompareObjectTimer" - }, - "parameters": [ - "Label", - "\"HideBack\"", - ">", - "0.5" - ] - } - ], - "actions": [ - { - "type": { - "value": "Cache" - }, - "parameters": [ - "Label" - ] - }, - { - "type": { - "value": "RemoveObjectTimer" - }, - "parameters": [ - "Label", - "\"HideBack\"" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableBehavior::Dragged" - }, - "parameters": [ - "Thumb", - "Draggable" - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteSlider::Slider::SetValue" - }, - "parameters": [ - "Resource", - "Slider", - "=", - "Resource.Slider::MinValue() + Resource.Slider::Size() * (Thumb.CenterX() - Object.FullBarLeft()) / Object.FullBarWidth()", - "" - ] }, - { - "type": { - "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateThumbPosition" - }, - "parameters": [ - "Object", - "" - ] - } - ], - "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "PanelSpriteSlider::PanelSpriteSlider::PropertyShowLabel" + "value": "CompareObjectTimer" }, "parameters": [ - "Object" + "Label", + "\"HideBack\"", + ">", + "0.5" ] } ], "actions": [ { "type": { - "value": "Montre" + "value": "Cache" + }, + "parameters": [ + "Label" + ] + }, + { + "type": { + "value": "RemoveObjectTimer" }, "parameters": [ "Label", - "" + "\"HideBack\"" ] } ] } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableBehavior::Dropped" - }, - "parameters": [ - "Thumb", - "Draggable" - ] - } ], - "actions": [ - { - "type": { - "value": "ResetObjectTimer" - }, - "parameters": [ - "Label", - "\"HideBack\"" - ] - } - ] + "parameters": [] }, { "colorB": 228, @@ -11985,6 +13371,50 @@ } ], "parameters": [] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "The parent size is not defined in onCreate so it needs to be done here.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateLayout" + }, + "parameters": [ + "Object", + "" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateThumbPosition" + }, + "parameters": [ + "Object", + "" + ] + } + ] } ], "parameters": [ @@ -11998,12 +13428,12 @@ "objectGroups": [] }, { - "description": "Center the bar according to the button configuration. This is used in doStepPostEvents when the button is resized.", - "fullName": "Update layout", - "functionType": "Action", - "name": "UpdateLayout", - "private": true, - "sentence": "Update layout of _PARAM0_", + "description": "the value of the slider.", + "fullName": "Value", + "functionType": "ExpressionAndCondition", + "group": "Resource bar", + "name": "Value", + "sentence": "the value", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -12011,82 +13441,58 @@ "actions": [ { "type": { - "value": "MettreXY" - }, - "parameters": [ - "Resource", - "=", - "Object.PropertyBarLeftPadding()", - "=", - "Object.PropertyBarTopPadding()" - ] - }, - { - "type": { - "value": "PanelSpriteObject::Width" - }, - "parameters": [ - "Resource", - "=", - "Object.WidthForValue()" - ] - }, - { - "type": { - "value": "PanelSpriteObject::Height" + "value": "SetReturnNumber" }, "parameters": [ - "Resource", - "=", - "round(Background.Height() - Object.PropertyBarTopPadding() - Object.PropertyBarBottomPadding())" + "Resource.Slider::Value()" ] } ] - }, + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "Value", + "name": "SetValue", + "sentence": "", + "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "MettreXY" - }, - "parameters": [ - "Label", - "=", - "Object.PropertyBarLeftPadding()", - "=", - "Object.PropertyBarTopPadding()" - ] - }, - { - "type": { - "value": "TextObject::WrappingWidth" - }, - "parameters": [ - "Label", - "=", - "Object.FullBarWidth()" - ] - }, - { - "type": { - "value": "SetCenterY" + "value": "PanelSpriteSlider::Slider::SetValue" }, "parameters": [ - "Label", + "Resource", + "Slider", "=", - "round(Resource.CenterY())" + "GetArgumentAsNumber(\"Value\")", + "" ] }, { "type": { - "value": "SetCenterX" + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateThumbPosition" }, "parameters": [ - "Label", - "=", - "round(Background.CenterX() + (Object.PropertyBarLeftPadding() - Object.PropertyBarRightPadding()) / 2)" + "Object", + "" ] } ] @@ -12098,17 +13504,23 @@ "name": "Object", "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" } ], "objectGroups": [] }, { - "description": "the value of the object.", - "fullName": "Value", + "description": "the minimum value of the slider.", + "fullName": "Minimum value", "functionType": "ExpressionAndCondition", - "group": "Resource bar", - "name": "Value", - "sentence": "the value", + "group": "Resource bar configuration", + "name": "MinValue", + "sentence": "the minimum value", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -12119,7 +13531,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Resource.Slider::Value()" + "Resource.Slider::MinValue()" ] } ] @@ -12141,8 +13553,8 @@ { "fullName": "", "functionType": "ActionWithOperator", - "getterName": "Value", - "name": "SetValue", + "getterName": "MinValue", + "name": "SetMinValue", "sentence": "", "events": [ { @@ -12151,7 +13563,7 @@ "actions": [ { "type": { - "value": "PanelSpriteSlider::Slider::SetValue" + "value": "PanelSpriteSlider::Slider::SetMinValue" }, "parameters": [ "Resource", @@ -12163,21 +13575,16 @@ }, { "type": { - "value": "Tween::AddObjectWidthTween" + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateLayout" }, "parameters": [ - "Resource", - "Tween", - "\"ChangeValue\"", - "Object.WidthForValue()", - "\"linear\"", - "Object.PropertyEasingDuration() * 1000", + "Object", "" ] }, { "type": { - "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateLabel" + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateThumbPosition" }, "parameters": [ "Object", @@ -12204,7 +13611,7 @@ "objectGroups": [] }, { - "description": "the maximum value of the object.", + "description": "the maximum value of the slider.", "fullName": "Maximum value", "functionType": "ExpressionAndCondition", "group": "Resource bar configuration", @@ -12220,7 +13627,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Resource.Slider::PropertyMaxValue()" + "Resource.Slider::MaxValue()" ] } ] @@ -12264,7 +13671,7 @@ }, { "type": { - "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateLabel" + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateLayout" }, "parameters": [ "Object", @@ -12273,7 +13680,7 @@ }, { "type": { - "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateLayout" + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateThumbPosition" }, "parameters": [ "Object", @@ -12300,11 +13707,12 @@ "objectGroups": [] }, { - "fullName": "Value width", - "functionType": "Expression", - "name": "WidthForValue", - "private": true, - "sentence": "", + "description": "the step size of the slider.", + "fullName": "Step size", + "functionType": "ExpressionAndCondition", + "group": "Resource bar configuration", + "name": "StepSize", + "sentence": "the step size", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -12315,7 +13723,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "round(Object.FullBarWidth() * Resource.ResourceBar::Value() / Resource.ResourceBar::MaxValue())" + "Resource.Slider::StepSize()" ] } ] @@ -12336,9 +13744,9 @@ }, { "fullName": "", - "functionType": "Expression", - "name": "FullBarWidth", - "private": true, + "functionType": "ActionWithOperator", + "getterName": "StepSize", + "name": "SetStepSize", "sentence": "", "events": [ { @@ -12347,53 +13755,67 @@ "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "PanelSpriteSlider::Slider::SetStepSize" }, "parameters": [ - "Background.Width() - Object.PropertyBarLeftPadding() - Object.PropertyBarRightPadding()" + "Resource", + "Slider", + "=", + "GetArgumentAsNumber(\"Value\")", + "" ] } ] } ], - "expressionType": { - "type": "expression" - }, "parameters": [ { "description": "Object", "name": "Object", "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" } ], "objectGroups": [] }, { - "fullName": "", - "functionType": "Expression", - "name": "FullBarRight", - "private": true, - "sentence": "", + "description": "Check if the label is shown.", + "fullName": "Label is shown", + "functionType": "Condition", + "group": "Resource bar configuration", + "name": "IsLabelShown", + "sentence": "_PARAM0_ label is shown", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::PropertyShowLabelAtChanges" + }, + "parameters": [ + "Object" + ] + } + ], "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "SetReturnBoolean" }, "parameters": [ - "Background.Width() - Object.PropertyBarRightPadding()" + "True" ] } ] } ], - "expressionType": { - "type": "expression" - }, "parameters": [ { "description": "Object", @@ -12405,67 +13827,185 @@ "objectGroups": [] }, { - "fullName": "", - "functionType": "Expression", - "name": "FullBarLeft", - "private": true, - "sentence": "", + "description": "Show (or hide) the label on the bar.", + "fullName": "Show label", + "functionType": "Action", + "group": "Resource bar configuration", + "name": "SetLabelShown", + "sentence": "Show the label of _PARAM0_: _PARAM1_", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "PanelSpriteSlider::PanelSpriteSlider::SetPropertyShowLabelAtChanges" }, "parameters": [ - "Object.PropertyBarLeftPadding()" + "Object", + "no" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Label" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::SetPropertyShowLabelAtChanges" + }, + "parameters": [ + "Object", + "yes" + ] + }, + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Label", + "" ] } ] } ], - "expressionType": { - "type": "expression" - }, "parameters": [ { "description": "Object", "name": "Object", "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", "type": "object" + }, + { + "description": "Show the label", + "name": "Value", + "type": "yesorno" } ], "objectGroups": [] }, { - "description": "Check if the label is shown.", - "fullName": "Label is shown", - "functionType": "Condition", - "group": "Resource bar configuration", - "name": "IsLabelShown", - "sentence": "_PARAM0_ label is shown", + "description": "Center the bar according to the button configuration. This is used in doStepPostEvents when the button is resized.", + "fullName": "Update layout", + "functionType": "Action", + "name": "UpdateLayout", + "private": true, + "sentence": "Update layout of _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "conditions": [], + "actions": [ { "type": { - "value": "PanelSpriteSlider::PanelSpriteSlider::PropertyShowLabel" + "value": "MettreXY" }, "parameters": [ - "Object" + "Resource", + "=", + "Object.PropertyBarLeftPadding()", + "=", + "Object.PropertyBarTopPadding()" + ] + }, + { + "type": { + "value": "PanelSpriteObject::Width" + }, + "parameters": [ + "Resource", + "=", + "Object.WidthForValue()" + ] + }, + { + "type": { + "value": "PanelSpriteObject::Height" + }, + "parameters": [ + "Resource", + "=", + "round(Background.Height() - Object.PropertyBarTopPadding() - Object.PropertyBarBottomPadding())" ] } - ], + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], "actions": [ { "type": { - "value": "SetReturnBoolean" + "value": "MettreXY" + }, + "parameters": [ + "Label", + "=", + "Object.PropertyBarLeftPadding()", + "=", + "Object.PropertyBarTopPadding()" + ] + }, + { + "type": { + "value": "TextObject::WrappingWidth" + }, + "parameters": [ + "Label", + "=", + "Object.FullBarWidth()" + ] + }, + { + "type": { + "value": "SetCenterY" + }, + "parameters": [ + "Label", + "=", + "round(Resource.CenterY())" + ] + }, + { + "type": { + "value": "SetCenterX" }, "parameters": [ - "True" + "Label", + "=", + "round(Background.CenterX() + (Object.PropertyBarLeftPadding() - Object.PropertyBarRightPadding()) / 2)" ] } ] @@ -12482,75 +14022,86 @@ "objectGroups": [] }, { - "description": "Show (or hide) the label on the bar.", - "fullName": "Show label", + "fullName": "Update thumb position", "functionType": "Action", - "group": "Resource bar configuration", - "name": "SetLabelShown", - "sentence": "Show the label of _PARAM0_: _PARAM1_", + "name": "UpdateThumbPosition", + "private": true, + "sentence": "Update the thumb position of _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "conditions": [], + "actions": [ { "type": { - "inverted": true, - "value": "GetArgumentAsBoolean" + "value": "PanelSpriteObject::Width" }, "parameters": [ - "\"Value\"" + "Resource", + "=", + "Object.FullBarWidth() * (Resource.Slider::Value() - Resource.Slider::MinValue()) / Resource.Slider::Size()" ] } - ], + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], "actions": [ { "type": { - "value": "PanelSpriteSlider::PanelSpriteSlider::SetPropertyShowLabel" + "value": "SetCenterX" }, "parameters": [ - "Object", - "no" + "Thumb", + "=", + "Object.FullBarLeft() + Resource.Width()" ] }, { "type": { - "value": "Cache" + "value": "SetCenterY" }, "parameters": [ - "Label" + "Thumb", + "=", + "Resource.CenterY()" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "conditions": [], + "actions": [ { "type": { - "value": "GetArgumentAsBoolean" + "value": "TextObject::String" }, "parameters": [ - "\"Value\"" + "Label", + "=", + "ToString(Object.Value())" ] - } - ], - "actions": [ + }, { "type": { - "value": "PanelSpriteSlider::PanelSpriteSlider::SetPropertyShowLabel" + "value": "SetCenterX" }, "parameters": [ - "Object", - "yes" + "Label", + "=", + "Thumb.CenterX()" ] }, { "type": { - "value": "Montre" + "value": "MettreY" }, "parameters": [ "Label", - "" + "=", + "Thumb.Y() - Label.Height() - Object.PropertyLabelMargin()" ] } ] @@ -12562,22 +14113,16 @@ "name": "Object", "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", "type": "object" - }, - { - "description": "Show the label", - "name": "Value", - "type": "yesorno" } ], "objectGroups": [] }, { - "description": "Update the text that display the current value and maximum value.", - "fullName": "Update label", - "functionType": "Action", - "name": "UpdateLabel", + "fullName": "", + "functionType": "Expression", + "name": "FullBarLeft", "private": true, - "sentence": "Update label of _PARAM0_", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -12585,17 +14130,18 @@ "actions": [ { "type": { - "value": "TextObject::String" + "value": "SetReturnNumber" }, "parameters": [ - "Label", - "=", - "ToString(Object.Value())" + "Object.PropertyBarLeftPadding()" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", @@ -12607,11 +14153,11 @@ "objectGroups": [] }, { - "fullName": "Update thumb position", - "functionType": "Action", - "name": "UpdateThumbPosition", + "fullName": "", + "functionType": "Expression", + "name": "FullBarRight", "private": true, - "sentence": "Update the thumb position of _PARAM0_", + "sentence": "", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -12619,41 +14165,82 @@ "actions": [ { "type": { - "value": "PanelSpriteObject::Width" + "value": "SetReturnNumber" }, "parameters": [ - "Resource", - "=", - "Object.FullBarWidth() * (Resource.Slider::Value() - Resource.Slider::MinValue()) / Resource.Slider::Size()" + "Background.Width() - Object.PropertyBarRightPadding()" ] } ] - }, + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Expression", + "name": "FullBarWidth", + "private": true, + "sentence": "", + "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "SetCenterX" - }, - "parameters": [ - "Thumb", - "=", - "Object.FullBarLeft() + Resource.Width()" - ] - }, - { - "type": { - "value": "SetCenterY" + "value": "SetReturnNumber" }, "parameters": [ - "Thumb", - "=", - "Resource.CenterY()" + "Background.Width() - Object.PropertyBarLeftPadding() - Object.PropertyBarRightPadding()" ] } ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "Update slider configuration", + "functionType": "Action", + "name": "UpdateSliderConfiguration", + "private": true, + "sentence": "Update the slider configuration of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Pass configuration to the behavior and update children.", + "comment2": "" }, { "type": "BuiltinCommonInstructions::Standard", @@ -12661,32 +14248,36 @@ "actions": [ { "type": { - "value": "TextObject::String" + "value": "PanelSpriteSlider::PanelSpriteSlider::SetMinValue" }, "parameters": [ - "Label", + "Object", "=", - "ToString(Object.Value())" + "Object.PropertyMinValue()", + "Object.PropertyMaxValue()", + "" ] }, { "type": { - "value": "SetCenterX" + "value": "PanelSpriteSlider::PanelSpriteSlider::SetMaxValue" }, "parameters": [ - "Label", + "Object", "=", - "Thumb.CenterX()" + "Object.PropertyMaxValue()", + "Object.PropertyMaxValue()" ] }, { "type": { - "value": "MettreY" + "value": "PanelSpriteSlider::PanelSpriteSlider::SetStepSize" }, "parameters": [ - "Label", + "Object", "=", - "Thumb.Y() - Label.Height() - 8" + "Object.PropertyStepSize()", + "Object.PropertyMaxValue()" ] } ] @@ -12707,7 +14298,7 @@ { "value": "0", "type": "Number", - "label": "", + "label": "Bar left marging", "description": "", "group": "Bar", "extraInformation": [ @@ -12720,7 +14311,7 @@ { "value": "0", "type": "Number", - "label": "", + "label": "Bar top marging", "description": "", "group": "Bar", "extraInformation": [ @@ -12733,7 +14324,7 @@ { "value": "0", "type": "Number", - "label": "", + "label": "Bar right marging", "description": "", "group": "Bar", "extraInformation": [ @@ -12746,7 +14337,7 @@ { "value": "0", "type": "Number", - "label": "", + "label": "Bar bottom marging", "description": "", "group": "Bar", "extraInformation": [ @@ -12757,31 +14348,61 @@ "name": "BarBottomPadding" }, { - "value": "", + "value": "true", + "type": "Boolean", + "label": "Show the label when the value is changed", + "description": "", + "group": "Label", + "extraInformation": [], + "hidden": false, + "name": "ShowLabelAtChanges" + }, + { + "value": "8", + "type": "Number", + "label": "Label margin", + "description": "", + "group": "Label", + "extraInformation": [], + "hidden": false, + "name": "LabelMargin" + }, + { + "value": "0", "type": "Number", "label": "Minimum value", "description": "", - "group": "", + "group": "Value", "extraInformation": [], "hidden": false, "name": "MinValue" }, { - "value": "3", + "value": "100", "type": "Number", "label": "Maximum value", "description": "", - "group": "", + "group": "Value", "extraInformation": [], "hidden": false, "name": "MaxValue" }, { - "value": "3", + "value": "1", + "type": "Number", + "label": "Step size", + "description": "", + "group": "Value", + "extraInformation": [], + "hidden": false, + "name": "StepSize" + }, + { + "value": "50", "type": "Number", "label": "Initial value", "description": "", - "group": "", + "group": "Value", "extraInformation": [], "hidden": false, "name": "InitialValue" @@ -12796,18 +14417,6 @@ "hidden": true, "name": "PreviousInitialValue" }, - { - "value": "true", - "type": "Boolean", - "label": "Show the label", - "description": "", - "group": "", - "extraInformation": [ - "Label" - ], - "hidden": false, - "name": "ShowLabel" - }, { "value": "Center-center", "type": "Number", @@ -12831,6 +14440,18 @@ ], "hidden": true, "name": "ThumbAnchorTarget" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": [ + "Label" + ], + "hidden": true, + "name": "ShowLabel" } ], "objects": [ @@ -12846,7 +14467,7 @@ "variables": [], "effects": [], "behaviors": [], - "string": "2 / 3", + "string": "It displays the value when it changes.", "font": "", "textAlignment": "", "characterSize": 20, @@ -12900,7 +14521,7 @@ "type": "PanelSpriteSlider::Slider", "Value": 0, "MinValue": 0, - "MaxValue": 100, + "MaxValue": 1, "StepSize": 1 } ] @@ -12920,7 +14541,18 @@ "width": 32, "variables": [], "effects": [], - "behaviors": [] + "behaviors": [ + { + "name": "ButtonFSM", + "type": "PanelSpriteSlider::ButtonFSM", + "ShouldCheckHovering": true, + "State": "Idle", + "TouchId": 0, + "TouchIsInside": false, + "MouseIsInside": false, + "Index": 0 + } + ] } ] } From fe9b367042980de92f1773b4e72b3940096d1ad1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Sat, 17 Dec 2022 18:24:19 +0100 Subject: [PATCH 45/98] Add slider descriptions. --- examples/resource-bar/game.json | 41 +++++++++++++++++++-------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index cfdf8a732..f6ccb0a2d 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -1137,7 +1137,7 @@ "underlined": false, "string": "Button with a lot of text", "font": "", - "textAlignment": "left", + "textAlignment": "center", "characterSize": 60, "color": { "b": 42, @@ -10803,21 +10803,26 @@ "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", "name": "PanelSpriteSlider", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/UI Essentials/1678c39a3b2bd3df4f82a8a293770db4986a6bcfd3f78e738ddfc86e39176423_UI Essentials_sliders_options.svg", - "shortDescription": "", + "shortDescription": "A draggable slider that users can move to select a numerical value.", "version": "1.0.0", - "description": "", + "description": "A draggable slider that users can move to select a numerical value. The slider can be customized with sprites.", "origin": { "identifier": "ResourceBar", "name": "gdevelop-extension-store" }, - "tags": [], + "tags": [ + "draggable", + "slider", + "ui", + "widget" + ], "authorIds": [], "dependencies": [], "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", - "fullName": "Resource bar", + "description": "Represent a value on a slider.", + "fullName": "Slider", "name": "Slider", "objectType": "", "private": true, @@ -12671,7 +12676,7 @@ "eventsBasedObjects": [ { "defaultName": "Slider", - "description": "", + "description": "Let users select a numerical value by dragging a slider.", "fullName": "Slider", "name": "PanelSpriteSlider", "eventsFunctions": [ @@ -13019,6 +13024,16 @@ "Draggable" ] }, + { + "type": { + "inverted": true, + "value": "DraggableBehavior::Dropped" + }, + "parameters": [ + "Thumb", + "Draggable" + ] + }, { "type": { "value": "PanelSpriteSlider::ButtonFSM::IsClicked" @@ -13940,16 +13955,6 @@ "Object.PropertyBarTopPadding()" ] }, - { - "type": { - "value": "PanelSpriteObject::Width" - }, - "parameters": [ - "Resource", - "=", - "Object.WidthForValue()" - ] - }, { "type": { "value": "PanelSpriteObject::Height" @@ -14022,6 +14027,7 @@ "objectGroups": [] }, { + "description": "Update the thumb position according to the slider value.", "fullName": "Update thumb position", "functionType": "Action", "name": "UpdateThumbPosition", @@ -14223,6 +14229,7 @@ "objectGroups": [] }, { + "description": "Update the slider configuration.", "fullName": "Update slider configuration", "functionType": "Action", "name": "UpdateSliderConfiguration", From c629ade30ab9a3e0d127287e93e1a151e275e0cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Sat, 17 Dec 2022 20:35:04 +0100 Subject: [PATCH 46/98] Add toggle switch logic. --- examples/resource-bar/game.json | 2940 +++++++++++++++++++++++++++++-- 1 file changed, 2768 insertions(+), 172 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index f6ccb0a2d..79e9737dc 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -994,7 +994,7 @@ "assetStoreId": "", "name": "Checkbox", "tags": "", - "type": "Checkbox::Checkbox", + "type": "ToggleSwitch::ToggleSwitch", "variables": [], "effects": [], "behaviors": [], @@ -1045,7 +1045,7 @@ "assetStoreId": "", "name": "RightCheckbox", "tags": "", - "type": "Checkbox::Checkbox", + "type": "ToggleSwitch::ToggleSwitch", "variables": [], "effects": [], "behaviors": [], @@ -10818,7 +10818,29 @@ ], "authorIds": [], "dependencies": [], - "eventsFunctions": [], + "eventsFunctions": [ + { + "fullName": "Any touch pressed", + "functionType": "Condition", + "name": "AnyTouchPressed", + "private": true, + "sentence": "Any touch is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "eventsFunctionContext.returnValue = runtimeScene.getGame().getInputManager()._touches.firstKey() !== null;", + "" + ], + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [], + "objectGroups": [] + } + ], "eventsBasedBehaviors": [ { "description": "Represent a value on a slider.", @@ -11306,7 +11328,7 @@ "conditions": [ { "type": { - "value": "PanelSpriteButton::AnyTouchPressed" + "value": "PanelSpriteSlider::AnyTouchPressed" }, "parameters": [ "", @@ -11317,7 +11339,7 @@ "actions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyShouldCheckHovering" + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyShouldCheckHovering" }, "parameters": [ "Object", @@ -11354,7 +11376,7 @@ "conditions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyState" + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -11367,7 +11389,7 @@ "actions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" }, "parameters": [ "Object", @@ -11406,7 +11428,7 @@ "actions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyMouseIsInside" + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyMouseIsInside" }, "parameters": [ "Object", @@ -11422,7 +11444,7 @@ { "type": { "inverted": true, - "value": "PanelSpriteButton::AnyTouchPressed" + "value": "PanelSpriteSlider::AnyTouchPressed" }, "parameters": [ "", @@ -11431,7 +11453,7 @@ }, { "type": { - "value": "PanelSpriteButton::ButtonFSM::ShouldCheckMousePosition" + "value": "PanelSpriteSlider::ButtonFSM::ShouldCheckMousePosition" }, "parameters": [ "Object", @@ -11454,7 +11476,7 @@ "actions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyMouseIsInside" + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyMouseIsInside" }, "parameters": [ "Object", @@ -11483,7 +11505,7 @@ "actions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyTouchIsInside" + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyTouchIsInside" }, "parameters": [ "Object", @@ -11498,7 +11520,7 @@ "conditions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyTouchId" + "value": "PanelSpriteSlider::ButtonFSM::PropertyTouchId" }, "parameters": [ "Object", @@ -11521,7 +11543,7 @@ "actions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyTouchIsInside" + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyTouchIsInside" }, "parameters": [ "Object", @@ -11558,7 +11580,7 @@ "actions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyIndex" + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyIndex" }, "parameters": [ "Object", @@ -11592,7 +11614,7 @@ "actions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyTouchId" + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyTouchId" }, "parameters": [ "Object", @@ -11603,7 +11625,7 @@ }, { "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyTouchIsInside" + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyTouchIsInside" }, "parameters": [ "Object", @@ -11624,7 +11646,7 @@ "subInstructions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyState" + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -11635,7 +11657,7 @@ }, { "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyState" + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -11650,7 +11672,7 @@ "actions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" }, "parameters": [ "Object", @@ -11669,7 +11691,7 @@ "actions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyIndex" + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyIndex" }, "parameters": [ "Object", @@ -11724,7 +11746,7 @@ { "type": { "inverted": true, - "value": "PanelSpriteButton::AnyTouchPressed" + "value": "PanelSpriteSlider::AnyTouchPressed" }, "parameters": [ "", @@ -11752,7 +11774,7 @@ "conditions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyMouseIsInside" + "value": "PanelSpriteSlider::ButtonFSM::PropertyMouseIsInside" }, "parameters": [ "Object", @@ -11767,7 +11789,7 @@ "subInstructions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyState" + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -11778,7 +11800,7 @@ }, { "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyState" + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -11793,7 +11815,7 @@ "actions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" }, "parameters": [ "Object", @@ -11826,7 +11848,7 @@ { "type": { "inverted": true, - "value": "PanelSpriteButton::ButtonFSM::PropertyMouseIsInside" + "value": "PanelSpriteSlider::ButtonFSM::PropertyMouseIsInside" }, "parameters": [ "Object", @@ -11836,7 +11858,7 @@ { "type": { "inverted": true, - "value": "PanelSpriteButton::ButtonFSM::PropertyTouchIsInside" + "value": "PanelSpriteSlider::ButtonFSM::PropertyTouchIsInside" }, "parameters": [ "Object", @@ -11851,7 +11873,7 @@ "conditions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyState" + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -11864,7 +11886,7 @@ "actions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" }, "parameters": [ "Object", @@ -11880,7 +11902,7 @@ "conditions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyState" + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -11893,7 +11915,7 @@ "actions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" }, "parameters": [ "Object", @@ -11917,7 +11939,7 @@ "subInstructions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyMouseIsInside" + "value": "PanelSpriteSlider::ButtonFSM::PropertyMouseIsInside" }, "parameters": [ "Object", @@ -11926,7 +11948,7 @@ }, { "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyTouchIsInside" + "value": "PanelSpriteSlider::ButtonFSM::PropertyTouchIsInside" }, "parameters": [ "Object", @@ -11943,7 +11965,7 @@ "conditions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyState" + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -11956,7 +11978,7 @@ "actions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" }, "parameters": [ "Object", @@ -11982,7 +12004,7 @@ }, { "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyState" + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -11995,7 +12017,7 @@ "actions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" }, "parameters": [ "Object", @@ -12048,7 +12070,7 @@ { "type": { "inverted": true, - "value": "PanelSpriteButton::AnyTouchPressed" + "value": "PanelSpriteSlider::AnyTouchPressed" }, "parameters": [ "", @@ -12063,7 +12085,7 @@ "conditions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyState" + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -12076,7 +12098,7 @@ "actions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" }, "parameters": [ "Object", @@ -12093,7 +12115,7 @@ { "type": { "inverted": true, - "value": "PanelSpriteButton::ButtonFSM::PropertyState" + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -12105,7 +12127,7 @@ { "type": { "inverted": true, - "value": "PanelSpriteButton::ButtonFSM::PropertyState" + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -12118,7 +12140,7 @@ "actions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" }, "parameters": [ "Object", @@ -12147,7 +12169,7 @@ "actions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyTouchId" + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyTouchId" }, "parameters": [ "Object", @@ -12163,7 +12185,7 @@ "conditions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyState" + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -12176,7 +12198,7 @@ "actions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" }, "parameters": [ "Object", @@ -12193,7 +12215,7 @@ { "type": { "inverted": true, - "value": "PanelSpriteButton::ButtonFSM::PropertyState" + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -12205,7 +12227,7 @@ { "type": { "inverted": true, - "value": "PanelSpriteButton::ButtonFSM::PropertyState" + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -12218,7 +12240,7 @@ "actions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" }, "parameters": [ "Object", @@ -12265,7 +12287,7 @@ "conditions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyState" + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -12314,7 +12336,7 @@ "conditions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyState" + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -12363,7 +12385,7 @@ "conditions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyState" + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -12412,7 +12434,7 @@ "conditions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyState" + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -12438,7 +12460,7 @@ "conditions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyState" + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -12487,7 +12509,7 @@ "conditions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyState" + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -12564,7 +12586,7 @@ }, { "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyShouldCheckHovering" + "value": "PanelSpriteSlider::ButtonFSM::PropertyShouldCheckHovering" }, "parameters": [ "Object", @@ -17009,135 +17031,2709 @@ }, { "author": "", - "category": "", + "category": "User interface", "extensionNamespace": "", - "fullName": "", + "fullName": "Toggle switch", "helpPath": "", - "iconUrl": "", - "name": "Checkbox", - "previewIconUrl": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTIzLDIzSDljLTMuOSwwLTctMy4xLTctN3YwYzAtMy45LDMuMS03LDctN2gxNGMzLjksMCw3LDMuMSw3LDd2MEMzMCwxOS45LDI2LjksMjMsMjMsMjN6Ii8+DQo8Y2lyY2xlIGNsYXNzPSJzdDAiIGN4PSI5IiBjeT0iMTYiIHI9IjQiLz4NCjwvc3ZnPg0K", + "name": "ToggleSwitch", + "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/Interface Elements/8d0cd8cd0c9318f4f6efde6ee6b4c192bd19306467f80c9970387a259300f895_Interface Elements_interface_ui_toggle_switch_on_off.svg", "shortDescription": "", "version": "", "description": "", "tags": [], "authorIds": [], "dependencies": [], - "eventsFunctions": [], - "eventsBasedBehaviors": [], - "eventsBasedObjects": [ + "eventsFunctions": [ { - "defaultName": "", - "description": "", - "fullName": "", - "name": "Checkbox", - "eventsFunctions": [], - "propertyDescriptors": [ - { - "value": "Left", - "type": "Choice", - "label": "Checkbox side", - "description": "", - "group": "", - "extraInformation": [ - "Left", - "Right" - ], - "hidden": false, - "name": "CheckboxHorizontalAnchorTargetValue" - }, - { - "value": "CheckboxHorizontalAnchorTargetValue", - "type": "String", - "label": "", - "description": "This is only used by the scene editor.", - "group": "", - "extraInformation": [ - "Label" - ], - "hidden": true, - "name": "CheckboxHorizontalAnchorTarget" - }, - { - "value": "Opposite", - "type": "String", - "label": "", - "description": "This is only used by the scene editor.", - "group": "", - "extraInformation": [ - "Checked", - "Unchecked" - ], - "hidden": true, - "name": "CheckboxHorizontalAnchorOrigin" - }, - { - "value": "-8", - "type": "Number", - "label": "Checkbox X offset", - "description": "", - "group": "", - "extraInformation": [ - "Checked", - "Unchecked" - ], - "hidden": false, - "name": "CheckboxAnchorDeltaX" - }, - { - "value": "Center", - "type": "String", - "label": "", - "description": "", - "group": "", - "extraInformation": [ - "Label" - ], - "hidden": true, - "name": "CheckboxVerticalAnchorTarget" - }, - { - "value": "Center", - "type": "String", - "label": "", - "description": "", - "group": "", - "extraInformation": [ - "Checked", - "Unchecked" - ], - "hidden": true, - "name": "CheckboxVerticalAnchorOrigin" - }, + "fullName": "Any touch pressed", + "functionType": "Condition", + "name": "AnyTouchPressed", + "private": true, + "sentence": "Any touch is pressed", + "events": [ { - "value": "", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [ - "Unchecked" + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "eventsFunctionContext.returnValue = runtimeScene.getGame().getInputManager()._touches.firstKey() !== null;", + "" ], - "hidden": true, - "name": "ShowUnchecked" + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false } ], - "objects": [ + "parameters": [], + "objectGroups": [] + } + ], + "eventsBasedBehaviors": [ + { + "description": "The finite state machine used internally by the button object.", + "fullName": "Button finite state machine", + "name": "ButtonFSM", + "objectType": "", + "private": true, + "eventsFunctions": [ { - "assetStoreId": "", - "bottomMargin": 0, - "height": 32, - "leftMargin": 0, - "name": "Checked", - "rightMargin": 0, - "tags": "", - "texture": "", - "tiled": false, - "topMargin": 0, - "type": "PanelSpriteObject::PanelSprite", - "width": 32, - "variables": [], - "effects": [], - "behaviors": [] + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "We don't use the touch capability condition because the device could have both touch and cursor.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::AnyTouchPressed" + }, + "parameters": [ + "", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::SetPropertyShouldCheckHovering" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Finite state machine", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "The \"Validated\" state only last one frame.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Check position", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure the cursor position is only checked once per frame.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::SetPropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "ToggleSwitch::AnyTouchPressed" + }, + "parameters": [ + "", + "" + ] + }, + { + "type": { + "value": "ToggleSwitch::ButtonFSM::ShouldCheckMousePosition" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "SourisSurObjet" + }, + "parameters": [ + "Object", + "", + "no", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::SetPropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Touches are always pressed, so ShouldCheckHovering doesn't matter.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::SetPropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::PropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + }, + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "TouchX(Object.Behavior::PropertyTouchId(), Object.Layer(), 0)", + "TouchY(Object.Behavior::PropertyTouchId(), Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::SetPropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Handle touch start", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "HasAnyTouchStarted" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::SetPropertyIndex" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "StartedTouchCount()", + "conditions": [], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "TouchX(StartedTouchId(Object.Behavior::PropertyIndex()), Object.Layer(), 0)", + "TouchY(StartedTouchId(Object.Behavior::PropertyIndex()), Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "StartedTouchId(Object.Behavior::PropertyIndex())" + ] + }, + { + "type": { + "value": "ToggleSwitch::ButtonFSM::SetPropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + }, + { + "type": { + "value": "ToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::SetPropertyIndex" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Ignore mouse events when a touch is active because the mouse is probably an echo of touch events.\nThe mouse press could be a touch that has not the right TouchId.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "MouseButtonPressed" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "ToggleSwitch::AnyTouchPressed" + }, + "parameters": [ + "", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "The trigger once must be before the state condition to detect a new press.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::PropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + }, + { + "type": { + "value": "ToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Apply position changes", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "ToggleSwitch::ButtonFSM::PropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "inverted": true, + "value": "ToggleSwitch::ButtonFSM::PropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::PropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "ToggleSwitch::ButtonFSM::PropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "MouseButtonPressed" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "ToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Handle touch end", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Ignore mouse events when a touch is active because the mouse is probably an echo of touch events.\nThe mouse release could be a touch release that has not the right TouchId.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "MouseButtonReleased" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "inverted": true, + "value": "ToggleSwitch::AnyTouchPressed" + }, + "parameters": [ + "", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "ToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + }, + { + "type": { + "inverted": true, + "value": "ToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "HasTouchEnded" + }, + "parameters": [ + "", + "Object.Behavior::PropertyTouchId()" + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "ToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + }, + { + "type": { + "inverted": true, + "value": "ToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ToggleSwitch::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is not used.", + "fullName": "Is idle", + "functionType": "Condition", + "name": "IsIdle", + "sentence": "_PARAM0_ is idle", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ToggleSwitch::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button was just clicked.", + "fullName": "Is clicked", + "functionType": "Condition", + "name": "IsClicked", + "sentence": "_PARAM0_ is clicked", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ToggleSwitch::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the cursor is hovered over the button.", + "fullName": "Is hovered", + "functionType": "Condition", + "name": "IsHovered", + "sentence": "_PARAM0_ is hovered", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ToggleSwitch::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is either hovered or pressed but not hovered.", + "fullName": "Is focused", + "functionType": "Condition", + "name": "IsFocused", + "sentence": "_PARAM0_ is focused", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ToggleSwitch::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is currently being pressed with mouse or touch.", + "fullName": "Is pressed", + "functionType": "Condition", + "name": "IsPressed", + "sentence": "_PARAM0_ is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ToggleSwitch::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "Should check mouse position", + "functionType": "Condition", + "name": "ShouldCheckMousePosition", + "private": true, + "sentence": "_PARAM0_ should check mouse position", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Using a function avoid the OR to unselect Object when the property is not set.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "MouseButtonPressed" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "ToggleSwitch::ButtonFSM::PropertyShouldCheckHovering" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ToggleSwitch::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "true", + "type": "Boolean", + "label": "", + "description": "Should check hovering", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ShouldCheckHovering" + }, + { + "value": "Idle", + "type": "Choice", + "label": "State", + "description": "", + "group": "", + "extraInformation": [ + "Idle", + "Hovered", + "PressedInside", + "PressedOutside", + "Validated" + ], + "hidden": true, + "name": "State" + }, + { + "value": "0", + "type": "Number", + "label": "Touch id", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TouchId" + }, + { + "value": "", + "type": "Boolean", + "label": "Touch is inside", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TouchIsInside" + }, + { + "value": "", + "type": "Boolean", + "label": "Mouse is inside", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "MouseIsInside" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "Index" + } + ], + "sharedPropertyDescriptors": [] + }, + { + "description": "", + "fullName": "Switch finite state machine", + "name": "SwitchFSM", + "objectType": "", + "private": true, + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::IsClicked" + }, + "parameters": [ + "Object", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::SwitchFSM::SetPropertyWasChecked" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::SwitchFSM::IsChecked" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::SwitchFSM::SetPropertyWasChecked" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "ToggleSwitch::SwitchFSM::PropertyWasChecked" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::SwitchFSM::SetPropertyIsChecked" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::SwitchFSM::PropertyWasChecked" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::SwitchFSM::SetPropertyIsChecked" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ToggleSwitch::SwitchFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if is checked.", + "fullName": "Is checked", + "functionType": "Condition", + "group": "Switch finite state machine configuration", + "name": "IsChecked", + "sentence": "_PARAM0_ is checked", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::SwitchFSM::PropertyIsChecked" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ToggleSwitch::SwitchFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change if is checked.", + "fullName": "Is checked", + "functionType": "Action", + "group": "Switch finite state machine configuration", + "name": "SetChecked", + "sentence": "_PARAM0_ is checked: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::SwitchFSM::SetPropertyIsChecked" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::SwitchFSM::SetPropertyIsChecked" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ToggleSwitch::SwitchFSM", + "type": "behavior" + }, + { + "defaultValue": "yes", + "description": "IsChecked", + "name": "Value", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Behavior", + "label": "Button finite state machine", + "description": "", + "group": "", + "extraInformation": [ + "ToggleSwitch::ButtonFSM" + ], + "hidden": false, + "name": "ButtonFSM" + }, + { + "value": "false", + "type": "Boolean", + "label": "Is checked", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "IsChecked" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "WasChecked" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [ + { + "defaultName": "", + "description": "", + "fullName": "Toggle switch", + "name": "ToggleSwitch", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Create one background instance for of each state.\nOnly the instance for the current state is shown.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Checked", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Unchecked", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Checked" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Unchecked" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::ToggleSwitch::PropertyIsChecked" + }, + "parameters": [ + "Object" + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::SwitchFSM::SetChecked" + }, + "parameters": [ + "Checked", + "SwitchFSM", + "", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "ToggleSwitch::ToggleSwitch", + "type": "object" + } + ], + "objectGroups": [ + { + "name": "Background", + "objects": [ + { + "name": "Idle" + }, + { + "name": "Hovered" + }, + { + "name": "Pressed" + } + ] + } + ] + }, + { + "fullName": "", + "functionType": "Action", + "name": "onHotReloading", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "ToggleSwitch::ToggleSwitch", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Apply states", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Show the right background accordingly to the new state.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::ToggleSwitch::IsChecked" + }, + "parameters": [ + "Object", + "ButtonFSM", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Checked", + "" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Unchecked" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "ToggleSwitch::ToggleSwitch::IsChecked" + }, + "parameters": [ + "Object", + "ButtonFSM", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Checked" + ] + }, + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Unchecked", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Resize", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Children instances must be resized when the button size change:\n- backgrounds for each state are resized to take the full dimensions of the button\n- the label is put back at the center of the button\n\nThe scale is set back to 1 because it means that the parent instance has the same dimensions as the union of its children instances.", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Width()", + "!=", + "max(Checked.BoundingBoxRight(), Label.BoundingBoxRight()) - min(Checked.BoundingBoxLeft(), Label.BoundingBoxLeft())" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Height()", + "!=", + "max(Checked.BoundingBoxBottom(), Label.BoundingBoxBottom()) - min(Checked.BoundingBoxTop(), Label.BoundingBoxTop())" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Checked", + "Width", + "=", + "Object.Width()" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Checked", + "Height", + "=", + "Object.Height()" + ] + }, + { + "type": { + "value": "ToggleSwitch::Scale" + }, + "parameters": [ + "Object", + "=", + "1" + ] + }, + { + "type": { + "value": "PanelSpriteObject::Width" + }, + "parameters": [ + "Background", + "=", + "Checked.Variable(Width)" + ] + }, + { + "type": { + "value": "PanelSpriteObject::Height" + }, + "parameters": [ + "Background", + "=", + "Checked.Variable(Height)" + ] + }, + { + "type": { + "value": "ToggleSwitch::ToggleSwitch::CenterLabel" + }, + "parameters": [ + "Object", + "" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "ToggleSwitch::ToggleSwitch", + "type": "object" + } + ], + "objectGroups": [ + { + "name": "Background", + "objects": [ + { + "name": "Checked" + }, + { + "name": "Unchecked" + } + ] + } + ] + }, + { + "description": "Check if is checked.", + "fullName": "Is checked", + "functionType": "Condition", + "group": "Switch finite state machine configuration", + "name": "IsChecked", + "sentence": "_PARAM0_ is checked", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::SwitchFSM::IsChecked" + }, + "parameters": [ + "Checked", + "SwitchFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "ToggleSwitch::ToggleSwitch", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Change if is checked.", + "fullName": "Is checked", + "functionType": "Action", + "group": "Switch finite state machine configuration", + "name": "SetChecked", + "sentence": "_PARAM0_ is checked: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::SwitchFSM::SetChecked" + }, + "parameters": [ + "Checked", + "SwitchFSM", + "no", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ToggleSwitch::SwitchFSM::SetChecked" + }, + "parameters": [ + "Checked", + "SwitchFSM", + "yes", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "ToggleSwitch::ToggleSwitch", + "type": "object" + }, + { + "defaultValue": "yes", + "description": "IsChecked", + "name": "Value", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is not used.", + "fullName": "Is idle", + "functionType": "Condition", + "name": "IsIdle", + "private": true, + "sentence": "_PARAM0_ is idle", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::IsIdle" + }, + "parameters": [ + "Checked", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "ToggleSwitch::ToggleSwitch", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button was just clicked.", + "fullName": "Is clicked", + "functionType": "Condition", + "name": "IsClicked", + "private": true, + "sentence": "_PARAM0_ is clicked", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::IsClicked" + }, + "parameters": [ + "Checked", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "ToggleSwitch::ToggleSwitch", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the cursor is hovered over the button.", + "fullName": "Is hovered", + "functionType": "Condition", + "name": "IsHovered", + "sentence": "_PARAM0_ is hovered", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::IsHovered" + }, + "parameters": [ + "Checked", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "ToggleSwitch::ToggleSwitch", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is either hovered or pressed but not hovered.", + "fullName": "Is focused", + "functionType": "Condition", + "name": "IsFocused", + "private": true, + "sentence": "_PARAM0_ is focused", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::IsFocused" + }, + "parameters": [ + "Checked", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "ToggleSwitch::ToggleSwitch", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is currently being pressed with mouse or touch.", + "fullName": "Is pressed", + "functionType": "Condition", + "name": "IsPressed", + "private": true, + "sentence": "_PARAM0_ is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ToggleSwitch::ButtonFSM::IsPressed" + }, + "parameters": [ + "Checked", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "ToggleSwitch::ToggleSwitch", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Change the text of the button label.", + "fullName": "Label text", + "functionType": "Action", + "name": "SetLabelText", + "sentence": "Change the text of _PARAM0_ to _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TextObject::String" + }, + "parameters": [ + "Label", + "=", + "GetArgumentAsString(\"LabelText\")" + ] + }, + { + "type": { + "value": "ToggleSwitch::ToggleSwitch::CenterLabel" + }, + "parameters": [ + "Object", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "ToggleSwitch::ToggleSwitch", + "type": "object" + }, + { + "description": "", + "name": "LabelText", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Return the label text.", + "fullName": "Label text", + "functionType": "StringExpression", + "name": "LabelText", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "Label.String()" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "ToggleSwitch::ToggleSwitch", + "type": "object" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "Left", + "type": "Choice", + "label": "Checkbox side", + "description": "", + "group": "", + "extraInformation": [ + "Left", + "Right" + ], + "hidden": false, + "name": "CheckboxHorizontalAnchorTargetValue" + }, + { + "value": "CheckboxHorizontalAnchorTargetValue", + "type": "String", + "label": "", + "description": "This is only used by the scene editor.", + "group": "", + "extraInformation": [ + "Label" + ], + "hidden": true, + "name": "CheckboxHorizontalAnchorTarget" + }, + { + "value": "Opposite", + "type": "String", + "label": "", + "description": "This is only used by the scene editor.", + "group": "", + "extraInformation": [ + "Checked", + "Unchecked" + ], + "hidden": true, + "name": "CheckboxHorizontalAnchorOrigin" + }, + { + "value": "-8", + "type": "Number", + "label": "Checkbox X offset", + "description": "", + "group": "", + "extraInformation": [ + "Checked", + "Unchecked" + ], + "hidden": false, + "name": "CheckboxAnchorDeltaX" + }, + { + "value": "Center", + "type": "String", + "label": "", + "description": "", + "group": "", + "extraInformation": [ + "Label" + ], + "hidden": true, + "name": "CheckboxVerticalAnchorTarget" + }, + { + "value": "Center", + "type": "String", + "label": "", + "description": "", + "group": "", + "extraInformation": [ + "Checked", + "Unchecked" + ], + "hidden": true, + "name": "CheckboxVerticalAnchorOrigin" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [ + "Unchecked" + ], + "hidden": true, + "name": "ShowUnchecked" + }, + { + "value": "true", + "type": "Boolean", + "label": "Is cheched", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "IsChecked" + } + ], + "objects": [ + { + "assetStoreId": "", + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "name": "Checked", + "rightMargin": 0, + "tags": "", + "texture": "", + "tiled": false, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "ButtonFSM", + "type": "ToggleSwitch::ButtonFSM", + "ShouldCheckHovering": true, + "State": "Idle", + "TouchId": 0, + "TouchIsInside": false, + "MouseIsInside": false, + "Index": 0 + }, + { + "name": "SwitchFSM", + "type": "ToggleSwitch::SwitchFSM", + "ButtonFSM": "ButtonFSM", + "IsChecked": false, + "WasChecked": false + } + ] }, { "assetStoreId": "", From d152816464429992f9a4c620cdf41f918d37ec76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Sat, 17 Dec 2022 20:36:51 +0100 Subject: [PATCH 47/98] Rename toggle switch to avoid collision with the shape painter extension. --- examples/resource-bar/game.json | 4209 +------------------------------ 1 file changed, 107 insertions(+), 4102 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 79e9737dc..1e25977f3 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -994,7 +994,7 @@ "assetStoreId": "", "name": "Checkbox", "tags": "", - "type": "ToggleSwitch::ToggleSwitch", + "type": "SpriteToggleSwitch::SpriteToggleSwitch", "variables": [], "effects": [], "behaviors": [], @@ -1045,7 +1045,7 @@ "assetStoreId": "", "name": "RightCheckbox", "tags": "", - "type": "ToggleSwitch::ToggleSwitch", + "type": "SpriteToggleSwitch::SpriteToggleSwitch", "variables": [], "effects": [], "behaviors": [], @@ -5182,4001 +5182,6 @@ } ] }, - { - "author": "Tristan Rhodes (https://victrisgames.itch.io/), D8H", - "category": "User interface", - "extensionNamespace": "", - "fullName": "Draggable slider", - "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", - "name": "DraggableSliderControl", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/UI Essentials/UI Essentials_sliders_options.svg", - "shortDescription": "A draggable slider that users can move to select a numerical value.", - "version": "1.0.6", - "description": [ - "Draws a draggable slider that users can move to select a numerical value.", - "The value range, tick spacing, and the appearance of the slider can be defined with properties.", - "", - "How to use:", - "- Add this behavior a **Shape Painter** object", - "- Place an instance of that shape painter on the screen where you want the slider to appear", - "- Use the \"Value\" expression to find the Value based on the position of the slider", - "", - "Tips:", - "- You can disable the slider to prevent a user from interacting with it", - "- You can set the Value of the slider and the slider will move to the correct position", - "", - "Further details can be found in [this tutorial video](https://youtu.be/iiTUwdAT_hs).", - "", - "Breaking changes (1.0.0)", - "- Track thickness and length properties replaced track width and height. These 2 properties must be set again if they were different from the default size.", - "- Hidden sliders can be dragged. The \"enable\" action must be used to disable them.", - "" - ], - "origin": { - "identifier": "DraggableSliderControl", - "name": "gdevelop-extension-store" - }, - "tags": [ - "draggable", - "slider", - "shape painter", - "ui", - "widget" - ], - "authorIds": [ - "IWykYNRvhCZBN3vEgKEbBPOR3Oc2", - "gqDaZjCfevOOxBYkK6zlhtZnXCg1" - ], - "dependencies": [], - "eventsFunctions": [], - "eventsBasedBehaviors": [ - { - "description": "Let users select a numerical value by dragging a slider.", - "fullName": "Draggable slider", - "name": "DraggableSliderControl", - "objectType": "PrimitiveDrawing::Drawer", - "eventsFunctions": [ - { - "fullName": "", - "functionType": "Action", - "name": "onCreated", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make sure object doesn't get re-drawn every frame", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::ClearBetweenFrames" - }, - "parameters": [ - "Object", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Use correct min value (instead of always starting at 0)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMin()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set track height function (which enforces valid thumb sizes)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTrackThickness" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyTrackThickness()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Start halo at same size as thumb", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::PropertyThumbHeight()/2,Object.Behavior::PropertyThumbWidth()/2)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "fullName": "", - "functionType": "Action", - "name": "doStepPreEvents", - "sentence": "", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Slider logic", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::IsEnabled" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Track where the mouse is (in relation to object)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyMouseX" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.ToDrawingX(MouseX(Object.Layer(), 0), MouseY(Object.Layer(), 0))" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyMouseY" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.ToDrawingY(MouseX(Object.Layer(), 0), MouseY(Object.Layer(), 0))" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move slider when being dragged", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbOffset" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyMouseX()" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "End sliding and update variables", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "MouseButtonReleased" - }, - "parameters": [ - "", - "Left" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Update \"Value\" based on the location of the thumb", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyValueMin() + (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin()) * Object.Behavior::PropertyThumbOffset() / Object.Behavior::PropertyTrackLength()", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Grow halo even more when pressed", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTargetHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "1.25 * Object.Behavior::PropertyHaloRadius()" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Detect hover/touch/click (but only if the layer and object is visible, and the object is not already being dragged)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Detect mouse clicks near track, start dragging", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SourisBouton" - }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseX()", - ">=", - "-Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseX()", - "<=", - "Object.Behavior::PropertyTrackLength() + Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseY()", - ">=", - "-Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseY()", - "<=", - "Object.Behavior::PropertyHaloRadius()" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Reset hover detection ", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsHovered" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Grow halo when hovered", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "SourisBouton" - }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseX()", - ">=", - "Object.Behavior::PropertyThumbOffset() - Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseX()", - "<=", - "Object.Behavior::PropertyThumbOffset() + Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseY()", - ">=", - "- Object.Behavior::PropertyHaloRadius()" - ] - }, - { - "type": { - "value": "Egal" - }, - "parameters": [ - "Object.Behavior::PropertyMouseY()", - "<=", - "Object.Behavior::PropertyHaloRadius()" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsHovered" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTargetHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyHaloRadius()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Shrink halo to zero when not hovered", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsHovered" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTargetHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" - ] - } - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "Object.Behavior::PropertyTargetHaloRadius()" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Redraw slider only when halo is not at final size", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "abs(Object.Behavior::PropertyCurrentHaloRadius() - Object.Behavior::PropertyTargetHaloRadius())", - "<", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyTargetHaloRadius()" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "Object.Behavior::PropertyTargetHaloRadius()" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "lerp(Object.Behavior::PropertyCurrentHaloRadius(), Object.Behavior::PropertyTargetHaloRadius(), Object.Behavior::PropertyHaloGrowSpeed())" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "fullName": "", - "functionType": "Action", - "name": "doStepPostEvents", - "sentence": "", - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Slider drawing", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior" - ] - }, - { - "type": { - "value": "Visible" - }, - "parameters": [ - "Object" - ] - }, - { - "type": { - "value": "LayerVisible" - }, - "parameters": [ - "", - "Object.Layer()" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::Drawer::ClearShapes" - }, - "parameters": [ - "Object" - ] - } - ], - "events": [ - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Inactive track", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set inactive track parameters (by default, use thumb color)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyInactiveTrackColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyInactiveTrackColor" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyInactiveTrackColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyInactiveTrackOpacity()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::OutlineOpacity" - }, - "parameters": [ - "Object", - "=", - "0" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw inactive track", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset()", - "-Object.Behavior::PropertyTrackThickness() / 2", - "Object.Behavior::PropertyTrackLength()", - "Object.Behavior::PropertyTrackThickness() / 2" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw half circle at end of track (inactive side)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyRoundedTrack" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Arc" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyTrackLength()", - "0", - "Object.Behavior::PropertyTrackThickness() / 2", - "270", - "90", - "", - "yes" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Active track", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set active track parameters (by default, use thumb color)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyActiveTrackColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyActiveTrackColor" - }, - "parameters": [ - "Object", - "Behavior", - "!=", - "\"\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyActiveTrackColor()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyActiveTrackOpacity()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw active track (2 pixels bigger than property) ", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "0", - "-(Object.Behavior::PropertyTrackThickness() / 2 + 1)", - "Object.Behavior::PropertyThumbOffset()", - "Object.Behavior::PropertyTrackThickness() / 2 + 1" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw half circle at end of track (active side)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyRoundedTrack" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Arc" - }, - "parameters": [ - "Object", - "0", - "0", - "1 + Object.Behavior::PropertyTrackThickness() / 2", - "90", - "270", - "", - "yes" - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Halo", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyCurrentHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Prepare halo", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbColor()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::OutlineOpacity" - }, - "parameters": [ - "Object", - "=", - "0" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw halo (it will grow or shrink as needed)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyHaloOpacityHover()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::Circle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset()", - "0", - "Object.Behavior::PropertyCurrentHaloRadius()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Use a more opaque halo while being dragged (it will grow or shrink as needed)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyHaloOpacityClick()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::Circle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset()", - "0", - "Object.Behavior::PropertyCurrentHaloRadius()" - ] - } - ] - } - ] - } - ], - "parameters": [] - }, - { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Thumb", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Prepare thumb settings", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::FillColor" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbColor()" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::FillOpacity" - }, - "parameters": [ - "Object", - "=", - "Object.Behavior::PropertyThumbOpacity()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw Circle thumb", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbShape" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"circle\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Circle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset()", - "0", - "ceil(max(Object.Behavior::PropertyThumbWidth(),Object.Behavior::PropertyThumbHeight())/2)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Draw Rectangle thumb", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbShape" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"rectangle\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::Rectangle" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyThumbOffset() - (Object.Behavior::PropertyThumbWidth() / 2)", - "-Object.Behavior::PropertyThumbHeight() / 2", - "Object.Behavior::PropertyThumbOffset() + (Object.Behavior::PropertyThumbWidth() / 2)", - "Object.Behavior::PropertyThumbHeight() / 2" - ] - } - ] - } - ], - "parameters": [] - } - ] - } - ], - "parameters": [] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the slider is being dragged.", - "fullName": "Being dragged", - "functionType": "Condition", - "group": "Slider", - "name": "IsBeingDragged", - "sentence": "_PARAM0_ is being dragged", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the slider interations are enabled.", - "fullName": "Interactions enabled", - "functionType": "Condition", - "group": "Slider", - "name": "IsEnabled", - "sentence": "Interactions of _PARAM0_ are enabled", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyEnabled" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Enable or disable the slider. Users cannot interact while it is disabled.", - "fullName": "Enable interactions", - "functionType": "Action", - "group": "Slider", - "name": "SetEnabled", - "sentence": "Enable interactions of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"Enable\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyEnabled" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Stop dragging (so the slider won't be dragging when it gets enabled)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyIsBeingDragged" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Reset halo size (so halo won't appear when slider gets enabled)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTargetHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "min(Object.Behavior::PropertyThumbHeight(), Object.Behavior::PropertyThumbWidth()) / 2" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GetArgumentAsBoolean" - }, - "parameters": [ - "\"Enable\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyEnabled" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Enable", - "name": "Enable", - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "The value of the slider (based on position of the thumb).", - "fullName": "Slider value", - "functionType": "Expression", - "group": "Slider", - "name": "Value", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyValue()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change the value of a slider (this will move the thumb to the correct position).", - "fullName": "Slider value", - "functionType": "Action", - "group": "Slider", - "name": "SetValue", - "sentence": "Change the value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - "<=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "round(GetArgumentAsNumber(\"Value\") / Object.Behavior::PropertyTickSpacing()) * Object.Behavior::PropertyTickSpacing()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyValueMin()" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMin()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - ">", - "Object.Behavior::PropertyValueMax()" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValue" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyValueMax()" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Set the proper offset (it moves the slider)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbOffset" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "Object.Behavior::PropertyTrackLength() * (Object.Behavior::PropertyValue() - Object.Behavior::PropertyValueMin()) / (Object.Behavior::PropertyValueMax() - Object.Behavior::PropertyValueMin())" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Slider value", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "The minimum value of a slider.", - "fullName": "Slider minimum value", - "functionType": "Expression", - "group": "Slider value configuration", - "name": "ValueMin", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyValueMin()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change the minimum value of a slider.", - "fullName": "Slider minimum value", - "functionType": "Action", - "group": "Slider value configuration", - "name": "SetValueMin", - "sentence": "Change the minimum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValueMin" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"ValueMin\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Minimum value", - "name": "ValueMin", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "The maximum value of a slider.", - "fullName": "Slider maximum value", - "functionType": "Expression", - "group": "Slider value configuration", - "name": "ValueMax", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyValueMax()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Thickness of track.", - "fullName": "Slider track thickness", - "functionType": "Expression", - "group": "Slider track configuration", - "name": "TrackThickness", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyTrackThickness()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Length of track.", - "fullName": "Slider track length", - "functionType": "Expression", - "group": "Slider track configuration", - "name": "TrackLength", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyTrackLength()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Height of thumb.", - "fullName": "Slider thumb height", - "functionType": "Expression", - "group": "Slider thumb configuration", - "name": "ThumbHeight", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyThumbHeight()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - }, - { - "description": "Change the maximum value of a slider.", - "fullName": "Slider maximum value", - "functionType": "Action", - "group": "Slider value configuration", - "name": "SetValueMax", - "sentence": "Change the maximum value of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyValueMax" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"ValueMax\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Maximum value", - "name": "ValueMax", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "The tick spacing of a slider.", - "fullName": "Tick spacing", - "functionType": "Expression", - "group": "Slider value configuration", - "name": "TickSpacing", - "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.Behavior::PropertyTickSpacing()" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Tick spacing", - "name": "TickSpacing", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the tick spacing of a slider.", - "fullName": "Tick spacing", - "functionType": "Action", - "group": "Slider value configuration", - "name": "SetTickSpacing", - "sentence": "Change the tick spacing of _PARAM0_: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTickSpacing" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"TickSpacing\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::Value()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Tick spacing", - "name": "TickSpacing", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change length of track.", - "fullName": "Track length", - "functionType": "Action", - "group": "Slider track configuration", - "name": "SetTrackLength", - "sentence": "Change track length of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTrackLength" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Move thumb to correct place (based on new track size)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetValue" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyValue()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Track width", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change thickness of track.", - "fullName": "Track thickness", - "functionType": "Action", - "group": "Slider track configuration", - "name": "SetTrackThickness", - "sentence": "Change track thickness of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyTrackThickness" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make sure thumb width is not smaller than track height + 2 pixels (to prevent track ends from showing)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyTrackThickness() + 2" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyTrackThickness() + 2", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbHeight" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyTrackThickness() + 2" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetThumbHeight" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyTrackThickness() + 2", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Track thickness", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change width of thumb.", - "fullName": "Thumb width", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetThumbWidth", - "sentence": "Change thumb width of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Thumb cannot be less than track thickness (plus 2 pixels)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "max(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyTrackThickness() + 2)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Thumb width", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change height of thumb.", - "fullName": "Thumb height", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetThumbHeight", - "sentence": "Change thumb height of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Thumb cannot be less than track thickness (plus 2 pixels)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbHeight" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "max(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyTrackThickness() + 2)" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::UpdateHitbox" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Thumb height", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change radius of the halo around the thumb. This size is also used to detect interaction with the slider.", - "fullName": "Halo radius", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetHaloRadius", - "sentence": "Change halo radius of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyHaloRadius" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Halo radius", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the halo opacity when the thumb is hovered.", - "fullName": "Halo opacity (hover)", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetHaloOpacityHover", - "sentence": "Change the halo opacity when hovered of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyHaloOpacityHover" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Halo opacity (hover)", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change opacity of halo when pressed.", - "fullName": "Halo opacity (pressed)", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetHaloOpacityPressed", - "sentence": "Change halo opacity when pressed of _PARAM0_ to _PARAM2_ px", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyHaloOpacityClick" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Halo opacity (pressed)", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change shape of thumb (circle or rectangle).", - "fullName": "Thumb shape", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetThumbShape", - "sentence": "Change shape of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbShape" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Shape\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Make sure thumb width is not smaller than track height (to prevent track ends from showing)", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbShape" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"rectangle\"" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::PropertyThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "<", - "Object.Behavior::PropertyTrackThickness()" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetThumbWidth" - }, - "parameters": [ - "Object", - "Behavior", - "Object.Behavior::PropertyTrackThickness()", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "New thumb shape", - "name": "Shape", - "supplementaryInformation": "[\"circle\",\"rectangle\"]", - "type": "stringWithSelector" - } - ], - "objectGroups": [] - }, - { - "description": "Make track use rounded ends.", - "fullName": "Rounded track ends", - "functionType": "Action", - "group": "Slider track configuration", - "name": "SetRoundedTrack", - "sentence": "Draw _PARAM0_ with a rounded track: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "GetArgumentAsNumber(\"Value\")", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyRoundedTrack" - }, - "parameters": [ - "Object", - "Behavior", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "Egal" - }, - "parameters": [ - "GetArgumentAsNumber(\"Value\")", - "=", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyRoundedTrack" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Rounded track", - "name": "Value", - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Change opacity of thumb.", - "fullName": "Thumb opacity", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetThumbOpacity", - "sentence": "Change thumb opacity of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbOpacity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Thumb opacity", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change opacity of inactive track.", - "fullName": "Inactive track opacity", - "functionType": "Action", - "group": "Slider track configuration", - "name": "SetInactiveTrackOpacity", - "sentence": "Change inactive track opacity of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyInactiveTrackOpacity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Inactive track opacity", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change opacity of active track.", - "fullName": "Active track opacity", - "functionType": "Action", - "group": "Slider track configuration", - "name": "SetActiveTrackOpacity", - "sentence": "Change active track opacity of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyActiveTrackOpacity" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsNumber(\"Value\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Active track opacity", - "name": "Value", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Change the color of the track that is LEFT of the thumb.", - "fullName": "Active track color ", - "functionType": "Action", - "group": "Slider track configuration", - "name": "SetActiveTrackColor", - "sentence": "Change active track color of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyActiveTrackColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Color\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Active track color", - "name": "Color", - "type": "color" - } - ], - "objectGroups": [] - }, - { - "description": "Change the color of the track that is RIGHT of the thumb.", - "fullName": "Inactive track color", - "functionType": "Action", - "group": "Slider track configuration", - "name": "SetInactiveTrackColor", - "sentence": "Change inactive track color of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyInactiveTrackColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Color\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Inactive track color", - "name": "Color", - "type": "color" - } - ], - "objectGroups": [] - }, - { - "description": "Change the thumb color to a specific value.", - "fullName": "Thumb color", - "functionType": "Action", - "group": "Slider thumb configuration", - "name": "SetThumbColor", - "sentence": "Change thumb color of _PARAM0_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyThumbColor" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Color\")" - ] - }, - { - "type": { - "value": "DraggableSliderControl::DraggableSliderControl::SetPropertyNeedRedraw" - }, - "parameters": [ - "Object", - "Behavior", - "yes" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - }, - { - "description": "Thumb color", - "name": "Color", - "type": "color" - } - ], - "objectGroups": [] - }, - { - "description": "Update the hitbox.", - "fullName": "Update hitbox", - "functionType": "Action", - "group": "Private", - "name": "UpdateHitbox", - "private": true, - "sentence": "Update the hitbox of _PARAM0_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PrimitiveDrawing::SetRotationCenter" - }, - "parameters": [ - "Object", - "Object.Behavior::PropertyTrackLength() / 2", - "Object.Behavior::PropertyTrackThickness() / 2" - ] - }, - { - "type": { - "value": "PrimitiveDrawing::SetRectangularCollisionMask" - }, - "parameters": [ - "Object", - "-Object.Behavior::PropertyThumbWidth() / 2", - "-Object.Behavior::PropertyThumbHeight() / 2", - "Object.Behavior::PropertyTrackLength() + Object.Behavior::PropertyThumbWidth() / 2", - "Object.Behavior::PropertyThumbHeight() / 2" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "PrimitiveDrawing::Drawer", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "DraggableSliderControl::DraggableSliderControl", - "type": "behavior" - } - ], - "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "0", - "type": "Number", - "label": "Minimum value", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "ValueMin" - }, - { - "value": "1", - "type": "Number", - "label": "Maximum value", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "ValueMax" - }, - { - "value": "0", - "type": "Number", - "label": "Tick spacing", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "TickSpacing" - }, - { - "value": "circle", - "type": "Choice", - "label": "Thumb shape", - "description": "", - "group": "Thumb", - "extraInformation": [ - "circle", - "rectangle" - ], - "hidden": false, - "name": "ThumbShape" - }, - { - "value": "20", - "type": "Number", - "label": "Thumb width", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "ThumbWidth" - }, - { - "value": "20", - "type": "Number", - "label": "Thumb height", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "ThumbHeight" - }, - { - "value": " 24;119;211", - "type": "Color", - "label": "Thumb Color", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "ThumbColor" - }, - { - "value": "255", - "type": "Number", - "label": "Thumb opacity", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "ThumbOpacity" - }, - { - "value": "200", - "type": "Number", - "label": "Track length", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "TrackLength" - }, - { - "value": "4", - "type": "Number", - "label": "Track thickness", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "TrackThickness" - }, - { - "value": "", - "type": "String", - "label": "Inactive track color (thumb color by default)", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "InactiveTrackColor" - }, - { - "value": "96", - "type": "Number", - "label": "Inactive track opacity", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "InactiveTrackOpacity" - }, - { - "value": " ", - "type": "String", - "label": "Active track color (thumb color by default)", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "ActiveTrackColor" - }, - { - "value": "255", - "type": "Number", - "label": "Active track opacity", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "ActiveTrackOpacity" - }, - { - "value": "24", - "type": "Number", - "label": "Halo size (hover)", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "HaloRadius" - }, - { - "value": "32", - "type": "Number", - "label": "Halo opacity (hover)", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "HaloOpacityHover" - }, - { - "value": "64", - "type": "Number", - "label": "Halo opacity (pressed)", - "description": "", - "group": "Thumb", - "extraInformation": [], - "hidden": false, - "name": "HaloOpacityClick" - }, - { - "value": "true", - "type": "Boolean", - "label": "Rounded track ends", - "description": "", - "group": "Track", - "extraInformation": [], - "hidden": false, - "name": "RoundedTrack" - }, - { - "value": "true", - "type": "Boolean", - "label": "Enable interactions", - "description": "", - "group": "", - "extraInformation": [], - "hidden": false, - "name": "Enabled" - }, - { - "value": "", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "IsBeingDragged" - }, - { - "value": "0", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "Value" - }, - { - "value": "0", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "ThumbOffset" - }, - { - "value": "true", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "NeedRedraw" - }, - { - "value": "", - "type": "Boolean", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "IsHovered" - }, - { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "MouseX" - }, - { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "MouseY" - }, - { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "CurrentHaloRadius" - }, - { - "value": "0.2", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "HaloGrowSpeed" - }, - { - "value": "", - "type": "Number", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "TargetHaloRadius" - } - ], - "sharedPropertyDescriptors": [] - } - ], - "eventsBasedObjects": [] - }, { "author": "", "category": "User interface", @@ -17036,7 +13041,7 @@ "fullName": "Toggle switch", "helpPath": "", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTIzLDIzSDljLTMuOSwwLTctMy4xLTctN3YwYzAtMy45LDMuMS03LDctN2gxNGMzLjksMCw3LDMuMSw3LDd2MEMzMCwxOS45LDI2LjksMjMsMjMsMjN6Ii8+DQo8Y2lyY2xlIGNsYXNzPSJzdDAiIGN4PSI5IiBjeT0iMTYiIHI9IjQiLz4NCjwvc3ZnPg0K", - "name": "ToggleSwitch", + "name": "SpriteToggleSwitch", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/Interface Elements/8d0cd8cd0c9318f4f6efde6ee6b4c192bd19306467f80c9970387a259300f895_Interface Elements_interface_ui_toggle_switch_on_off.svg", "shortDescription": "", "version": "", @@ -17099,7 +13104,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::AnyTouchPressed" + "value": "SpriteToggleSwitch::AnyTouchPressed" }, "parameters": [ "", @@ -17110,7 +13115,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::SetPropertyShouldCheckHovering" + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyShouldCheckHovering" }, "parameters": [ "Object", @@ -17147,7 +13152,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::PropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -17160,7 +13165,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::SetPropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" }, "parameters": [ "Object", @@ -17199,7 +13204,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::SetPropertyMouseIsInside" + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyMouseIsInside" }, "parameters": [ "Object", @@ -17215,7 +13220,7 @@ { "type": { "inverted": true, - "value": "ToggleSwitch::AnyTouchPressed" + "value": "SpriteToggleSwitch::AnyTouchPressed" }, "parameters": [ "", @@ -17224,7 +13229,7 @@ }, { "type": { - "value": "ToggleSwitch::ButtonFSM::ShouldCheckMousePosition" + "value": "SpriteToggleSwitch::ButtonFSM::ShouldCheckMousePosition" }, "parameters": [ "Object", @@ -17247,7 +13252,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::SetPropertyMouseIsInside" + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyMouseIsInside" }, "parameters": [ "Object", @@ -17276,7 +13281,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::SetPropertyTouchIsInside" + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyTouchIsInside" }, "parameters": [ "Object", @@ -17291,7 +13296,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::PropertyTouchId" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyTouchId" }, "parameters": [ "Object", @@ -17314,7 +13319,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::SetPropertyTouchIsInside" + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyTouchIsInside" }, "parameters": [ "Object", @@ -17351,7 +13356,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::SetPropertyIndex" + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyIndex" }, "parameters": [ "Object", @@ -17385,7 +13390,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::SetPropertyTouchId" + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyTouchId" }, "parameters": [ "Object", @@ -17396,7 +13401,7 @@ }, { "type": { - "value": "ToggleSwitch::ButtonFSM::SetPropertyTouchIsInside" + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyTouchIsInside" }, "parameters": [ "Object", @@ -17417,7 +13422,7 @@ "subInstructions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::PropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -17428,7 +13433,7 @@ }, { "type": { - "value": "ToggleSwitch::ButtonFSM::PropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -17443,7 +13448,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::SetPropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" }, "parameters": [ "Object", @@ -17462,7 +13467,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::SetPropertyIndex" + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyIndex" }, "parameters": [ "Object", @@ -17517,7 +13522,7 @@ { "type": { "inverted": true, - "value": "ToggleSwitch::AnyTouchPressed" + "value": "SpriteToggleSwitch::AnyTouchPressed" }, "parameters": [ "", @@ -17545,7 +13550,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::PropertyMouseIsInside" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyMouseIsInside" }, "parameters": [ "Object", @@ -17560,7 +13565,7 @@ "subInstructions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::PropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -17571,7 +13576,7 @@ }, { "type": { - "value": "ToggleSwitch::ButtonFSM::PropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -17586,7 +13591,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::SetPropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" }, "parameters": [ "Object", @@ -17619,7 +13624,7 @@ { "type": { "inverted": true, - "value": "ToggleSwitch::ButtonFSM::PropertyMouseIsInside" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyMouseIsInside" }, "parameters": [ "Object", @@ -17629,7 +13634,7 @@ { "type": { "inverted": true, - "value": "ToggleSwitch::ButtonFSM::PropertyTouchIsInside" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyTouchIsInside" }, "parameters": [ "Object", @@ -17644,7 +13649,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::PropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -17657,7 +13662,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::SetPropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" }, "parameters": [ "Object", @@ -17673,7 +13678,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::PropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -17686,7 +13691,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::SetPropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" }, "parameters": [ "Object", @@ -17710,7 +13715,7 @@ "subInstructions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::PropertyMouseIsInside" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyMouseIsInside" }, "parameters": [ "Object", @@ -17719,7 +13724,7 @@ }, { "type": { - "value": "ToggleSwitch::ButtonFSM::PropertyTouchIsInside" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyTouchIsInside" }, "parameters": [ "Object", @@ -17736,7 +13741,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::PropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -17749,7 +13754,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::SetPropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" }, "parameters": [ "Object", @@ -17775,7 +13780,7 @@ }, { "type": { - "value": "ToggleSwitch::ButtonFSM::PropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -17788,7 +13793,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::SetPropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" }, "parameters": [ "Object", @@ -17841,7 +13846,7 @@ { "type": { "inverted": true, - "value": "ToggleSwitch::AnyTouchPressed" + "value": "SpriteToggleSwitch::AnyTouchPressed" }, "parameters": [ "", @@ -17856,7 +13861,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::PropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -17869,7 +13874,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::SetPropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" }, "parameters": [ "Object", @@ -17886,7 +13891,7 @@ { "type": { "inverted": true, - "value": "ToggleSwitch::ButtonFSM::PropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -17898,7 +13903,7 @@ { "type": { "inverted": true, - "value": "ToggleSwitch::ButtonFSM::PropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -17911,7 +13916,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::SetPropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" }, "parameters": [ "Object", @@ -17940,7 +13945,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::SetPropertyTouchId" + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyTouchId" }, "parameters": [ "Object", @@ -17956,7 +13961,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::PropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -17969,7 +13974,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::SetPropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" }, "parameters": [ "Object", @@ -17986,7 +13991,7 @@ { "type": { "inverted": true, - "value": "ToggleSwitch::ButtonFSM::PropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -17998,7 +14003,7 @@ { "type": { "inverted": true, - "value": "ToggleSwitch::ButtonFSM::PropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -18011,7 +14016,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::SetPropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::SetPropertyState" }, "parameters": [ "Object", @@ -18040,7 +14045,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ToggleSwitch::ButtonFSM", + "supplementaryInformation": "SpriteToggleSwitch::ButtonFSM", "type": "behavior" } ], @@ -18058,7 +14063,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::PropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -18089,7 +14094,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ToggleSwitch::ButtonFSM", + "supplementaryInformation": "SpriteToggleSwitch::ButtonFSM", "type": "behavior" } ], @@ -18107,7 +14112,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::PropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -18138,7 +14143,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ToggleSwitch::ButtonFSM", + "supplementaryInformation": "SpriteToggleSwitch::ButtonFSM", "type": "behavior" } ], @@ -18156,7 +14161,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::PropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -18187,7 +14192,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ToggleSwitch::ButtonFSM", + "supplementaryInformation": "SpriteToggleSwitch::ButtonFSM", "type": "behavior" } ], @@ -18205,7 +14210,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::PropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -18231,7 +14236,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::PropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -18262,7 +14267,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ToggleSwitch::ButtonFSM", + "supplementaryInformation": "SpriteToggleSwitch::ButtonFSM", "type": "behavior" } ], @@ -18280,7 +14285,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::PropertyState" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyState" }, "parameters": [ "Object", @@ -18311,7 +14316,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ToggleSwitch::ButtonFSM", + "supplementaryInformation": "SpriteToggleSwitch::ButtonFSM", "type": "behavior" } ], @@ -18357,7 +14362,7 @@ }, { "type": { - "value": "ToggleSwitch::ButtonFSM::PropertyShouldCheckHovering" + "value": "SpriteToggleSwitch::ButtonFSM::PropertyShouldCheckHovering" }, "parameters": [ "Object", @@ -18388,7 +14393,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ToggleSwitch::ButtonFSM", + "supplementaryInformation": "SpriteToggleSwitch::ButtonFSM", "type": "behavior" } ], @@ -18483,7 +14488,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::IsClicked" + "value": "SpriteToggleSwitch::ButtonFSM::IsClicked" }, "parameters": [ "Object", @@ -18495,7 +14500,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::SwitchFSM::SetPropertyWasChecked" + "value": "SpriteToggleSwitch::SwitchFSM::SetPropertyWasChecked" }, "parameters": [ "Object", @@ -18510,7 +14515,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::SwitchFSM::IsChecked" + "value": "SpriteToggleSwitch::SwitchFSM::IsChecked" }, "parameters": [ "Object", @@ -18522,7 +14527,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::SwitchFSM::SetPropertyWasChecked" + "value": "SpriteToggleSwitch::SwitchFSM::SetPropertyWasChecked" }, "parameters": [ "Object", @@ -18538,7 +14543,7 @@ { "type": { "inverted": true, - "value": "ToggleSwitch::SwitchFSM::PropertyWasChecked" + "value": "SpriteToggleSwitch::SwitchFSM::PropertyWasChecked" }, "parameters": [ "Object", @@ -18549,7 +14554,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::SwitchFSM::SetPropertyIsChecked" + "value": "SpriteToggleSwitch::SwitchFSM::SetPropertyIsChecked" }, "parameters": [ "Object", @@ -18564,7 +14569,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::SwitchFSM::PropertyWasChecked" + "value": "SpriteToggleSwitch::SwitchFSM::PropertyWasChecked" }, "parameters": [ "Object", @@ -18575,7 +14580,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::SwitchFSM::SetPropertyIsChecked" + "value": "SpriteToggleSwitch::SwitchFSM::SetPropertyIsChecked" }, "parameters": [ "Object", @@ -18597,7 +14602,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ToggleSwitch::SwitchFSM", + "supplementaryInformation": "SpriteToggleSwitch::SwitchFSM", "type": "behavior" } ], @@ -18616,7 +14621,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::SwitchFSM::PropertyIsChecked" + "value": "SpriteToggleSwitch::SwitchFSM::PropertyIsChecked" }, "parameters": [ "Object", @@ -18645,7 +14650,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ToggleSwitch::SwitchFSM", + "supplementaryInformation": "SpriteToggleSwitch::SwitchFSM", "type": "behavior" } ], @@ -18675,7 +14680,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::SwitchFSM::SetPropertyIsChecked" + "value": "SpriteToggleSwitch::SwitchFSM::SetPropertyIsChecked" }, "parameters": [ "Object", @@ -18700,7 +14705,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::SwitchFSM::SetPropertyIsChecked" + "value": "SpriteToggleSwitch::SwitchFSM::SetPropertyIsChecked" }, "parameters": [ "Object", @@ -18720,7 +14725,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "ToggleSwitch::SwitchFSM", + "supplementaryInformation": "SpriteToggleSwitch::SwitchFSM", "type": "behavior" }, { @@ -18742,7 +14747,7 @@ "description": "", "group": "", "extraInformation": [ - "ToggleSwitch::ButtonFSM" + "SpriteToggleSwitch::ButtonFSM" ], "hidden": false, "name": "ButtonFSM" @@ -18773,10 +14778,10 @@ ], "eventsBasedObjects": [ { - "defaultName": "", + "defaultName": "Switch", "description": "", "fullName": "Toggle switch", - "name": "ToggleSwitch", + "name": "SpriteToggleSwitch", "eventsFunctions": [ { "fullName": "", @@ -18848,7 +14853,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::ToggleSwitch::PropertyIsChecked" + "value": "SpriteToggleSwitch::SpriteToggleSwitch::PropertyIsChecked" }, "parameters": [ "Object" @@ -18858,7 +14863,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::SwitchFSM::SetChecked" + "value": "SpriteToggleSwitch::SwitchFSM::SetChecked" }, "parameters": [ "Checked", @@ -18874,7 +14879,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ToggleSwitch::ToggleSwitch", + "supplementaryInformation": "SpriteToggleSwitch::SpriteToggleSwitch", "type": "object" } ], @@ -18911,7 +14916,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ToggleSwitch::ToggleSwitch", + "supplementaryInformation": "SpriteToggleSwitch::SpriteToggleSwitch", "type": "object" } ], @@ -18950,7 +14955,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::ToggleSwitch::IsChecked" + "value": "SpriteToggleSwitch::SpriteToggleSwitch::IsChecked" }, "parameters": [ "Object", @@ -18991,7 +14996,7 @@ { "type": { "inverted": true, - "value": "ToggleSwitch::ToggleSwitch::IsChecked" + "value": "SpriteToggleSwitch::SpriteToggleSwitch::IsChecked" }, "parameters": [ "Object", @@ -19155,7 +15160,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ToggleSwitch::ToggleSwitch", + "supplementaryInformation": "SpriteToggleSwitch::SpriteToggleSwitch", "type": "object" } ], @@ -19186,7 +15191,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::SwitchFSM::IsChecked" + "value": "SpriteToggleSwitch::SwitchFSM::IsChecked" }, "parameters": [ "Checked", @@ -19211,7 +15216,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ToggleSwitch::ToggleSwitch", + "supplementaryInformation": "SpriteToggleSwitch::SpriteToggleSwitch", "type": "object" } ], @@ -19241,7 +15246,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::SwitchFSM::SetChecked" + "value": "SpriteToggleSwitch::SwitchFSM::SetChecked" }, "parameters": [ "Checked", @@ -19267,7 +15272,7 @@ "actions": [ { "type": { - "value": "ToggleSwitch::SwitchFSM::SetChecked" + "value": "SpriteToggleSwitch::SwitchFSM::SetChecked" }, "parameters": [ "Checked", @@ -19283,7 +15288,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ToggleSwitch::ToggleSwitch", + "supplementaryInformation": "SpriteToggleSwitch::SpriteToggleSwitch", "type": "object" }, { @@ -19309,7 +15314,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::IsIdle" + "value": "SpriteToggleSwitch::ButtonFSM::IsIdle" }, "parameters": [ "Checked", @@ -19334,7 +15339,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ToggleSwitch::ToggleSwitch", + "supplementaryInformation": "SpriteToggleSwitch::SpriteToggleSwitch", "type": "object" } ], @@ -19353,7 +15358,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::IsClicked" + "value": "SpriteToggleSwitch::ButtonFSM::IsClicked" }, "parameters": [ "Checked", @@ -19378,7 +15383,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ToggleSwitch::ToggleSwitch", + "supplementaryInformation": "SpriteToggleSwitch::SpriteToggleSwitch", "type": "object" } ], @@ -19396,7 +15401,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::IsHovered" + "value": "SpriteToggleSwitch::ButtonFSM::IsHovered" }, "parameters": [ "Checked", @@ -19421,7 +15426,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ToggleSwitch::ToggleSwitch", + "supplementaryInformation": "SpriteToggleSwitch::SpriteToggleSwitch", "type": "object" } ], @@ -19440,7 +15445,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::IsFocused" + "value": "SpriteToggleSwitch::ButtonFSM::IsFocused" }, "parameters": [ "Checked", @@ -19465,7 +15470,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ToggleSwitch::ToggleSwitch", + "supplementaryInformation": "SpriteToggleSwitch::SpriteToggleSwitch", "type": "object" } ], @@ -19484,7 +15489,7 @@ "conditions": [ { "type": { - "value": "ToggleSwitch::ButtonFSM::IsPressed" + "value": "SpriteToggleSwitch::ButtonFSM::IsPressed" }, "parameters": [ "Checked", @@ -19509,7 +15514,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ToggleSwitch::ToggleSwitch", + "supplementaryInformation": "SpriteToggleSwitch::SpriteToggleSwitch", "type": "object" } ], @@ -19552,7 +15557,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ToggleSwitch::ToggleSwitch", + "supplementaryInformation": "SpriteToggleSwitch::SpriteToggleSwitch", "type": "object" }, { @@ -19592,7 +15597,7 @@ { "description": "Object", "name": "Object", - "supplementaryInformation": "ToggleSwitch::ToggleSwitch", + "supplementaryInformation": "SpriteToggleSwitch::SpriteToggleSwitch", "type": "object" } ], @@ -19718,7 +15723,7 @@ "behaviors": [ { "name": "ButtonFSM", - "type": "ToggleSwitch::ButtonFSM", + "type": "SpriteToggleSwitch::ButtonFSM", "ShouldCheckHovering": true, "State": "Idle", "TouchId": 0, @@ -19728,7 +15733,7 @@ }, { "name": "SwitchFSM", - "type": "ToggleSwitch::SwitchFSM", + "type": "SpriteToggleSwitch::SwitchFSM", "ButtonFSM": "ButtonFSM", "IsChecked": false, "WasChecked": false From 3151c87fc316acbc80ce4c547da689cd7763d270 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Sat, 17 Dec 2022 20:44:28 +0100 Subject: [PATCH 48/98] Add some descriptions --- examples/resource-bar/game.json | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 1e25977f3..6578ce9da 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -756,6 +756,21 @@ "numberProperties": [], "stringProperties": [], "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "height": 24, + "layer": "", + "name": "NewSlider", + "persistentUuid": "c7b92c23-0955-4f75-a05c-9c255758b26e", + "width": 265, + "x": 404, + "y": 484, + "zOrder": 6, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] } ], "objects": [ @@ -13043,10 +13058,15 @@ "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTIzLDIzSDljLTMuOSwwLTctMy4xLTctN3YwYzAtMy45LDMuMS03LDctN2gxNGMzLjksMCw3LDMuMSw3LDd2MEMzMCwxOS45LDI2LjksMjMsMjMsMjN6Ii8+DQo8Y2lyY2xlIGNsYXNzPSJzdDAiIGN4PSI5IiBjeT0iMTYiIHI9IjQiLz4NCjwvc3ZnPg0K", "name": "SpriteToggleSwitch", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/Interface Elements/8d0cd8cd0c9318f4f6efde6ee6b4c192bd19306467f80c9970387a259300f895_Interface Elements_interface_ui_toggle_switch_on_off.svg", - "shortDescription": "", + "shortDescription": "Toggle switch that users can click or touch.", "version": "", - "description": "", - "tags": [], + "description": "Toggle switch that users can click or touch. The switch can be customized with sprites.", + "tags": [ + "ui", + "widget", + "toggle", + "switch" + ], "authorIds": [], "dependencies": [], "eventsFunctions": [ @@ -14779,7 +14799,7 @@ "eventsBasedObjects": [ { "defaultName": "Switch", - "description": "", + "description": "A toggle switch that users can click or touch.", "fullName": "Toggle switch", "name": "SpriteToggleSwitch", "eventsFunctions": [ From 6ad8c32d25c0a9d92f92731e952327cbca0e1e8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Mon, 19 Dec 2022 13:54:46 +0100 Subject: [PATCH 49/98] Fix the click on the slider bar. --- examples/resource-bar/game.json | 180 ++++++++++++++++++++++++-------- 1 file changed, 135 insertions(+), 45 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 6578ce9da..4615ebb7f 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -5224,9 +5224,9 @@ "ammo" ], "authorIds": [ + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2", "gqDaZjCfevOOxBYkK6zlhtZnXCg1", - "q8ubdigLvIRXLxsJDDTaokO41mc2", - "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" + "q8ubdigLvIRXLxsJDDTaokO41mc2" ], "dependencies": [], "eventsFunctions": [], @@ -6836,7 +6836,10 @@ "ui", "widget" ], - "authorIds": [], + "authorIds": [ + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2", + "gqDaZjCfevOOxBYkK6zlhtZnXCg1" + ], "dependencies": [], "eventsFunctions": [ { @@ -8566,6 +8569,55 @@ ], "objectGroups": [] }, + { + "description": "Check if the button is currently being pressed outside with mouse or touch.", + "fullName": "Is held outside", + "functionType": "Condition", + "name": "IsPressedOutside", + "sentence": "_PARAM0_ is held outside", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, { "fullName": "Should check mouse position", "functionType": "Condition", @@ -9078,12 +9130,30 @@ }, { "type": { - "value": "PanelSpriteSlider::ButtonFSM::IsClicked" + "value": "BuiltinCommonInstructions::Or" }, - "parameters": [ - "Background", - "ButtonFSM", - "" + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::IsPressed" + }, + "parameters": [ + "Background", + "ButtonFSM", + "" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::IsPressedOutside" + }, + "parameters": [ + "Background", + "ButtonFSM", + "" + ] + } ] } ], @@ -10634,9 +10704,9 @@ "ammo" ], "authorIds": [ + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2", "gqDaZjCfevOOxBYkK6zlhtZnXCg1", - "q8ubdigLvIRXLxsJDDTaokO41mc2", - "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" + "q8ubdigLvIRXLxsJDDTaokO41mc2" ], "dependencies": [], "eventsFunctions": [], @@ -11885,6 +11955,57 @@ ] } ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteObject::Width" + }, + "parameters": [ + "Resource", + "<", + "Buffer.Width()" + ] + } + ], + "actions": [ + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Buffer", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteObject::Width" + }, + "parameters": [ + "Resource", + ">=", + "Buffer.Width()" + ] + } + ], + "actions": [ + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Buffer" + ] + } + ] } ], "parameters": [ @@ -12124,31 +12245,6 @@ } ] }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "PanelSpriteObject::Width" - }, - "parameters": [ - "Resource", - ">=", - "Buffer.Width()" - ] - } - ], - "actions": [ - { - "type": { - "value": "Cache" - }, - "parameters": [ - "Buffer" - ] - } - ] - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ @@ -12173,15 +12269,6 @@ "=", "round(Object.FullBarWidth() * Resource.ResourceBar::PreviousHighValue() / Resource.ResourceBar::MaxValue())" ] - }, - { - "type": { - "value": "Montre" - }, - "parameters": [ - "Buffer", - "" - ] } ] } @@ -13067,7 +13154,10 @@ "toggle", "switch" ], - "authorIds": [], + "authorIds": [ + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2", + "gqDaZjCfevOOxBYkK6zlhtZnXCg1" + ], "dependencies": [], "eventsFunctions": [ { From d67ad1c4520256edb302e1b64512cb07a10d9d8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Mon, 19 Dec 2022 16:00:25 +0100 Subject: [PATCH 50/98] Handle ToogleSwitch hot reload. --- examples/resource-bar/game.json | 203 +++++++++++++++++++++++++------- 1 file changed, 162 insertions(+), 41 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 4615ebb7f..c801ff1c0 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -1016,7 +1016,8 @@ "content": { "CheckboxHorizontalAnchorTargetValue": "Left", "LabelAnchorDeltaX": -16, - "CheckboxAnchorDeltaX": -8 + "CheckboxAnchorDeltaX": -8, + "IsChecked": true }, "childrenContent": { "Checked": { @@ -2403,7 +2404,7 @@ "name": "PanelSpriteButton", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Interface Elements/Interface Elements_interface_ui_button_ok_cta_clock_tap.svg", "shortDescription": "A button that can be customized.", - "version": "1.1.3", + "version": "1.2.0", "description": "The button can be customized with a background for each state and a label. It handles user interactions and a simple condition can be used to check if it is clicked.", "origin": { "identifier": "PanelSpriteButton", @@ -3972,15 +3973,6 @@ "2" ] }, - { - "type": { - "value": "TextObject::SetTextAlignment" - }, - "parameters": [ - "Label", - "\"center\"" - ] - }, { "type": { "value": "TextObject::SetWrapping" @@ -4946,16 +4938,6 @@ "Idle.Width() - Object.PropertyLeftPadding() - Object.PropertyRightPadding()" ] }, - { - "type": { - "value": "TextObject::WrappingWidth" - }, - "parameters": [ - "Label", - "=", - "Idle.Width() - Object.PropertyLeftPadding() - Object.PropertyRightPadding()" - ] - }, { "type": { "value": "SetCenterY" @@ -5056,7 +5038,9 @@ "label": "Left padding", "description": "", "group": "Padding", - "extraInformation": [], + "extraInformation": [ + "Label" + ], "hidden": false, "name": "LeftPadding" }, @@ -5066,27 +5050,33 @@ "label": "Right padding", "description": "", "group": "Padding", - "extraInformation": [], + "extraInformation": [ + "Label" + ], "hidden": false, "name": "RightPadding" }, { - "value": "0", + "value": "", "type": "Number", "label": "Top padding", "description": "", "group": "Padding", - "extraInformation": [], + "extraInformation": [ + "Label" + ], "hidden": false, "name": "TopPadding" }, { - "value": "0", + "value": "", "type": "Number", "label": "Bottom padding", "description": "", "group": "Padding", - "extraInformation": [], + "extraInformation": [ + "Label" + ], "hidden": false, "name": "BottomPadding" }, @@ -5116,7 +5106,7 @@ "behaviors": [], "string": "Text", "font": "", - "textAlignment": "center", + "textAlignment": "", "characterSize": 20, "color": { "b": 0, @@ -14981,6 +14971,51 @@ "", "" ] + }, + { + "type": { + "value": "SpriteToggleSwitch::SpriteToggleSwitch::SetPropertyPreviousIsChecked" + }, + "parameters": [ + "Object", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SpriteToggleSwitch::SpriteToggleSwitch::PropertyIsChecked" + }, + "parameters": [ + "Object" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteToggleSwitch::SwitchFSM::SetChecked" + }, + "parameters": [ + "Checked", + "SwitchFSM", + "no", + "" + ] + }, + { + "type": { + "value": "SpriteToggleSwitch::SpriteToggleSwitch::SetPropertyPreviousIsChecked" + }, + "parameters": [ + "Object", + "" + ] } ] } @@ -15018,8 +15053,93 @@ "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [] + "conditions": [ + { + "type": { + "value": "SpriteToggleSwitch::SpriteToggleSwitch::PropertyIsChecked" + }, + "parameters": [ + "Object" + ] + }, + { + "type": { + "inverted": true, + "value": "SpriteToggleSwitch::SpriteToggleSwitch::PropertyPreviousIsChecked" + }, + "parameters": [ + "Object", + "SwitchFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteToggleSwitch::SpriteToggleSwitch::SetChecked" + }, + "parameters": [ + "Object", + "yes", + "no" + ] + }, + { + "type": { + "value": "SpriteToggleSwitch::SpriteToggleSwitch::SetPropertyPreviousIsChecked" + }, + "parameters": [ + "Object", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SpriteToggleSwitch::SpriteToggleSwitch::PropertyIsChecked" + }, + "parameters": [ + "Object" + ] + }, + { + "type": { + "value": "SpriteToggleSwitch::SpriteToggleSwitch::PropertyPreviousIsChecked" + }, + "parameters": [ + "Object", + "SwitchFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteToggleSwitch::SpriteToggleSwitch::SetChecked" + }, + "parameters": [ + "Object", + "SwitchFSM", + "no" + ] + }, + { + "type": { + "value": "SpriteToggleSwitch::SpriteToggleSwitch::SetPropertyPreviousIsChecked" + }, + "parameters": [ + "Object", + "no" + ] + } + ] } ], "parameters": [ @@ -15223,7 +15343,7 @@ }, { "type": { - "value": "ToggleSwitch::Scale" + "value": "SpriteToggleSwitch::SpriteToggleSwitch::Scale" }, "parameters": [ "Object", @@ -15250,15 +15370,6 @@ "=", "Checked.Variable(Height)" ] - }, - { - "type": { - "value": "ToggleSwitch::ToggleSwitch::CenterLabel" - }, - "parameters": [ - "Object", - "" - ] } ] } @@ -15338,7 +15449,7 @@ "functionType": "Action", "group": "Switch finite state machine configuration", "name": "SetChecked", - "sentence": "_PARAM0_ is checked: _PARAM2_", + "sentence": "_PARAM0_ is checked: _PARAM1_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -15812,6 +15923,16 @@ "extraInformation": [], "hidden": false, "name": "IsChecked" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "It's used to detect a change at hot reload.", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "PreviousIsChecked" } ], "objects": [ From 5bc1dbec7b7e0c9125392d7c4e928911f1ba861a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Mon, 19 Dec 2022 16:21:23 +0100 Subject: [PATCH 51/98] Clean up comments. --- examples/resource-bar/game.json | 119 +++++++++++++------------------- 1 file changed, 48 insertions(+), 71 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index c801ff1c0..b36e3cf35 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -5191,14 +5191,14 @@ "author": "", "category": "User interface", "extensionNamespace": "", - "fullName": "Resource bar (tiled)", + "fullName": "Resource bar (separeted units)", "helpPath": "", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWRvdHMtaG9yaXpvbnRhbCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNiwxMkEyLDIgMCAwLDEgMTgsMTBBMiwyIDAgMCwxIDIwLDEyQTIsMiAwIDAsMSAxOCwxNEEyLDIgMCAwLDEgMTYsMTJNMTAsMTJBMiwyIDAgMCwxIDEyLDEwQTIsMiAwIDAsMSAxNCwxMkEyLDIgMCAwLDEgMTIsMTRBMiwyIDAgMCwxIDEwLDEyTTQsMTJBMiwyIDAgMCwxIDYsMTBBMiwyIDAgMCwxIDgsMTJBMiwyIDAgMCwxIDYsMTRBMiwyIDAgMCwxIDQsMTJaIiAvPjwvc3ZnPg==", "name": "TiledUnitsBar", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/063e9152cf65bc0f3be2a828afd950c3ecf1b1fc72feefdc2467252fe987dc0f_dots-horizontal.svg", - "shortDescription": "A bar that represents a resource in the game (health, mana, ammo, etc)", + "shortDescription": "A bar that represents a resource in the game (health, mana, ammo, etc).", "version": "1.0.0", - "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", + "description": "A bar that represents a resource in the game (health, mana, ammo, etc).", "origin": { "identifier": "ResourceBar", "name": "gdevelop-extension-store" @@ -5877,8 +5877,8 @@ "eventsBasedObjects": [ { "defaultName": "ResourceBar", - "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", - "fullName": "Resource bar (using separate units)", + "description": "A bar that represents a resource in the game (health, mana, ammo, etc).", + "fullName": "Resource bar (separated units)", "name": "TiledUnitsBar", "eventsFunctions": [ { @@ -5926,7 +5926,7 @@ "textG": 0, "textR": 0 }, - "comment": "Create one background instance for of each state.\nOnly the instance for the current state is shown.", + "comment": "Create the child-object instances.", "comment2": "" }, { @@ -6035,7 +6035,7 @@ "textG": 0, "textR": 0 }, - "comment": "Pass configuration to the behavior", + "comment": "Pass the configuration to the behavior.", "comment2": "" }, { @@ -6183,7 +6183,7 @@ "textG": 0, "textR": 0 }, - "comment": "Children instances must be resized when the button size change:\n- backgrounds for each state are resized to take the full dimensions of the button\n- the label is put back at the center of the button\n\nThe scale is set back to 1 because it means that the parent instance has the same dimensions as the union of its children instances.", + "comment": "Children instances must be resized when the button size change:\n- background is resized to take the full dimensions of the button\n- the bar size is refreshed according to the value\n\nThe scale is set back to 1 because it means that the parent instance has the same dimensions as the union of its children instances.", "comment2": "" }, { @@ -8809,7 +8809,7 @@ "textG": 0, "textR": 0 }, - "comment": "Create one background instance for of each state.\nOnly the instance for the current state is shown.", + "comment": "Create the child-object instances.", "comment2": "" }, { @@ -8894,7 +8894,7 @@ "textG": 0, "textR": 0 }, - "comment": "Place the label over the backgrounds.", + "comment": "Create the label that is displayed over the thumb.", "comment2": "" }, { @@ -8961,7 +8961,7 @@ "textG": 0, "textR": 0 }, - "comment": "Pass configuration to the behavior", + "comment": "Pass the configuration to the behavior.", "comment2": "" }, { @@ -9367,7 +9367,7 @@ "textG": 0, "textR": 0 }, - "comment": "Children instances must be resized when the parent size change:\n- backgrounds is resized to take the full dimensions of the button\n- the label is put back at the center of the bar\n\nThe scale is set back to 1 because it means that the parent instance has the same dimensions as the union of its children instances.", + "comment": "Children instances must be resized when the parent size change:\n- background is resized to take the full dimensions of the parent\n- the label is put back at the center of the bar\n\nThe scale is set back to 1 because it means that the parent instance has the same dimensions as the union of its children instances.", "comment2": "" }, { @@ -9425,26 +9425,6 @@ "Object.Height()" ] }, - { - "type": { - "value": "DebuggerTools::ConsoleLog" - }, - "parameters": [ - "ToString(max(Background.BoundingBoxBottom(), max(Label.BoundingBoxBottom(), Thumb.BoundingBoxBottom())) - min(Background.BoundingBoxTop(), min(Label.BoundingBoxTop(), Thumb.BoundingBoxTop())))", - "", - "" - ] - }, - { - "type": { - "value": "DebuggerTools::ConsoleLog" - }, - "parameters": [ - "\"Height: \" + ToString(Background.Height()) + \" --> \" + ToString(Object.Height())", - "", - "" - ] - }, { "type": { "value": "PanelSpriteSlider::PanelSpriteSlider::Scale" @@ -10676,9 +10656,9 @@ "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8cGF0aCBkPSJNMjgsMTJIMTRINGMtMi4yLDAtNCwxLjgtNCw0czEuOCw0LDQsNGgxMGgxNGMyLjIsMCw0LTEuOCw0LTRTMzAuMiwxMiwyOCwxMnogTTQsMThjLTEuMSwwLTItMC45LTItMnMwLjktMiwyLTJoMTANCgljMS4xLDAsMiwwLjksMiwycy0wLjksMi0yLDJINHoiLz4NCjwvc3ZnPg0K", "name": "PanelSpriteContinuousBar", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Glyphster Pack/Master/SVG/Interface Elements/ea06363a57846caab544f536b78a952234b68d4941d41c1577852a1d61aefec3_Interface Elements_interface_ui_loading_progress_bar.svg", - "shortDescription": "A bar that represents a resource in the game (health, mana, ammo, etc)", + "shortDescription": "A bar that represents a resource in the game (health, mana, ammo, etc).", "version": "1.0.0", - "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", + "description": "A bar that represents a resource in the game (health, mana, ammo, etc).", "origin": { "identifier": "ResourceBar", "name": "gdevelop-extension-store" @@ -11357,8 +11337,8 @@ "eventsBasedObjects": [ { "defaultName": "ResourceBar", - "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", - "fullName": "Resource bar (using a continuous panel sprite)", + "description": "A bar that represents a resource in the game (health, mana, ammo, etc).", + "fullName": "Resource bar (continuous)", "name": "PanelSpriteContinuousBar", "eventsFunctions": [ { @@ -11406,7 +11386,7 @@ "textG": 0, "textR": 0 }, - "comment": "Create one background instance for of each state.\nOnly the instance for the current state is shown.", + "comment": "Create the child-object instances.", "comment2": "" }, { @@ -11425,18 +11405,6 @@ "" ] }, - { - "type": { - "value": "Create" - }, - "parameters": [ - "", - "Buffer", - "0", - "0", - "" - ] - }, { "type": { "value": "Create" @@ -11486,6 +11454,18 @@ } ], "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Buffer", + "0", + "0", + "" + ] + }, { "type": { "value": "ChangePlan" @@ -11508,7 +11488,7 @@ "textG": 0, "textR": 0 }, - "comment": "Place the label over the backgrounds.", + "comment": "Create the label over the bar.", "comment2": "" }, { @@ -11591,7 +11571,7 @@ "textG": 0, "textR": 0 }, - "comment": "Pass configuration to the behavior", + "comment": "Pass the configuration to the behavior.", "comment2": "" }, { @@ -11807,7 +11787,7 @@ "textG": 0, "textR": 0 }, - "comment": "Children instances must be resized when the parent size change:\n- backgrounds is resized to take the full dimensions of the button\n- the label is put back at the center of the bar\n\nThe scale is set back to 1 because it means that the parent instance has the same dimensions as the union of its children instances.", + "comment": "Children instances must be resized when the parent size change:\n- background is resized to take the full dimensions of the parent\n- the bar size is refreshed according to the value\n- the label is put back at the center of the bar\n\nThe scale is set back to 1 because it means that the parent instance has the same dimensions as the union of its children instances.", "comment2": "" }, { @@ -13136,7 +13116,7 @@ "name": "SpriteToggleSwitch", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/Interface Elements/8d0cd8cd0c9318f4f6efde6ee6b4c192bd19306467f80c9970387a259300f895_Interface Elements_interface_ui_toggle_switch_on_off.svg", "shortDescription": "Toggle switch that users can click or touch.", - "version": "", + "version": "1.0.0", "description": "Toggle switch that users can click or touch. The switch can be customized with sprites.", "tags": [ "ui", @@ -14899,7 +14879,7 @@ "textG": 0, "textR": 0 }, - "comment": "Create one background instance for of each state.\nOnly the instance for the current state is shown.", + "comment": "Create one background instance for of each state.", "comment2": "" }, { @@ -14929,25 +14909,22 @@ "0", "" ] - }, - { - "type": { - "value": "Cache" - }, - "parameters": [ - "Checked" - ] - }, - { - "type": { - "value": "Cache" - }, - "parameters": [ - "Unchecked" - ] } ] }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Pass the configuration to the behavior.\nThe PreviousIsChecked property allows to detect a change of \"intitial value\" on hot reload.", + "comment2": "" + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ @@ -15283,7 +15260,7 @@ "textG": 0, "textR": 0 }, - "comment": "Children instances must be resized when the button size change:\n- backgrounds for each state are resized to take the full dimensions of the button\n- the label is put back at the center of the button\n\nThe scale is set back to 1 because it means that the parent instance has the same dimensions as the union of its children instances.", + "comment": "Children instances must be resized when the button size change:\n- backgrounds for each state are resized to take the full dimensions of the button\n\nThe scale is set back to 1 because it means that the parent instance has the same dimensions as the union of its children instances.", "comment2": "" }, { From 591ebd57c48cff5271818ef6f95fa7d92c361613 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Tue, 20 Dec 2022 17:04:45 +0100 Subject: [PATCH 52/98] Use a Sprite for the ToggleSwitch. --- .../resource-bar/assets/Chest_Full Open_1.png | Bin 0 -> 361 bytes .../resource-bar/assets/Chest_Full Open_2.png | Bin 0 -> 417 bytes .../resource-bar/assets/Chest_Full Open_3.png | Bin 0 -> 432 bytes examples/resource-bar/game.json | 925 ++++++++++-------- 4 files changed, 524 insertions(+), 401 deletions(-) create mode 100644 examples/resource-bar/assets/Chest_Full Open_1.png create mode 100644 examples/resource-bar/assets/Chest_Full Open_2.png create mode 100644 examples/resource-bar/assets/Chest_Full Open_3.png diff --git a/examples/resource-bar/assets/Chest_Full Open_1.png b/examples/resource-bar/assets/Chest_Full Open_1.png new file mode 100644 index 0000000000000000000000000000000000000000..557b404ba5f88e4969b45dc53de0d60fdafa2b9b GIT binary patch literal 361 zcmV-v0ha!WP)o>lWw}xF(NKXx~If16>^4>gp2|yJ@FpsH2#GYlB5G z3UNs9t%lmDlmB$j&$&O}IS2lYq?DzUvixnIsfxSHeR@$24Iy2_VmPw#LP`J=U^);i zCkuS{jniYXmEhv4U^!VZ9S9E3mQ}!f_ClxMCW&+Av*)b=NxF*&Y;NO6Gy$Lqn&i6` zfzpn8h`=F9Ta5up+Cl`5uD>O?xi@v7?-m>#yl*5h0XqG5l^*BxPxb&fk8*}18-QN) z)fa(HCvf08t48p`Y(-Gug&AI$X(}b}w6$)if2c|M)q-EwSNO>ZH_7}w*I)Dj+z>R`5`-;+O;LYEj)g4_(bD4LUl3hdQW`W1 zZ0O4^1jP%&&D+~x_fmm|(zBiCJRh9*<-mVIDJ4oN8C2(U55--b{bL^&(&`(q>YE^) z62eCo0GeyoBU2dpH`42R-+~FkS<|G86f}B{3h8#C%93w<3FY zH{!JGBDod$?(w?~50wJW?FKtdAzAJ)`r>%)A8UC44j!L*pB>?$Qtt~jQQCN$D00000 LNkvXXu0mjfMt`)> literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Chest_Full Open_3.png b/examples/resource-bar/assets/Chest_Full Open_3.png new file mode 100644 index 0000000000000000000000000000000000000000..745233b26c75387e1121acb8feef343783aa56d0 GIT binary patch literal 432 zcmV;h0Z;ykP)r74WS#{4U4EQr7%TAC6ZqA|R!nly2U zFn??Q7@6G4+>4(0KsGvLvNv}Cc$Kr zV6q8-p|_mXZC+DN487%OTtW!zc3a}0(4SfuFtu3QBTqhL9#xLid)yBR0J;GQ@FInB z0IY9D#`Nyr!+ZG!fa}H{-GIa(o<|Dh@YMTcsx<&U&Q_-fyq90-zwL6^wm2^J@YMUH zLNQXI7=w6zxLvhIHy}A5jdidHoDQ=3@ Date: Tue, 20 Dec 2022 16:08:38 +0000 Subject: [PATCH 53/98] Optimised images with calibre/image-actions --- .../resource-bar/assets/Chest_Full Open_1.png | Bin 361 -> 232 bytes .../resource-bar/assets/Chest_Full Open_2.png | Bin 417 -> 262 bytes .../resource-bar/assets/Chest_Full Open_3.png | Bin 432 -> 275 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/resource-bar/assets/Chest_Full Open_1.png b/examples/resource-bar/assets/Chest_Full Open_1.png index 557b404ba5f88e4969b45dc53de0d60fdafa2b9b..c4588f5e15d4b5c4e88fbfb767e32d1d71d2b342 100644 GIT binary patch delta 205 zcmV;;05bpS0_XvdBYyx1a7bBm000XT000XT0n*)m`~Uy|nn^@KR5;7ckwFeXFcd_4 zmWqW9HxNe=2jWy#?&1J8m66O(`>T{#kc>=!Cez0^<~NVE)o>lWw}xF(NK zXx~If16>^4>gp2|yJ@FpsH2#GYlB5G3UNs9t%lmDlmB$j&$&O}IS2lYq?DzUvixnI zsfxSHeR@$24Iy2_VmPw#LP`J=U^);iCkuS{jniYXmEhv4V1GGTFdYaE&z4odeD*@8 z-zJH3=CkLm0ZF=x2yAZSM>GMT37X`)6@k)@dWgUwNn4EpN!mgLj;_BYxVblVpzjtO z9lUQOFabLKc9kCI^iTExIFE9MBO8ET^wk%EO($^RI;%$T!fZuQ;Ds4pm}x2{u3<4QpGbh}&Va6!>c0A8s<}ulJtLrNrMmCC1>=X+4wAIBZm55#N%_@+U)NXo h$q6^f{5;oR^a12Kh&qOe7S{j(002ovPDHLkV1gTRo;?5n diff --git a/examples/resource-bar/assets/Chest_Full Open_2.png b/examples/resource-bar/assets/Chest_Full Open_2.png index a67e5faed724d8c6e05bb83a9786a63d8e63d256..f258a6beb103ad142c916190250e74856c44c6be 100644 GIT binary patch delta 235 zcmVSBYyx1a7bBm000XT000XT0n*)m`~Uy|xJg7oR5;76kUtsuzA3;e;f7)Wd3!6ftN=Xa{=Utb8ppjfAi z$6;Z++0u0W1sb$&q~TY$vg2kR>l|p%$|M?`x3xE^bLbK3tYiT-aiM=dFdz~jE~(u> zd%(TFEDh;i36do$&ii?{(`_BmAXwYj{(6ah>hBphps8qxKnC+z>R` z5`-;+O;LYEj)g4_(bD4LUl3hdQW`W1Z0O4^1jP%&&D+~x_fmm|(zBiCJRh9*<-mVI zDJ4oN8C2(U55--b{bL^&(&`(q>YE^)62eCo0GeyoBU2dpH-FOWdf$N4yp0~2rU-3?lAh| zcoR`pLw4h;h|FS?tDrqIg5_;8+%V|T{_(%X3g=T0-)6mFaq{a_KO#~TX6S1 m2wac$n-~-t@aG5WhfnKgmW5GRi-G_E002ovPDHLkU;%=0$g;2i diff --git a/examples/resource-bar/assets/Chest_Full Open_3.png b/examples/resource-bar/assets/Chest_Full Open_3.png index 745233b26c75387e1121acb8feef343783aa56d0..f59df675ae5e6456a55e100f1b03d1a8284f80fd 100644 GIT binary patch delta 248 zcmVclGzZ-Qxt`v@aHsq zO1utp+f5dx?=IoN>mU_>t}8okW-;y)9=w7?z-2r2OJYP!H*r+Y<0Wq;4Kz;MgLOS@vO*PbdaUjHewv+^Q5u&V>IGl`fT~4+_V=5|tpG07P2IHu ycL0#U4ZsjNK%H{s0DjF7B@^TpClicbVT^t?7VQ0eToY*k0000 zr74WS#{4U4EQr7%TAC6ZqA|R!nly2UFn??lVGw5fT6dX)oor=O$@!|Xk0=F>vmh>pwORM z7%;V1+apgtWPcu2j?{bH4+#Le0SWLTg>nF_Z$`%S?%%_E`2~RM#va{(#2}tW3gz(B z`(&y$06xxErw6>3U+BN>a@e*wF7@!#`=mlKQlS`wcz(EDwMI7}IUkL6un3$EvikBu z0q{Kx&{T6F`%`_?fqilF!1l Date: Fri, 23 Dec 2022 16:40:44 +0100 Subject: [PATCH 54/98] Use the new action to jump at the end of the toggle switch animation on object creation. --- examples/resource-bar/game.json | 309 ++++++++++++++------------------ 1 file changed, 139 insertions(+), 170 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 4ae095716..5a5b9182b 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -1201,31 +1201,6 @@ "IsChecked": true }, "childrenContent": { - "Checked": { - "bottomMargin": 0, - "height": 42, - "leftMargin": 0, - "rightMargin": 0, - "texture": "Checked.png", - "tiled": false, - "topMargin": 0, - "width": 42 - }, - "Label": { - "bold": false, - "italic": false, - "smoothed": true, - "underlined": false, - "string": "Screen shakes!", - "font": "", - "textAlignment": "left", - "characterSize": 20, - "color": { - "b": 206, - "g": 206, - "r": 206 - } - }, "State": { "updateIfNotVisible": false, "animations": [ @@ -1288,16 +1263,6 @@ ] } ] - }, - "Unchecked": { - "bottomMargin": 0, - "height": 42, - "leftMargin": 0, - "rightMargin": 0, - "texture": "Unchecked.png", - "tiled": false, - "topMargin": 0, - "width": 42 } } }, @@ -1315,31 +1280,6 @@ "CheckboxAnchorDeltaX": 8 }, "childrenContent": { - "Checked": { - "bottomMargin": 0, - "height": 42, - "leftMargin": 0, - "rightMargin": 0, - "texture": "Checked.png", - "tiled": false, - "topMargin": 0, - "width": 42 - }, - "Label": { - "bold": false, - "italic": false, - "smoothed": true, - "underlined": false, - "string": "اهتزاز الشاشة", - "font": "", - "textAlignment": "right", - "characterSize": 20, - "color": { - "b": 206, - "g": 206, - "r": 206 - } - }, "State": { "updateIfNotVisible": false, "animations": [ @@ -1402,16 +1342,6 @@ ] } ] - }, - "Unchecked": { - "bottomMargin": 0, - "height": 42, - "leftMargin": 0, - "rightMargin": 0, - "texture": "Unchecked.png", - "tiled": false, - "topMargin": 0, - "width": 42 } } }, @@ -15435,6 +15365,31 @@ ] } ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteToggleSwitch::SpriteToggleSwitch::UpdateStateAnimation" + }, + "parameters": [ + "Object", + "" + ] + }, + { + "type": { + "value": "ChangeSprite" + }, + "parameters": [ + "State", + "=", + "State.AnimationFrameCount() - 1" + ] + } + ] } ], "parameters": [ @@ -15576,110 +15531,19 @@ "sentence": "", "events": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Apply states", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "SpriteToggleSwitch::SpriteToggleSwitch::UpdateStateAnimation" }, - "comment": "Show the right background accordingly to the new state.\n\nTODO : This play the animation at the beginning it needs some expressions and actions to change the frame number.", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SpriteToggleSwitch::SpriteToggleSwitch::IsChecked" - }, - "parameters": [ - "Object", - "ButtonFSM", - "" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "SetAnimationName" - }, - "parameters": [ - "State", - "\"Checked\"" - ] - }, - { - "type": { - "value": "PlayAnimation" - }, - "parameters": [ - "State" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "SpriteToggleSwitch::SpriteToggleSwitch::IsChecked" - }, - "parameters": [ - "Object", - "ButtonFSM", - "" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "SetAnimationName" - }, - "parameters": [ - "State", - "\"Unchecked\"" - ] - }, - { - "type": { - "value": "PlayAnimation" - }, - "parameters": [ - "State" - ] - } + "parameters": [ + "Object", + "" ] } - ], - "parameters": [] + ] } ], "parameters": [ @@ -16033,6 +15897,111 @@ } ], "objectGroups": [] + }, + { + "description": "Update the state animation.", + "fullName": "Update state animation", + "functionType": "Action", + "name": "UpdateStateAnimation", + "sentence": "Update the state animation of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteToggleSwitch::SpriteToggleSwitch::IsChecked" + }, + "parameters": [ + "Object", + "ButtonFSM", + "" + ] + }, + { + "type": { + "value": "AnimationName" + }, + "parameters": [ + "State", + "\"Unchecked\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "State", + "\"Checked\"" + ] + }, + { + "type": { + "value": "PlayAnimation" + }, + "parameters": [ + "State" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SpriteToggleSwitch::SpriteToggleSwitch::IsChecked" + }, + "parameters": [ + "Object", + "ButtonFSM", + "" + ] + }, + { + "type": { + "value": "AnimationName" + }, + "parameters": [ + "State", + "\"Checked\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAnimationName" + }, + "parameters": [ + "State", + "\"Unchecked\"" + ] + }, + { + "type": { + "value": "PlayAnimation" + }, + "parameters": [ + "State" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteToggleSwitch::SpriteToggleSwitch", + "type": "object" + } + ], + "objectGroups": [] } ], "propertyDescriptors": [ From b8f189183d02a0ec2ecda6c992b1c55e38979496 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Fri, 23 Dec 2022 18:16:52 +0100 Subject: [PATCH 55/98] Remove broken resources --- examples/resource-bar/game.json | 100 -------------------------------- 1 file changed, 100 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 5a5b9182b..dd649beb0 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -619,58 +619,6 @@ "name": "Yellow Button_Pressed.png" } }, - { - "alwaysLoaded": false, - "file": "assets/Chest_Closed.png", - "kind": "image", - "metadata": "", - "name": "Chest_Closed.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/16x16 Dungeon Tileset/Items/Chest/f8965b683fff88c13806b14595718f37673588271c5d88b9ff5a2168069d600b_Chest_Closed.png", - "name": "Chest_Closed.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Chest_Empty Open_1.png", - "kind": "image", - "metadata": "", - "name": "Chest_Empty Open_1.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/16x16 Dungeon Tileset/Items/Chest/f8965b683fff88c13806b14595718f37673588271c5d88b9ff5a2168069d600b_Chest_Empty Open_1.png", - "name": "Chest_Empty Open_1.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Chest_Empty Open_2.png", - "kind": "image", - "metadata": "", - "name": "Chest_Empty Open_2.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/16x16 Dungeon Tileset/Items/Chest/9e232927ca40159da28525fb294cce71d0224c916bd7b399b8fa12199b526b3d_Chest_Empty Open_2.png", - "name": "Chest_Empty Open_2.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Chest_Empty Open_3.png", - "kind": "image", - "metadata": "", - "name": "Chest_Empty Open_3.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/16x16 Dungeon Tileset/Items/Chest/c0dcbe5a8c82bcc31f66131f7dd40597f989f0613c2ba2e7c3d68de3dd291591_Chest_Empty Open_3.png", - "name": "Chest_Empty Open_3.png" - } - }, { "alwaysLoaded": false, "file": "assets/Chest_Full Open_1.png", @@ -710,54 +658,6 @@ "name": "Chest_Full Open_3.png" } }, - { - "alwaysLoaded": false, - "file": "assets/Chest_Mimic Open_1.png", - "kind": "image", - "metadata": "", - "name": "Chest_Mimic Open_1.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/16x16 Dungeon Tileset/Items/Chest/f8965b683fff88c13806b14595718f37673588271c5d88b9ff5a2168069d600b_Chest_Mimic Open_1.png", - "name": "Chest_Mimic Open_1.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Chest_Mimic Open_2.png", - "kind": "image", - "metadata": "", - "name": "Chest_Mimic Open_2.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/16x16 Dungeon Tileset/Items/Chest/5b74aa4bf4fbfd0018a6bf4bbf341c6af1beb2c23599d50532dafe630f6e7920_Chest_Mimic Open_2.png", - "name": "Chest_Mimic Open_2.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Chest_Mimic Open_3.png", - "kind": "image", - "metadata": "", - "name": "Chest_Mimic Open_3.png", - "smoothed": false, - "userAdded": false, - "origin": { - "identifier": "https://asset-resources.gdevelop.io/public-resources/16x16 Dungeon Tileset/Items/Chest/215c553c30faf2bb2c8364deb80cef93705b0089b7c657f21049723dd8501a46_Chest_Mimic Open_3.png", - "name": "Chest_Mimic Open_3.png" - } - }, - { - "alwaysLoaded": false, - "file": "assets/Chest_Mimic Open_3.png", - "kind": "image", - "metadata": "", - "name": "assets\\Chest_Mimic Open_3.png", - "smoothed": true, - "userAdded": false - }, { "alwaysLoaded": false, "file": "assets/Chest_Full Open_3.png", From 03c234d8c34c2a9f91bf31be6eb3ff7dfc1478bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Fri, 23 Dec 2022 19:46:20 +0100 Subject: [PATCH 56/98] Add a "held outside" condition for the button. --- examples/resource-bar/game.json | 49 +++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index dd649beb0..1dacdb223 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -3973,6 +3973,55 @@ ], "objectGroups": [] }, + { + "description": "Check if the button is currently being pressed outside with mouse or touch.", + "fullName": "Is held outside", + "functionType": "Condition", + "name": "IsPressedOutside", + "sentence": "_PARAM0_ is held outside", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, { "fullName": "Should check mouse position", "functionType": "Condition", From 53bccc8006823f3a1d04eb67bfc1c11680de07c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Mon, 2 Jan 2023 13:58:55 +0100 Subject: [PATCH 57/98] Typos --- examples/resource-bar/game.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 1dacdb223..c611668ae 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -5522,7 +5522,7 @@ "author": "", "category": "User interface", "extensionNamespace": "", - "fullName": "Resource bar (separeted units)", + "fullName": "Resource bar (separated units)", "helpPath": "", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWRvdHMtaG9yaXpvbnRhbCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNiwxMkEyLDIgMCAwLDEgMTgsMTBBMiwyIDAgMCwxIDIwLDEyQTIsMiAwIDAsMSAxOCwxNEEyLDIgMCAwLDEgMTYsMTJNMTAsMTJBMiwyIDAgMCwxIDEyLDEwQTIsMiAwIDAsMSAxNCwxMkEyLDIgMCAwLDEgMTIsMTRBMiwyIDAgMCwxIDEwLDEyTTQsMTJBMiwyIDAgMCwxIDYsMTBBMiwyIDAgMCwxIDgsMTJBMiwyIDAgMCwxIDYsMTRBMiwyIDAgMCwxIDQsMTJaIiAvPjwvc3ZnPg==", "name": "TiledUnitsBar", @@ -6228,7 +6228,7 @@ "textG": 0, "textR": 0 }, - "comment": "This allows to detect a change of \"intitial value\" on hot reload.", + "comment": "This allows to detect a change of \"intial value\" on hot reload.", "comment2": "" }, { @@ -9111,7 +9111,7 @@ "textG": 0, "textR": 0 }, - "comment": "This allows to detect a change of \"intitial value\" on hot reload.", + "comment": "This allows to detect a change of \"intial value\" on hot reload.", "comment2": "" }, { @@ -11688,7 +11688,7 @@ "textG": 0, "textR": 0 }, - "comment": "This allows to detect a change of \"intitial value\" on hot reload.", + "comment": "This allows to detect a change of \"intial value\" on hot reload.", "comment2": "" }, { @@ -15241,7 +15241,7 @@ "textG": 0, "textR": 0 }, - "comment": "Pass the configuration to the behavior.\nThe PreviousIsChecked property allows to detect a change of \"intitial value\" on hot reload.", + "comment": "Pass the configuration to the behavior.\nThe PreviousIsChecked property allows to detect a change of \"intial value\" on hot reload.", "comment2": "" }, { From 4940e0c67b684c7f423e5312c47b471f3ed82408 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Mon, 2 Jan 2023 14:29:18 +0100 Subject: [PATCH 58/98] Add missing descriptions. --- examples/resource-bar/game.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index c611668ae..fc71cbd49 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -5553,7 +5553,7 @@ "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", + "description": "A bar that represents a resource in the game (health, mana, ammo, etc).", "fullName": "Resource bar", "name": "ResourceBar", "objectType": "", @@ -7477,6 +7477,7 @@ "objectGroups": [] }, { + "description": "Return the bar value bounds size.", "fullName": "Size", "functionType": "Expression", "name": "Size", @@ -11013,7 +11014,7 @@ "eventsFunctions": [], "eventsBasedBehaviors": [ { - "description": "A bar that represents a resource in the game (health, mana, ammo, etc)", + "description": "A bar that represents a resource in the game (health, mana, ammo, etc).", "fullName": "Resource bar", "name": "ResourceBar", "objectType": "", @@ -14882,7 +14883,7 @@ "sharedPropertyDescriptors": [] }, { - "description": "", + "description": "The finite state machine used internally by the switch object.", "fullName": "Switch finite state machine", "name": "SwitchFSM", "objectType": "", From 4bcf93865d281224fdf8a56d46e832f32ad05424 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Mon, 2 Jan 2023 14:37:32 +0100 Subject: [PATCH 59/98] Fix slider name. --- examples/resource-bar/game.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index fc71cbd49..ab989ed24 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -7139,7 +7139,7 @@ "author": "", "category": "User interface", "extensionNamespace": "", - "fullName": "Slider (tiled)", + "fullName": "Slider", "helpPath": "", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", "name": "PanelSpriteSlider", From ae3149bca6b56061371bbd61a09de1d7c3cd4b07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Mon, 2 Jan 2023 14:59:18 +0100 Subject: [PATCH 60/98] Review change: typo --- examples/resource-bar/game.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index ab989ed24..1b24a077d 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -15958,7 +15958,7 @@ { "value": "true", "type": "Boolean", - "label": "Is cheched", + "label": "Is checked", "description": "", "group": "", "extraInformation": [], From d6532f8243c363b06378075ca1701bce093f8597 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Fri, 6 Jan 2023 12:37:14 +0100 Subject: [PATCH 61/98] Prepare button 1.3.0 update. --- examples/resource-bar/game.json | 429 ++++---------------------------- 1 file changed, 42 insertions(+), 387 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 1b24a077d..e0cce0c9b 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -2686,7 +2686,7 @@ "name": "PanelSpriteButton", "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Interface Elements/Interface Elements_interface_ui_button_ok_cta_clock_tap.svg", "shortDescription": "A button that can be customized.", - "version": "1.2.0", + "version": "1.3.0", "description": "The button can be customized with a background for each state and a label. It handles user interactions and a simple condition can be used to check if it is clicked.", "origin": { "identifier": "PanelSpriteButton", @@ -2700,29 +2700,7 @@ "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" ], "dependencies": [], - "eventsFunctions": [ - { - "fullName": "Any touch pressed", - "functionType": "Condition", - "name": "AnyTouchPressed", - "private": true, - "sentence": "Any touch is pressed", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": [ - "eventsFunctionContext.returnValue = runtimeScene.getGame().getInputManager()._touches.firstKey() !== null;", - "" - ], - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [], - "objectGroups": [] - } - ], + "eventsFunctions": [], "eventsBasedBehaviors": [ { "description": "The finite state machine used internally by the button object.", @@ -2737,45 +2715,6 @@ "name": "doStepPostEvents", "sentence": "", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "We don't use the touch capability condition because the device could have both touch and cursor.", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "PanelSpriteButton::AnyTouchPressed" - }, - "parameters": [ - "", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyShouldCheckHovering" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ] - }, { "colorB": 228, "colorG": 176, @@ -2870,33 +2809,21 @@ "conditions": [ { "type": { - "inverted": true, - "value": "PanelSpriteButton::AnyTouchPressed" - }, - "parameters": [ - "", - "" - ] - }, - { - "type": { - "value": "PanelSpriteButton::ButtonFSM::ShouldCheckMousePosition" + "value": "PanelSpriteButton::ButtonFSM::PropertyShouldCheckHovering" }, "parameters": [ "Object", - "Behavior", - "" + "Behavior" ] }, { "type": { - "value": "SourisSurObjet" + "value": "CollisionPoint" }, "parameters": [ "Object", - "", - "no", - "" + "MouseX(Object.Layer(), 0)", + "MouseY(Object.Layer(), 0)" ] } ], @@ -2997,7 +2924,7 @@ "conditions": [ { "type": { - "value": "HasAnyTouchStarted" + "value": "HasAnyTouchOrMouseStarted" }, "parameters": [ "" @@ -3020,7 +2947,7 @@ "events": [ { "type": "BuiltinCommonInstructions::Repeat", - "repeatExpression": "StartedTouchCount()", + "repeatExpression": "StartedTouchOrMouseCount()", "conditions": [], "actions": [], "events": [ @@ -3033,8 +2960,8 @@ }, "parameters": [ "Object", - "TouchX(StartedTouchId(Object.Behavior::PropertyIndex()), Object.Layer(), 0)", - "TouchY(StartedTouchId(Object.Behavior::PropertyIndex()), Object.Layer(), 0)" + "TouchX(StartedTouchOrMouseId(Object.Behavior::PropertyIndex()), Object.Layer(), 0)", + "TouchY(StartedTouchOrMouseId(Object.Behavior::PropertyIndex()), Object.Layer(), 0)" ] } ], @@ -3047,7 +2974,7 @@ "Object", "Behavior", "=", - "StartedTouchId(Object.Behavior::PropertyIndex())" + "StartedTouchOrMouseId(Object.Behavior::PropertyIndex())" ] }, { @@ -3109,146 +3036,62 @@ ] } ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyIndex" - }, - "parameters": [ - "Object", - "Behavior", - "+", - "1" - ] - } - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Ignore mouse events when a touch is active because the mouse is probably an echo of touch events.\nThe mouse press could be a touch that has not the right TouchId.", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "MouseButtonPressed" - }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "PanelSpriteButton::AnyTouchPressed" - }, - "parameters": [ - "", - "" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "The trigger once must be before the state condition to detect a new press.", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + }, { - "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyMouseIsInside" + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 }, - "parameters": [ - "Object", - "Behavior" - ] + "comment": "We don't use the touch capability condition because the device could have both touch and cursor.", + "comment2": "" }, { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyState" + "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ - "Object", - "Behavior", - "=", - "\"Hovered\"" + "StartedTouchOrMouseId(Object.Behavior::PropertyIndex())", + ">", + "1" ] - }, + } + ], + "actions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyState" + "value": "PanelSpriteButton::ButtonFSM::SetPropertyShouldCheckHovering" }, "parameters": [ "Object", "Behavior", - "=", - "\"Idle\"" + "" ] } ] } - ], + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], "actions": [ { "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + "value": "PanelSpriteButton::ButtonFSM::SetPropertyIndex" }, "parameters": [ "Object", "Behavior", - "=", - "\"PressedInside\"" + "+", + "1" ] } ] @@ -3469,117 +3312,6 @@ "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Ignore mouse events when a touch is active because the mouse is probably an echo of touch events.\nThe mouse release could be a touch release that has not the right TouchId.", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "MouseButtonReleased" - }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "inverted": true, - "value": "PanelSpriteButton::AnyTouchPressed" - }, - "parameters": [ - "", - "" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"PressedInside\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Validated\"" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "PanelSpriteButton::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"PressedInside\"" - ] - }, - { - "type": { - "inverted": true, - "value": "PanelSpriteButton::ButtonFSM::PropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Validated\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" - }, - "parameters": [ - "Object", - "Behavior", - "=", - "\"Idle\"" - ] - } - ] - } - ] - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ @@ -4021,83 +3753,6 @@ } ], "objectGroups": [] - }, - { - "fullName": "Should check mouse position", - "functionType": "Condition", - "name": "ShouldCheckMousePosition", - "private": true, - "sentence": "_PARAM0_ should check mouse position", - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Using a function avoid the OR to unselect Object when the property is not set.", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "MouseButtonPressed" - }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "value": "PanelSpriteButton::ButtonFSM::PropertyShouldCheckHovering" - }, - "parameters": [ - "Object", - "Behavior" - ] - } - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "object" - }, - { - "description": "Behavior", - "name": "Behavior", - "supplementaryInformation": "PanelSpriteButton::ButtonFSM", - "type": "behavior" - } - ], - "objectGroups": [] } ], "propertyDescriptors": [ From d7914886997ac27400f16987dce94b10a5abe3f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Fri, 6 Jan 2023 13:34:42 +0100 Subject: [PATCH 62/98] Rename the Resource child to FillBar. --- examples/resource-bar/game.json | 292 ++++++++++++++++---------------- 1 file changed, 146 insertions(+), 146 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index e0cce0c9b..07f66a47b 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -18,7 +18,7 @@ "templateSlug": "", "useExternalSourceFiles": false, "version": "1.0.0", - "name": "Extension: Resource Bar", + "name": "Extension: FillBar Bar", "description": "", "author": "", "windowWidth": 800, @@ -1049,6 +1049,16 @@ "topMargin": 6, "width": 96 }, + "FillBar": { + "bottomMargin": 0, + "height": 8, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\tiled_Health Bar Fill.png", + "tiled": false, + "topMargin": 0, + "width": 32 + }, "Label": { "bold": false, "italic": false, @@ -1064,16 +1074,6 @@ "r": 211 } }, - "Resource": { - "bottomMargin": 0, - "height": 8, - "leftMargin": 0, - "rightMargin": 0, - "texture": "assets\\tiled_Health Bar Fill.png", - "tiled": false, - "topMargin": 0, - "width": 32 - }, "Thumb": { "bottomMargin": 6, "height": 32, @@ -1898,7 +1898,7 @@ "texture": "assets\\Empty Heart.png", "width": 78 }, - "Resource": { + "FillBar": { "height": 26, "texture": "assets\\Full Heart.png", "width": 78 @@ -1934,7 +1934,7 @@ "texture": "assets\\tiled_Tiled Empty UI Heart.png", "width": 48 }, - "Resource": { + "FillBar": { "height": 16, "texture": "assets\\tiled_Tiled Filler UI Heart.png", "width": 16 @@ -1978,6 +1978,16 @@ "topMargin": 0, "width": 32 }, + "FillBar": { + "bottomMargin": 0, + "height": 8, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\tiled_Health Bar Fill.png", + "tiled": false, + "topMargin": 0, + "width": 32 + }, "Label": { "bold": false, "italic": false, @@ -1992,16 +2002,6 @@ "g": 255, "r": 255 } - }, - "Resource": { - "bottomMargin": 0, - "height": 8, - "leftMargin": 0, - "rightMargin": 0, - "texture": "assets\\tiled_Health Bar Fill.png", - "tiled": false, - "topMargin": 0, - "width": 32 } } }, @@ -2044,6 +2044,16 @@ "topMargin": 0, "width": 32 }, + "FillBar": { + "bottomMargin": 3, + "height": 8, + "leftMargin": 4, + "rightMargin": 4, + "texture": "assets\\Health Bar2.png", + "tiled": false, + "topMargin": 3, + "width": 32 + }, "Label": { "bold": false, "italic": false, @@ -2058,16 +2068,6 @@ "g": 255, "r": 255 } - }, - "Resource": { - "bottomMargin": 3, - "height": 8, - "leftMargin": 4, - "rightMargin": 4, - "texture": "assets\\Health Bar2.png", - "tiled": false, - "topMargin": 3, - "width": 32 } } }, @@ -2109,6 +2109,16 @@ "topMargin": 0, "width": 32 }, + "FillBar": { + "bottomMargin": 0, + "height": 8, + "leftMargin": 0, + "rightMargin": 0, + "texture": "assets\\tiled_Health Bar Fill.png", + "tiled": false, + "topMargin": 0, + "width": 32 + }, "Label": { "bold": false, "italic": false, @@ -2123,16 +2133,6 @@ "g": 255, "r": 255 } - }, - "Resource": { - "bottomMargin": 0, - "height": 8, - "leftMargin": 0, - "rightMargin": 0, - "texture": "assets\\tiled_Health Bar Fill.png", - "tiled": false, - "topMargin": 0, - "width": 32 } } } @@ -5949,7 +5949,7 @@ }, "parameters": [ "", - "Resource", + "FillBar", "0", "0", "" @@ -5980,7 +5980,7 @@ "value": "ChangePlan" }, "parameters": [ - "Resource", + "FillBar", "=", "3" ] @@ -6337,7 +6337,7 @@ "value": "MettreXY" }, "parameters": [ - "Resource", + "FillBar", "=", "Bar.X()", "=", @@ -6361,7 +6361,7 @@ "description": "the value of the object.", "fullName": "Value", "functionType": "ExpressionAndCondition", - "group": "Resource bar", + "group": "FillBar bar", "name": "Value", "sentence": "the value", "events": [ @@ -6374,7 +6374,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Resource.ResourceBar::Value()" + "FillBar.ResourceBar::Value()" ] } ] @@ -6409,7 +6409,7 @@ "value": "PanelSpriteContinuousBar::ResourceBar::SetValue" }, "parameters": [ - "Resource", + "FillBar", "ResourceBar", "=", "GetArgumentAsNumber(\"Value\")", @@ -6421,9 +6421,9 @@ "value": "TiledSpriteObject::Width" }, "parameters": [ - "Resource", + "FillBar", "=", - "Resource.ResourceBar::Value() * Object.PropertyUnitWidth()" + "FillBar.ResourceBar::Value() * Object.PropertyUnitWidth()" ] } ] @@ -6449,7 +6449,7 @@ "description": "the maximum value of the object.", "fullName": "Maximum value", "functionType": "ExpressionAndCondition", - "group": "Resource bar configuration", + "group": "FillBar bar configuration", "name": "MaxValue", "sentence": "the maximum value", "events": [ @@ -6462,7 +6462,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Resource.ResourceBar::PropertyMaxValue()" + "FillBar.ResourceBar::PropertyMaxValue()" ] } ] @@ -6497,7 +6497,7 @@ "value": "PanelSpriteContinuousBar::ResourceBar::SetMaxValue" }, "parameters": [ - "Resource", + "FillBar", "ResourceBar", "=", "GetArgumentAsNumber(\"Value\")", @@ -6546,7 +6546,7 @@ "description": "Check if the bar is empty.", "fullName": "Empty", "functionType": "Condition", - "group": "Resource bar", + "group": "FillBar bar", "name": "IsEmpty", "sentence": "_PARAM0_ bar is empty", "events": [ @@ -6558,7 +6558,7 @@ "value": "PanelSpriteContinuousBar::ResourceBar::IsEmpty" }, "parameters": [ - "Resource", + "FillBar", "ResourceBar", "=" ] @@ -6590,7 +6590,7 @@ "description": "Check if the bar is full.", "fullName": "Full", "functionType": "Condition", - "group": "Resource bar", + "group": "FillBar bar", "name": "IsFull", "sentence": "_PARAM0_ bar is full", "events": [ @@ -6602,7 +6602,7 @@ "value": "PanelSpriteContinuousBar::ResourceBar::IsFull" }, "parameters": [ - "Resource", + "FillBar", "ResourceBar", "=" ] @@ -6691,7 +6691,7 @@ "description": "", "group": "", "extraInformation": [ - "Resource", + "FillBar", "Bar" ], "hidden": false, @@ -6704,7 +6704,7 @@ "description": "", "group": "", "extraInformation": [ - "Resource", + "FillBar", "Bar" ], "hidden": false, @@ -6717,7 +6717,7 @@ "description": "Only used by the scene editor.", "group": "", "extraInformation": [ - "Resource", + "FillBar", "Bar" ], "hidden": true, @@ -6740,7 +6740,7 @@ { "assetStoreId": "", "height": 32, - "name": "Resource", + "name": "FillBar", "tags": "", "texture": "", "type": "TiledSpriteObject::TiledSprite", @@ -6973,7 +6973,7 @@ "description": "the minimum value of the object.", "fullName": "Minimum value", "functionType": "ExpressionAndCondition", - "group": "Resource bar configuration", + "group": "FillBar bar configuration", "name": "MinValue", "sentence": "the minimum value", "events": [ @@ -7054,7 +7054,7 @@ "description": "the maximum value of the object.", "fullName": "Maximum value", "functionType": "ExpressionAndCondition", - "group": "Resource bar configuration", + "group": "FillBar bar configuration", "name": "MaxValue", "sentence": "the maximum value", "events": [ @@ -7175,7 +7175,7 @@ "description": "the step size of the object.", "fullName": "Step size", "functionType": "ExpressionAndCondition", - "group": "Resource bar configuration", + "group": "FillBar bar configuration", "name": "StepSize", "sentence": "the step size", "events": [ @@ -8821,7 +8821,7 @@ }, "parameters": [ "", - "Resource", + "FillBar", "0", "0", "" @@ -8854,7 +8854,7 @@ "value": "ChangePlan" }, "parameters": [ - "Resource", + "FillBar", "=", "2" ] @@ -9142,8 +9142,8 @@ "parameters": [ "Object", "=", - "Resource.Slider::MinValue() + Resource.Slider::Size() * (MouseX() - Object.FullBarLeft()) / Object.FullBarWidth()", - "Resource.Slider::MinValue() + Resource.Slider::Size() * (MouseX() - Object.FullBarLeft()) / Object.FullBarWidth()" + "FillBar.Slider::MinValue() + FillBar.Slider::Size() * (MouseX() - Object.FullBarLeft()) / Object.FullBarWidth()", + "FillBar.Slider::MinValue() + FillBar.Slider::Size() * (MouseX() - Object.FullBarLeft()) / Object.FullBarWidth()" ] } ], @@ -9204,8 +9204,8 @@ "parameters": [ "Object", "=", - "Resource.Slider::MinValue() + Resource.Slider::Size() * (Thumb.CenterX() - Object.FullBarLeft()) / Object.FullBarWidth()", - "Resource.Slider::MinValue() + Resource.Slider::Size() * (Thumb.CenterX() - Object.FullBarLeft()) / Object.FullBarWidth()" + "FillBar.Slider::MinValue() + FillBar.Slider::Size() * (Thumb.CenterX() - Object.FullBarLeft()) / Object.FullBarWidth()", + "FillBar.Slider::MinValue() + FillBar.Slider::Size() * (Thumb.CenterX() - Object.FullBarLeft()) / Object.FullBarWidth()" ] } ], @@ -9515,7 +9515,7 @@ "description": "the value of the slider.", "fullName": "Value", "functionType": "ExpressionAndCondition", - "group": "Resource bar", + "group": "FillBar bar", "name": "Value", "sentence": "the value", "events": [ @@ -9528,7 +9528,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Resource.Slider::Value()" + "FillBar.Slider::Value()" ] } ] @@ -9563,7 +9563,7 @@ "value": "PanelSpriteSlider::Slider::SetValue" }, "parameters": [ - "Resource", + "FillBar", "Slider", "=", "GetArgumentAsNumber(\"Value\")", @@ -9602,7 +9602,7 @@ "description": "the minimum value of the slider.", "fullName": "Minimum value", "functionType": "ExpressionAndCondition", - "group": "Resource bar configuration", + "group": "FillBar bar configuration", "name": "MinValue", "sentence": "the minimum value", "events": [ @@ -9615,7 +9615,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Resource.Slider::MinValue()" + "FillBar.Slider::MinValue()" ] } ] @@ -9650,7 +9650,7 @@ "value": "PanelSpriteSlider::Slider::SetMinValue" }, "parameters": [ - "Resource", + "FillBar", "Slider", "=", "GetArgumentAsNumber(\"Value\")", @@ -9698,7 +9698,7 @@ "description": "the maximum value of the slider.", "fullName": "Maximum value", "functionType": "ExpressionAndCondition", - "group": "Resource bar configuration", + "group": "FillBar bar configuration", "name": "MaxValue", "sentence": "the maximum value", "events": [ @@ -9711,7 +9711,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Resource.Slider::MaxValue()" + "FillBar.Slider::MaxValue()" ] } ] @@ -9746,7 +9746,7 @@ "value": "PanelSpriteSlider::Slider::SetMaxValue" }, "parameters": [ - "Resource", + "FillBar", "Slider", "=", "GetArgumentAsNumber(\"Value\")", @@ -9794,7 +9794,7 @@ "description": "the step size of the slider.", "fullName": "Step size", "functionType": "ExpressionAndCondition", - "group": "Resource bar configuration", + "group": "FillBar bar configuration", "name": "StepSize", "sentence": "the step size", "events": [ @@ -9807,7 +9807,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Resource.Slider::StepSize()" + "FillBar.Slider::StepSize()" ] } ] @@ -9842,7 +9842,7 @@ "value": "PanelSpriteSlider::Slider::SetStepSize" }, "parameters": [ - "Resource", + "FillBar", "Slider", "=", "GetArgumentAsNumber(\"Value\")", @@ -9872,7 +9872,7 @@ "description": "Check if the label is shown.", "fullName": "Label is shown", "functionType": "Condition", - "group": "Resource bar configuration", + "group": "FillBar bar configuration", "name": "IsLabelShown", "sentence": "_PARAM0_ label is shown", "events": [ @@ -9914,7 +9914,7 @@ "description": "Show (or hide) the label on the bar.", "fullName": "Show label", "functionType": "Action", - "group": "Resource bar configuration", + "group": "FillBar bar configuration", "name": "SetLabelShown", "sentence": "Show the label of _PARAM0_: _PARAM1_", "events": [ @@ -10017,7 +10017,7 @@ "value": "MettreXY" }, "parameters": [ - "Resource", + "FillBar", "=", "Object.PropertyBarLeftPadding()", "=", @@ -10029,7 +10029,7 @@ "value": "PanelSpriteObject::Height" }, "parameters": [ - "Resource", + "FillBar", "=", "round(Background.Height() - Object.PropertyBarTopPadding() - Object.PropertyBarBottomPadding())" ] @@ -10069,7 +10069,7 @@ "parameters": [ "Label", "=", - "round(Resource.CenterY())" + "round(FillBar.CenterY())" ] }, { @@ -10112,9 +10112,9 @@ "value": "PanelSpriteObject::Width" }, "parameters": [ - "Resource", + "FillBar", "=", - "Object.FullBarWidth() * (Resource.Slider::Value() - Resource.Slider::MinValue()) / Resource.Slider::Size()" + "Object.FullBarWidth() * (FillBar.Slider::Value() - FillBar.Slider::MinValue()) / FillBar.Slider::Size()" ] } ] @@ -10130,7 +10130,7 @@ "parameters": [ "Thumb", "=", - "Object.FullBarLeft() + Resource.Width()" + "Object.FullBarLeft() + FillBar.Width()" ] }, { @@ -10140,7 +10140,7 @@ "parameters": [ "Thumb", "=", - "Resource.CenterY()" + "FillBar.CenterY()" ] } ] @@ -10379,7 +10379,7 @@ "group": "Bar", "extraInformation": [ "Label", - "Resource" + "FillBar" ], "hidden": false, "name": "BarLeftPadding" @@ -10392,7 +10392,7 @@ "group": "Bar", "extraInformation": [ "Label", - "Resource" + "FillBar" ], "hidden": false, "name": "BarTopPadding" @@ -10405,7 +10405,7 @@ "group": "Bar", "extraInformation": [ "Label", - "Resource" + "FillBar" ], "hidden": false, "name": "BarRightPadding" @@ -10418,7 +10418,7 @@ "group": "Bar", "extraInformation": [ "Label", - "Resource" + "FillBar" ], "hidden": false, "name": "BarBottomPadding" @@ -10512,7 +10512,7 @@ "description": "Only used by the scene editor.", "group": "", "extraInformation": [ - "Resource" + "FillBar" ], "hidden": true, "name": "ThumbAnchorTarget" @@ -10581,7 +10581,7 @@ "bottomMargin": 0, "height": 32, "leftMargin": 0, - "name": "Resource", + "name": "FillBar", "rightMargin": 0, "tags": "", "texture": "", @@ -10638,7 +10638,7 @@ "author": "", "category": "User interface", "extensionNamespace": "", - "fullName": "Resource bar (continuous)", + "fullName": "FillBar bar (continuous)", "helpPath": "", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8cGF0aCBkPSJNMjgsMTJIMTRINGMtMi4yLDAtNCwxLjgtNCw0czEuOCw0LDQsNGgxMGgxNGMyLjIsMCw0LTEuOCw0LTRTMzAuMiwxMiwyOCwxMnogTTQsMThjLTEuMSwwLTItMC45LTItMnMwLjktMiwyLTJoMTANCgljMS4xLDAsMiwwLjksMiwycy0wLjksMi0yLDJINHoiLz4NCjwvc3ZnPg0K", "name": "PanelSpriteContinuousBar", @@ -10670,7 +10670,7 @@ "eventsBasedBehaviors": [ { "description": "A bar that represents a resource in the game (health, mana, ammo, etc).", - "fullName": "Resource bar", + "fullName": "FillBar bar", "name": "ResourceBar", "objectType": "", "private": true, @@ -10878,7 +10878,7 @@ "description": "the maximum value of the object.", "fullName": "Maximum value", "functionType": "ExpressionAndCondition", - "group": "Resource bar configuration", + "group": "FillBar bar configuration", "name": "MaxValue", "sentence": "the maximum value", "events": [ @@ -11137,7 +11137,7 @@ "description": "the previous high value conservation duration (in seconds) of the object.", "fullName": "Previous high value conservation duration", "functionType": "ExpressionAndCondition", - "group": "Resource bar configuration", + "group": "FillBar bar configuration", "name": "PreviousHighValueDuration", "sentence": "the previous high value conservation duration", "events": [ @@ -11325,7 +11325,7 @@ { "defaultName": "ResourceBar", "description": "A bar that represents a resource in the game (health, mana, ammo, etc).", - "fullName": "Resource bar (continuous)", + "fullName": "FillBar bar (continuous)", "name": "PanelSpriteContinuousBar", "eventsFunctions": [ { @@ -11398,7 +11398,7 @@ }, "parameters": [ "", - "Resource", + "FillBar", "0", "0", "" @@ -11419,7 +11419,7 @@ "value": "ChangePlan" }, "parameters": [ - "Resource", + "FillBar", "=", "3" ] @@ -11603,7 +11603,7 @@ "value": "Tween::RemoveTween" }, "parameters": [ - "Resource", + "FillBar", "Tween", "\"ChangeValue\"" ] @@ -11613,7 +11613,7 @@ "value": "PanelSpriteObject::Width" }, "parameters": [ - "Resource", + "FillBar", "=", "Object.WidthForValue()" ] @@ -11715,7 +11715,7 @@ "value": "Tween::RemoveTween" }, "parameters": [ - "Resource", + "FillBar", "Tween", "\"ChangeValue\"" ] @@ -11731,7 +11731,7 @@ "value": "PanelSpriteObject::Width" }, "parameters": [ - "Resource", + "FillBar", "=", "Object.WidthForValue()" ] @@ -11921,7 +11921,7 @@ "value": "PanelSpriteObject::Width" }, "parameters": [ - "Resource", + "FillBar", "<", "Buffer.Width()" ] @@ -11947,7 +11947,7 @@ "value": "PanelSpriteObject::Width" }, "parameters": [ - "Resource", + "FillBar", ">=", "Buffer.Width()" ] @@ -11992,7 +11992,7 @@ "value": "MettreXY" }, "parameters": [ - "Resource", + "FillBar", "=", "Object.PropertyBarLeftPadding()", "=", @@ -12004,7 +12004,7 @@ "value": "PanelSpriteObject::Width" }, "parameters": [ - "Resource", + "FillBar", "=", "Object.WidthForValue()" ] @@ -12014,7 +12014,7 @@ "value": "PanelSpriteObject::Height" }, "parameters": [ - "Resource", + "FillBar", "=", "round(Background.Height() - Object.PropertyBarTopPadding() - Object.PropertyBarBottomPadding())" ] @@ -12032,9 +12032,9 @@ "parameters": [ "Buffer", "=", - "Resource.X()", + "FillBar.X()", "=", - "Resource.Y()" + "FillBar.Y()" ] }, { @@ -12044,7 +12044,7 @@ "parameters": [ "Buffer", "=", - "Resource.Width()" + "FillBar.Width()" ] }, { @@ -12054,7 +12054,7 @@ "parameters": [ "Buffer", "=", - "Resource.Height()" + "FillBar.Height()" ] } ] @@ -12092,7 +12092,7 @@ "parameters": [ "Label", "=", - "round(Resource.CenterY())" + "round(FillBar.CenterY())" ] }, { @@ -12122,7 +12122,7 @@ "description": "the value of the object.", "fullName": "Value", "functionType": "ExpressionAndCondition", - "group": "Resource bar", + "group": "FillBar bar", "name": "Value", "sentence": "the value", "events": [ @@ -12135,7 +12135,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Resource.ResourceBar::Value()" + "FillBar.ResourceBar::Value()" ] } ] @@ -12170,7 +12170,7 @@ "value": "PanelSpriteContinuousBar::ResourceBar::SetValue" }, "parameters": [ - "Resource", + "FillBar", "ResourceBar", "=", "GetArgumentAsNumber(\"Value\")", @@ -12182,7 +12182,7 @@ "value": "Tween::AddObjectWidthTween" }, "parameters": [ - "Resource", + "FillBar", "Tween", "\"ChangeValue\"", "Object.WidthForValue()", @@ -12210,7 +12210,7 @@ "value": "PanelSpriteContinuousBar::ResourceBar::IsChanging" }, "parameters": [ - "Resource", + "FillBar", "ResourceBar", "" ] @@ -12224,7 +12224,7 @@ "parameters": [ "Buffer", "=", - "round(Object.FullBarWidth() * Resource.ResourceBar::PreviousHighValue() / Resource.ResourceBar::MaxValue())" + "round(Object.FullBarWidth() * FillBar.ResourceBar::PreviousHighValue() / FillBar.ResourceBar::MaxValue())" ] } ] @@ -12250,7 +12250,7 @@ "description": "the maximum value of the object.", "fullName": "Maximum value", "functionType": "ExpressionAndCondition", - "group": "Resource bar configuration", + "group": "FillBar bar configuration", "name": "MaxValue", "sentence": "the maximum value", "events": [ @@ -12263,7 +12263,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Resource.ResourceBar::PropertyMaxValue()" + "FillBar.ResourceBar::PropertyMaxValue()" ] } ] @@ -12298,7 +12298,7 @@ "value": "PanelSpriteContinuousBar::ResourceBar::SetMaxValue" }, "parameters": [ - "Resource", + "FillBar", "ResourceBar", "=", "GetArgumentAsNumber(\"Value\")", @@ -12346,7 +12346,7 @@ "description": "Check if the bar is empty.", "fullName": "Empty", "functionType": "Condition", - "group": "Resource bar", + "group": "FillBar bar", "name": "IsEmpty", "sentence": "_PARAM0_ is empty", "events": [ @@ -12358,7 +12358,7 @@ "value": "PanelSpriteContinuousBar::ResourceBar::IsEmpty" }, "parameters": [ - "Resource", + "FillBar", "ResourceBar", "=" ] @@ -12390,7 +12390,7 @@ "description": "Check if the bar is full.", "fullName": "Full", "functionType": "Condition", - "group": "Resource bar", + "group": "FillBar bar", "name": "IsFull", "sentence": "_PARAM0_ is full", "events": [ @@ -12402,7 +12402,7 @@ "value": "PanelSpriteContinuousBar::ResourceBar::IsFull" }, "parameters": [ - "Resource", + "FillBar", "ResourceBar", "=" ] @@ -12434,7 +12434,7 @@ "description": "the previous value conservation duration (in seconds) of the object.", "fullName": "Previous value conservation duration", "functionType": "ExpressionAndCondition", - "group": "Resource bar configuration", + "group": "FillBar bar configuration", "name": "PreviousValueDuration", "sentence": "the previous value conservation duration", "events": [ @@ -12447,7 +12447,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Resource.ResourceBar::PropertyPreviousHighValueDuration()" + "FillBar.ResourceBar::PropertyPreviousHighValueDuration()" ] } ] @@ -12482,7 +12482,7 @@ "value": "PanelSpriteContinuousBar::ResourceBar::SetPreviousHighValueDuration" }, "parameters": [ - "Resource", + "FillBar", "ResourceBar", "=", "GetArgumentAsNumber(\"Value\")", @@ -12563,7 +12563,7 @@ "description": "Check if the resource value is changing.", "fullName": "Value is changing", "functionType": "Condition", - "group": "Resource bar", + "group": "FillBar bar", "name": "IsChanging", "private": true, "sentence": "_PARAM0_ value is changing", @@ -12576,7 +12576,7 @@ "value": "PanelSpriteContinuousBar::ResourceBar::IsChanging" }, "parameters": [ - "Resource", + "FillBar", "ResourceBar", "" ] @@ -12620,7 +12620,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "round(Object.FullBarWidth() * Resource.ResourceBar::Value() / Resource.ResourceBar::MaxValue())" + "round(Object.FullBarWidth() * FillBar.ResourceBar::Value() / FillBar.ResourceBar::MaxValue())" ] } ] @@ -12678,7 +12678,7 @@ "description": "Check if the label is shown.", "fullName": "Label is shown", "functionType": "Condition", - "group": "Resource bar configuration", + "group": "FillBar bar configuration", "name": "IsLabelShown", "sentence": "_PARAM0_ label is shown", "events": [ @@ -12720,7 +12720,7 @@ "description": "Show (or hide) the label on the bar.", "fullName": "Show label", "functionType": "Action", - "group": "Resource bar configuration", + "group": "FillBar bar configuration", "name": "SetLabelShown", "sentence": "Show the label of _PARAM0_: _PARAM1_", "events": [ @@ -12851,7 +12851,7 @@ "group": "Bar", "extraInformation": [ "Label", - "Resource", + "FillBar", "Buffer" ], "hidden": false, @@ -12865,7 +12865,7 @@ "group": "Bar", "extraInformation": [ "Label", - "Resource", + "FillBar", "Buffer" ], "hidden": false, @@ -12879,7 +12879,7 @@ "group": "Bar", "extraInformation": [ "Label", - "Resource", + "FillBar", "Buffer" ], "hidden": false, @@ -12893,7 +12893,7 @@ "group": "Bar", "extraInformation": [ "Label", - "Resource", + "FillBar", "Buffer" ], "hidden": false, @@ -12992,7 +12992,7 @@ "description": "Only used by the scene editor.", "group": "", "extraInformation": [ - "Resource" + "FillBar" ], "hidden": true, "name": "LabelVerticalAnchorTarget" @@ -13026,7 +13026,7 @@ "bottomMargin": 0, "height": 32, "leftMargin": 0, - "name": "Resource", + "name": "FillBar", "rightMargin": 0, "tags": "", "texture": "", From 0d33e36be1846b023066d1636ed83ddb45fd439d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Fri, 6 Jan 2023 14:26:41 +0100 Subject: [PATCH 63/98] Increment extension versions. --- examples/resource-bar/game.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 07f66a47b..2853db66d 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -5183,7 +5183,7 @@ "name": "TiledUnitsBar", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/063e9152cf65bc0f3be2a828afd950c3ecf1b1fc72feefdc2467252fe987dc0f_dots-horizontal.svg", "shortDescription": "A bar that represents a resource in the game (health, mana, ammo, etc).", - "version": "1.0.0", + "version": "1.1.0", "description": "A bar that represents a resource in the game (health, mana, ammo, etc).", "origin": { "identifier": "ResourceBar", @@ -6800,7 +6800,7 @@ "name": "PanelSpriteSlider", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/UI Essentials/1678c39a3b2bd3df4f82a8a293770db4986a6bcfd3f78e738ddfc86e39176423_UI Essentials_sliders_options.svg", "shortDescription": "A draggable slider that users can move to select a numerical value.", - "version": "1.0.0", + "version": "1.1.0", "description": "A draggable slider that users can move to select a numerical value. The slider can be customized with sprites.", "origin": { "identifier": "ResourceBar", @@ -10644,7 +10644,7 @@ "name": "PanelSpriteContinuousBar", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Glyphster Pack/Master/SVG/Interface Elements/ea06363a57846caab544f536b78a952234b68d4941d41c1577852a1d61aefec3_Interface Elements_interface_ui_loading_progress_bar.svg", "shortDescription": "A bar that represents a resource in the game (health, mana, ammo, etc).", - "version": "1.0.0", + "version": "1.1.0", "description": "A bar that represents a resource in the game (health, mana, ammo, etc).", "origin": { "identifier": "ResourceBar", From 9d6ea72945aeb97138e3a83e31d3be54532dbed8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Fri, 6 Jan 2023 17:29:04 +0100 Subject: [PATCH 64/98] Prepare button 1.3.0 update: use MouseOnlyCursorX() --- examples/resource-bar/game.json | 44 ++------------------------------- 1 file changed, 2 insertions(+), 42 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 2853db66d..fc85b27fb 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -2822,8 +2822,8 @@ }, "parameters": [ "Object", - "MouseX(Object.Layer(), 0)", - "MouseY(Object.Layer(), 0)" + "MouseOnlyCursorX(Object.Layer(), 0)", + "MouseOnlyCursorY(Object.Layer(), 0)" ] } ], @@ -3036,46 +3036,6 @@ ] } ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "We don't use the touch capability condition because the device could have both touch and cursor.", - "comment2": "" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "StartedTouchOrMouseId(Object.Behavior::PropertyIndex())", - ">", - "1" - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteButton::ButtonFSM::SetPropertyShouldCheckHovering" - }, - "parameters": [ - "Object", - "Behavior", - "" - ] - } - ] } ] }, From 4ce328761454b6065e9fbb86dcf686ec24b0294a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Fri, 6 Jan 2023 17:51:30 +0100 Subject: [PATCH 65/98] Fix the renaming. --- examples/resource-bar/game.json | 38 ++++++++++++++++----------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index fc85b27fb..c9d5fe9ff 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -6321,7 +6321,7 @@ "description": "the value of the object.", "fullName": "Value", "functionType": "ExpressionAndCondition", - "group": "FillBar bar", + "group": "Resource bar", "name": "Value", "sentence": "the value", "events": [ @@ -6409,7 +6409,7 @@ "description": "the maximum value of the object.", "fullName": "Maximum value", "functionType": "ExpressionAndCondition", - "group": "FillBar bar configuration", + "group": "Resource bar configuration", "name": "MaxValue", "sentence": "the maximum value", "events": [ @@ -6506,7 +6506,7 @@ "description": "Check if the bar is empty.", "fullName": "Empty", "functionType": "Condition", - "group": "FillBar bar", + "group": "Resource bar", "name": "IsEmpty", "sentence": "_PARAM0_ bar is empty", "events": [ @@ -6550,7 +6550,7 @@ "description": "Check if the bar is full.", "fullName": "Full", "functionType": "Condition", - "group": "FillBar bar", + "group": "Resource bar", "name": "IsFull", "sentence": "_PARAM0_ bar is full", "events": [ @@ -6933,7 +6933,7 @@ "description": "the minimum value of the object.", "fullName": "Minimum value", "functionType": "ExpressionAndCondition", - "group": "FillBar bar configuration", + "group": "Resource bar configuration", "name": "MinValue", "sentence": "the minimum value", "events": [ @@ -7014,7 +7014,7 @@ "description": "the maximum value of the object.", "fullName": "Maximum value", "functionType": "ExpressionAndCondition", - "group": "FillBar bar configuration", + "group": "Resource bar configuration", "name": "MaxValue", "sentence": "the maximum value", "events": [ @@ -7135,7 +7135,7 @@ "description": "the step size of the object.", "fullName": "Step size", "functionType": "ExpressionAndCondition", - "group": "FillBar bar configuration", + "group": "Resource bar configuration", "name": "StepSize", "sentence": "the step size", "events": [ @@ -9475,7 +9475,7 @@ "description": "the value of the slider.", "fullName": "Value", "functionType": "ExpressionAndCondition", - "group": "FillBar bar", + "group": "Resource bar", "name": "Value", "sentence": "the value", "events": [ @@ -9562,7 +9562,7 @@ "description": "the minimum value of the slider.", "fullName": "Minimum value", "functionType": "ExpressionAndCondition", - "group": "FillBar bar configuration", + "group": "Resource bar configuration", "name": "MinValue", "sentence": "the minimum value", "events": [ @@ -9658,7 +9658,7 @@ "description": "the maximum value of the slider.", "fullName": "Maximum value", "functionType": "ExpressionAndCondition", - "group": "FillBar bar configuration", + "group": "Resource bar configuration", "name": "MaxValue", "sentence": "the maximum value", "events": [ @@ -9754,7 +9754,7 @@ "description": "the step size of the slider.", "fullName": "Step size", "functionType": "ExpressionAndCondition", - "group": "FillBar bar configuration", + "group": "Resource bar configuration", "name": "StepSize", "sentence": "the step size", "events": [ @@ -9832,7 +9832,7 @@ "description": "Check if the label is shown.", "fullName": "Label is shown", "functionType": "Condition", - "group": "FillBar bar configuration", + "group": "Resource bar configuration", "name": "IsLabelShown", "sentence": "_PARAM0_ label is shown", "events": [ @@ -9874,7 +9874,7 @@ "description": "Show (or hide) the label on the bar.", "fullName": "Show label", "functionType": "Action", - "group": "FillBar bar configuration", + "group": "Resource bar configuration", "name": "SetLabelShown", "sentence": "Show the label of _PARAM0_: _PARAM1_", "events": [ @@ -10598,7 +10598,7 @@ "author": "", "category": "User interface", "extensionNamespace": "", - "fullName": "FillBar bar (continuous)", + "fullName": "Resource bar (continuous)", "helpPath": "", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8cGF0aCBkPSJNMjgsMTJIMTRINGMtMi4yLDAtNCwxLjgtNCw0czEuOCw0LDQsNGgxMGgxNGMyLjIsMCw0LTEuOCw0LTRTMzAuMiwxMiwyOCwxMnogTTQsMThjLTEuMSwwLTItMC45LTItMnMwLjktMiwyLTJoMTANCgljMS4xLDAsMiwwLjksMiwycy0wLjksMi0yLDJINHoiLz4NCjwvc3ZnPg0K", "name": "PanelSpriteContinuousBar", @@ -10630,7 +10630,7 @@ "eventsBasedBehaviors": [ { "description": "A bar that represents a resource in the game (health, mana, ammo, etc).", - "fullName": "FillBar bar", + "fullName": "Resource bar", "name": "ResourceBar", "objectType": "", "private": true, @@ -10838,7 +10838,7 @@ "description": "the maximum value of the object.", "fullName": "Maximum value", "functionType": "ExpressionAndCondition", - "group": "FillBar bar configuration", + "group": "Resource bar configuration", "name": "MaxValue", "sentence": "the maximum value", "events": [ @@ -11285,7 +11285,7 @@ { "defaultName": "ResourceBar", "description": "A bar that represents a resource in the game (health, mana, ammo, etc).", - "fullName": "FillBar bar (continuous)", + "fullName": "Resource bar (continuous)", "name": "PanelSpriteContinuousBar", "eventsFunctions": [ { @@ -12082,7 +12082,7 @@ "description": "the value of the object.", "fullName": "Value", "functionType": "ExpressionAndCondition", - "group": "FillBar bar", + "group": "Resource bar", "name": "Value", "sentence": "the value", "events": [ @@ -12210,7 +12210,7 @@ "description": "the maximum value of the object.", "fullName": "Maximum value", "functionType": "ExpressionAndCondition", - "group": "FillBar bar configuration", + "group": "Resource bar configuration", "name": "MaxValue", "sentence": "the maximum value", "events": [ From eddc733a6bd9cc048ebaf6a8694d2081a948601e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Fri, 6 Jan 2023 18:21:55 +0100 Subject: [PATCH 66/98] Add a link to the asset pack in the Button description. --- examples/resource-bar/game.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index c9d5fe9ff..7c8751bf8 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -2687,7 +2687,11 @@ "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Interface Elements/Interface Elements_interface_ui_button_ok_cta_clock_tap.svg", "shortDescription": "A button that can be customized.", "version": "1.3.0", - "description": "The button can be customized with a background for each state and a label. It handles user interactions and a simple condition can be used to check if it is clicked.", + "description": [ + "The button can be customized with a background for each state and a label. It handles user interactions and a simple condition can be used to check if it is clicked.", + "", + "There are ready-to-use buttons in the asset-store [menu buttons pack](https://editor.gdevelop.io/?initial-dialog=asset-store&asset-pack=menu-buttons-menu-buttons)." + ], "origin": { "identifier": "PanelSpriteButton", "name": "gdevelop-extension-store" From 20521ab6e52b81730a72fb2c1f5cfdb08dbe0a57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Fri, 13 Jan 2023 14:50:26 +0100 Subject: [PATCH 67/98] Add Kenney joysticks. --- .../assets/Flat dark joystick border.png | Bin 0 -> 1668 bytes .../assets/Flat dark joystick thumb.png | Bin 0 -> 1080 bytes .../assets/Flat light jokstick border.png | Bin 0 -> 1728 bytes .../assets/Flat light joystick thumb.png | Bin 0 -> 1080 bytes .../assets/Line dark joystick thumb.png | Bin 0 -> 1591 bytes .../assets/Line darkjoystick border.png | Bin 0 -> 2329 bytes .../assets/Line light joystick border.png | Bin 0 -> 2319 bytes .../assets/Line light joystick thumb.png | Bin 0 -> 1636 bytes .../assets/Shaded dark joystick border.png | Bin 0 -> 3066 bytes .../assets/Shaded dark joystick thumb.png | Bin 0 -> 3025 bytes .../assets/Shaded light joystick border.png | Bin 0 -> 2882 bytes .../assets/Shaded light joystick thumb.png | Bin 0 -> 2802 bytes .../resource-bar/assets/Summer Background.png | Bin 0 -> 122466 bytes .../Transparent dark joystick border.png | Bin 0 -> 1678 bytes .../Transparent dark joystick thumb.png | Bin 0 -> 1104 bytes .../Transparent light joystick border.png | Bin 0 -> 1637 bytes .../Transparent light joystick thumb.png | Bin 0 -> 1084 bytes examples/resource-bar/game.json | 9272 +++++++++++++---- 18 files changed, 7512 insertions(+), 1760 deletions(-) create mode 100644 examples/resource-bar/assets/Flat dark joystick border.png create mode 100644 examples/resource-bar/assets/Flat dark joystick thumb.png create mode 100644 examples/resource-bar/assets/Flat light jokstick border.png create mode 100644 examples/resource-bar/assets/Flat light joystick thumb.png create mode 100644 examples/resource-bar/assets/Line dark joystick thumb.png create mode 100644 examples/resource-bar/assets/Line darkjoystick border.png create mode 100644 examples/resource-bar/assets/Line light joystick border.png create mode 100644 examples/resource-bar/assets/Line light joystick thumb.png create mode 100644 examples/resource-bar/assets/Shaded dark joystick border.png create mode 100644 examples/resource-bar/assets/Shaded dark joystick thumb.png create mode 100644 examples/resource-bar/assets/Shaded light joystick border.png create mode 100644 examples/resource-bar/assets/Shaded light joystick thumb.png create mode 100644 examples/resource-bar/assets/Summer Background.png create mode 100644 examples/resource-bar/assets/Transparent dark joystick border.png create mode 100644 examples/resource-bar/assets/Transparent dark joystick thumb.png create mode 100644 examples/resource-bar/assets/Transparent light joystick border.png create mode 100644 examples/resource-bar/assets/Transparent light joystick thumb.png diff --git a/examples/resource-bar/assets/Flat dark joystick border.png b/examples/resource-bar/assets/Flat dark joystick border.png new file mode 100644 index 0000000000000000000000000000000000000000..dc8530e1bbc400f20ecf0738565eb86f1c485ddb GIT binary patch literal 1668 zcmV-~27CF5P)005u}1^@s6i_d2*000IONkl$95A zjlhoo-9JA+A6#(!_x>~j)iccJ^Pj9p0)lJA=1OQ?&@aG|oxG))M0ez z(z^{T$nBA}{$E(pKuinftC#C3$eqG9E9`0FAa4hgm)&HQ6jTO z4UUCZmpAsQ3h#_pM2Ieghv3?UNYXN})!8f_uS1=YqW1t+7m5+y?H=)iWaS1^XCTH> zilGp4=tc4h#2t!Xc z#A2~%6<h5hA#J6GvxxN40aI`yo+0MU2blGS+5ds*K9J!9Fg>)y3CHk%!a zqCkKMutHjpCY*-gb0S25X$i28_e>a6KDX3UJE>m0+6zb44$hX273~mjWgU2#E-oCLnxK z4Vd(R`Km7PX8*^R)qv^#k9r_D-2d(P!fNoN{&CV;a6gbQJqatw?@HG=xAlWdCg|wAjV`RfH>hw#SQIrNJ#pg@LH)z6u$;Y3pt1%-8PLq%Cl9A&N?sF9;)t-u>03mkWhy<^;=JT=8G2u^URm-2srP0 zbm)$}^MYZpo^MxUU=>C$yD%>Zx1w!Y=E9ho2B)EyPz>gwmrxAOvtA~r!AZNVPl1}j zRZh8?+GH}hr%OVw*VNSaV^PvdI^=jVpNxS8>U}?|8LZ9m=x23jN&>d%I?1 zRSYn+ljr%>0xXImG_UvJ&0qnw!m~q{m9VZ6pZ+d2zHmgii$#P1if@x){~vk}B_y8{ zVMyXr)hAc*Tb%~BrN(70Eu9NfqkW`(;?)0o=vhj!N zx7tI#TkhrRL~2cFMU?k-*xm?PDe5{MQ&qnWMy)w27m4V O0000%ck literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Flat dark joystick thumb.png b/examples/resource-bar/assets/Flat dark joystick thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..e124dbfc67955be08610b81fbba4d955073c4336 GIT binary patch literal 1080 zcmV-81jqY{P)fC)pD4ip6uCFKN4eM3 zMm#j|_Y`3s_`zWC*QYa8Fijuw4Ca9E_xpb&>aYrYg(42}OqQaWA{Fp|L{1qx_<3r; zS4B*a*{UTc>%&RIWZ5pJFWLhBrAboH9mFQK4fqO0WUT{#KA)e~>-D#+R;$x&HfxU( z#QtfHy3J;D+U<5%BA-pCQ%xmwqk*q!^B0T74ftnSE|=P2YFH(>1gk(B{gHRPKtg zAD~>0CL;oXrbsXpJ7SKM#gepwkd}x-(&dCaWqv5BDF8DkIX57#+{~0=Myxz}n`Q`L zni9>B@v-@sPSqWf3kt2xQ!K+004gK8+iUF z&d1u=Q+s6Xi_IyZmO5O*gF{uKSibg&d!G zL*!h!hFnXo8EmWBHXOpxctor`*FWYP@Ex^VbNm1R04;PySaefwW^{L9a%BKwc`jmX yZ*OE|c`jped2n=ZE@^FHXJsx>PDe5{MQ&qnWMy)w27m4V0000005u}1^@s6i_d2*000I~NklohH#3reaJ6h(577r;H|`WIb*;=;;Jm!N{H4j%r1lxz zTnf3n{_!qC4)lLvMgu_;=4+H|Dde5fH8bpK;h<=-O@KNwlBPXLv0Bh?6Gf3;5g!}+ z7cUQSUDst)M8uxNL$_uTDOwy;RkK9A3-%e=^mbFx-XdNr5hoNYSD=%D7`IXki9VvtaQAeo-T-6w7o^7?7DTK!MHdg%8!&huNoajf#iAYl~^ zou$Iv8^J9HVn5MY#w!u}O4yGr5bYkM2gt{Qwsgg>?OK%z&s=dA?(~{iwOu=3s zSW7svmM>=-sEo~e`ndg|wSVuugjIJ7MF-STaMG)Qp|@5+!0SQw``{-!-ybCPLPIKE za?T6ZsW_+V1yeeyis@{I3$|wN=yCy5oV^H%vtGEeAenI72G$Y|*mi+%w`GWaU>XHk z`+->$r1AyRC`j}Jvx=Bg4{*&zjS93|foslw&y2QSxLx2HZRb&Zfd9n^Pq{&dQSfw= zg4$@fP0%GLA86ONQgVyHEDe)>!7L3^{X$>xv>RBb;aeU!0yB<2L(DTD&|?Igu>J#o z)`2u1K;IlZv_$7K7_0+xx?jMIgZ)67PrfRCuS;AG`ICUyOOZAfQ!ZA&qX0%Is$5F?o9<;tyTvYgn(%Y zs38YT1Ux1m0;VTmTM4fcuwINJAOhCo`T4m&0n4)7&SoNLyrLIOE8wqiOTeT6p%4Mn0)#KB0fY75h_C7bf7X9|Sq+%3|JV2$_G59`0-j{?$|0A2H^0pTauj)4xNUy(II8iuae1-C(?fK=*(2dZJ{ zApMTBb74~&Tyu2uxk17uw+$Sv{g&CK&?5-F79Yook=^wB_Pcj|)<9!R>{H z!eg9u1r4jv`L+xFg3w~^cboMAUDMEO>LnF}dFmwdiAN6n1G`O@_m(%bR30zqby`7Oei>z5Ym+o36T#80r|cj+l6>`yjU!@)9LiAp+6g- zcuTXkDjFD?xxc?ZTfo_D7Mgq$ZyF2OD?HA6z21v;j(qyF?C}L6VMtA_O%etuU!K9g z550$yl7EsgB>9wiylbbjMh`lLl9Inm7?ONSxyh~fVyu#D2}6-jRW4EQvMQMeo``y^ z4Flg)X07Mw1SLnO^U;Ua+qU_Tw`@4dYZgx*R?=<9)v`n+H6Ioj60h;AP{Dab9HlH` zEgm-5AL$KJdIUh7=B)8N-M&#&jPZ3Lq}jkwYmwH9AoV*0b7x z*R@i~#-FMsPDe5{MQ&qn WWMy)w27m4V0000oFnJd^ZNI2IGjTa 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Line darkjoystick border.png b/examples/resource-bar/assets/Line darkjoystick border.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f19341b864641e9c5954b13b99fb45d0c04e18 GIT binary patch literal 2329 zcmV+!3Fh{RP)005u}1^@s6i_d2*000Q5NkliMN;#};WxlRkN}Y=^6=g{_nw)lD#p?H{Q2`2!S(g^!-o$amV%ETKfa7X^Z(_u zn$P79GY;eO^77sL_wWB{2v+~O|Mcn8e=$&h->xC3T*J-H&EGtc84#`^TP>fxG}U zo+Vn!werL!J}xdU{xoUyc}R4t)8uRY=eGXyu_o&eK^>vKjzRPP<+IFZz78bhs>VWo z3r}<+LmpV4C?{!9NMQ(ae|L9x@$~fcM-0^8dnMl~-!0eB=LL}$Nzye>I8)&u(V_?8 z*7D%Lef#!TEVA{5ya4qzewS-B*V-8wNz<96*sg~qDew07_TQM%%`+i?bp1XfWEQX? zGVx4#W8X!(9HZR1WNe#5ny3g7V-Tji9xh-mRVjGEoMqMgi} zN{V)UA-`E7y(>k_zftt|FifG?m1;%3exDoZ+K4Fk!bQaT-n}ALMhxi;xJoHa#DjQl z$h~Pv%`4LKfI6POiSl8kuLtvu_uw6r>24$;u`qjfY~l5*d+%ZPdbYlvDc&oU*O-mOl#kB}tI z+)x6+Y&?nA*VjL_!lks5zGO3tcAj>um>WRKO_-7$C9m>G*djJ4uVi9$kj_%E;>3_o z*Z0;u{OqFPT8on+$tP8M9{4mmD3d3l?&l&lrXfy>NXJ@mK)y+na4~iAk#?t_j;BFF zUFSn^lp{>C?;p!s0{O}&VYUWWc{>#OHax&$NVu_^2icL(Y2Q>3Vz7gZl-RPX_0ij%SMOK^XKK;0q}Dg@8euYJES^66e6yVoKH6C? zx|h)Oco7|ll3#|_*s1r~ego#PB?fqF<4Q6g)b&2u?u-XA+bDP+wMeZ~FP#oxcS@uj z7p>1ry$`tRgTd@u4%JKQ1yeO!ZFLOT- zbuNhV1<4e#-Sr^)0UuFtkWoSHWQE}XoNZL-z0Zu4UexkR)_8!?Ye?)&I#_(*bOxTC z(~Cahso|_2HfpDm|NkMEhcKXG10DPDfY)*A9XqQtd*;)ex-r8f)EB(^>03kXf zt!Y@RU(zoKm4;8Qc0>JwkZRbun}WUIh+Pgq$lVm2Yl!VNA9BJXHx2lNaH_R8tml8+ zFc3%$yXS#w$t5e^K=74wM~jwh=QHy^5Mv&Aw1C}qzfk`J(d&Wg5M$ggAci~Uw-7;q zfMh~MoT?O{L5hO(!6l6X21%8$TKmi5BM@`3(h>rKv;?#*ShV0k%$D5Yup0;nvLPTf zKoGMQcpxA(K#;T+2mt{E1P~Ac0tg5oAOH{$KtKQ>Ab@}XKtNC~0Wl*0+%NzFLO_s& zfcBfi zCER0c4v?-0&F-imRSD*3b0T|tHcBxdMhWKV@It#3gAxYO6tHWHUUtX=p^`W5qq;z{`5%WBf{^HSSRuzX zfPfB|@4Ze<=fG+ZsQ$Nc*8lXdjR}-vK#20oF9SkH8h#}WgAnQWV8K5%>@Pk zP|G!U+*B}-fV)BB!zD)S5K0sT(V`zw5crCIot+P&APC&|-S;lNbQGq45(UA?x!oZela90j(n>s_hGDCc7=S;(GSyuJTp~p$)9{}Bt)1@S8z;@e5ywH0tu&0KIeYU zQyN;BK*C8yzC~5SfQ0#XIEp1-2MM=$3G?Xf+U>O>$=60gqp~1jCdPuI$!E9i^pB=i zn7+m*Q81aUDgy(>l>HUbog^M}Jx^(Q>4=82Ct?Tj z_SxFzCtk8yxritaVJ@W`S$i!T0<{rOURKg=c(uH8rDpSQ>(Zj4QMC82T3+)43h_=J zh05?75ydR&BBEWwnKBt0(zX4@hIp_ceQI7fmH_C;xRErSb8%a)&0OQA?YA^L5-`Wh zw0t8`(KSDE^qki+my!sXV(uv4Dc@~2c-*u_InwMzhggebu6T-!ij-1kd~Aq$E;$>L zHAFL=iR~$}*<}vBKK`001p?MObuGZ)S9NVRB^vVtFoN zY;SL5WO*)Qa(QrcZ!T$VVP|D7P)Z)9b1s0M%T00000NkvXXu0mjfmvLaP literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Line light joystick border.png b/examples/resource-bar/assets/Line light joystick border.png new file mode 100644 index 0000000000000000000000000000000000000000..b5d64a48a1e5b01b215dad11345d42a7a8c18206 GIT binary patch literal 2319 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Line light joystick thumb.png b/examples/resource-bar/assets/Line light joystick thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..e3294c42d9d59f74202f2db9d33d5b731a384af6 GIT binary patch literal 1636 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 IM6N<$g1y?wn*aa+ literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Shaded dark joystick thumb.png b/examples/resource-bar/assets/Shaded dark joystick thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..18e8d1326c7b6cb13054c6952a466a5d85248901 GIT binary patch literal 3025 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 Ts0M%T00000NkvXXu0mjf&qQy; literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Shaded light joystick border.png b/examples/resource-bar/assets/Shaded light joystick border.png new file mode 100644 index 0000000000000000000000000000000000000000..962610b6d2b5809a0a057cfb13cce3e766957fd0 GIT binary patch literal 2882 zcmV-I3%&G-P)005u}1^@s6i_d2*000WmNklF8{pTH=BG_IREk2bB+Bz+gqcTXVZQ*J1k zdQ;LNaN44lWt#lyzDUVI!1kj3{rh(e{rU4}Du2(Q-@kvaipab_KG)NEIl^pDO#m7F z`t|GB049Hj|Ni}pnvejwHGrZIKY#u_;*1OcI0IW#pyd%R0MQcG5`E>2b-aE3`t?oh z`j$;vw<>{@{x3umd>77WM;a!~S1VT%$R*r0XV}xk0oJ0TiAIbT3B=Emi7%w&IdD## zyDG~_H|>dwML=H`G{7Q>K%+8%mH`u%9u}W8Gz^{$JW3k~+9OxB30od04Ujp%TSyQa z0kz5tf7|wFJKD%2DUl$-e1R@Na4H4DQSGi*V!u$bpU5Uo!Z4IJ|H8($?t=52@KIS1qB2rj z)=T&(7YJ*~ijnCMK+4eyE~|!bLinhh@!+`1#A8eNs5}5xRvSc6N$W=ygm6;Y`rY5( zhXP@w#et{Pn(!-?F3ZRXX0{X4`cXD3Xk$eT*rW`ATUtM=6)OmGY5l0ytRSr)Rh1RY zoe`skL+eLXX$8YD9OZGpOFV2*ivvu#KEzW?m|8fOUTi0z^`r8*Va?CCZ{I@auo-PDX^(m3||W52^|)h|unk`#qxjrK(CsY%FEo&@R?*O7}~(=7!;ZA08f}r09OB zG5~6xQr&R8?dsJV=zgg(ZrH|@6~HhIk8KBYAgMC4F$LCM0eE+JH`fO;{-f$}!(h!8 z|E(GSQFWAKG*@7a@gL<+94J0{j2~9f;s8=r$i^0!OS<2gK7a`bRb?Wg`2usv1Z1fX zVEji_83$^un{xeY=BI4l5N;mZY} z>+P5}2npbD0L%j)n6d(h^*H^XdDen8gamLH0OoCo0Q(PMUidNr zyuH0$VSO*DqRTAkAU8Agdow}NIW~I*k^+0d=g*(#`UT#UPStTwh~^CJ!3EFs3%n_b zY63v82LPw~1#A}Npixx{Oj!V&!Ud1@3ykBaI^su*3mylTmzPKS1#T>*>e$Gt1@_Fd zVInO)8<46>V9CbV^Rr>Z6t4A)yf>Jt@}6ML7nn-|xYP$Q6Q-)nfGq$nk^s*10Zc@w zDiaXR*QZaPrbz(D`T!;(RFw&c#R86BJSUoo2vye&>6r$?=K4U!fm9XopXLgzy#nz1`ubQO2vf;Hq{;{kX|7(ye`xRCy?dh%g!rH$ zs!aXQ##HLhwW1!V4`w}(s?z;}u~Yz2o6&DzIfkmz{l2LG>4wE&AvDsW8>Wi5UmHu$ z8xYc(WGHL>ChiZUinw3Rk+8K24mHV!r}~XBog7pukK%Yw12{PdAhKbb>E!MhDo^p* z#t_&FT$+%&)NgiuVgg0QyPaQ1JnJHGZ751J8KH`<{o2^My1E(%dD?!z-%83HB}FSp zxmZ8V4Oj~DHgUrqv`P z@i2Be+vdJj*K2ddwoX7?rt5dX**53GL;bGT=8A2dVLaI1xDReN#rlndHkv@Vv~`G2 zROp}LUClQ5W}T7qs0ze*8ERh4{T#Ek0GDA4!L8Ze`B5 zjmLc%5Ke5J#8tu~b+^}fQ{W3>cmkiAnBy5C>_2=^WA(lQ5H4&TM)t)0gWVBAr#Qi| zS-(l(b3?bYp`-hUHrXzBdG>a+R#pz62rkJKOCvd>X>b%ge|nt{eNgt2u4H zE-o&*1D}F$MF_hMpUmMr=yJo=llJ9scO8?Hc5kIT0N*6&L(77Y8FG6YN)g-j9zItH zxs|K=8sA{xbAgZ@n+FXmy0lnN1TVzJOL8hM*}#>!f(XGk#Ao8O%}w8NeXbCAq@iUHQMy6EEt3%ym4On;44^=1r7WBVGMo$NG>^9c zJZ1VS-*vU!ZW-hGSiX7x{{39EEi=JB3g1b&$M{wJ4d9hY8AYmDcX3k^Ii_f4- z{lEPOKQKGBibQV{c?-a;OG>?f?J)07*qoM6N<$f`4R79{>OV literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Shaded light joystick thumb.png b/examples/resource-bar/assets/Shaded light joystick thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..ce6853b98b76f400d14f926f950470cb99e95b7d GIT binary patch literal 2802 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 Ef`dmtW&i*H literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Summer Background.png b/examples/resource-bar/assets/Summer Background.png new file mode 100644 index 0000000000000000000000000000000000000000..4eaeb1fe13e91f7fee8dd060b6c18740705b60bc GIT binary patch literal 122466 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ξ(AO9 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 YV{c?-a;OG>?f?J)07*qoM6N<$f)x_;)c^nh literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Transparent dark joystick thumb.png b/examples/resource-bar/assets/Transparent dark joystick thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..c09763aba5e458146fb9deb52b3081bde0727388 GIT binary patch literal 1104 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 literal 0 HcmV?d00001 diff --git a/examples/resource-bar/assets/Transparent light joystick thumb.png b/examples/resource-bar/assets/Transparent light joystick thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..568e78909a4fe35b083d59541ffb5c0df9f37541 GIT binary patch literal 1084 zcmV-C1jGA@P)dj>qGZ50PtC z*E}nRNY{=E@Vu157vK#PQdIw$wfRZUV*%bkA$js|Mz`DjH5d%uN2Adf3h+Ng#wKHw zu_gsRI`H=tVIKH?zyH^#GgUB6pK=f8fS*pMZxVG_1^$L24suVHqM9NV@P9;389MlR zYQW!$m>{!NOHS5@lZMH%tC+rM3;1=Dq@Fv7O>7(RHx!Yz4*dCiep;{B|7EpWoo2IH zdz2vdPxGnUY&NIeZud>(yE0T%8&fo&Ab+H3^B0T775EofE|;o4A-EE%1gk)M`s>Sm14 z^jXuhCve_P(VmXifyn1CrK zWMxutBp7N5*^vs+R)FitLI)QnTAd<}M2re0KJWV+il#&nw@8h5QUEGN+#)r;Exus{*FLXCF{L#2Pl`L$%p`;DH06Dj#x#?Vo6#-NJ~T^>2gAzGC!2m6o8qNoEs2Vu4c+GBUYZg zO)~^AO^Iemd7>UC=|xdM&S|P>^TX(jBbJ|=EX+r+0@r@H2sh}{PhX&D`{@gmA|DG& zRa&1D?7VIq+m!)|ZVqn&oGC(EJ^iUA30w}ej+q5&yqIrqOBf?8+HHv%A7mwUl&+Zt zYJ9K_9T19j=+yY&JMd{|$;j0BXj@!qDgl)mAANr@O-?BqHC}DwPd0EAx3QuU0KiXu z1J6fsKHSEh+S^;1PO`Y8DrlrblLTyX8k(d-0^lE@O-_>BG+`*m2=Ha+jt+Fgo>?|_FW7URhgI%`OhGmZdyO8?pszV zPDe5{MQ&qnWMy)w27m4V0000", + "SpriteMultitouchJoystick::DeadZone(GetArgumentAsNumber(\"ControllerIdentifier\"), GetArgumentAsString(\"JoystickIdentifier\"))", + "GetArgumentAsNumber(\"ControllerIdentifier\")", + "GetArgumentAsString(\"JoystickIdentifier\")", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::IsAngleIn4WayDirection" + }, + "parameters": [ + "", + "SpriteMultitouchJoystick::JoystickAngle(GetArgumentAsNumber(\"ControllerIdentifier\"), GetArgumentAsString(\"JoystickIdentifier\"))", + "GetArgumentAsString(\"Direction\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "type": "string" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Check if joystick is pushed in a given direction.", + "fullName": "Joystick pushed in a direction (8-way)", + "functionType": "Condition", + "name": "IsDirectionPushed8Way", + "sentence": "Joystick _PARAM2_ of multitouch controller _PARAM1_ is pushed in direction _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure the joystick has moved from center", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::JoystickForce" + }, + "parameters": [ + "", + ">", + "SpriteMultitouchJoystick::DeadZone(GetArgumentAsNumber(\"ControllerIdentifier\"), GetArgumentAsString(\"JoystickIdentifier\"))", + "GetArgumentAsNumber(\"ControllerIdentifier\")", + "GetArgumentAsString(\"JoystickIdentifier\")", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::IsAngleIn8WayDirection" + }, + "parameters": [ + "", + "SpriteMultitouchJoystick::JoystickAngle(GetArgumentAsNumber(\"ControllerIdentifier\"), GetArgumentAsString(\"JoystickIdentifier\"))", + "GetArgumentAsString(\"Direction\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "supplementaryInformation": "MultitouchJoystick::MultitouchJoystick", + "type": "string" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\",\"UpLeft\",\"UpRight\",\"DownLeft\",\"DownRight\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).", + "fullName": "Joystick force", + "functionType": "ExpressionAndCondition", + "name": "JoystickForce", + "sentence": "Joystick _PARAM2_ of multitouch controller _PARAM1_ force", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Variable(__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Joystick[GetArgumentAsString(\"JoystickIdentifier\")].Force)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Change the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).", + "fullName": "Joystick force", + "functionType": "Action", + "name": "SetJoystickForce", + "private": true, + "sentence": "Change the force of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Joystick[GetArgumentAsString(\"JoystickIdentifier\")].Force", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "type": "string" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Return the angle the joystick is pointing towards (Range: -180 to 180).", + "fullName": "Joystick angle", + "functionType": "Expression", + "name": "JoystickAngle", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Variable(__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Joystick[GetArgumentAsString(\"JoystickIdentifier\")].Angle)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Change the angle the joystick is pointing towards (Range: -180 to 180).", + "fullName": "Joystick angle", + "functionType": "Action", + "name": "SetJoystickAngle", + "private": true, + "sentence": "Change the angle of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "__MultitouchJoystick.Controllers[GetArgumentAsNumber(\"ControllerIdentifier\")].Joystick[GetArgumentAsString(\"JoystickIdentifier\")].Angle", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Multitouch controller identifier (1, 2, 3, 4...)", + "name": "ControllerIdentifier", + "type": "expression" + }, + { + "description": "Joystick name", + "name": "JoystickIdentifier", + "type": "string" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + } + ], + "eventsBasedBehaviors": [ + { + "description": "Joystick that can be controlled by interacting with a touchscreen.", + "fullName": "Multitouch Joystick", + "name": "MultitouchJoystick", + "objectType": "", + "private": true, + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::SetDeadZone" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "Object.Behavior::PropertyDeadZoneRadius()", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "onDeActivate", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Manage touches", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "HasAnyTouchOrMouseStarted" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchIndex" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "StartedTouchOrMouseCount()", + "conditions": [], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + }, + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "TouchX(StartedTouchOrMouseId(Object.Behavior::PropertyTouchIndex()), Object.Layer(), 0)", + "TouchY(StartedTouchOrMouseId(Object.Behavior::PropertyTouchIndex()), Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "StartedTouchOrMouseId(Object.Behavior::PropertyTouchIndex())" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchIndex" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move thumb back to center when not being pressed (acts like a spring on a real controller)", + "comment2": "" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "HasTouchEnded" + }, + "parameters": [ + "", + "Object.Behavior::PropertyTouchId()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Update joystick position", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickAngle" + }, + "parameters": [ + "Object", + "Behavior", + "AngleBetweenPositions(Object.CenterX(), Object.CenterY(), TouchX(Object.Behavior::PropertyTouchId(), Object.Layer(), 0), TouchY(Object.Behavior::PropertyTouchId(), Object.Layer(), 0))", + "AngleBetweenPositions(Object.CenterX(), Object.CenterY(), TouchX(Object.Behavior::PropertyTouchId(), Object.Layer(), 0), TouchY(Object.Behavior::PropertyTouchId(), Object.Layer(), 0))" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickForce" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "clamp(2 * DistanceBetweenPositions(Object.CenterX(), Object.CenterY(), TouchX(Object.Behavior::PropertyTouchId(), Object.Layer(), 0), TouchY(Object.Behavior::PropertyTouchId(), Object.Layer(), 0)) / Object.Width(), 0, 1)", + "" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the joystick force (range: 0 to 1).", + "fullName": "Joystick force", + "functionType": "ExpressionAndCondition", + "name": "JoystickForce", + "sentence": "the joystick force", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyJoystickForce()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "JoystickForce", + "name": "SetJoystickForce", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyJoystickForce" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::SetJoystickForce" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "Object.Behavior::PropertyJoystickForce()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the angle the joystick is pointing towards (Range: -180 to 180).", + "fullName": "Joystick angle", + "functionType": "Expression", + "name": "JoystickAngle", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyJoystickAngle()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the angle the joystick is pointing towards (Range: -180 to 180).", + "fullName": "Joystick angle", + "functionType": "Action", + "name": "SetJoystickAngle", + "private": true, + "sentence": "Change the joystick angle of _PARAM0_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyJoystickAngle" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::SetJoystickAngle" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "Object.Behavior::PropertyJoystickAngle()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + }, + { + "description": "Angle", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Check if joystick is pushed in a given direction.", + "fullName": "Joystick pushed in a direction (4-way movement)", + "functionType": "Condition", + "name": "IsDirectionPushed4Way", + "sentence": "_PARAM0_ is pushed in direction _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyJoystickForce" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::PropertyDeadZoneRadius()" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::IsAngleIn4WayDirection" + }, + "parameters": [ + "", + "Object.Behavior::JoystickAngle()", + "GetArgumentAsString(\"Direction\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Check if joystick is pushed in a given direction.", + "fullName": "Joystick pushed in a direction (8-way movement)", + "functionType": "Condition", + "name": "IsDirectionPushed8Way", + "sentence": "_PARAM0_ is pushed in direction _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyJoystickForce" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "Object.Behavior::PropertyDeadZoneRadius()" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::IsAngleIn8WayDirection" + }, + "parameters": [ + "", + "Object.Behavior::JoystickAngle()", + "GetArgumentAsString(\"Direction\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\",\"UpLeft\",\"UpRight\",\"DownLeft\",\"DownRight\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Check if a joystick is pressed.", + "fullName": "Joystick pressed", + "functionType": "Condition", + "name": "IsPressed", + "sentence": "Joystick _PARAM0_ is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Reset the joystick values (except for angle, which stays the same)", + "fullName": "Reset", + "functionType": "Action", + "name": "Reset", + "private": true, + "sentence": "Reset the joystick of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickForce" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the multitouch controller identifier.", + "fullName": "Multitouch controller identifier", + "functionType": "ExpressionAndCondition", + "group": "Multitouch Joystick configuration", + "name": "ControllerIdentifier", + "sentence": "the multitouch controller identifier", + "events": [ { - "name": "", - "useMultipleDirections": false, - "directions": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "looping": false, - "timeBetweenFrames": 0.08, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "assets\\Bomb_Shadow.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyControllerIdentifier()" ] } ] } - ] + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] }, - "Label": { - "bold": false, - "italic": false, - "smoothed": true, - "underlined": false, - "string": "Bomb", - "font": "", - "textAlignment": "left", - "characterSize": 20, - "color": { - "b": 155, - "g": 155, - "r": 155 - } - } - } - }, - { - "assetStoreId": "", - "name": "IconButton2", - "tags": "", - "type": "IconButton::IconButton", - "variables": [], - "effects": [], - "behaviors": [], - "content": { - "LabelAnchorDeltaY": 16 - }, - "childrenContent": { - "Icon": { - "updateIfNotVisible": false, - "animations": [ + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "ControllerIdentifier", + "name": "SetControllerIdentifier", + "sentence": "", + "events": [ { - "name": "", - "useMultipleDirections": false, - "directions": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "looping": false, - "timeBetweenFrames": 0.08, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "assets\\Heart.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyControllerIdentifier" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" ] } ] } - ] + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] }, - "Label": { - "bold": false, - "italic": false, - "smoothed": true, - "underlined": false, - "string": "Heart", - "font": "", - "textAlignment": "left", - "characterSize": 20, - "color": { - "b": 155, - "g": 155, - "r": 155 - } - } - } - }, - { - "assetStoreId": "", - "name": "NewSprite", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [], - "behaviors": [], - "animations": [ { - "name": "", - "useMultipleDirections": false, - "directions": [ + "description": "the joystick name.", + "fullName": "Joystick name", + "functionType": "ExpressionAndCondition", + "group": "Multitouch Joystick configuration", + "name": "JoystickIdentifier", + "sentence": "the joystick name", + "events": [ { - "looping": false, - "timeBetweenFrames": 0.08, - "sprites": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "hasCustomCollisionMask": false, - "image": "assets\\Bomb_Shadow.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 + "type": { + "value": "SetReturnString" }, - "customCollisionMask": [] + "parameters": [ + "Object.Behavior::PropertyJoystickIdentifier()" + ] } ] } - ] - } - ] - }, - { - "assetStoreId": "", - "name": "NewSlider", - "tags": "", - "type": "PanelSpriteSlider::PanelSpriteSlider", - "variables": [], - "effects": [], - "behaviors": [], - "content": { - "BarTopPadding": 3, - "BarBottomPadding": 3, - "BarLeftPadding": 9, - "BarRightPadding": 9, - "MaxValue": 100, - "InitialValue": 50 - }, - "childrenContent": { - "Background": { - "bottomMargin": 6, - "height": 15, - "leftMargin": 11, - "rightMargin": 11, - "texture": "assets\\Health Bar Box.png", - "tiled": true, - "topMargin": 6, - "width": 96 - }, - "FillBar": { - "bottomMargin": 0, - "height": 8, - "leftMargin": 0, - "rightMargin": 0, - "texture": "assets\\tiled_Health Bar Fill.png", - "tiled": false, - "topMargin": 0, - "width": 32 - }, - "Label": { - "bold": false, - "italic": false, - "smoothed": true, - "underlined": false, - "string": "It displays the value when it changes.", - "font": "", - "textAlignment": "", - "characterSize": 20, - "color": { - "b": 211, - "g": 211, - "r": 211 - } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] }, - "Thumb": { - "bottomMargin": 6, - "height": 32, - "leftMargin": 8, - "rightMargin": 8, - "texture": "assets\\Energy Bar.png", - "tiled": false, - "topMargin": 6, - "width": 16 - } - } - }, - { - "assetStoreId": "", - "name": "Checkbox", - "tags": "", - "type": "SpriteToggleSwitch::SpriteToggleSwitch", - "variables": [], - "effects": [], - "behaviors": [], - "content": { - "CheckboxHorizontalAnchorTargetValue": "Left", - "LabelAnchorDeltaX": -16, - "CheckboxAnchorDeltaX": -8, - "IsChecked": true - }, - "childrenContent": { - "State": { - "updateIfNotVisible": false, - "animations": [ + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "JoystickIdentifier", + "name": "SetJoystickIdentifier", + "sentence": "", + "events": [ { - "name": "Unchecked", - "useMultipleDirections": false, - "directions": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "looping": false, - "timeBetweenFrames": 0.08, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Unchecked.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyJoystickIdentifier" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Value\")" ] } ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" }, { - "name": "Checked", - "useMultipleDirections": false, - "directions": [ + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the dead zone radius (range: 0 to 1) of the joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).", + "fullName": "Dead zone radius", + "functionType": "ExpressionAndCondition", + "group": "Multitouch Joystick configuration", + "name": "DeadZoneRadius", + "sentence": "the dead zone radius", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "looping": false, - "timeBetweenFrames": 0.08, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Checked.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyDeadZoneRadius()" ] } ] } - ] + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "DeadZoneRadius", + "name": "SetDeadZoneRadius", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyDeadZoneRadius" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] } - } + ], + "propertyDescriptors": [ + { + "value": "1", + "type": "Number", + "label": "Multitouch controller identifier (1, 2, 3, 4...)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ControllerIdentifier" + }, + { + "value": "Primary", + "type": "String", + "label": "Joystick name", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "JoystickIdentifier" + }, + { + "value": "0.4", + "type": "Number", + "label": "Dead zone radius (range: 0 to 1)", + "description": "The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "DeadZoneRadius" + }, + { + "value": "0", + "type": "Number", + "label": "Joystick angle (range: -180 to 180)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "JoystickAngle" + }, + { + "value": "0", + "type": "Number", + "label": "Joystick force (range: 0 to 1)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "JoystickForce" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TouchId" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TouchIndex" + } + ], + "sharedPropertyDescriptors": [] }, { - "assetStoreId": "", - "name": "RightCheckbox", - "tags": "", - "type": "SpriteToggleSwitch::SpriteToggleSwitch", - "variables": [], - "effects": [], - "behaviors": [], - "content": { - "CheckboxHorizontalAnchorTargetValue": "Right", - "LabelAnchorDeltaX": -16, - "CheckboxAnchorDeltaX": 8 - }, - "childrenContent": { - "State": { - "updateIfNotVisible": false, - "animations": [ + "description": "Detect button presses made on a touchscreen.", + "fullName": "Multitouch button", + "name": "MultitouchButton", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ { - "name": "Unchecked", - "useMultipleDirections": false, - "directions": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "looping": false, - "timeBetweenFrames": 0.08, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Unchecked.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::IsReleased" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyIsReleased" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetButtonState" + }, + "parameters": [ + "Object", + "Behavior", + "\"Idle\"", + "" ] } ] }, { - "name": "Checked", - "useMultipleDirections": false, - "directions": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "looping": false, - "timeBetweenFrames": 0.08, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Checked.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } + "type": { + "inverted": true, + "value": "SpriteMultitouchJoystick::MultitouchButton::IsPressed" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "HasAnyTouchOrMouseStarted" + }, + "parameters": [ + "" ] } - ] - } - ] - } - } - }, - { - "assetStoreId": "615de0316452630b9f4f6a39decc82e2449b82c1afd1ff24d6470dad2922177b", - "name": "YellowButton", - "tags": "", - "type": "PanelSpriteButton::PanelSpriteButton", - "variables": [], - "effects": [], - "behaviors": [], - "content": { - "LeftPadding": 16, - "RightPadding": 16, - "PressedLabelOffsetY": 10, - "IdleLabelOffsetY": -8, - "BottomPadding": 32, - "TopPadding": 16, - "MinimalWidth": 300 - }, - "childrenContent": { - "Hovered": { - "bottomMargin": 32, - "height": 106, - "leftMargin": 16, - "rightMargin": 16, - "texture": "Yellow Button_Hovered.png", - "tiled": true, - "topMargin": 16, - "width": 256 - }, - "Idle": { - "bottomMargin": 32, - "height": 106, - "leftMargin": 16, - "rightMargin": 16, - "texture": "Yellow Button_Idle.png", - "tiled": true, - "topMargin": 16, - "width": 256 - }, - "Label": { - "bold": false, - "italic": false, - "smoothed": true, - "underlined": false, - "string": "Button with a lot of text", - "font": "", - "textAlignment": "center", - "characterSize": 60, - "color": { - "b": 42, - "g": 87, - "r": 139 - } - }, - "Pressed": { - "bottomMargin": 16, - "height": 106, - "leftMargin": 16, - "rightMargin": 16, - "texture": "Yellow Button_Pressed.png", - "tiled": true, - "topMargin": 32, - "width": 256 - } - } - }, - { - "assetStoreId": "", - "name": "NewSwitch", - "tags": "", - "type": "SpriteToggleSwitch::SpriteToggleSwitch", - "variables": [], - "effects": [], - "behaviors": [], - "content": { - "IsChecked": false - }, - "childrenContent": { - "State": { - "updateIfNotVisible": false, - "animations": [ - { - "name": "Unchecked", - "useMultipleDirections": false, - "directions": [ + ], + "actions": [ { - "looping": false, - "timeBetweenFrames": 0.08, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "assets\\Chest_Full Open_3.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - }, + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchIndex" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "StartedTouchOrMouseCount()", + "conditions": [], + "actions": [], + "events": [ { - "hasCustomCollisionMask": false, - "image": "assets\\Chest_Full Open_2.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "TouchX(StartedTouchOrMouseId(Object.Behavior::PropertyTouchIndex()), Object.Layer(), 0)", + "TouchY(StartedTouchOrMouseId(Object.Behavior::PropertyTouchIndex()), Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "StartedTouchOrMouseId(Object.Behavior::PropertyTouchIndex())" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetButtonState" + }, + "parameters": [ + "Object", + "Behavior", + "\"Pressed\"", + "" + ] + } + ] }, { - "hasCustomCollisionMask": false, - "image": "assets\\Chest_Full Open_1.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchIndex" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + } + ] } ] } ] }, { - "name": "Checked", - "useMultipleDirections": false, - "directions": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "looping": false, - "timeBetweenFrames": 0.08, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "assets\\Chest_Full Open_1.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - }, - { - "hasCustomCollisionMask": false, - "image": "assets\\Chest_Full Open_2.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - }, - { - "hasCustomCollisionMask": false, - "image": "assets\\Chest_Full Open_3.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 0, - "y": 0 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::IsPressed" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "HasTouchEnded" + }, + "parameters": [ + "", + "Object.Behavior::PropertyTouchId()" ] } - ] - } - ] - } - } - } - ], - "events": [ - { - "disabled": true, - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "DepartScene" - }, - "parameters": [ - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "DebuggerTools::EnableDebugDraw" - }, - "parameters": [ - "", - "", - "", - "no", - "no" - ] - } - ] - }, - { - "disabled": true, - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "PanelSpriteButton::PanelSpriteButton::IsClicked" - }, - "parameters": [ - "YellowButton", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteButton::PanelSpriteButton::Height" - }, - "parameters": [ - "YellowButton", - "+", - "8" - ] - } - ] - } - ], - "layers": [ - { - "ambientLightColorB": 8632048, - "ambientLightColorG": 150995054, - "ambientLightColorR": 1869182049, - "followBaseLayerCamera": false, - "isLightingLayer": false, - "name": "", - "visibility": true, - "cameras": [ - { - "defaultSize": true, - "defaultViewport": true, - "height": 0, - "viewportBottom": 1, - "viewportLeft": 0, - "viewportRight": 1, - "viewportTop": 0, - "width": 0 - } - ], - "effects": [] - } - ], - "behaviorsSharedData": [] - }, - { - "b": 68, - "disableInputWhenNotFocused": true, - "mangledName": "Sprite_32and_32Tiled_32Sprite", - "name": "Sprite and Tiled Sprite", - "r": 68, - "standardSortMethod": true, - "stopSoundsOnStartup": true, - "title": "", - "v": 68, - "uiSettings": { - "grid": true, - "gridType": "rectangular", - "gridWidth": 8, - "gridHeight": 8, - "gridOffsetX": 0, - "gridOffsetY": 0, - "gridColor": 10401023, - "gridAlpha": 0.2, - "snap": true, - "zoomFactor": 1.239999978637697, - "windowMask": false - }, - "objectsGroups": [ - { - "name": "Button", - "objects": [ + ], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetButtonState" + }, + "parameters": [ + "Object", + "Behavior", + "\"Released\"", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyIsReleased" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton", + "type": "behavior" + } + ], + "objectGroups": [] + }, { - "name": "PlusKey" + "description": "Check if button is released.", + "fullName": "Button released", + "functionType": "Condition", + "name": "IsReleased", + "sentence": "Button _PARAM0_ is released", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::PropertyIsReleased" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton", + "type": "behavior" + } + ], + "objectGroups": [] }, { - "name": "MinusKey" - } - ] - } - ], - "variables": [], - "instances": [ - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "PlusKey", - "persistentUuid": "75acefa2-30d2-45f3-8955-bdbcc059a348", - "width": 0, - "x": 422, - "y": 82, - "zOrder": 25, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "MinusKey", - "persistentUuid": "68d80c16-a4fc-4793-aa38-eb458b7c1a28", - "width": 0, - "x": 322, - "y": 82, - "zOrder": 26, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 88, - "layer": "", - "name": "UnitsBar", - "persistentUuid": "cd7ae08a-3045-436b-bda9-beda9d2b55db", - "width": 200, - "x": 408, - "y": 160, - "zOrder": 39, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 40, - "layer": "", - "name": "ContinousBar", - "persistentUuid": "60a7c4ed-31bf-44a9-8513-09c9bfd8eb42", - "width": 194, - "x": 424, - "y": 456, - "zOrder": 40, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 16, - "layer": "", - "name": "NoBackgroundUnitsBar", - "persistentUuid": "850c5ba6-8615-4217-bc65-f0b4a149b4cc", - "width": 96, - "x": 240, - "y": 320, - "zOrder": 41, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "UnitsBar", - "persistentUuid": "20b69c52-a1a2-4f22-b7b7-4560d4da8dcb", - "width": 0, - "x": 184, - "y": 176, - "zOrder": 42, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "ContinousBar", - "persistentUuid": "a4664301-98a6-419b-a0d5-c5028371de9c", - "width": 0, - "x": 224, - "y": 464, - "zOrder": 43, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 64, - "layer": "", - "name": "NoBackgroundUnitsBar", - "persistentUuid": "a4a16b93-f588-4324-b306-5f85919b34ab", - "width": 208, - "x": 424, - "y": 304, - "zOrder": 44, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "height": 48, - "layer": "", - "name": "NoLabelContinousBar", - "persistentUuid": "e7d18ac3-25ec-477d-86dd-c7e055964917", - "width": 176, - "x": 440, - "y": 528, - "zOrder": 46, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "NoLabelContinousBar", - "persistentUuid": "a55d7eb7-5856-4e57-9a53-e6eb6731dbfe", - "width": 0, - "x": 224, - "y": 544, - "zOrder": 47, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": false, - "height": 0, - "layer": "", - "name": "NoBufferContinousBar", - "persistentUuid": "7089d4c5-79a2-47e6-876b-f78887bb43fb", - "width": 0, - "x": 224, - "y": 393, - "zOrder": 48, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] + "description": "Check if button is pressed.", + "fullName": "Button pressed", + "functionType": "Condition", + "name": "IsPressed", + "sentence": "Button _PARAM0_ is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchButton::PropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "Button state", + "functionType": "Action", + "name": "SetButtonState", + "private": true, + "sentence": "Mark the button _PARAM0_ as _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::SetButtonState" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyButtonIdentifier()", + "GetArgumentAsString(\"ButtonState\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton", + "type": "behavior" + }, + { + "description": "Button state", + "name": "ButtonState", + "supplementaryInformation": "[\"Idle\",\"Pressed\",\"Released\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "1", + "type": "Number", + "label": "Multitouch controller identifier (1, 2, 3, 4...)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ControllerIdentifier" + }, + { + "value": "A", + "type": "String", + "label": "Button identifier", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ButtonIdentifier" + }, + { + "value": "0", + "type": "Number", + "label": "TouchID", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TouchId" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TouchIndex" + }, + { + "value": "", + "type": "Boolean", + "label": "Button released", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "IsReleased" + } + ], + "sharedPropertyDescriptors": [] }, { - "angle": 0, - "customSize": true, - "height": 39, - "layer": "", - "name": "NoBufferContinousBar", - "persistentUuid": "7c30a69a-005e-4388-87fb-11758e8ed614", - "width": 184, - "x": 432, - "y": 385, - "zOrder": 48, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - } - ], - "objects": [ - { - "assetStoreId": "996e07c73069934a868dc8212a0d7d959dfdd245af964998aad12cf57d252ac3", - "name": "PlusKey", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [ + "description": "Control a platformer character with a multitouch controller.", + "fullName": "Platformer multitouch controller mapper", + "name": "PlatformerMultitouchMapper", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Left\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlatformBehavior::SimulateLeftKey" + }, + "parameters": [ + "Object", + "Property" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Right\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlatformBehavior::SimulateRightKey" + }, + "parameters": [ + "Object", + "Property" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Up\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlatformBehavior::SimulateUpKey" + }, + "parameters": [ + "Object", + "Property" + ] + }, + { + "type": { + "value": "PlatformBehavior::SimulateLadderKey" + }, + "parameters": [ + "Object", + "Property" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJoystickIdentifier()", + "\"Down\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlatformBehavior::SimulateDownKey" + }, + "parameters": [ + "Object", + "Property" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsButtonPressed" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "Object.Behavior::PropertyJumpButton()", + "\"Down\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlatformBehavior::SimulateJumpKey" + }, + "parameters": [ + "Object", + "Property" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::PlatformerMultitouchMapper", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ { - "effectType": "Outline", - "name": "Effect", - "doubleParameters": { - "padding": 2, - "thickness": 2 - }, - "stringParameters": { - "color": "255;255;255" - }, - "booleanParameters": {} + "value": "", + "type": "Behavior", + "label": "Platform character behavior", + "description": "", + "group": "", + "extraInformation": [ + "PlatformBehavior::PlatformerObjectBehavior" + ], + "hidden": false, + "name": "Property" + }, + { + "value": "1", + "type": "Number", + "label": "Controller identifier (1, 2, 3, 4...)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ControllerIdentifier" + }, + { + "value": "Primary", + "type": "String", + "label": "Joystick name", + "description": "", + "group": "Controls", + "extraInformation": [], + "hidden": false, + "name": "JoystickIdentifier" + }, + { + "value": "A", + "type": "String", + "label": "Jump button name", + "description": "", + "group": "Controls", + "extraInformation": [], + "hidden": false, + "name": "JumpButton" } ], - "behaviors": [], - "animations": [ + "sharedPropertyDescriptors": [] + }, + { + "description": "Control a top-down character with a multitouch controller.", + "fullName": "Top-down multitouch controller mapper", + "name": "TopDownMultitouchMapper", + "objectType": "", + "eventsFunctions": [ { - "name": "", - "useMultipleDirections": false, - "directions": [ + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "hasCustomCollisionMask": false, - "image": "Plus Key.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 50, - "y": 50 + "type": { + "value": "Gamepads::TopDownGamepadMapper::PropertyStickMode" }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 + "parameters": [ + "Object", + "Behavior", + "=", + "\"Analog\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateStick" }, - "customCollisionMask": [] + "parameters": [ + "Object", + "TopDownMovement", + "SpriteMultitouchJoystick::JoystickAngle(Object.Behavior::PropertyControllerIdentifier(), ToString(Object.Behavior::PropertyJoystickIdentifier()))", + "SpriteMultitouchJoystick::JoystickForce(Object.Behavior::PropertyControllerIdentifier(), ToString(Object.Behavior::PropertyJoystickIdentifier()))" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Gamepads::TopDownGamepadMapper::PropertyStickMode" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"360°\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateStick" + }, + "parameters": [ + "Object", + "TopDownMovement", + "SpriteMultitouchJoystick::JoystickAngle(Object.Behavior::PropertyControllerIdentifier(), ToString(Object.Behavior::PropertyJoystickIdentifier()))", + "sign(SpriteMultitouchJoystick::JoystickForce(Object.Behavior::PropertyControllerIdentifier(), ToString(Object.Behavior::PropertyJoystickIdentifier())))" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Gamepads::TopDownGamepadMapper::PropertyStickMode" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"8 Directions\"" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "TopDownMovementBehavior::DiagonalsAllowed" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "ToString(Object.Behavior::PropertyJoystickIdentifier())", + "\"Left\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateLeftKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "ToString(Object.Behavior::PropertyJoystickIdentifier())", + "\"Right\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateRightKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "ToString(Object.Behavior::PropertyJoystickIdentifier())", + "\"Up\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateUpKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed4Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "ToString(Object.Behavior::PropertyJoystickIdentifier())", + "\"Down\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateDownKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TopDownMovementBehavior::DiagonalsAllowed" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "ToString(Object.Behavior::PropertyJoystickIdentifier())", + "\"Left\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateLeftKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "ToString(Object.Behavior::PropertyJoystickIdentifier())", + "\"Right\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateRightKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "ToString(Object.Behavior::PropertyJoystickIdentifier())", + "\"Up\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateUpKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "ToString(Object.Behavior::PropertyJoystickIdentifier())", + "\"Down\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateDownKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "ToString(Object.Behavior::PropertyJoystickIdentifier())", + "\"UpLeft\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateUpKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + }, + { + "type": { + "value": "TopDownMovementBehavior::SimulateLeftKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "ToString(Object.Behavior::PropertyJoystickIdentifier())", + "\"UpRight\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateUpKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + }, + { + "type": { + "value": "TopDownMovementBehavior::SimulateRightKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "ToString(Object.Behavior::PropertyJoystickIdentifier())", + "\"DownLeft\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateDownKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + }, + { + "type": { + "value": "TopDownMovementBehavior::SimulateLeftKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "", + "Object.Behavior::PropertyControllerIdentifier()", + "ToString(Object.Behavior::PropertyJoystickIdentifier())", + "\"DownRight\"", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TopDownMovementBehavior::SimulateDownKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + }, + { + "type": { + "value": "TopDownMovementBehavior::SimulateRightKey" + }, + "parameters": [ + "Object", + "TopDownMovement" + ] + } + ] + } + ] } ] } - ] - } - ] - }, - { - "assetStoreId": "90731de0069b2f3684767c392c6e4c48255a2647bc849497f25b672771290626", - "name": "MinusKey", - "tags": "", - "type": "Sprite", - "updateIfNotVisible": false, - "variables": [], - "effects": [ - { - "effectType": "Outline", - "name": "Effect", - "doubleParameters": { - "padding": 2, - "thickness": 2 - }, - "stringParameters": { - "color": "255;255;255" - }, - "booleanParameters": {} - } - ], - "behaviors": [], - "animations": [ - { - "name": "", - "useMultipleDirections": false, - "directions": [ + ], + "parameters": [ { - "looping": true, - "timeBetweenFrames": 0.02500000037252903, - "sprites": [ - { - "hasCustomCollisionMask": false, - "image": "Minus Key.png", - "points": [], - "originPoint": { - "name": "origine", - "x": 50, - "y": 50 - }, - "centerPoint": { - "automatic": true, - "name": "centre", - "x": 0, - "y": 0 - }, - "customCollisionMask": [] - } - ] + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::TopDownMultitouchMapper", + "type": "behavior" } - ] - } - ] - }, - { - "assetStoreId": "", - "name": "UnitsBar", - "tags": "", - "type": "TiledUnitsBar::TiledUnitsBar", - "variables": [], - "effects": [], - "behaviors": [], - "content": { - "UnitWidth": 26, - "BarLeftPadding": 38, - "BarRightPadding": 38, - "MaxValue": 3, - "InitialValue": 3 - }, - "childrenContent": { - "Background": { - "bottomMargin": 30, - "height": 64, - "leftMargin": 64, - "rightMargin": 64, - "texture": "assets\\Scroll.png", - "tiled": false, - "topMargin": 30, - "width": 154 - }, - "Bar": { - "height": 26, - "texture": "assets\\Empty Heart.png", - "width": 78 - }, - "FillBar": { - "height": 26, - "texture": "assets\\Full Heart.png", - "width": 78 - } - } - }, - { - "assetStoreId": "", - "name": "NoBackgroundUnitsBar", - "tags": "", - "type": "TiledUnitsBar::TiledUnitsBar", - "variables": [], - "effects": [], - "behaviors": [], - "content": { - "UnitWidth": 16, - "HideBackground": true, - "ShowBackground": false - }, - "childrenContent": { - "Background": { - "bottomMargin": 0, - "height": 16, - "leftMargin": 0, - "rightMargin": 0, - "texture": "assets\\tiled_Tiled Empty UI Heart.png", - "tiled": true, - "topMargin": 0, - "width": 48 - }, - "Bar": { - "height": 16, - "texture": "assets\\tiled_Tiled Empty UI Heart.png", - "width": 48 - }, - "FillBar": { - "height": 16, - "texture": "assets\\tiled_Tiled Filler UI Heart.png", - "width": 16 - } - } - }, - { - "assetStoreId": "", - "name": "ContinousBar", - "tags": "", - "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", - "variables": [], - "effects": [], - "behaviors": [], - "content": { - "MaxValue": 10, - "InitialValue": 7, - "BarLeftPadding": 9, - "BarRightPadding": 9, - "BarBottomPadding": 3, - "BarTopPadding": 3 - }, - "childrenContent": { - "Background": { - "bottomMargin": 6, - "height": 15, - "leftMargin": 11, - "rightMargin": 11, - "texture": "assets\\Health Bar Box.png", - "tiled": true, - "topMargin": 6, - "width": 96 - }, - "Buffer": { - "bottomMargin": 0, - "height": 8, - "leftMargin": 0, - "rightMargin": 0, - "texture": "assets\\tiled_Energy Bar Fill.png", - "tiled": false, - "topMargin": 0, - "width": 32 - }, - "FillBar": { - "bottomMargin": 0, - "height": 8, - "leftMargin": 0, - "rightMargin": 0, - "texture": "assets\\tiled_Health Bar Fill.png", - "tiled": false, - "topMargin": 0, - "width": 32 - }, - "Label": { - "bold": false, - "italic": false, - "smoothed": true, - "underlined": false, - "string": "2 / 3", - "font": "", - "textAlignment": "center", - "characterSize": 8, - "color": { - "b": 255, - "g": 255, - "r": 255 - } - } - } - }, - { - "assetStoreId": "", - "name": "NoBufferContinousBar", - "tags": "", - "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", - "variables": [], - "effects": [], - "behaviors": [], - "content": { - "MaxValue": 10, - "InitialValue": 7, - "BarLeftPadding": 9, - "BarRightPadding": 9, - "BarBottomPadding": 3, - "BarTopPadding": 3, - "EasingDuration": 0, - "PreviousHighValueDuration": 0 - }, - "childrenContent": { - "Background": { - "bottomMargin": 6, - "height": 15, - "leftMargin": 11, - "rightMargin": 11, - "texture": "assets\\Health Bar Box.png", - "tiled": true, - "topMargin": 6, - "width": 96 - }, - "Buffer": { - "bottomMargin": 0, - "height": 8, - "leftMargin": 0, - "rightMargin": 0, - "texture": "assets\\Health Bar2.png", - "tiled": false, - "topMargin": 0, - "width": 32 - }, - "FillBar": { - "bottomMargin": 3, - "height": 8, - "leftMargin": 4, - "rightMargin": 4, - "texture": "assets\\Health Bar2.png", - "tiled": false, - "topMargin": 3, - "width": 32 - }, - "Label": { - "bold": false, - "italic": false, - "smoothed": true, - "underlined": false, - "string": "2 / 3", - "font": "", - "textAlignment": "center", - "characterSize": 8, - "color": { - "b": 255, - "g": 255, - "r": 255 - } + ], + "objectGroups": [] } - } - }, - { - "assetStoreId": "", - "name": "NoLabelContinousBar", - "tags": "", - "type": "PanelSpriteContinuousBar::PanelSpriteContinuousBar", - "variables": [], - "effects": [], - "behaviors": [], - "content": { - "MaxValue": 10, - "InitialValue": 7, - "BarLeftPadding": 9, - "BarRightPadding": 9, - "BarBottomPadding": 3, - "BarTopPadding": 3, - "ShowLabel": false - }, - "childrenContent": { - "Background": { - "bottomMargin": 6, - "height": 15, - "leftMargin": 11, - "rightMargin": 11, - "texture": "assets\\Health Bar Box.png", - "tiled": true, - "topMargin": 6, - "width": 96 + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Behavior", + "label": "Top-down movement behavior", + "description": "", + "group": "", + "extraInformation": [ + "TopDownMovementBehavior::TopDownMovementBehavior" + ], + "hidden": false, + "name": "TopDownMovement" }, - "Buffer": { - "bottomMargin": 0, - "height": 8, - "leftMargin": 0, - "rightMargin": 0, - "texture": "assets\\tiled_Energy Bar Fill.png", - "tiled": false, - "topMargin": 0, - "width": 32 + { + "value": "1", + "type": "Number", + "label": "Controller identifier (1, 2, 3, 4...)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ControllerIdentifier" }, - "FillBar": { - "bottomMargin": 0, - "height": 8, - "leftMargin": 0, - "rightMargin": 0, - "texture": "assets\\tiled_Health Bar Fill.png", - "tiled": false, - "topMargin": 0, - "width": 32 + { + "value": "Primary", + "type": "Number", + "label": "Joystick name", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "JoystickIdentifier" }, - "Label": { - "bold": false, - "italic": false, - "smoothed": true, - "underlined": false, - "string": "2 / 3", - "font": "", - "textAlignment": "", - "characterSize": 8, - "color": { - "b": 255, - "g": 255, - "r": 255 - } + { + "value": "Analog", + "type": "Choice", + "label": "Stick mode", + "description": "", + "group": "Controls", + "extraInformation": [ + "Analog", + "360°", + "8 Directions" + ], + "hidden": false, + "name": "StickMode" } - } + ], + "sharedPropertyDescriptors": [] } ], - "events": [ + "eventsBasedObjects": [ { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Initialize game", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + "defaultName": "Joystick", + "description": "Joystick for touchscreens.", + "fullName": "Multitouch Joystick", + "name": "SpriteMultitouchJoystick", + "eventsFunctions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ { - "type": { - "value": "DepartScene" - }, - "parameters": [ - "" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Border", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Thumb", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Border", + "=", + "1" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Thumb", + "=", + "2" + ] + }, + { + "type": { + "value": "SetCenter" + }, + "parameters": [ + "Border", + "=", + "0", + "=", + "0" + ] + }, + { + "type": { + "value": "SetCenter" + }, + "parameters": [ + "Thumb", + "=", + "0", + "=", + "0" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::SpriteMultitouchJoystick::UpdateConfiguration" + }, + "parameters": [ + "Object", + "" + ] + } ] } ], - "actions": [ + "parameters": [ { - "type": { - "value": "ModVarScene" - }, - "parameters": [ - "MaxResource", - "=", - "CameraBorderRight()" + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "MettreAutour" + }, + "parameters": [ + "Thumb", + "Border", + "Border.MultitouchJoystick::JoystickForce() * Border.Width() / 2", + "Border.MultitouchJoystick::JoystickAngle()" + ] + } ] } ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "onHotReloading", + "sentence": "", "events": [ { - "disabled": true, "type": "BuiltinCommonInstructions::Standard", "conditions": [], "actions": [ { "type": { - "value": "DebuggerTools::EnableDebugDraw" + "value": "SpriteMultitouchJoystick::SpriteMultitouchJoystick::UpdateConfiguration" }, "parameters": [ - "", - "", - "", - "", + "Object", "" ] } ] } - ] - } - ], - "parameters": [] - }, - { - "colorB": 224, - "colorG": 16, - "colorR": 189, - "creationTime": 0, - "name": "Buttons", - "source": "", - "type": "BuiltinCommonInstructions::Group", - "events": [ + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Pass the object property values to the behavior.", + "fullName": "Update configuration", + "functionType": "Action", + "name": "UpdateConfiguration", + "private": true, + "sentence": "Update the configuration of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetControllerIdentifier" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "=", + "Object.PropertyControllerIdentifier()", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickIdentifier" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "=", + "Object.PropertyJoystickIdentifier()", + "" + ] + }, + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetDeadZoneRadius" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "=", + "Object.PropertyDeadZoneRadius()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Hover", - "source": "", - "type": "BuiltinCommonInstructions::Group", + "description": "De/activate control of the joystick.", + "fullName": "De/activate control", + "functionType": "Action", + "name": "ActivateControl", + "sentence": "Activate control of _PARAM0_: _PARAM1_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -2220,24 +7779,21 @@ { "type": { "inverted": true, - "value": "SourisSurObjet" + "value": "GetArgumentAsBoolean" }, "parameters": [ - "Button", - "", - "", - "" + "\"ShouldActivate\"" ] } ], "actions": [ { "type": { - "value": "EnableEffect" + "value": "ActivateBehavior" }, "parameters": [ - "Button", - "\"Effect\"", + "Border", + "MultitouchJoystick", "no" ] } @@ -2248,434 +7804,630 @@ "conditions": [ { "type": { - "value": "SourisSurObjet" + "value": "GetArgumentAsBoolean" }, "parameters": [ - "Button", - "", - "", - "" + "\"ShouldActivate\"" ] } ], "actions": [ { "type": { - "value": "EnableEffect" + "value": "ActivateBehavior" }, "parameters": [ - "Button", - "\"Effect\"", + "Border", + "MultitouchJoystick", "yes" ] } ] } ], - "parameters": [] + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + }, + { + "description": "Activate", + "name": "ShouldActivate", + "type": "yesorno" + } + ], + "objectGroups": [] }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Clicked", - "source": "", - "type": "BuiltinCommonInstructions::Group", + "description": "Check if a joystick is pressed.", + "fullName": "Joystick pressed", + "functionType": "Condition", + "name": "IsPressed", + "sentence": "Joystick _PARAM0_ is pressed", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "MouseButtonReleased" + "value": "SpriteMultitouchJoystick::MultitouchJoystick::IsPressed" }, "parameters": [ - "", - "Left" + "Border", + "MultitouchJoystick", + "!=" ] - }, + } + ], + "actions": [ { "type": { - "value": "ScaleWidth" + "value": "SetReturnBoolean" }, "parameters": [ - "Button", - "=", - "0.9" + "True" ] } - ], - "actions": [], - "events": [ + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the joystick force (range: 0 to 1).", + "fullName": "Joystick force", + "functionType": "ExpressionAndCondition", + "name": "JoystickForce", + "sentence": "the joystick force", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SourisSurObjet" - }, - "parameters": [ - "PlusKey", - "", - "", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "TiledUnitsBar::TiledUnitsBar::SetValue" - }, - "parameters": [ - "UnitsBar", - "+", - "0.5", - "" - ] - }, - { - "type": { - "value": "TiledUnitsBar::TiledUnitsBar::SetValue" - }, - "parameters": [ - "NoBackgroundUnitsBar", - "+", - "0.5", - "" - ] - }, - { - "type": { - "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" - }, - "parameters": [ - "ContinousBar", - "+", - "0.5", - "" - ] - }, - { - "type": { - "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" - }, - "parameters": [ - "NoLabelContinousBar", - "+", - "0.5", - "" - ] - }, - { - "type": { - "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" - }, - "parameters": [ - "NoBufferContinousBar", - "+", - "0.5", - "" - ] - } + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Border.MultitouchJoystick::PropertyJoystickForce()" ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SourisSurObjet" - }, - "parameters": [ - "MinusKey", - "", - "", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "TiledUnitsBar::TiledUnitsBar::SetValue" - }, - "parameters": [ - "UnitsBar", - "-", - "0.5", - "" - ] - }, - { - "type": { - "value": "TiledUnitsBar::TiledUnitsBar::SetValue" - }, - "parameters": [ - "NoBackgroundUnitsBar", - "-", - "0.5", - "" - ] - }, - { - "type": { - "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" - }, - "parameters": [ - "ContinousBar", - "-", - "0.5", - "" - ] - }, - { - "type": { - "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" - }, - "parameters": [ - "NoLabelContinousBar", - "-", - "0.5", - "" - ] - }, - { - "type": { - "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetValue" - }, - "parameters": [ - "NoBufferContinousBar", - "-", - "0.5", - "" - ] - } + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the angle the joystick is pointing towards (Range: -180 to 180).", + "fullName": "Joystick angle", + "functionType": "Expression", + "name": "JoystickAngle", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Border.MultitouchJoystick::PropertyJoystickAngle()" ] } ] } ], - "parameters": [] + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick", + "type": "behavior" + } + ], + "objectGroups": [] }, { - "colorB": 228, - "colorG": 176, - "colorR": 74, - "creationTime": 0, - "name": "Press", - "source": "", - "type": "BuiltinCommonInstructions::Group", + "description": "Check if joystick is pushed in a given direction.", + "fullName": "Joystick pushed in a direction (4-way movement)", + "functionType": "Condition", + "name": "IsDirectionPushed4Way", + "sentence": "_PARAM0_ is pushed in direction _PARAM1_", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "MouseButtonPressed" + "value": "SpriteMultitouchJoystick::MultitouchJoystick::IsDirectionPushed4Way" }, "parameters": [ - "", - "Left" + "Border", + "MultitouchJoystick", + "GetArgumentAsString(\"Direction\")", + "" ] - }, + } + ], + "actions": [ { "type": { - "value": "BuiltinCommonInstructions::Once" + "value": "SetReturnBoolean" }, - "parameters": [] + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Check if joystick is pushed in a given direction.", + "fullName": "Joystick pushed in a direction (8-way movement)", + "functionType": "Condition", + "name": "IsDirectionPushed8Way", + "sentence": "_PARAM0_ is pushed in direction _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::IsDirectionPushed8Way" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "GetArgumentAsString(\"Direction\")", + "" + ] } ], - "actions": [], - "events": [ + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "SourisSurObjet" - }, - "parameters": [ - "Button", - "", - "", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "ChangeColor" - }, - "parameters": [ - "Button", - "\"189;16;224\"" - ] - }, - { - "type": { - "value": "ChangeScale" - }, - "parameters": [ - "Button", - "=", - "0.9" - ] - } + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" ] } ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" }, + { + "description": "Direction", + "name": "Direction", + "supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\",\"UpLeft\",\"UpRight\",\"DownLeft\",\"DownRight\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "the multitouch controller identifier (1, 2, 3, 4...).", + "fullName": "Multitouch controller identifier", + "functionType": "ExpressionAndCondition", + "group": "Multitouch Joystick configuration", + "name": "ControllerIdentifier", + "sentence": "the multitouch controller identifier", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Border.MultitouchJoystick::PropertyControllerIdentifier()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "ControllerIdentifier", + "name": "SetControllerIdentifier", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetControllerIdentifier" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "=", + "GetArgumentAsNumber(\"Value\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the joystick name of the object.", + "fullName": "Joystick name", + "functionType": "ExpressionAndCondition", + "group": "Multitouch Joystick configuration", + "name": "JoystickIdentifier", + "sentence": "the joystick name", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "Border.MultitouchJoystick::PropertyJoystickIdentifier()" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "JoystickIdentifier", + "name": "SetJoystickIdentifier", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickIdentifier" + }, + "parameters": [ + "Border", + "MultitouchJoystick", + "=", + "GetArgumentAsString(\"Value\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the dead zone radius of the joystick (range: 0 to 1). The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).", + "fullName": "Dead zone radius", + "functionType": "ExpressionAndCondition", + "group": "Multitouch Joystick configuration", + "name": "DeadZoneRadius", + "sentence": "the dead zone radius", + "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "conditions": [], + "actions": [ { "type": { - "inverted": true, - "value": "MouseButtonPressed" + "value": "SetReturnNumber" }, "parameters": [ - "", - "Left" + "Border.MultitouchJoystick::PropertyDeadZoneRadius()" ] } - ], + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "DeadZoneRadius", + "name": "SetDeadZoneRadius", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], "actions": [ { "type": { - "value": "ChangeColor" - }, - "parameters": [ - "Button", - "\"255;255;255\"" - ] - }, - { - "type": { - "value": "ChangeScale" + "value": "SpriteMultitouchJoystick::MultitouchJoystick::SetDeadZoneRadius" }, "parameters": [ - "Button", + "Border", + "MultitouchJoystick", "=", - "1" + "GetArgumentAsNumber(\"Value\")", + "" ] } ] } ], - "parameters": [] + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick", + "type": "object" + } + ], + "objectGroups": [] } ], - "parameters": [] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "propertyDescriptors": [ { - "type": { - "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::IsLabelShown" - }, - "parameters": [ - "NoLabelContinousBar", - "" - ] + "value": "1", + "type": "Number", + "label": "Multitouch controller identifier (1, 2, 3, 4...)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "ControllerIdentifier" }, { - "type": { - "inverted": true, - "value": "SourisSurObjet" - }, - "parameters": [ - "NoLabelContinousBar", - "", - "", - "" - ] - } - ], - "actions": [ + "value": "Primary", + "type": "String", + "label": "Joystick name", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "JoystickIdentifier" + }, { - "type": { - "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetLabelShown" - }, - "parameters": [ - "NoLabelContinousBar", - "no", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "value": "0.4", + "type": "Number", + "label": "Dead zone radius (range: 0 to 1)", + "description": "The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "DeadZoneRadius" + }, { - "type": { - "inverted": true, - "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::IsLabelShown" - }, - "parameters": [ - "NoLabelContinousBar", - "" - ] + "value": "Center-center", + "type": "String", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": [ + "Thumb" + ], + "hidden": true, + "name": "ThumbAnchorOrigin" }, { - "type": { - "value": "SourisSurObjet" - }, - "parameters": [ - "NoLabelContinousBar", - "", - "", - "" - ] + "value": "Center-center", + "type": "Number", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ThumbAnchorTarget" + }, + { + "value": "true", + "type": "Boolean", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": [ + "Thumb" + ], + "hidden": true, + "name": "ThumbIsScaledProportionally" + }, + { + "value": "Center-center", + "type": "String", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ParentOrigin" } ], - "actions": [ + "objects": [ { - "type": { - "value": "PanelSpriteContinuousBar::PanelSpriteContinuousBar::SetLabelShown" - }, - "parameters": [ - "NoLabelContinousBar", - "yes", - "" + "assetStoreId": "", + "name": "Thumb", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [], + "animations": [ + { + "name": "Idle", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [] + } + ] + } ] - } - ] - } - ], - "layers": [ - { - "ambientLightColorB": 32, - "ambientLightColorG": 0, - "ambientLightColorR": 0, - "followBaseLayerCamera": false, - "isLightingLayer": false, - "name": "", - "visibility": true, - "cameras": [ + }, { - "defaultSize": true, - "defaultViewport": true, - "height": 0, - "viewportBottom": 1, - "viewportLeft": 0, - "viewportRight": 1, - "viewportTop": 0, - "width": 0 + "assetStoreId": "", + "name": "Border", + "tags": "", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "MultitouchJoystick", + "type": "SpriteMultitouchJoystick::MultitouchJoystick", + "ControllerIdentifier": 1, + "JoystickIdentifier": "Primary", + "FloatingEnabled": false, + "DeadZoneRadius": 0.4, + "JoystickAngle": 0, + "JoystickForce": 0, + "TouchId": 0, + "TouchIndex": 0 + } + ], + "animations": [ + { + "name": "Idle", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [] + } + ] + } + ] } - ], - "effects": [] + ] } - ], - "behaviorsSharedData": [] - } - ], - "externalEvents": [], - "eventsFunctionsExtensions": [ + ] + }, { "author": "", "category": "User interface", From 6c3082adc0c679bf0436a98f97b14106a475a0ce Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 13 Jan 2023 13:54:29 +0000 Subject: [PATCH 68/98] Optimised images with calibre/image-actions --- .../assets/Flat dark joystick border.png | Bin 1668 -> 1632 bytes .../assets/Flat dark joystick thumb.png | Bin 1080 -> 1044 bytes .../assets/Flat light jokstick border.png | Bin 1728 -> 1693 bytes .../assets/Flat light joystick thumb.png | Bin 1080 -> 1044 bytes .../assets/Line dark joystick thumb.png | Bin 1591 -> 1555 bytes .../assets/Line darkjoystick border.png | Bin 2329 -> 2293 bytes .../assets/Line light joystick border.png | Bin 2319 -> 2283 bytes .../assets/Line light joystick thumb.png | Bin 1636 -> 1600 bytes .../assets/Shaded dark joystick border.png | Bin 3066 -> 3030 bytes .../assets/Shaded dark joystick thumb.png | Bin 3025 -> 2989 bytes .../assets/Shaded light joystick border.png | Bin 2882 -> 2846 bytes .../assets/Shaded light joystick thumb.png | Bin 2802 -> 2766 bytes .../resource-bar/assets/Summer Background.png | Bin 122466 -> 84512 bytes .../Transparent dark joystick border.png | Bin 1678 -> 1644 bytes .../Transparent dark joystick thumb.png | Bin 1104 -> 1068 bytes .../Transparent light joystick border.png | Bin 1637 -> 1601 bytes .../Transparent light joystick thumb.png | Bin 1084 -> 1048 bytes 17 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/resource-bar/assets/Flat dark joystick border.png b/examples/resource-bar/assets/Flat dark joystick border.png index dc8530e1bbc400f20ecf0738565eb86f1c485ddb..5ddd717e42b566f78f6441a2a92756a1e612dc74 100644 GIT binary patch delta 453 zcmV;$0XqJK4d4urBNG4#a7bBm000XT000XT0n*)m{IMa21b^_|!Z2LVx2rL*3Zs`@ zm=}aw(Kan}VN6Yf)6h#O2J_HMCYq}|r1K+WJPr`$|!GMU`dC85`AYU=y3 zC}|}fay*$&#=rvgJ|9H5Wr3J-F*W+d6q`-09^Il-g7^?2Bq+X<8X@60{8MeevyhF% zgoFbTLb~EZgnx(+5dz}-+_np`cf4Ay4rN(hh5l}cy6iP@w z6=7iF+a|Z)i!n=XL>P+rl;z^}x@E~6c*5(kHw;{O?0@wJ3d@Z9cRaJOcDr-A?AaiG((*00000NkvXXu0mjfop0RK delta 490 zcmV41^7kBe6Jz1b@8qf?=?pZ&zbr6-F<+FfRzVqHS8{!kC%{r=gcn4CbMi zPz=tqUM8o(NxQ92fttZpPPv)dWHPy@OG2;L)YSK5QPN5} z?|8LZ9m=x23jN&>d%I?1RSYn+ljr%>0xXImG_UvJ&0qnw!m~q{m9VZ6pZ+d2zHmgi zi$#P1if@x){~vk}B_y8{VMyXrJN0+47dq{58Rl@LInL z6&uzgYFIL5AvVH84fdgVozf8iO`5aE^R#>;uNdQXA%xk$Oru5GD~2pad3A}7Qc47g zi>{ON{g70h#qRX1WU}#x>bKfMzFY3)>O^WyXhoFwb=ckriC;tX$+GpcpFXGhT>Tq_ z)PMFL-A?AaM2iU80000jbVXQnQ*UN;cVTj60AhJAVr*}3WMp|RV{&KQKGBibQV{c?-a;OG>?f?J)07*qoM6N<$g8#nm?EnA( diff --git a/examples/resource-bar/assets/Flat dark joystick thumb.png b/examples/resource-bar/assets/Flat dark joystick thumb.png index e124dbfc67955be08610b81fbba4d955073c4336..36f5262a9055b15bf36ba5ddee957e1fa854561e 100644 GIT binary patch delta 40 tcmdnNF@W@fk$L90|U1Z2s2)~TlZ(9;#Fo&22WQ%mvv4FO#s=q3%LLQ delta 77 zcmbQjv4dlR@3G+3|wG{GB z>6#h#v~WgnV5gVz4N z_Yzj!EfgJ4N5N^Y0*2mN1p%)I+3$m&=zM>W)C&!%c*Qv{Sf}EgsuxV@q$;Mf87|nG zxueSkOmX%iB+h!_%7SFdaT{1mIAGfa!rhi3`hjT_WbFrLQIN_POrs#t56miJPCdXi z7d3w>&~62;Ir}{`+Ir!3fors#NAUsv7b8671|3Gh(@hF$qv19|mz;c{UEfN{EdsMN zO!@`0G)(mieZkXiV4a3qPf)^Ypz{Mn7Ncs6QvuiO^}z)pU|Ird$N>`pkI9FC=?U0Y!mED- ztQVsQh=BEYetzyxz@jM1`FxIm2)G||VYAuvn}YQNk4cDtX$jayzSc#^F$obc9Rb_Q zw->POS@3rW5ikt_UC8IG8R4sh2pGSBF6476U@f68(8Yy;pSYgmT0mY(1SafXQbbEW z7z&v4T3)aeaL8ksV8;HjOx}zSR>*%nUd;h!@OD%%|EHC2G@Ta-F$A4 zkZ;fgS8Kmjb}94-La)Wgv0`Mm7W~ESgWjVbQ4ky!AH%B!BnmS3 zvG%*o`hc!!=r#3{iorbfl8PUp_o|o9X*eVG=9v`=yELvQE#D-wrYMRVPDzricvq7c z1yX-pF3Z_$cGl3J4N$z5Sz8qi49(o%-=8hud_E6NzNt5j1?&|bXS3Pt#X3hm{aN<- z0+BGJrq(721C%e%;NOSdLrKX$Nf?rR$~@k+Q(2=2okB^;-z5x5KBe5`)_XBl$+d)` z$fqiosCQYF%mYtEJ=TVSZz{9ab9912yZ?U$=tJvm+kD7dHXP+Oi>D7O>9*r)St62} z4+{*5*Z5Va;5;IZQWmim4;$={^ad$C0-#QF)_9(7-zX}^__`3%Y+$IhNNdHAWmHs` zbZn)>QMe3!e@IH}S#7}UTB&5?Pt_7~Y$>IFcC};}kXn)Qrb^p+H6+KRO_g2k%S|7u hvHy4VGf1ib@f%{NQ*D}s%;x|A002ovPDHLkV1iPz+0Xz0 delta 1566 zcmV+(2I2Xg4ZsbMBLW6akvbw0m%tx{6bXSMp-7RU?4O9p3JH;JDu2b5qyGED`rqXa z!=AD%Z#J9FZ7ta6=jX3&Pwal~vKCa=@b>ohH#3reaJ6h(577r;H|`WIb*;=;;Jm!N z{H4j%r1lxzTnf3n{_!qC4)lLvMgu_;=4+H|Dde5fH8bpK;h<=-O@KNwlBPXLv0Bh? z6Gf3;5g!}+7cUQSU4PeQR7Av{#6!1c5h+?6Q&qD>ybJaj+4Oc((cU6nD-kCYD_5YC zff%<^42zX9Y59VEJfa?H*(B;IWuOYtkf@iy+K^L~YHLMDOo2|~_Tk}SKlJNBqhU_U z4OG7Qe7>Ddr~9E_2P|QFDOro*P*d)A`C^bzfgqWl#N8)u6o2yiX|-DYPriES_c+e; zTfT9u^2H!w6%FH)FyvyR=JD~dQNCCtjH)=1d@=0r&1SQ+1=J|ZGWh*Mq;(yM@>w^l*G>p}MW z;3qoYA0+icLn>Z!&I{J5IH&3bQ#z@N>1>7zwr1|=asgAEy$Ff3UbwO#nQ+_&))Efb zc7brWWr%)Y8U!7L3^{X$>xv>RBb;aeU!0yB<2 zL(DTD&|?Igu>J#o)`2u1K;IlZv_$7K7_0+xx?jMIgZ)67PrEJcduR&%Vmb|qovQa+8Rrzd7AQZ%>qJiC&xwSbGo;?G4PU^)V7 zXzon~T&-3I7leRm38*0lOawe89|EQ)U|R{V5`VB>j3OWc*5mp4xjzBRvfR#QGXzAy z{g4am^}62_tRHwxLIg}pz&7%=E<%n;h=Az`*jB#1fNjr$ze|XKX$a^-K4;AcUnNAq z_yu$!pHl&A33Y)kE)4v{^&Hm%@=_u&VgHgMTJphAz?|3ef~9~%9?JwX_K#)qW_++h z?tk%W4lskaqk%ZZT0@9cOUGt{_;V0ORfexczku^aYhOXEJ zw?U(TRKw5}aw|Irs$u9L{f@J9VN)7hbANR6xk17uw+$Sv{g&CK&?5-F79Yook=^wB_Pcj|)<9!R>{H!eg9u1r4jv`L+xFg3w~^cboMAUDMEO>LnF}dFmw9wiylbbjMh`lLl9Inm7?ONSxyh~fVyu#D2}6-jRW4EQvMQMeo``y^4Flg)X07Mw z1SLnOfAi6Y*4wuEkhg3&%4-%+A6C+B$JMe#BsCuv7!t4Xt5CstL>#3oVl5sv*dOT) zQhEeHo#w3ZJl(!gRE+U;A*9*BP-~IaiXqFWs4nT)N{ORz8T$T^l-9G_fY-HB$;O|m zCFIyrO8x9=$uJ77yZRZV)c^PmVy9DW3!80@0000j zbVXQnQ*UN;cVTj60AhJAVr*}3WMp|RV{&KQKGBibQV{c?-a;OG> Q?f?J)07*qoM6N<$g0-vir2qf` diff --git a/examples/resource-bar/assets/Flat light joystick thumb.png b/examples/resource-bar/assets/Flat light joystick thumb.png index b26ca4fd14ef7afd214452317fb65934cdcdae0c..d21ac519cecca59c8b4df8ad0385a33b33c6130e 100644 GIT binary patch delta 40 tcmdnNF@W@fk$L90|U1Z2s2)~TlZ(9;#Fo&22WQ%mvv4FO#s=q3%LLQ delta 77 zcmbQjv4dlR@W@fk$L90|U1Z2s2)~TlZ(9;uTg-22WQ%mvv4FO#s@X3%~#X delta 77 zcmbQtvz=#x@W@fk$L90|U1Z2s2)~TlZ(9;x-OW22WQ%mvv4FO#tNE3-ka0 delta 77 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 Hu0mjf$p%44 diff --git a/examples/resource-bar/assets/Line light joystick thumb.png b/examples/resource-bar/assets/Line light joystick thumb.png index e3294c42d9d59f74202f2db9d33d5b731a384af6..ece43907528f2e9e6a1e390c1995d9425b76552a 100644 GIT binary patch delta 40 tcmaFDbAV@pvM>W@fk$L90|U1Z2s2)~TlZ(9A|o3ogQu&X%Q~loCIH@m3rGL} delta 77 zcmX@W^Mq%D@W@fk$L90|U1Z2s2)~TlZ(9;&g6K22WQ%mvv4FO#tt=3?%>n delta 77 zcmca6{!4s<@W@fk$L90|U1Z2s2)~TlZ(9VjedqgQu&X%Q~loCII103#tGB delta 77 zcmZ20eo=ga@RnI7=Xaj)z4*}Q$iB}LwXxK diff --git a/examples/resource-bar/assets/Shaded light joystick border.png b/examples/resource-bar/assets/Shaded light joystick border.png index 962610b6d2b5809a0a057cfb13cce3e766957fd0..f2da48693ae085de80d218c3f7d8da9b8a05265c 100644 GIT binary patch delta 40 tcmX>kHcxDVvM>W@fk$L90|U1Z2s2)~TlZ(9;(abo22WQ%mvv4FO#tDr3;F;6 delta 77 zcmbOyc1Uc3@W@fk$L90|U1Z2s2)~TlZ(9Vm}urgQu&X%Q~loCIIY23n`bl(x@RnI7=Xaj)z4*}Q$iB}UWXf* diff --git a/examples/resource-bar/assets/Summer Background.png b/examples/resource-bar/assets/Summer Background.png index 4eaeb1fe13e91f7fee8dd060b6c18740705b60bc..2b1b3b00a84633f238b469bd1e5417b5059adf65 100644 GIT binary patch literal 84512 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 Q5B-kCIUCbjWAEgD0kld)H2?qr literal 3366 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 delta 3973 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 G)V~2O*eBWm literal 3869 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 diff --git a/examples/resource-bar/assets/Playing Card_Hearts 05.png b/examples/resource-bar/assets/Playing Card_Hearts 05.png index 79ae89b52485ca5573912b10dc30c7fa8423f8e3..2e6754286aa6c0eab25f9d1f611577bed99e9ed1 100644 GIT binary patch delta 3047 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 literal 4643 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 F{s&ykw6y>L diff --git a/examples/resource-bar/assets/Playing Card_Hearts 07.png b/examples/resource-bar/assets/Playing Card_Hearts 07.png index 88b6e099b876ab757f8f67e1d15ea6cd9ce82f22..5b1c7615c38e01049a9024da09fda47c796448bc 100644 GIT binary patch delta 3637 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 P00000NkvXXu0mjfgRBp# diff --git a/examples/resource-bar/assets/Playing Card_Hearts 08.png b/examples/resource-bar/assets/Playing Card_Hearts 08.png index 7623d82cbd4a4292145716b2d96bae35de087adf..de7a4b23541d82d8af94b1be8c915eb6ae7583a2 100644 GIT binary patch delta 3818 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 TqH7lA00000NkvXXu0mjfoBgvl diff --git a/examples/resource-bar/assets/Playing Card_Hearts 10.png b/examples/resource-bar/assets/Playing Card_Hearts 10.png index 4eae476fa99b1925c2b65226162815b8002043fc..52344d0178737e18071713049711d8179c450437 100644 GIT binary patch delta 4116 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 S5I6t;3IG5}MNUMnLSTZR-WO&7 literal 6327 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 diff --git a/examples/resource-bar/assets/Playing Card_Hearts A.png b/examples/resource-bar/assets/Playing Card_Hearts A.png index 86009da91836ee5bbd9d7e8fc19611af877dfbc3..8d41a37089fd86a67710d987ad30115fb5dd9539 100644 GIT binary patch delta 2487 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 B!QlV^ delta 3457 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 diff --git a/examples/resource-bar/assets/Playing Card_Hearts J.png b/examples/resource-bar/assets/Playing Card_Hearts J.png index bc5a54c97b4cb33ced050895a3e8f2600536ae7b..b1bad2217f3b987732eff3c5af2e729108ac9483 100644 GIT binary patch delta 3128 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 P!H{UF>%*#4?V|q&%7n+r diff --git a/examples/resource-bar/assets/Playing Card_Hearts K.png b/examples/resource-bar/assets/Playing Card_Hearts K.png index 4bc672adf345cecb5f9483797a79adf694050bb1..d00782ac4855b0b1d48dbd2e9f2de943b6604d1a 100644 GIT binary patch delta 4262 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 bK0JD{MjMB%W_=1I??EbxnhKS2??e6r?%ymq diff --git a/examples/resource-bar/assets/Playing Card_Hearts Q.png b/examples/resource-bar/assets/Playing Card_Hearts Q.png index 099f403c09a0ac6b77bf82f7ea34e980319379a4..2e0b19d4bb2688379870959f52ac84815a1886bb 100644 GIT binary patch delta 3314 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 G{`()1CVub$ diff --git a/examples/resource-bar/assets/Playing Card_Joker Black.png b/examples/resource-bar/assets/Playing Card_Joker Black.png index 393cdeaccbf982dabfc32aae6dbcbb7b3b622893..94e35a337f98f5e5e6ebe48fc730625d1ce69d58 100644 GIT binary patch delta 3655 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 QKLoZ%is}kgDC5xo0e>c!wg3PC diff --git a/examples/resource-bar/assets/Playing Card_Joker Red.png b/examples/resource-bar/assets/Playing Card_Joker Red.png index 327defbeb6763a8613b9f1db1420796b1f41bf2d..099547623d3d9c9aa8fb899e0dcaa5571358eeb8 100644 GIT binary patch delta 3715 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 M07*qoM6N<$f`$gBl>h($ diff --git a/examples/resource-bar/assets/Playing Card_Spades 02.png b/examples/resource-bar/assets/Playing Card_Spades 02.png index aeae7f5413f8009692fc61300fb2e07849172174..74e7fc7d4efefc3e25be002e72033ad39655d793 100644 GIT binary patch delta 2323 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 literal 3473 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 Bl_CHD diff --git a/examples/resource-bar/assets/Playing Card_Spades 03.png b/examples/resource-bar/assets/Playing Card_Spades 03.png index 7cfff0c341da23ab3f9f8d9f7c6456d32e7c8e8c..60cfe290b2d6cfb6bf8ed8e3e0b83621108fe959 100644 GIT binary patch delta 2681 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 delta 4043 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 diff --git a/examples/resource-bar/assets/Playing Card_Spades 06.png b/examples/resource-bar/assets/Playing Card_Spades 06.png index 6358cbeb92d8647c162abb763233c5d83e71f0b0..51d1f4d9e9d0d1c09b9b86bc29893c47587dccc8 100644 GIT binary patch delta 3475 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 BqR#*T literal 5219 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 XO1D^kgiIgU5QHensmoSMTmJVys;c|x diff --git a/examples/resource-bar/assets/Playing Card_Spades 07.png b/examples/resource-bar/assets/Playing Card_Spades 07.png index de854dab4f69d351587bd3324fc5521ac69fec5e..8d69d7666d48193ea38f684a7b77db650cc1ce78 100644 GIT binary patch delta 3759 zcmV;g4p8y5D!?6(B#|@}e-3gyV<+l^E~Mx z-*J1hJKycj%zNMaCKVwh740r-sXNUd76xP9BUZL-$`1{-jXxZDhZ%MXn**v~y z$BrGc$L#>lUw{4O6_lbm z?(Oj%{rmU#>qMVDd!~euKL7l4^5)GO%R6TI^5rBfER38yc{23CDO0A5$9LdjeYKY_ zUy@Hh{WSTze|q)mW$BdsmtTHS9>Zv>K!F0}^5x5+1J1pB_q=ivXV0GX=>%WDeofl8 zZR<5HN8HH@TeofyH@ZbUW@e?LY z@QI<4e=%c55+5ILdZCP9tS{~1k!y7jS2#FJmMrl&7V$M+n>A~eUlbyQi*P6K7*ZE` z^XB!dJ+P1*1y0|-eLart*RLPfao>Ocy%3I9o;-QTKmYur+t!^scgP1Hd?2K~#fuj^ z2b}QmaF1h`En8-IOhQ5e$(}vCFcKctMS9kue?tdhZDq}xm0Z7m-TvTUY@rvQr%#_Y zJZ{*qVZvFGd-v{Twsq{-G2w0DX<>VCzzC&ZK#}zJISa^qh@x>R+wr0$jA-pX-k{uQJG-It=wG!T8m^HF& zf5V0i!rQ7>uby+jL3kgODPF@PNMvWd_uhM&ET7xAZySbb%=)--9#J8!5R z#~`pMsVM8U%WYrxb92}&f^+N5we_jaI zPSvYdH~r{Ro0&`|D}+?KbZPSMzyCTj*~VbQdpUk}W<%`&RBsK0j^xeL;6jaT(V|6~ zZB?#ZncTmB-&x=+Sg?S5@EkB;0QZUE5eGttKgl+Ao(7Q%#P9TCdm80_$zHc^UGntl zQ)hsK6Gf<=7aUwXFPDIKC6AN@f2PN@9X@>6D_)0j>(^g@_4+LCXqo`2<#XoDaRxY` z4Vj&K{`~XLTqkz(=1p?^_;D_$$Fo2G{8KYelOaO}vUBH7FK~FmtXX)AG0I5h1v5dY0ORvu*+_5<)->ug zvYs{o6nu?R=in9Wf8W2Kc|5YBbWQ8LdGjPVEJJD-)e5|!e)lil$RTb@8}dyUhgjSP zJ#t8j1P8S}h<9mqFpIE=6ap&SjGX47p#ZmI$Bw!SR2DfTMS_DhNB;cz4etPd2#e|< zDrme$ZL!E9DGnT@oXyni_^S=TN)qakLjo0lvmH3Trks6Mf0N>2s|Jf4Vk>a`O*xy@ z1_0mM*S0WYw3-}Z8*nhNtIIsB)&`)X2fmU+jLPam0vu4NL`9d4W>vJRl|OE!;;${h zL1&5#{bQD=RS|%hU7k!TYM&ZbS9LVGHW^@&~ws0oC60(MBS0c<@(ag`qTK;0JdM|$Om zxa&iHor9GY2AFe+nvvl`2*8`VL6Fj2=DOg9VCe zJa<`(`n-_hwo*>gcCj_ocS4^A7rtiA8s+t>Rja&aM~J~)x^zj=xIsD@5?*G5pUB^U zQvg9b6#fD*v`5$ZpvoHiFu2bPDR3(z1CB|y;d#zVIYaG(RjBKaf#^}CN)={N@XD1d zWwK3ee;{<|jSYA#iDJ$ma)4SQD-?J`4xIDn&vR)#iz?0nt%^s17bWy59-N64R1jhn{jF}mN2)474-~`Be_Uvg293%}L1r93PaB@73+`qqu zYvgH*M|#;TI1u!66gbdt=8;84e&49{oyS;(x-7^3az=)9wi$4=^bTzOSOXc|h-?@g ze;qBPEwE{fINPYe=2ex_+5(1EGO0zcvi+C?*?cWhAJ66yW(-Qc*zSeZR*f1plyo+) zf!Dy|)~OxqAH9vpZ3_<80B+${aLVX&LS-5ZGAJ0I{2_UumdCy3Kq(=;!7J7%sJufP zShMi%?5ffc9{8A&!k~krRp|^Cr_m#)ef##hj~n;jXh)Cu4w*0`Q%km(QGvGwIJo_BhlpbRf0rs% zO4)x$%OL45vdRF}az+NRBb17mDUr7YIH;)d44QzkuNtXQkB^F)48zI56a9^s1%xL{-g-)X^KAf17a>4fE!u z=wlNT6P*bT3>$Tu*&7G5B_lavEyFAeW0V%1CD!Lg0zA9 zoW_qIZ&^->{ji+TL2_~Va?ICmiS^F&4!V~{@^9?=<4sPTp@e>hGvdUtuV3Lp|3 zi;T5Zrdh2X364b;6BFY_>M&~(9E%KW9XhHY!Lf5$+A&{&I4Eywyz zf)n7d6K@bzf)ikyHEWgx$F7EiA2ze#aXm_}7C6t+9}15 zqM*Rp1#lMA)ni6Nf7;T-8t7Dvx}-S(rz2}Kg+Og2m(mR-FB(jw{{WoSF5k&Y34i?Y z$4Yb+lLYBv9b-Gn5H(6IL6UI&g@00|D(3RXR`80YoA!q;FPscc5kaFLHT%^gE5k Z{{d}15ducAewqLP002ovPDHLkV1nti-sd^zb2i@SffhXt7Yzggq1VyYcnFRzV1IRq z3j8*q;li@{w*+0n6&j}I~ z6eQv5<&Jc)^Kp{!_H#jRt8hUetTj3s_u#>pt=ur9bmG5H3t>zAE0i*@c0Zlbt~fpI zq9B1hM>q9sTL_AR{Afw zFBMaEg+QVqNi3seEY$pCl#ss=Zt}ZHw)?xn5bq1m)}TUUT~^9{D{0(Z5dF2?cvKv3 zTK@@|2;~SpgA!U9LLR>s8jEBg=O~fn%Nk_5awU3X#OPpWp%YpATWyGldu(iJiE3|G zk!nAZi5IyBVYWL64hai;jt4^lbG^Pgz=K6v`H zqkE@NJ+{a~!H#Fvt%2+EH5Eo|6z$>Rp?uwcY{nSm$$@Ls0t{E5naQS)QDo}x?;m+0 z8|h!eCoWDOb@B3jSJ$$Y#%9|fLdfwhA2SP!@8;C)&AB%AI_F{gjfd=s2M7K`IdbPW zj7v<^G%?9=Y&^CdS!#3|WP899NKa2MnAT6{pPrSqzi}FNu*PJNr!tL=4eXAjY(Fq_ z*qMKih2Nz2_f*etTvNsq_m6-{a9FVa54h-9Rp3gukPLcGiI7^ z)&z&}op2RjAP@+sM)C_6$~ro%;b9ZDeo2dN!_B(O`#*IwvgO>_0(a&;5zfE&zE3s# z3RJ0ZrKP1sef+4Q5`LWgGt|{p^xN`sAp)ma^ND>lw}%uV<2|o}EiN|8K&w4d4cwaf z&#Y6mWkCTXP1vx}H6ew1o|uEc6>rbAUB#+}A4`>d`WHg=s2W`&7T-FNZ0{&Yw z8LwWwGM#SqUuO;p4W+4V@>zmSI4wu5(UULdku~n1bCrYa`%`bg^xu}1QTzJ(Hv2Be zXtuPrDwV=-&b9{VCBFxgY&ZVSAkyDQGZ}d-OLg}5$fo_@*&o=@Mkx;0Guwg`9~jD2 zW|xzbE1I%s53bR4Pcq@kgqYc&ZySbM>z9%E|o7!Ln9i8VvzFESAF)g)WR zm&+}66%$Eo<9G{&3ey_cQJYQY(+XA9f8e<~gogJ%tNoMeot&7M8Ome@kFmSdV`k#e zOLtXX|A3r|lJZT%4f$0MofnJOB0(Knc7(raI9(fk8=WJ2x6sITr7s0F$BI zqvIo?Q!e-!NhNsq`L}Q1`o4ZeS6a4wP%^N!EhzA2_*?DR&z$gUqS8t%NBsKr>uzpt z_7TsTc{jAyfNne)NEdDOw``q}v~Jf{kD;?`C*$Mell7RAn%gORRFWDSd-1J@o7>Gh z!Mj~W;-F-aB!ZLvLa`ouj#5DRc2j4kS|X=RjPbZPd0QY}!e(@I zv>w!5e_l3&29mHjT{o)x1|nK2bR+TVA$Fm~K^NVAdKw(1^XoM&=41jSs%lWl2~uV@t4D3LPDtzJY<-KN&&o7(fTf$;rHd*0=VEk8R@RUjdac_W0UJ@7?*g zQRD;*tCcIXhiM!G5!58M_^&@SKGf-USi*=su3VgdA6B$cfy33ceZSVL!bV7OBfe?y z#u8R*d>$AXF|yJ`mnvPMi55iCeO#&WNkXHq-cRJZQBGJ}dooI5j~jMa;)YDMhsao3 zT560EL7RHawVJS6J=~j86z1iHbe^4vfi^U#6wS~LKN!_&EjKKK+yDIbpV3W&PS(() z?L?s0i!G$QG?mY=r90kunQU2C=7E8M-MOFzJ~g%LlT|iaa5(FEF|G75%?FK8Fe}7bU4oS2J`1%%BRNP8fC%VZc za>>1djMO>}e!N8`e2td0LLyzI69CKdbrY2{J8OwkCv9(U`)_;^?LENb@vJN?4!r*k zCvEi1RO+VQBf-LI-3dLgog*&%yzVWI;)ae1ZuP`ob{)g&ppe&Z88D>K+(TZ%u73M3 zAuc|?d#)|Wpwh&|gil_c?bGY)3LKN?H!CE%;Wsh|>8}=ZB~posiXJb&R?~M}|Ccov zv@_51=$-zOF|+UbfpAGtQDl32dxa_)Oz2i%0ntrVPL5bE&d$!R-DrGc;s3SxCI9;Iq4Uuh%^!B&4Wn z{_O0}jwaEC8m%0=^)f&Lb0;kGb_W*w(YX=ZwMy_sB3Z0TT9^y~-=n8f$-z}i7><7b znXydPsadFu3qf}M2Xkb8et!Q6ngIrbF)}mr=ZHf94P};|+_FQGG&D8M=HzsrDOD9y z>gyIWD+g`MT10^IJ|`bcSb_IoPfyP`);UfYXI@p+`G*sl#gAIOfg2`(Zk)iL1qKH8 zW{O*k;2uj_&7!?K;@8JZ&}$sPDS-PkUb*5lI#F%cV`OR?$8H_my)yHXn&o_T=Ded} zFRa=Em&!`=r28jb@*`rlzBbj}%s2HPNPeL&)N}fKKLvw9MMjdRr>EPF6x`#Gb7S@M z^Yi&Wa3yyWxIb#2^w|NhTwj0x3v>K^Q&Wx)A3m6V?xm)of!W#d0W$^6Psb1Q_m>3~ z#K^|>E)9pnsYgWI0S=ywMkl1EGSl%Wu>!B#-P>dSt6JT?dWT|F(Pt5|oV=gRr_RB? zK~q>*_`*8;rzVSqUke7{qj}-zF38Jimf`EiX(oeJ= zj%Ytq?~1zM+t@3Cd1P#C7l2va>HK%!(h?(*PDBsPXWz8X zZmq5!DcElM*x)`X<+FHqzLD$d)zR5m6woDHt)`}C#r_S-z$Hw2Ix7~7o%)CXK9`)9 z=D=bBt4VMhCX-+PAY!TgUp3vg_P!6EPq~;`hVG4HIyBy*sdgr2dVHJ($l5zzi(W-2)HikKz-r_XS|U1&e$4?!j$r49)SGfQKA^#%zpFOxy={he`sKS`-sQm9V}w z00pr~7P+cF7cxo{9eFYmS^JNd=EBOtj<(Y=m?2kATXS4H-bC`*FoLt^uup14|dz|_^(0RbXBr94%ZNTg40lJ0H3g#QxQ z`vKwp>>TRvj|Z0obgIK(eZ#|v#*HqY^ZY^hOK7Y&7k_`Ufn&p=lRD>SXGH`BKUQo4 zJ;!GnJR4*KLr%~}Y<+-wdU~>6yGGcc91sGjH4aeR(9G9**R&^%kdf}Fi}*}qJYpOO za%p{i`e8&3E$Q@N+^}f=7NkC8-}$};S7MB>BoCk6RJC2|EPLA;U$VUx9a2fsreml% zD~S=9W&sFeL{|nNYKA)%azk5}t<20sTLDE!fyf(QnRPCT!#Z$FP9^`+VGpRXa?irT z!sg-XsTp7=!7~tJk(t1h|p}f!o%a~mz<{RLcrXf z$~w=`m+0tLoCa43Zxns`m)H5i<6pnlvbX17mV2WgV}O>AcOC?6c2&WvUgZBG^3u{$ z`(#((K=OH|EpBazn;L@fir*&BNKSq}UFSmENLeqL#Vz|JS@R7r?x+P|>X9BZrvmA5 zrS0t)fDs`IuG1cbnHTrp7AnjKs~fT8Y^_$j4?UFDJ|g8mtJQU3Ux1!iHv8P0jOe-1 z+}2h%Khb<)If~Ho67YUatuYXn)W*unBop(tW5TGgh{z=X39J4OGwSMO&J#dB7SL)< z*pU}Ok62=WjsbbPE>-U7g38e>GWcY@1UfxlG9Fu|uCAW)=8bD@JBAvFGKlXe9_7p| zaTgbtQ(!*M3K>$)z}&U<^c*6>v!`~@4}us*tmD+qj(fg!NK3z=JCCGar5zG*I59w| zE&=}{foh!sT1S!ivU`sEIaR|It5i0|U3a)07{6ycbk~@=N!Pj}`0Ps3DGw-0kk}rfMW7 zCtm{tVgj68T+p)SL-aZ_c0u&yLd?v}yMQM)k}N`w=7MTM58ZS;LV|;N#l-X`|H{~Q zK^&c&I6Zbguq_`M1P3=Sj@NG5yQSX-J^94bQxkz;llPe7EyG*C4_yLkrmd^{A&Eyh zIOvF@)BB}76+}6J0fK$^jvtVSP$RGwpKl+j?!ZVG0U16fq|)jin?A-2){z#u0@CazVH*Ei1d7 z@?9x@&KOUPt*%a5dtfo~f`9EMe8 zoq~#LFR!c6Fd(487oNb~wQzDfIyyR%9=gcT!%6*Ykc`8_F$8?9!Kj3cIlu9PIJ&q9 zC@4%SwrVphHa|syX4BQxEx9ImB$$$w6$?ICy-Rd5?1S_{9Lc0O+CY{9$>9<`z2?8O zzn0gfr=O6i0AxZbTR+P0Cd1@gClSi>b$C`rf`4`hEY+0X6K_u_) tDEGa1QctdUxqxvivG$JR3hLj5Kl}MsPCwqbgD;#A9nA+Cl`z}L{{h-8t`-0Q diff --git a/examples/resource-bar/assets/Playing Card_Spades 08.png b/examples/resource-bar/assets/Playing Card_Spades 08.png index 86f074578f12f20f482ba8a1b3d253b56ec56317..daabb221b9fbfa07f8e78849855b6b2d307a3c47 100644 GIT binary patch delta 4033 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 literal 5907 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 L0aLGdU>Es6nsZf- diff --git a/examples/resource-bar/assets/Playing Card_Spades 10.png b/examples/resource-bar/assets/Playing Card_Spades 10.png index f122789f34555eccf3845d4ec680ebdfe1ed9c4f..d2086479e41ce5cc517a88e573803bb94138a223 100644 GIT binary patch delta 4411 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 B$?gCE literal 6614 zcmW-m1z3}B7sdx7B}hu=P`Y!p;0WoER%sCFMnXWOr0Y+OmXKzIFiH?DwokB4@TA_>k61$=FNZ)y~V;(!&+8$!;Ns|MZRuvq z@9JTny)Q!t_R)U|S9s=!*voM+rZk%ByJ?SdQqavOvl)$2f7WxCY`zOuza{@nN;S^%9>w@q>b9$c_T0QVymR0 z75t^QEuYJrKQYJ&K<@>hnmoU^KVpG;sj!d^;|daoNIBG#`rCIq36Lk3bfzW)44UtL|T{A%^ab$_WdVSfJkbCeeW@A{^ z$BvFXn33$rfb)F^#}(fML-bR1^{*UxfrWiEq)76u`aFSncCe}sO)mkop`;*ve zKYzAw`s}(CA44sG4cXq=5gQBInc|z7o3r{7f;A_q>B!B^tz%*mJzAtfKT*xy;GyN4 z8+`qyxw%>JCmspYgqpUlE*bWnJC^qLk(HIaCp*%Ajo8+pOKv9uz$-vmeQ{`&PR zi_c`iscfXHnwlCZ4NcV1k;i=78wyKHOS(Moxq~5rP8Jx9M#5$Ov69kVyWxybBvQEj z=lZ*+u+qv(qR`M#kDTO`lrTw8Onz~(lB*9r9UUnZRm9a*pxsh?z`3AxFVQn2qn#0c zqu6}}I5-Y2ZsEs|@MU9vf2qR4!XKlfU9AfkjNNdS*u8WCb3>TV2Ac8x`}egSowVdd zQl%&qoq~b_CpWhqcS>^dyJGcpWcXyG@?}O|Qc}S)c6oW`db<%tPfrn7AF*$*(4VTR zl-%3|J8rH68j+DC%)RukZCx=7XJ;6WGO49dGg%ST#T`f!k^hDA~`(=%sc;#u3#AkXIR?!-WoIL*9dTwI*r zayWHHVj{cKEb^|qySwS^BPg$V2SZ;x<9PFaopoQW-3VRP?)E!{obkE253}|5A_8S| z2OIJ?w0UnYKlPrz4F2b>rAutf0CR)5cK&OcI&JLAN6#W{?{!>Y=ySYC$qXxvLswR; z(B4`ISSSeQwhc98G3fk78VOmTwcy4)%KKic&)$lXk-k2~^+~C`dvaA()%t02L*Ru+ zLsQdHiS`3rPc2hZx*BcSt*tG@;u8-KkAt-Vip5Z8K5K}0KzV`pbKyj8WWEN#_; z5BZ^(W|Mf_r*;>Y-q4Z*RZ2NB5f3ykaP;w3LIKoP1*N;_`BZ`Q{H^NHwdA zTwP=1w|s@LjJ?~~M?^q5Iq}od(uUu5P#EH1hbp94tQ{5KXMnM!>xeOM`hxj5c<0!uzc?ExvBo$?PTDRnyE{#&~)ARr)ETV7UxsIrj$sI~mM zxtbtv=hfKMqz8w;9}9l->J=w=Lr$ivu70ombjoaPcUJ?V`jC9|JplzL8(Ua!9DU!! z;pu5{P3LtM2u%jB1~oPHT!RBekvem2j--_I2Dr{~l*0M`LQ!w8G8AeGMC-XUFE8)r z)x|L!e)8wgx@Cw`ciL81SXgh*c5^-5yd*yUehUhDdA2)Sq_a_!AO|h1mQUU-Hpx5K zM_Bj8C+Tp0Txj*(nW$}aoJRUoHa3dA=m<1X=%}wxq2e>`xsa;^DQejI_iWEPjhZn0 zDhqo$T*#;CF@Lk=&|fLFuYr!OGlUze1O!O`$7g1jnxv_@yo>1kx99o?#2+?bXk=s!qGu{mE)7&u8ECWX z<HJkhVjjF4D{gbgVP2z5@Dy zM+6T!owu0G?yyj=@$&E#h2FtK`ZPUevB3WLXGy(6xQ~cg?m52}$m&v-`nUi5bKb^? zA7Bs_Mm5~;<=!i@u5WBOPS$$wOx5{(1bO*g{sxis_hKW@VYxeeqSe<`xp#6h4J6R3 zt3QXs9ksQBQeK;+V5x=wf?9Ss-JYEI@#D+p-_4?g)CjjG*QM%7*HNlPgubz{>cGGN z;riw24xI$IxVYi^qyFLHSfB}PMx~97X-CJ$pPHL9qEIU~NN+flEJrRVD=NxmsY7$R z#=I0bk|d)_0+X#-hC=o3Qm6UqQW2j&t?-X<=bugPC>3Kj6JnrMylua#rI$jkJyHjy`M&`yUEGPg~*hu%F4~bG#(Fc ztvtCZ(gp(q|I=-yPoF;d|0YRsM+3kS1783tak(7H9971HFcU(!)MP}fLzbc&XVHeL?t9_JgcdzBa?7l zobd0^1V#jfLK8DH2Lh;)q=ZN5F+_8uK<@3_pp;j$%A`C;2M&Np(KC}Kh zJw5%K>4AtY#OnI`w+cCjk`k#CvQhD8)eT(;3OYJMuzm4l1V9MzSwo(U_4RPeuMvlK zz9*Zbe)}yOe&eNtVUm3V0|WtQySiL#()>0K4xgT(r>3ZGE~h(TvwM>j)Z`Qttd!h0 zpPui1_-6Hxon7%ExjV9o2RDZT1-yts)}J!y?^)VU0aAQYdU~F7lHk3@X=CcKL45qAmdYXDE@R)e#a^@Zt@0a0Bk<7h=12@1fT>Zp!qWGDanKbfmW$ar~&@VSu zFg@UrU(8Bkgv-mz69Lw|dxuTL03!ud#>vO0q^gR~wz|9=3Mye`s>)1NTRXD2_)%MX zyO8(xv#OgGAULq#YZ)LL7S7JZ!NI}CW@gsI8A8KhVPL;%^UnBE?L4TgEF&>7@xj?y zFEC+C+v3iQw{EYs+>_fI4;?0m#4-m>%xuzq|F{p^uafpJ-#ClgzJ&I~YufU~9Jy&7@>_ zcsRHN9iEMqmBJ(Em-??A9S`R{zkdq)OC1d_tE?2w@{IL23An!4sB>FZOcMssWExDb zK#NAB{WfxZCkFQxTBj|R^mQV1i^iOtokd+2Wu|0=>WnK7=Ww&~Ur$z?F9n;s`pgPu zdOha?JHRKz94&z7dhC%#!@X8|2%yk#T5QzV;-XegP7b_B?w`$gi6+>qpyDq|^0ND3 z1d*wk*&$l`w?+4Rf?6coiK!`a z5E!7Ix_ZpZ%ihiO#>7O@oa40Ob#NfW9>~I6iPl>@1{=%JlD_*4u8cS#0LoyqK_{DJ z0t3fmP^y?uC{)(@wa~U~!kBqEq=5Z5Y5MyI{MVk{g zCPCF#o$59lB0GA62g_gMtkTu#1et--Twh-URcqVI7PQ2^JpWx|i0bCwGv>uKY{DQjKYy;apD(U{QnCls)b;Giz5-oc zT^>SJb91I@+S;X{)!W|O%wO$G7#fKAW~HXCUeweij`CP1e9`Qtz|Y#z)MV(w%4Tc3 z)}M3&nvb|(BR{`pL@p@iac%j3ACd6`l95rje6aTGSAIj-)zwu-S}v3PTMdBJ9z3$M zb8}em$ua=dSMU`mf3?jOKUwJKe-$e!eZ5l(dZ-J2SOxK7o=O*&y=H_bH|CgFtJE$5{ zQBm={uRJ-Ww|8)8$YG||l2G^#E>S+vG~J@5TKn%zcAAW#j~|QJ4YNQ*?S^US1T7#% z(xRfN|DO{q+2lNdgB9TTJlLDa`XnPk2H?(XZ#E;t!lEMDR^X-{=!V9|VtNUeR}*Jo zdXc97+gE_cuu|uT<=E{41zrf7n3<*2*NXr}6#iTDqO~{M`s4cHYG3Siaxys`%#CG- zTmSh?vwM+p(*%1Rc4!9+APh{hSF-)O?{ zAn(G$ysyXdbvS!~HN25`w3+?v%KRU%3G}lzP#``&&5HUZ8>ZrxTH7J2D&{=mMoM=T z6+9&s6^bt%ZoKsD=bZmQ8hk7+c26cIBzyKn4kZ6udp)s=I_$! zzhhdBF-bUFC7!`j^Gg4`9Sz*zzorEi0B!Yuo3n9nbSwgr%RP}J=~*(?h5>^V)4($SyrqLR6 z`Ibo;cFn9Fh7{F@w;MnrP1Tqul$5Y5Yw=R8f_UK*6Wg8v@M7iSBDn4SJJ4vY-Np9X zDW02`*ZbC1X<+y6#~974Ws+bE(1Y$C91RJ4{r;Ts!~z%AzYCV8jj$QI2OAa7v&PQ*)qM{QC9DGV|=j1RO~6ZKc@}sh%zI zF`8TQAnWO6WMoq1J_7L_AIX-WZ3itff{7cXO83O*+OSZWCumptxBA?;kk-O_V0M-{ z^pW>>=Z&1JPkVcN=5t&Fw&sNxuLJZ$0mny=9>M%iI9)H}ndPf%qngvw9xyO4teugO z)#QB}9vS%t<~CT5`4!~E#i@YQXj}k%pqwk<0&^7wg-~5D(5|Pa7a!SLW(!%mxWsn^ z{S^*RptJ~+EJY%deRH07to#N2^X)L??vpS{dq9)Qqn{FJu_7)tV!99_F7vRLMpyKr zuSiR=L;?bCXD&x}({polVE)#&r61mfuy$}5cvIlQANXfEl8`yUpcjk{yB$t__;+XO zzFG{a(VaZ<0!ZL@JR;#eML|y=lb_FmK4Mdj{nE!ATzNbv335ygZ~P>*iw#HGcfSWD zbVGIL>q%~>pG}&p{`aW);eml|Q*8OHtgQc!L=2mI7bjZ*m}nU{Ic4^q0+9^?*y`YX zo)CP+wjn8t)X0^g<$eHc;nXuT^K8pz#T zdA10IsM1P$JOpi6n0@XWWr3zNSp*CQ0|G+K&(H5)H}oK-KTTXja_w}OOF&CM`TF)^Vx?%<|xS6|3$Qz!1^;lqb4Vq$5t)m2rKEza!A43OH| z+ArzmZ=-?Ifq^EDgM)*chsRj!3ozm)k-s7x85vR4(&`0uDH&|eFC)Vcd7lv*lA4xQ zP+1vkfF2rBuRw?unNQi&A(7oi=0V}Hu|#p>NnQ$^lq `q602$?`p}!^6YZPo4k| zx;@vYN!js_h&vGA^Zq8}N{nDu1;R5~rUleB34s{CY!S-edF=+GRCU~@i9w#3DM6Ed zb%)<;2CmmF1g3J~{TD!!%-KsV`V(2Xy<@N%AQpx1*4Nijpa1wqWM^m3+XxtNX5Z-< z`^~2ak+3oapWxg(g_QdJA;Ju2MHNGB=1^UVqRQaRLfKL|B?Im{5P9~1T|=A zD&w&PUp$5b?qY&;+_69?{S8PgCip@Fy;Q)5z)$Xk6hkQGr)I-g9dK%QgReK$d{U?& zVGsnK_H2@@Qc?0OL@oCOiGyDtEFVrAfdp%3A(Sq$_46-Nb`##+N}#{VUrSF^Rzqd0>8mPo+@dge<#y;aNxj!eZ`fy65iQyX@Py zZ>((DvZm+Gf7`cj$?GEF+`oU{bbXyVb^PZB3>aWKcjU+s^14Vkn>TM}{Q6IJcD8QQ zrcE=Qn=xYsd0ix&Awz~ZPF85qq6K+f6dXKP%9k%6QZ@;O-6R2Ukc<#&s?WiL2g&my z;P6YSRjXEI4H`5sS@r7GP1j7FI+Z*x0#4ViT}{^_fB4CZUw~`YtQmRUZ8$kOIjmT* zV*cx}T!3W*UO#^PU==G?G`;4lSFgzXZo)Zs?3n2~4Rbkft)$;&FiS+r=8|K17}DzIC( zZjq-|e}H3^w^prMHTK}a1M;>^I2$%>unpN@z317pXXJ4ia8grK3yi5XY0`wfe*K!f zE)ve!vuEwL$^{t0JxF#Z34#+WC5ocb65;&%^^27#Q6eNbNl8iMc~PI7=FOXj1P9M2 zk{~!p7UZ8fn1CAp_8CB0MXpIMj@A&!96EHUf1c&JX3ZKsR{-}eSg=6PX~PaTBo)$D z5Q&pejKs!`8|S~bT)A@kwr!FEaQHMSSdAJr*vF3_rTl^jB|Uodh~Pk2SB?|MlzFm-6$KgQJT0#FM5?n?_tJ@NWrc_3G7@LwIZ)M&1L#k)%zVHU*ty zfA#FylYRaAmEee0T3VW;NidR4kf};=1ZnTyy^e#gurXuCC?A0RE#MqFbjXxH=hUW8 zpH6Vx)QJ-(Sn=Y;3tggd;lhOk#|>c}sZ^;_MXsT_ZrwV96HXzkr%ahLVJmXFbLUQi z6Ase=1dSr9?0i@z0$*M{o)wWRPP2kDE1|5k%|;G$gXHl5%j6Mx`ltW~Ap1glG}l3loPA^PB?q@+Xy9Bi+QIylG$hy*xzpHT+~fyPLH zBPt-O6dcUJD_5?pG#I=;QIP`We}>Y1`}S2D4&GnX&T~{Bu~`-Si>lb#q)C&M1cUb# z^?}b%pFZh(YQpVYi>9cK4etlXPr8A(pNRD`pVha=+UETB{Y~&e-AW1KHk=W z$T2|9^Y`!H1NtiPcJJOj{W@$(v`b9HZUt2E6*bw6XgEG0;D{~tt5&VjdnD}My*r>1 z)r1KXg2KUhpRn|dzCQpvapFXMM;zj2vNjh-G@OFuq;eH($BrEl@%#KXa8P~MX$>B% zXrjzN!4V*ocj3#pI7z!be|72hG*5~%a;jGxD?9d)QOE6HOiGi3aVxChE9;bEgW^Z4;&*0Ezp|3V!KpkKLig*|!le}v%35IPI{w%=n! z*sotde{2s0(0zU#IdUY+&(9|~qICN7>5!gv^XJbeIHH7pbfLfr)*_AINQM)vUpK)C zv#?b@6gVhWOK=1Vy@Q-C4q|PI;0P4*+NMmI5)=%E*9GMy5FD3;3Fz3dV=cj;@VS$E zqXft0NCxIIMqkFof5ovEFJ4fDKn0;(rLXHfvWc8T1_+KoAqs#`PMssIwf38OxL{%oq$i{LsyTRI>(E{Wf8jG!m>l{(EIAUG}xJLQZ%T)TEH zTd`t=>Da7Uf3paV3}NSj(T7MZ^d%Si4Eu@*js)RZVr)}}K0n5mGB{VzE^UJ2qT07_ zZ#%zf+qP|i_Y)i!m6ViZ3nwu#k>JQwumnT2geEu=g=Vo{??&q)zig5$FI5t^?J zvl9^LT`a6FmQ<1x!?~k zpno*WOC#q)nO};&ul>%g800000NkvXXu0mjfD-z&z delta 3555 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 diff --git a/examples/resource-bar/assets/Playing Card_Spades J.png b/examples/resource-bar/assets/Playing Card_Spades J.png index 57117be5cdbbe930a63d299f27b052d2e490c561..63adab4a9ba2508df68d063b5109d057ac54f43e 100644 GIT binary patch delta 3105 zcmV++4BqpyBexikB#|@}e+%hJL_t(|+U=bMY!q7*hPSwTa4kH7yK8WFFFYW@Ap~~| z9xOm`f;$8V?xfIC+zIaPP@q83`{uvt_RUUbJ2SgGvb*Ob=Y_XjnLXdm+;fkOjWK4E zsvu1Soh4|9py7f>l6qXjqwEViHk`Hu-UU`lX_TTSJ)SJmH`wT#l;pR z{bTm**;zwLvRQV!67&Vhu{z#f7~ z92YlkT()oDKC-$IaQ^=N%X;*1b-uRH@kI%a_UG zM#C94Y?!JjL52(&*xkE#$?8VI89#o!rubUUoH^OEXV1v;dc#?}cCAa@!6i$U87B+qQbe?nS)29#Le<5mtK7S+t(Mp~oMGD!T z|HO$CvuxS2vEs#xvs$%kv3Bj+ac^|~{Q2z4l`DpYrd)=DUzs~_kY;d4ux8!5b&GA= zwvA1ge=vcyY14)kDpZJXdi9>Dfo(y91`T*i<;jyL*^eJTtmhCo+jJ^vvSi8F!-o$w z9VmVbD_5>$ojP@5MT!(*2@@u?%=iJu ziumuDGiPQ;jvP@uu$M1ivJD$H@E<_#+_^13f1l>krAyY_gxU`(6(~@^`hidU+Vkek8{-Yt zoboqr-0<3|PLn53wlq+(e(Z{ED&sqkgXma*Z(hqG3#T5%@<*-K9X zK?Hr&s8Kw7s&po&OP4PCb!x&)g>>l9 zfsGh3f-PLQkhe9W4qF_A{QUVde@mY}y~FF1CQZuDpFi)`@r@lj*1>`B8#t&LOOqyz zTMIk@b;yt*?8Ao-G4fX8_q=-bs(-*ijRDf! zdQ{dR%Nm=^m@z~4b#OMM0%ySfcevbsO<6p3{1+?oHXe^Cr5x5z8$ zv17+#{Y+-qUOQJAbuVAK9%*-7Tr_;N4@9ukW&{m-rn4(3C>UzfGvTOgWf3#`Sa!19d;Go|H zGuT$FSixOoPr^ZqhMofFLF^sw-MiPfy)`EXxyL0Cb@5zMAth8fStC;`h?tTfeHmoIT zKNAsefb?oO*b}T@f4`nJZ{9q5M{d_@)vB?B2M_XL5>D>Xtjg_1Le5n|<&RS04sJ9e z57-8v{}ewiulLq2UcAWnDoO^%rA_7zv#Jzf7*_;&9$dPV-XHrdBjzX=3J19twLwcf z&(%xYp+ko>pUFt%OE2b zo#ONDwcEHXsugGVd%#*JcfTQ@g99%R2G(2b&I4))w1{-XCY&QRQ|fhx1FuMLPYr8{ z-hv4u_Rqr_6r133h*Dv+_zxU7kSF5A8|r!U=JB})kq%|JBQ6JW58eEsDqYTJajF{wLh9(LjX`1GkNpoO|Gbz(b~agMZqOpnu2%M!R;(`ME7jd ze^JnO65AFcSFT*_`Sa)2sUh$;L9vQlLJw0waK*4hn%bWQ)9c0YML0Ncj4Y7}C1Jev z9&t6SL+FUGM6!+Kf59G2DThOFyhI2N!SPRlHx}C{X6$jq_2C4^B4E@2A~+_3Q36D8 zbP(i=v<5zrfh9Nw2-4nS`^}s=lV?fAe~Q8n@pCX|hv1k1N3M}eTF*vs2o8xFI4B)P zJ)2$Sf}jM)BsjDQB{(Dmhu{z#f@I-=F197o!E|ctdr3SaxOs)lf8aoH zvHdI8OQP4^E=U{&Cj#s(v)+JC_n*% vwh?rJpl7A~AX1NMWR!hj=eDrB7nH?+T+3Sl6klnb00000NkvXXu0mjf&r$y& literal 4530 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 diff --git a/examples/resource-bar/assets/Playing Card_Spades K.png b/examples/resource-bar/assets/Playing Card_Spades K.png index c71a5e0e3199aea5ecc2a0a10837adaa2c18f27a..62d4a6086e20b2f8cb5bf198e2108b7d84c32d3b 100644 GIT binary patch delta 4030 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 literal 5933 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 NqNVl(R<2?h`9Eb8pyL1l diff --git a/examples/resource-bar/assets/Playing Card_Spades Q.png b/examples/resource-bar/assets/Playing Card_Spades Q.png index 618c6936c1b68439e3e75bf40098685441cb0125..bd8dc7be58cedcfc82d8ed16a0cda50f22a5ace4 100644 GIT binary patch delta 3289 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 Xjgt)9iFu1+00000NkvXXu0mjfe9%qg literal 4768 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 Ny0Vs1m4a31{{h~JFVO%1 diff --git a/examples/resource-bar/assets/Plus Key.png b/examples/resource-bar/assets/Plus Key.png index ebc1035243822dd10b593ed5dbe4d1a0a1bc3d67..bc9cb6ed7086e54b2d656818008ca103f7ecae36 100644 GIT binary patch delta 922 zcmV;L17-ZV3a|C0yyW|2gh)aqG(}gb+dqA%qY@2qA@o%i0YVB}+QTb9TLZKFRuq;6d;r1c4;dTdK$Zu7XYd34Zu;zKG3eVZ zV`L1-=c48-BAd;6xm?c6=ks2nP>8f8qhyuLy0MTkGC5uO3OGAE^D31}EG^k}V`3FZ zTw#dI<+42>$$w<>mwMpi}1t6o*$eTl=O#bV(zKmY;|fB?jOAnI=tyMB&k0*KVC{zd{2fB*y_ z009U;lNs(^F_~yX^hR=lm}a-KHJW zJE*uZG9)Ao5fd&ZM5dZ=ZfE*?eU7tniAGKLz ztycRIqTB5{3q)$)%p%z~vr2Yd|3x-^vI`d=&H{0+664m~n7G6HL$QqON!A|Qq6o&t#DF{IX6%|rj5S3W6U}nP_A+er$ zg9~qRA7y6A4&DG*!eY2f7Kjd|>4vJkDr%J~iSL3If#Y5hCk{?~KB)`b_}D%_^|2j0 z0SJO12!bF8f*=TjAP9mWi2P%uVWd*2Y@4QeU>HUn01U&ZGk?bFY1q~k!!R0*u?7Gz z#u`BoT(sNm{}bCylDSf;Y+IJ~9l&wYip&WAc%Jt?i7?WF)M~Xo(=;yttjXG#QF=iT z9JE@kA2OLu*-}l@JOha#Vr}djDWn9c)oR}W)MX2u1L|WR#m17!WEjS=D1B*Z357!8 z?K8{xzW??a4u6NC@5es+H?Cb-K@Rvd+qSX1yewlb_gI#Ne!u@AP2{5}NXHPKc@+bA z?HSS{wjiZaX_Zeij8vvGxy3Y1p$|m9`qWn34Bc+`C!fX`i)&`)5cxpltIv>%A#t&7 z8|&-qSX^9u`&%WR=V3S;CN5_Z7hKmxr_%|=2^Gi+(tiLq?Dc(LII`N=*+HpPk}O6J z%d%1tePYA5ZIsJpJU>69(P)IO^L<~GJ$zvVq=Ncn4d*?gN>!`X%*9Yixm-rIS`DR( z+Ai`@6jB>yiP+fKP-*^4P~9eFF~qiQSk_1LgTVkn5Ww?1RmG-?WmzZ`3Ll2GlkQMe zJjo=e1Ani9b~GAgRa`1~o(IqKP%IWh|6Hn2+GV|mhQ`szOptk>JVr%UkRG291VO^8 zBKaX5L)o3RO0IaO6B+74^W?~z0&|&%gf=|fX?b$R*bNQWux@M3dnn8kShEz~z zjDOYnO$%uq&~aTCS65e&u3cSS#opdtD81Qi;^E;TmHI?M)b{ZyCiAt~6!{ue{)d{W1wSOQtH#c8hh18)gOEX9i&5#l#%4#qFgq*w{ zpaH^l=iBz>tG%Kpj`Ee__r&J;6fR$PzHPs`9}*ktvNVH^MMogZx+@ce-wjwO6i_S{ zRTZa*eJI!0SY6o*0crZ*70i*hjIE4eDnQyj4e3 zu{lQS9U{_;G@F~7|H%&RW*x@Z?bFlKpE7x+gF0jE7?S7cW}M#GH&RFo(rUGS1VL~h z8@y%_#@KC=_fG*Sy*6)aYwIrnf6w}>@}^-JMgzcEv)R<=d^JH31VIo4K_CzWK@bE% d5Crjs`~u|vpV94lV4DB{002ovPDHLkV1kvQZ_xk% From 03a571c982bb18e9c0e8f4527f23c34a766c9a6f Mon Sep 17 00:00:00 2001 From: Tristan Rhodes Date: Sun, 27 Nov 2022 12:46:26 -0700 Subject: [PATCH 21/98] Cleaning up old behavior names --- examples/resource-bar/game.json | 60 ++++++++++++++++----------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/examples/resource-bar/game.json b/examples/resource-bar/game.json index 8d5c49a46..895c8694a 100644 --- a/examples/resource-bar/game.json +++ b/examples/resource-bar/game.json @@ -1435,9 +1435,9 @@ "layer": "", "name": "TiledEmptyUiHeart", "persistentUuid": "a1be0010-4eb7-4e54-a651-7d77ae646149", - "width": 80, - "x": 513, - "y": 276, + "width": 128, + "x": 448, + "y": 240, "zOrder": 0, "numberProperties": [], "stringProperties": [], @@ -1450,9 +1450,9 @@ "layer": "", "name": "Tiled_ResourceBar", "persistentUuid": "be98771a-978f-443c-80e8-197098aef457", - "width": 80, - "x": 513, - "y": 252, + "width": 15, + "x": 449, + "y": 240, "zOrder": 15, "numberProperties": [], "stringProperties": [], @@ -1466,8 +1466,8 @@ "name": "HealthBarBox", "persistentUuid": "fddebf95-4d5f-40b5-a087-80bd8c33b68c", "width": 265, - "x": 504, - "y": 296, + "x": 440, + "y": 304, "zOrder": 0, "numberProperties": [], "stringProperties": [], @@ -1481,8 +1481,8 @@ "name": "HealthBarFill", "persistentUuid": "1e7ce7cc-5104-4c95-95a0-343f3d97e140", "width": 248, - "x": 513, - "y": 300, + "x": 449, + "y": 308, "zOrder": 17, "numberProperties": [], "stringProperties": [], @@ -1496,8 +1496,8 @@ "name": "NewPanelSprite", "persistentUuid": "d0461165-f597-4574-b3e8-8e78014d1c61", "width": 288, - "x": 464, - "y": 490, + "x": 400, + "y": 498, "zOrder": 0, "numberProperties": [], "stringProperties": [], @@ -1511,8 +1511,8 @@ "name": "Heart_Tiled", "persistentUuid": "63560c9a-582e-4a76-9560-e929ab4a1fdf", "width": 24, - "x": 504, - "y": 512, + "x": 440, + "y": 520, "zOrder": 21, "numberProperties": [], "stringProperties": [], @@ -1556,8 +1556,8 @@ "name": "TiledSpriteResourceBar_Text", "persistentUuid": "6337ed4e-77e0-4cf5-b4cd-b4770b6396e5", "width": 0, - "x": 528, - "y": 80, + "x": 520, + "y": 88, "zOrder": 23, "numberProperties": [], "stringProperties": [], @@ -1739,7 +1739,7 @@ "effects": [], "behaviors": [ { - "name": "DrawResourceBar222", + "name": "ResourceBar_ShapePainter", "type": "ResourceBar::ResourceBar_ShapePainter", "ValueMin": 0, "ValueMax": 1, @@ -1827,7 +1827,7 @@ "effects": [], "behaviors": [ { - "name": "DrawResourceBar222", + "name": "ResourceBar_ShapePainter", "type": "ResourceBar::ResourceBar_ShapePainter", "ValueMin": 0, "ValueMax": 1, @@ -1885,7 +1885,7 @@ "effects": [], "behaviors": [ { - "name": "DrawResourceBar222", + "name": "ResourceBar_ShapePainter", "type": "ResourceBar::ResourceBar_ShapePainter", "ValueMin": 0, "ValueMax": 1, @@ -6291,7 +6291,7 @@ "type": "DrawResourceBarOLD::DrawResourceBarOLD" }, { - "name": "DrawResourceBar222", + "name": "ResourceBar_ShapePainter", "type": "ResourceBar::ResourceBar_ShapePainter" }, { @@ -6492,7 +6492,7 @@ "effects": [], "behaviors": [ { - "name": "DrawResourceBar222", + "name": "ResourceBar_ShapePainter", "type": "ResourceBar::ResourceBar_ShapePainter", "ValueMin": 0, "ValueMax": 1, @@ -6580,7 +6580,7 @@ "effects": [], "behaviors": [ { - "name": "DrawResourceBar222", + "name": "ResourceBar_ShapePainter", "type": "ResourceBar::ResourceBar_ShapePainter", "ValueMin": 0, "ValueMax": 1, @@ -6638,7 +6638,7 @@ "effects": [], "behaviors": [ { - "name": "DrawResourceBar222", + "name": "ResourceBar_ShapePainter", "type": "ResourceBar::ResourceBar_ShapePainter", "ValueMin": 0, "ValueMax": 1, @@ -8654,7 +8654,7 @@ }, "parameters": [ "Shield_Bar", - "DrawResourceBar222", + "ResourceBar_ShapePainter", "Fly", "Shield", "" @@ -8672,7 +8672,7 @@ }, "parameters": [ "ResourceMouseX_Bar", - "DrawResourceBar222", + "ResourceBar_ShapePainter", "Variable(MyResource)", "Variable(MaxResource)", "" @@ -8690,7 +8690,7 @@ }, "parameters": [ "Health_Bar", - "DrawResourceBar222", + "ResourceBar_ShapePainter", "Fly", "Health", "" @@ -8735,7 +8735,7 @@ "type": "DrawResourceBarOLD::DrawResourceBarOLD" }, { - "name": "DrawResourceBar222", + "name": "ResourceBar_ShapePainter", "type": "ResourceBar::ResourceBar_ShapePainter" }, { @@ -13090,7 +13090,7 @@ "version": "0.0.1", "description": "The resource bar can be displayed using these objects:\n\n- Shape painter\n- Tiled sprite\n- Sprite\n", "origin": { - "identifier": "DraggableSliderControl", + "identifier": "ResourceBar", "name": "gdevelop-extension-store" }, "tags": [ @@ -13999,7 +13999,7 @@ "type": "behavior" }, { - "description": "Slider value", + "description": "Resource value", "name": "Value", "type": "expression" } @@ -14917,7 +14917,7 @@ "description": "", "group": "", "extraInformation": [], - "hidden": true, + "hidden": false, "name": "Value" }, { From 26960c0df431234e1135579f0bcdcc112afd2072 Mon Sep 17 00:00:00 2001 From: Tristan Rhodes Date: Sun, 27 Nov 2022 18:26:17 -0700 Subject: [PATCH 22/98] Great progress on Demo game! - TODO: Sprite without maximum show an extra unit when removing units. --- .../assets/Bar Frame_No Shadow.png | Bin 0 -> 3993 bytes .../resource-bar/assets/Bar Frame_Shadow.png | Bin 0 -> 4289 bytes examples/resource-bar/assets/Blue bar.png | Bin 0 -> 2910 bytes examples/resource-bar/assets/Energy Bar.png | Bin 0 -> 3086 bytes .../resource-bar/assets/Health Bar Box2.png | Bin 0 -> 2983 bytes examples/resource-bar/assets/Health Bar2.png | Bin 0 -> 2845 bytes examples/resource-bar/assets/Heart-1-0.png | Bin 0 -> 375 bytes examples/resource-bar/assets/Heart-1-2.png | Bin 0 -> 375 bytes examples/resource-bar/game.json | 4009 ++++++++++++++--- 9 files changed, 3382 insertions(+), 627 deletions(-) create mode 100644 examples/resource-bar/assets/Bar Frame_No Shadow.png create mode 100644 examples/resource-bar/assets/Bar Frame_Shadow.png create mode 100644 examples/resource-bar/assets/Blue bar.png create mode 100644 examples/resource-bar/assets/Energy Bar.png create mode 100644 examples/resource-bar/assets/Health Bar Box2.png create mode 100644 examples/resource-bar/assets/Health Bar2.png create mode 100644 examples/resource-bar/assets/Heart-1-0.png create mode 100644 examples/resource-bar/assets/Heart-1-2.png diff --git a/examples/resource-bar/assets/Bar Frame_No Shadow.png b/examples/resource-bar/assets/Bar Frame_No Shadow.png new file mode 100644 index 0000000000000000000000000000000000000000..dde997f1389a52276328c6e919697df147d7b37f GIT binary patch literal 3993 zcmV;K4`%R*P)EX>4Tx04R}tkv&MmKpe$iTg4)k4hEFskfAzR5EXHhDi*;)X)CnqU~=gfG-*gu zTpR`0f`cE6RR%KKJJsPzojkd?N82(+!JwgLr1s z(mC%F3#=?D#OK8023?T&k?XR{Z=6dG`+25dWYhD+0jVfq16NwdUuy!hpQJZB zTJ#7AZvz+C9ZlW?E_Z<8CtWfmM+(sN7mL9A8GTb87`z4g*WBLP`#607veeb`4RCM> zjFl*R-Q(TC?%w`A)9&vFa_MrX6#Z@F00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru