From 20b6fa6077f9b238c02cf736f8add78e06fcc378 Mon Sep 17 00:00:00 2001 From: Mark Moissette Date: Sun, 18 Feb 2024 17:14:31 +0100 Subject: [PATCH] feat(bevy_components): set of fixes & improvements (#128) * fixed issue with "reload registry" not clearing previous data * added watcher/ poll system to automatically updated the registry & components list when the registry file has been changed * BREAKING CHANGE ! changed internal representation of components, incompatible with v0.1, breaks UI values. * added buttons to regenerate UI to account for/fix the above and to offer the ability to regenerate UI values from custom property values * lots of cleanups * added tests * closes #127 * closes #124 * closes #121 * closes #130 --- Cargo.toml | 7 +- .../basic/assets/basic.blend | Bin 1401076 -> 1421032 bytes .../basic/assets/models/World.glb | Bin 12304 -> 13820 bytes .../basic/assets/models/library/Container.glb | Bin 6016 -> 6076 bytes .../assets/models/library/Health_Pickup.glb | Bin 5460 -> 5612 bytes .../assets/models/library/MagicTeapot.glb | Bin 23956 -> 24008 bytes .../basic/assets/models/library/Pillar.glb | Bin 3872 -> 3920 bytes .../basic/assets/models/library/Player.glb | Bin 29176 -> 29260 bytes testing/bevy_registry_export/basic/Cargo.toml | 16 + testing/bevy_registry_export/basic/README.md | 15 + .../basic/assets/assets_core.assets.ron | 1 + .../basic/assets/assets_game.assets.ron | 6 + .../basic/assets/basic.blend | Bin 0 -> 1412236 bytes .../basic/assets/models/World.glb | Bin 0 -> 13512 bytes .../basic/assets/models/library/Container.glb | Bin 0 -> 6016 bytes .../assets/models/library/Health_Pickup.glb | Bin 0 -> 5460 bytes .../assets/models/library/MagicTeapot.glb | Bin 0 -> 23956 bytes .../basic/assets/models/library/Pillar.glb | Bin 0 -> 3872 bytes .../basic/assets/models/library/Player.glb | Bin 0 -> 29176 bytes .../models/library/Unused_in_level_test.glb | Bin 0 -> 5568 bytes .../basic/assets/registry.json | 10732 ++++++++++++++++ .../basic/src/core/mod.rs | 22 + .../basic/src/game/in_game.rs | 128 + .../basic/src/game/in_main_menu.rs | 112 + .../basic/src/game/mod.rs | 22 + .../bevy_registry_export/basic/src/main.rs | 27 + .../basic/src/test_components.rs | 190 + tools/bevy_components/README.md | 50 +- tools/bevy_components/TODO.md | 76 +- tools/bevy_components/__init__.py | 26 +- tools/bevy_components/components/metadata.py | 65 +- tools/bevy_components/components/operators.py | 54 +- tools/bevy_components/components/ui.py | 50 +- .../docs/generate_components.png | Bin 0 -> 3429 bytes .../docs/generate_components2.png | Bin 0 -> 2513 bytes .../docs/generate_components3.png | Bin 0 -> 2477 bytes .../bevy_components/docs/registry_polling.png | Bin 0 -> 2318 bytes .../docs/update_ui_from_custom_properties.png | Bin 0 -> 4524 bytes tools/bevy_components/helpers.py | 1 - ...ions.py => conversions_from_prop_group.py} | 100 +- .../propGroups/conversions_to_prop_group.py | 320 + .../propGroups/process_component.py | 4 +- .../propGroups/process_enum.py | 2 +- .../propGroups/process_list.py | 4 +- .../bevy_components/propGroups/prop_groups.py | 12 +- tools/bevy_components/pytest.ini | 3 + tools/bevy_components/registry/operators.py | 63 +- tools/bevy_components/registry/registry.py | 202 +- tools/bevy_components/registry/ui.py | 35 +- tools/bevy_components/tests/__init__.py | 0 .../tests/component_values_shuffler.py | 216 + .../tests/expected_component_values.py | 427 + .../bevy_components/tests/test_components.py | 297 + .../bevy_components/tests/test_conversions.py | 51 + tools/bevy_components/tests/test_registry.py | 29 + tools/bevy_components/tests/test_shuffler.py | 141 + 56 files changed, 13296 insertions(+), 210 deletions(-) create mode 100644 testing/bevy_registry_export/basic/Cargo.toml create mode 100644 testing/bevy_registry_export/basic/README.md create mode 100644 testing/bevy_registry_export/basic/assets/assets_core.assets.ron create mode 100644 testing/bevy_registry_export/basic/assets/assets_game.assets.ron create mode 100644 testing/bevy_registry_export/basic/assets/basic.blend create mode 100644 testing/bevy_registry_export/basic/assets/models/World.glb create mode 100644 testing/bevy_registry_export/basic/assets/models/library/Container.glb create mode 100644 testing/bevy_registry_export/basic/assets/models/library/Health_Pickup.glb create mode 100644 testing/bevy_registry_export/basic/assets/models/library/MagicTeapot.glb create mode 100644 testing/bevy_registry_export/basic/assets/models/library/Pillar.glb create mode 100644 testing/bevy_registry_export/basic/assets/models/library/Player.glb create mode 100644 testing/bevy_registry_export/basic/assets/models/library/Unused_in_level_test.glb create mode 100644 testing/bevy_registry_export/basic/assets/registry.json create mode 100644 testing/bevy_registry_export/basic/src/core/mod.rs create mode 100644 testing/bevy_registry_export/basic/src/game/in_game.rs create mode 100644 testing/bevy_registry_export/basic/src/game/in_main_menu.rs create mode 100644 testing/bevy_registry_export/basic/src/game/mod.rs create mode 100644 testing/bevy_registry_export/basic/src/main.rs create mode 100644 testing/bevy_registry_export/basic/src/test_components.rs create mode 100644 tools/bevy_components/docs/generate_components.png create mode 100644 tools/bevy_components/docs/generate_components2.png create mode 100644 tools/bevy_components/docs/generate_components3.png create mode 100644 tools/bevy_components/docs/registry_polling.png create mode 100644 tools/bevy_components/docs/update_ui_from_custom_properties.png rename tools/bevy_components/propGroups/{conversions.py => conversions_from_prop_group.py} (63%) create mode 100644 tools/bevy_components/propGroups/conversions_to_prop_group.py create mode 100644 tools/bevy_components/pytest.ini create mode 100644 tools/bevy_components/tests/__init__.py create mode 100644 tools/bevy_components/tests/component_values_shuffler.py create mode 100644 tools/bevy_components/tests/expected_component_values.py create mode 100644 tools/bevy_components/tests/test_components.py create mode 100644 tools/bevy_components/tests/test_conversions.py create mode 100644 tools/bevy_components/tests/test_registry.py create mode 100644 tools/bevy_components/tests/test_shuffler.py diff --git a/Cargo.toml b/Cargo.toml index e7397fd..89cbbf0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,16 +8,15 @@ members = [ "examples/common/", "examples/bevy_gltf_components/basic/", - "examples/bevy_gltf_blueprints/basic/", "examples/bevy_gltf_blueprints/basic_xpbd_physics/", "examples/bevy_gltf_blueprints/animation/", "examples/bevy_gltf_blueprints/multiple_levels_multiple_blendfiles", "examples/bevy_gltf_blueprints/materials/", - "examples/bevy_gltf_save_load/basic/", - - "examples/bevy_registry_export/basic" + "examples/bevy_registry_export/basic", + + "testing/bevy_registry_export/basic" ] resolver = "2" diff --git a/examples/bevy_registry_export/basic/assets/basic.blend b/examples/bevy_registry_export/basic/assets/basic.blend index bcfe0ffd2076d9f231249b3d1cd59783a6c76cd3..b38fad350dc0182bebdabe23be89b0d6ec0a077e 100644 GIT binary patch delta 189013 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%0A$^2;tJ$kSul@11?2g0IL>_!RJ0o}Z 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 JXs7V`{{>)DvI+nI diff --git a/examples/bevy_registry_export/basic/assets/models/World.glb b/examples/bevy_registry_export/basic/assets/models/World.glb index 7ed6e738f8dc8e2d66fe2a8c1929165e378d2e4b..04d2c2a08de209fe6dd4ab00d84b26a8b4621fc5 100644 GIT binary patch delta 540 zcmXX?F>KR76t&Z)YH{i&b>c<>q4cIwS>}9puwynVWk#YCQDsbQl~WxDVn-saTq#4v z00Y$@SlD4;0Nnxu5)25jc7dT23`lGYY#q2uJDl#nr~lu3|3ANXwx{kU+uf2RNoQ?I zs*rc;uTt4Sw&lRL(iQf%^hy?x5OzGjEi0n5f-yz@0sB#Yw!jI;bI%E=HZQ|iLGV+t z7Y1RLAs?nq4c;mQ8kH@GDlfQ{>$vc#a>^@WV;C%>B?I-5k6Nf;FPD#m8}SH~RSQ7f zP-&XSX-4x2^0A5GgW3Z}-H{7eUwJxH^Vp-66EWrR$Z~akvr8Yx(On)8MUylf(0(wA zGrCXHUF2H^%7=NFAm1U_fQ_mlW0+QTjhMJF(0-65v>)@}q$t={ttJ*GcKc$#KebJ` zv-*I0wL30MH4VP54mq+tdxmalU0vM6JMTwv8s1Ohh}*&w?X?)g1pa9zT(7^MAsar{ zufp&87mjXV3vM1^);-ZU6*a=Z@A>9--!Cmh)r!)N_S@Er{8 zweKcR>)IFYSeziCS&sbP0ph46UplT#LFlg1W%lT8;=leQP9laLs=lWQ5pldl@HleZgr ilS~|Llh7Q-v+o^Q2$RJG8MAFBvkLqq@Gg>mT>L{5Sm`_$^o`O@^4(1cW0Mq3gJOBUy delta 41 xcmdm^-=NQ%o)hB6#K6GNAkM%bGm+Pp(RicxO2*AROcsoj1DJa^e`P){3;^1_3vmDd diff --git a/examples/bevy_registry_export/basic/assets/models/library/Health_Pickup.glb b/examples/bevy_registry_export/basic/assets/models/library/Health_Pickup.glb index f5d97cb144e98ee9e89a33838a16f82d13f2d5a7..645420238337612ba869b59a225646d08e52c274 100644 GIT binary patch delta 213 zcmcbj^+ua7JtxGCiGhLPjVJ>{0LMf=8%C3j-oi}vI!eYyhViADN>)ZXN@a;fnTdHN@y>|_#ico^AbA5Nt7ro~107vMJwpR9Ffz6L?jP z72uLLQnE78Gp((y)u~p>OUwltIyr+WixuPsqsgb4vSoFYOf1cyt_jLa&rEU3PpJfI Xs;!N!t)2Kzd~+akCClbB>>a!SuLe5* delta 49 zcmaE(eMO5eJtxGCiGhJ3M3jMH2m3@m8%E=e-oi|iFEf=)4rWf-e1Uli3zLGv<`j+& FUI1MH4j2Fc diff --git a/examples/bevy_registry_export/basic/assets/models/library/MagicTeapot.glb b/examples/bevy_registry_export/basic/assets/models/library/MagicTeapot.glb index 47c37cd331994202b99eb561a2b3a05eb2d36b2a..a66129d111721bd8d8ab9a6a89dce87239404ec6 100644 GIT binary patch delta 96 zcmbQToAJbMM&9(C5H}_U28I){3=C@~^4c<*Z1i5lD50ZdVrdp%nyF+}trV1*o|)p5 wpHiu0Wia^-<7;spC1WE)sHAg#PEKY@YLSwa@#bqx+t`>D6cjf1aB_qI0G^T^zyJUM delta 43 zcmX@Hn{mo+M&9(C5H}_U28JoI3=9<$d2JbuH+nB(oXp1bYBLA(R<_LtI5|Q9CCUvx diff --git a/examples/bevy_registry_export/basic/assets/models/library/Pillar.glb b/examples/bevy_registry_export/basic/assets/models/library/Pillar.glb index 9a6f3e0fa3cc452991f7bfcf0426302a831c6b20..08371d4bb42f421ce55fcbe98300175c78f7daca 100644 GIT binary patch delta 90 zcmZ1=cR`LfJtxGCiGhJ3fS-Zk%|u>XMw5-+iHzbpO2$Tp@uitcR@F+*`8he6DXB$D pR>qT8Gp0)DD4AHALFIxn(=$_?@>436tPD5vGaX>te1Ri?4FG358Yln& delta 41 xcmca0w?K|JJtxGCiGhJZfuDh4&qQ8ZM&pg%iHwtvFs5vFWZKWR`9DV>8vyAQ3<&@L diff --git a/examples/bevy_registry_export/basic/assets/models/library/Player.glb b/examples/bevy_registry_export/basic/assets/models/library/Player.glb index 2d749b29f3c3c3545d53114b2bdf6fa729215d61..81a30b8d0e53ebbd9dee259679aadb15bae99ccf 100644 GIT binary patch delta 117 zcmezInDNXLM&9(C5H}_U1_qxZ28M!(yta%c8@*>Uvg#-q8yQc&&$s}@GBny;!IaG? v4iYqsFU?f4s#bE&&&kP5Ni9;cGM@a1`4mu@se$?Ar7Tl$soHG8dLRb?{Hr5b delta 55 zcmX@}gz?8?M&9(C5H}_U28JJn3=A?8d2JbuH+s)zocw}?XYxPB-p$jQQWz%-vz!D9 L^lt8D-Jb&hCmvSfnUwjB8(eL&bsx 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]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�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%0A>w|e*5ZgM@Qsuy;2mOkjLZau4us#}n% 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�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 C@l$XB literal 0 HcmV?d00001 diff --git a/testing/bevy_registry_export/basic/assets/models/World.glb b/testing/bevy_registry_export/basic/assets/models/World.glb new file mode 100644 index 0000000000000000000000000000000000000000..81caa9d14b200b0cd8d2fcde7a730a9085ed3424 GIT binary patch literal 13512 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 literal 0 HcmV?d00001 diff --git a/testing/bevy_registry_export/basic/assets/models/library/Container.glb b/testing/bevy_registry_export/basic/assets/models/library/Container.glb new file mode 100644 index 0000000000000000000000000000000000000000..5818d2c530c84bbff0ea4a9241a63b8df03f880a GIT binary patch literal 6016 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 literal 0 HcmV?d00001 diff --git a/testing/bevy_registry_export/basic/assets/models/library/MagicTeapot.glb b/testing/bevy_registry_export/basic/assets/models/library/MagicTeapot.glb new file mode 100644 index 0000000000000000000000000000000000000000..47c37cd331994202b99eb561a2b3a05eb2d36b2a GIT binary patch literal 23956 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 X8@i8dbT;)z_s>XlHH|{2)j0ZpA+Trq literal 0 HcmV?d00001 diff --git a/testing/bevy_registry_export/basic/assets/models/library/Pillar.glb b/testing/bevy_registry_export/basic/assets/models/library/Pillar.glb new file mode 100644 index 0000000000000000000000000000000000000000..9a6f3e0fa3cc452991f7bfcf0426302a831c6b20 GIT binary patch literal 3872 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 X->$VChcUxQdX|SsGh$}s zSTQC&hdmn(i>|xthGo04%{i<%UH2UR1vc;xbisF@=gCj8WGmQ5*WbLk@80iz@7^bO zdv|X7EO`BJ7$lBm zUO}>@u-EgU1YRt8gLv2z3z>yI$IO}8%*eT#&*ih3hx~XYljRqg^o{l+o55l+!_n5g zUE#HQTq&OJ`0e|rPffq;cdmt<5njGMLIr*sKJBnS2m=u$u?yB7Gd*3>l^YYy8oe;+ zx~T*$u{(05iA2}OF^pWXHwdG|ZF#ZZ#)H=%^n~NI!w7b;Gs0>-25uwrin zJ(oWj>GTBO>4gtQ=)XZLx{bcW5VV`&u)7n8SdI(2N8tR!NUOoFn8mzVvMQEk7xGmr zYvwAZ{3+*)Rk zvgJ*!7m?TQ#aTt1w;z(76~R6g0j;a@uP-gGEH({pyHf_btWwg}C=n|sUvL;V8+!7} z+V-~mo<++fUex8UTnJaP_@X=sHpk|ZaP#g*PfzBy%`z9GrMFLON$b$a+n7nTQ0BeM zMAw#A>F||oqZYk?gulnLF#f%ue?RxZ(ZVOq<9RUr8XNC#N&hFnb&j9w$?=?6>A?QyVy=y2GM^{FbiqmtE z{O7@GEz*A;%v_l#eAWGMF4k&S{lokxFy~EcSMw#$de*w81IJN1OyCdyT&-=59v$QF z;a~pwpW44Z9UTAdnGcTesWZkJuOF&)_EY||_Rfm)*?<4R8c^;}y<>c24Olx${To`| z2IrjR&wErHotvIl-#f)$=F;=({>XX(k zYtj8RT-W1kc!JLqe;GgZXI#_wrg^zf>RP?ES?gM#u#f7ox}I0lMAnn)KN0f+f5|iD zz%lB2Or4v~0Y0iH8&mvcoYY^%9Q)6zi*qafn$MwzSx@D2sNo5H^mUylbWpQX*SV$s zQioaoTFi;OTFfI2bN?_;)ej1D|0oU<{-{y)JlCr*&qZy@y`k0{?5owH?jM;K>wN#n zzDQ$A|1{>by+?}kJbSe`>Ris$`&eGCi}OzKe=N?J12j~a{ng$>4eN1K56FJg^jEVW z*XP_j&a3I5W>)fliat*-&{Oz4N6*l==r!2a=&SSv`Wn3i`x0HIuh94Cb=cSG>+~gh zk+xyC$)j)3_h|=qhuZW_`Zg`VE>MQPLpdtLmgx$8mwrHR!oEoc{g8@Og{{($=ncwJ z1RGJ8uF{X`0QP`ldW-T@hpkhE3Uq^3U{|O?C92UP>>@ezQ(C1aY?I!mpU^cL!H(#U zv_yC40qg_%1HD7HXajbGZqvK;G+lzdM0aV8eomXPo3u{%=!^6`?DO<1`WgL_`mlZ4 zqhHXMsRi4j9$hD!Tv(Tu$s&_pg?*K_=qCM!o`roDclxjC6?z%=W%?ZbmIMu82lPAY ckWUG0LIK^U-_t(qKJ8LSLwW@Jh#u1a0Qq$x3IG5A literal 0 HcmV?d00001 diff --git a/testing/bevy_registry_export/basic/assets/registry.json b/testing/bevy_registry_export/basic/assets/registry.json new file mode 100644 index 0000000..86a81b7 --- /dev/null +++ b/testing/bevy_registry_export/basic/assets/registry.json @@ -0,0 +1,10732 @@ +{ + "$defs": { + "(f32, f32)": { + "isComponent": false, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + }, + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "(f32, f32)", + "title": "(f32, f32)", + "type": "array", + "typeInfo": "Tuple" + }, + "alloc::borrow::Cow": { + "isComponent": false, + "isResource": false, + "short_name": "Cow", + "title": "alloc::borrow::Cow", + "type": "object", + "typeInfo": "Value" + }, + "alloc::borrow::Cow": { + "isComponent": false, + "isResource": false, + "short_name": "Cow", + "title": "alloc::borrow::Cow", + "type": "object", + "typeInfo": "Value" + }, + "alloc::string::String": { + "isComponent": false, + "isResource": false, + "short_name": "String", + "title": "alloc::string::String", + "type": "string", + "typeInfo": "Value" + }, + "alloc::vec::Vec<(f32, f32)>": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/(f32, f32)" + } + }, + "short_name": "Vec<(f32, f32)>", + "title": "alloc::vec::Vec<(f32, f32)>", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + }, + "short_name": "Vec", + "title": "alloc::vec::Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/bevy_bevy_registry_export_basic_testing::test_components::TupleVec3" + } + }, + "short_name": "Vec", + "title": "alloc::vec::Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + }, + "short_name": "Vec", + "title": "alloc::vec::Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "short_name": "Vec", + "title": "alloc::vec::Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/bevy_text::text::TextSection" + } + }, + "short_name": "Vec", + "title": "alloc::vec::Vec", + "type": "array", + "typeInfo": "List" + }, + "alloc::vec::Vec": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "short_name": "Vec", + "title": "alloc::vec::Vec", + "type": "array", + "typeInfo": "List" + }, + "bevy_animation::AnimationClip": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "curves": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec>" + } + }, + "duration": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "paths": { + "type": { + "$ref": "#/$defs/bevy_utils::hashbrown::HashMap" + } + } + }, + "required": [ + "curves", + "paths", + "duration" + ], + "short_name": "AnimationClip", + "title": "bevy_animation::AnimationClip", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_animation::AnimationPlayer": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "animation": { + "type": { + "$ref": "#/$defs/bevy_animation::PlayingAnimation" + } + }, + "paused": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "paused", + "animation" + ], + "short_name": "AnimationPlayer", + "title": "bevy_animation::AnimationPlayer", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_asset::handle::Handle<()>": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId<()>" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle<()>", + "title": "bevy_asset::handle::Handle<()>", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle>": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId>" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle>", + "title": "bevy_asset::handle::Handle>", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::handle::Handle": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/std::sync::Arc" + } + } + ], + "short_name": "Strong", + "title": "Strong", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::id::AssetId" + } + } + ], + "short_name": "Weak", + "title": "Weak", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Handle", + "title": "bevy_asset::handle::Handle", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId<()>": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId<()>", + "title": "bevy_asset::id::AssetId<()>", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId>": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId>", + "title": "bevy_asset::id::AssetId>", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_asset::id::AssetId": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "index": { + "title": "index", + "type": { + "$ref": "#/$defs/bevy_asset::assets::AssetIndex" + } + } + }, + "required": [ + "index" + ], + "short_name": "Index", + "title": "Index", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "uuid": { + "title": "uuid", + "type": { + "$ref": "#/$defs/bevy_utils::Uuid" + } + } + }, + "required": [ + "uuid" + ], + "short_name": "Uuid", + "title": "Uuid", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "AssetId", + "title": "bevy_asset::id::AssetId", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_bevy_registry_export_basic_testing::test_components::AComponentWithAnExtremlyExageratedOrMaybeNotButCouldBeNameOrWut": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "AComponentWithAnExtremlyExageratedOrMaybeNotButCouldBeNameOrWut", + "title": "bevy_bevy_registry_export_basic_testing::test_components::AComponentWithAnExtremlyExageratedOrMaybeNotButCouldBeNameOrWut", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_bevy_registry_export_basic_testing::test_components::BasicTest": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "a": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "b": { + "type": { + "$ref": "#/$defs/u64" + } + }, + "c": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + }, + "required": [ + "a", + "b", + "c" + ], + "short_name": "BasicTest", + "title": "bevy_bevy_registry_export_basic_testing::test_components::BasicTest", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_bevy_registry_export_basic_testing::test_components::EnumComplex": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Float", + "title": "Float", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + ], + "short_name": "Wood", + "title": "Wood", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_bevy_registry_export_basic_testing::test_components::BasicTest" + } + } + ], + "short_name": "Vec", + "title": "Vec", + "type": "array", + "typeInfo": "Tuple" + }, + { + "title": "SomeThing" + }, + { + "additionalProperties": false, + "properties": { + "a": { + "title": "a", + "type": { + "$ref": "#/$defs/f32" + } + }, + "b": { + "title": "b", + "type": { + "$ref": "#/$defs/u32" + } + }, + "c": { + "title": "c", + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + }, + "required": [ + "a", + "b", + "c" + ], + "short_name": "StructLike", + "title": "StructLike", + "type": "object", + "typeInfo": "Struct" + }, + { + "title": "None" + } + ], + "short_name": "EnumComplex", + "title": "bevy_bevy_registry_export_basic_testing::test_components::EnumComplex", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_bevy_registry_export_basic_testing::test_components::EnumTest": { + "isComponent": true, + "isResource": false, + "oneOf": [ + "Metal", + "Wood", + "Rock", + "Cloth", + "Squishy", + "None" + ], + "short_name": "EnumTest", + "title": "bevy_bevy_registry_export_basic_testing::test_components::EnumTest", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_bevy_registry_export_basic_testing::test_components::NestedTupleStuff": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + }, + { + "type": { + "$ref": "#/$defs/u64" + } + }, + { + "type": { + "$ref": "#/$defs/bevy_bevy_registry_export_basic_testing::test_components::NestingTestLevel2" + } + } + ], + "short_name": "NestedTupleStuff", + "title": "bevy_bevy_registry_export_basic_testing::test_components::NestedTupleStuff", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_testing::test_components::NestingTestLevel2": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "basic": { + "type": { + "$ref": "#/$defs/bevy_bevy_registry_export_basic_testing::test_components::BasicTest" + } + }, + "color": { + "type": { + "$ref": "#/$defs/bevy_bevy_registry_export_basic_testing::test_components::TupleTestColor" + } + }, + "colors_list": { + "type": { + "$ref": "#/$defs/bevy_bevy_registry_export_basic_testing::test_components::VecOfColors" + } + }, + "enable": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "enum_inner": { + "type": { + "$ref": "#/$defs/bevy_bevy_registry_export_basic_testing::test_components::EnumTest" + } + }, + "nested": { + "type": { + "$ref": "#/$defs/bevy_bevy_registry_export_basic_testing::test_components::NestingTestLevel3" + } + }, + "text": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + }, + "toggle": { + "type": { + "$ref": "#/$defs/bevy_bevy_registry_export_basic_testing::test_components::TupleTestBool" + } + } + }, + "required": [ + "text", + "enable", + "enum_inner", + "color", + "toggle", + "basic", + "nested", + "colors_list" + ], + "short_name": "NestingTestLevel2", + "title": "bevy_bevy_registry_export_basic_testing::test_components::NestingTestLevel2", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_bevy_registry_export_basic_testing::test_components::NestingTestLevel3": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "vec": { + "type": { + "$ref": "#/$defs/bevy_bevy_registry_export_basic_testing::test_components::TupleVec3" + } + } + }, + "required": [ + "vec" + ], + "short_name": "NestingTestLevel3", + "title": "bevy_bevy_registry_export_basic_testing::test_components::NestingTestLevel3", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_bevy_registry_export_basic_testing::test_components::TupleTest2": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + }, + { + "type": { + "$ref": "#/$defs/u64" + } + }, + { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + ], + "short_name": "TupleTest2", + "title": "bevy_bevy_registry_export_basic_testing::test_components::TupleTest2", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_testing::test_components::TupleTestBool": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bool" + } + } + ], + "short_name": "TupleTestBool", + "title": "bevy_bevy_registry_export_basic_testing::test_components::TupleTestBool", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_testing::test_components::TupleTestColor": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + } + ], + "short_name": "TupleTestColor", + "title": "bevy_bevy_registry_export_basic_testing::test_components::TupleTestColor", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_testing::test_components::TupleTestF32": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "TupleTestF32", + "title": "bevy_bevy_registry_export_basic_testing::test_components::TupleTestF32", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_testing::test_components::TupleTestStr": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + ], + "short_name": "TupleTestStr", + "title": "bevy_bevy_registry_export_basic_testing::test_components::TupleTestStr", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_testing::test_components::TupleTestU64": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u64" + } + } + ], + "short_name": "TupleTestU64", + "title": "bevy_bevy_registry_export_basic_testing::test_components::TupleTestU64", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_testing::test_components::TupleVec": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + ], + "short_name": "TupleVec", + "title": "bevy_bevy_registry_export_basic_testing::test_components::TupleVec", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_testing::test_components::TupleVec2": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + ], + "short_name": "TupleVec2", + "title": "bevy_bevy_registry_export_basic_testing::test_components::TupleVec2", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_testing::test_components::TupleVec3": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + } + ], + "short_name": "TupleVec3", + "title": "bevy_bevy_registry_export_basic_testing::test_components::TupleVec3", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_testing::test_components::TupleVecF32F32": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::vec::Vec<(f32, f32)>" + } + } + ], + "short_name": "TupleVecF32F32", + "title": "bevy_bevy_registry_export_basic_testing::test_components::TupleVecF32F32", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_testing::test_components::UnitTest": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "UnitTest", + "title": "bevy_bevy_registry_export_basic_testing::test_components::UnitTest", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_bevy_registry_export_basic_testing::test_components::VecOfColors": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + ], + "short_name": "VecOfColors", + "title": "bevy_bevy_registry_export_basic_testing::test_components::VecOfColors", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_testing::test_components::VecOfF32s": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + ], + "short_name": "VecOfF32s", + "title": "bevy_bevy_registry_export_basic_testing::test_components::VecOfF32s", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_bevy_registry_export_basic_testing::test_components::VecOfVec3s2": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + ], + "short_name": "VecOfVec3s2", + "title": "bevy_bevy_registry_export_basic_testing::test_components::VecOfVec3s2", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_core::name::Name": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "hash": { + "type": { + "$ref": "#/$defs/u64" + } + }, + "name": { + "type": { + "$ref": "#/$defs/alloc::borrow::Cow" + } + } + }, + "required": [ + "hash", + "name" + ], + "short_name": "Name", + "title": "bevy_core::name::Name", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::bloom::settings::BloomCompositeMode": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "EnergyConserving", + "Additive" + ], + "short_name": "BloomCompositeMode", + "title": "bevy_core_pipeline::bloom::settings::BloomCompositeMode", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_core_pipeline::bloom::settings::BloomPrefilterSettings": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "threshold": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "threshold_softness": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "threshold", + "threshold_softness" + ], + "short_name": "BloomPrefilterSettings", + "title": "bevy_core_pipeline::bloom::settings::BloomPrefilterSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::bloom::settings::BloomSettings": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "composite_mode": { + "type": { + "$ref": "#/$defs/bevy_core_pipeline::bloom::settings::BloomCompositeMode" + } + }, + "high_pass_frequency": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "intensity": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "low_frequency_boost": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "low_frequency_boost_curvature": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "prefilter_settings": { + "type": { + "$ref": "#/$defs/bevy_core_pipeline::bloom::settings::BloomPrefilterSettings" + } + } + }, + "required": [ + "intensity", + "low_frequency_boost", + "low_frequency_boost_curvature", + "high_pass_frequency", + "prefilter_settings", + "composite_mode" + ], + "short_name": "BloomSettings", + "title": "bevy_core_pipeline::bloom::settings::BloomSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::clear_color::ClearColor": { + "isComponent": false, + "isResource": true, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + } + ], + "short_name": "ClearColor", + "title": "bevy_core_pipeline::clear_color::ClearColor", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_core_pipeline::clear_color::ClearColorConfig": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "Default" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + } + ], + "short_name": "Custom", + "title": "Custom", + "type": "array", + "typeInfo": "Tuple" + }, + { + "title": "None" + } + ], + "short_name": "ClearColorConfig", + "title": "bevy_core_pipeline::clear_color::ClearColorConfig", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_core_pipeline::contrast_adaptive_sharpening::ContrastAdaptiveSharpeningSettings": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "denoise": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "enabled": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "sharpening_strength": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "enabled", + "sharpening_strength", + "denoise" + ], + "short_name": "ContrastAdaptiveSharpeningSettings", + "title": "bevy_core_pipeline::contrast_adaptive_sharpening::ContrastAdaptiveSharpeningSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::core_2d::camera_2d::Camera2d": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "clear_color": { + "type": { + "$ref": "#/$defs/bevy_core_pipeline::clear_color::ClearColorConfig" + } + } + }, + "required": [ + "clear_color" + ], + "short_name": "Camera2d", + "title": "bevy_core_pipeline::core_2d::camera_2d::Camera2d", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::core_3d::camera_3d::Camera3d": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "clear_color": { + "type": { + "$ref": "#/$defs/bevy_core_pipeline::clear_color::ClearColorConfig" + } + }, + "depth_load_op": { + "type": { + "$ref": "#/$defs/bevy_core_pipeline::core_3d::camera_3d::Camera3dDepthLoadOp" + } + }, + "depth_texture_usages": { + "type": { + "$ref": "#/$defs/bevy_core_pipeline::core_3d::camera_3d::Camera3dDepthTextureUsage" + } + }, + "screen_space_specular_transmission_quality": { + "type": { + "$ref": "#/$defs/bevy_core_pipeline::core_3d::camera_3d::ScreenSpaceTransmissionQuality" + } + }, + "screen_space_specular_transmission_steps": { + "type": { + "$ref": "#/$defs/usize" + } + } + }, + "required": [ + "clear_color", + "depth_load_op", + "depth_texture_usages", + "screen_space_specular_transmission_steps", + "screen_space_specular_transmission_quality" + ], + "short_name": "Camera3d", + "title": "bevy_core_pipeline::core_3d::camera_3d::Camera3d", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::core_3d::camera_3d::Camera3dDepthLoadOp": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Clear", + "title": "Clear", + "type": "array", + "typeInfo": "Tuple" + }, + { + "title": "Load" + } + ], + "short_name": "Camera3dDepthLoadOp", + "title": "bevy_core_pipeline::core_3d::camera_3d::Camera3dDepthLoadOp", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_core_pipeline::fxaa::Fxaa": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "edge_threshold": { + "type": { + "$ref": "#/$defs/bevy_core_pipeline::fxaa::Sensitivity" + } + }, + "edge_threshold_min": { + "type": { + "$ref": "#/$defs/bevy_core_pipeline::fxaa::Sensitivity" + } + }, + "enabled": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "enabled", + "edge_threshold", + "edge_threshold_min" + ], + "short_name": "Fxaa", + "title": "bevy_core_pipeline::fxaa::Fxaa", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::prepass::DepthPrepass": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "DepthPrepass", + "title": "bevy_core_pipeline::prepass::DepthPrepass", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::prepass::NormalPrepass": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "NormalPrepass", + "title": "bevy_core_pipeline::prepass::NormalPrepass", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_core_pipeline::tonemapping::DebandDither": { + "isComponent": true, + "isResource": false, + "oneOf": [ + "Disabled", + "Enabled" + ], + "short_name": "DebandDither", + "title": "bevy_core_pipeline::tonemapping::DebandDither", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_core_pipeline::tonemapping::Tonemapping": { + "isComponent": true, + "isResource": false, + "oneOf": [ + "None", + "Reinhard", + "ReinhardLuminance", + "AcesFitted", + "AgX", + "SomewhatBoringDisplayTransform", + "TonyMcMapface", + "BlenderFilmic" + ], + "short_name": "Tonemapping", + "title": "bevy_core_pipeline::tonemapping::Tonemapping", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ecs::Entity": { + "isComponent": false, + "isResource": false, + "short_name": "Entity", + "title": "bevy_ecs::Entity", + "type": "object", + "typeInfo": "Value" + }, + "bevy_egui::EguiSettings": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "default_open_url_target": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "scale_factor": { + "type": { + "$ref": "#/$defs/f64" + } + } + }, + "required": [ + "scale_factor" + ], + "short_name": "EguiSettings", + "title": "bevy_egui::EguiSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_gltf::GltfExtras": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "value": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + }, + "required": [ + "value" + ], + "short_name": "GltfExtras", + "title": "bevy_gltf::GltfExtras", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_gltf_blueprints::animation::Animations": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "named_animations": { + "type": { + "$ref": "#/$defs/bevy_utils::hashbrown::HashMap, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>" + } + } + }, + "required": [ + "named_animations" + ], + "short_name": "Animations", + "title": "bevy_gltf_blueprints::animation::Animations", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_gltf_blueprints::materials::MaterialInfo": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "name": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + }, + "source": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + }, + "required": [ + "name", + "source" + ], + "short_name": "MaterialInfo", + "title": "bevy_gltf_blueprints::materials::MaterialInfo", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_gltf_blueprints::spawn_from_blueprints::BlueprintName": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + ], + "short_name": "BlueprintName", + "title": "bevy_gltf_blueprints::spawn_from_blueprints::BlueprintName", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_gltf_blueprints::spawn_from_blueprints::SpawnHere": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "SpawnHere", + "title": "bevy_gltf_blueprints::spawn_from_blueprints::SpawnHere", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_gltf_worlflow_examples_common::core::camera::camera_replace_proxies::SSAOSettings": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "SSAOSettings", + "title": "bevy_gltf_worlflow_examples_common::core::camera::camera_replace_proxies::SSAOSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_gltf_worlflow_examples_common::core::camera::camera_tracking::CameraTrackable": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "CameraTrackable", + "title": "bevy_gltf_worlflow_examples_common::core::camera::camera_tracking::CameraTrackable", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_gltf_worlflow_examples_common::core::camera::camera_tracking::CameraTracking": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "offset": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + } + }, + "required": [ + "offset" + ], + "short_name": "CameraTracking", + "title": "bevy_gltf_worlflow_examples_common::core::camera::camera_tracking::CameraTracking", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_gltf_worlflow_examples_common::core::camera::camera_tracking::CameraTrackingOffset": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + } + ], + "short_name": "CameraTrackingOffset", + "title": "bevy_gltf_worlflow_examples_common::core::camera::camera_tracking::CameraTrackingOffset", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_gltf_worlflow_examples_common::core::lighting::lighting_replace_proxies::AmbientLightSettings": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "brightness": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + } + }, + "required": [ + "color", + "brightness" + ], + "short_name": "AmbientLightSettings", + "title": "bevy_gltf_worlflow_examples_common::core::lighting::lighting_replace_proxies::AmbientLightSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_gltf_worlflow_examples_common::core::lighting::lighting_replace_proxies::ShadowmapSettings": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "size": { + "type": { + "$ref": "#/$defs/usize" + } + } + }, + "required": [ + "size" + ], + "short_name": "ShadowmapSettings", + "title": "bevy_gltf_worlflow_examples_common::core::lighting::lighting_replace_proxies::ShadowmapSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_gltf_worlflow_examples_common::core::physics::physics_replace_proxies::AutoAABBCollider": { + "isComponent": true, + "isResource": false, + "oneOf": [ + "Cuboid", + "Ball", + "Capsule" + ], + "short_name": "AutoAABBCollider", + "title": "bevy_gltf_worlflow_examples_common::core::physics::physics_replace_proxies::AutoAABBCollider", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_gltf_worlflow_examples_common::core::physics::physics_replace_proxies::Collider": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Ball", + "title": "Ball", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + } + ], + "short_name": "Cuboid", + "title": "Cuboid", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Capsule", + "title": "Capsule", + "type": "array", + "typeInfo": "Tuple" + }, + { + "title": "Mesh" + } + ], + "short_name": "Collider", + "title": "bevy_gltf_worlflow_examples_common::core::physics::physics_replace_proxies::Collider", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_gltf_worlflow_examples_common::game::picking::Pickable": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "Pickable", + "title": "bevy_gltf_worlflow_examples_common::game::picking::Pickable", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_gltf_worlflow_examples_common::game::player::Player": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "Player", + "title": "bevy_gltf_worlflow_examples_common::game::player::Player", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_hierarchy::components::children::Children": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/smallvec::SmallVec<[bevy_ecs::Entity; 8]>" + } + } + ], + "short_name": "Children", + "title": "bevy_hierarchy::components::children::Children", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_hierarchy::components::parent::Parent": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + ], + "short_name": "Parent", + "title": "bevy_hierarchy::components::parent::Parent", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_input::ButtonState": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Pressed", + "Released" + ], + "short_name": "ButtonState", + "title": "bevy_input::ButtonState", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_input::gamepad::AxisSettings": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "deadzone_lowerbound": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "deadzone_upperbound": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "livezone_lowerbound": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "livezone_upperbound": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "threshold": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "livezone_upperbound", + "deadzone_upperbound", + "deadzone_lowerbound", + "livezone_lowerbound", + "threshold" + ], + "short_name": "AxisSettings", + "title": "bevy_input::gamepad::AxisSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::ButtonAxisSettings": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "high": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "low": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "threshold": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "high", + "low", + "threshold" + ], + "short_name": "ButtonAxisSettings", + "title": "bevy_input::gamepad::ButtonAxisSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::ButtonSettings": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "press_threshold": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "release_threshold": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "press_threshold", + "release_threshold" + ], + "short_name": "ButtonSettings", + "title": "bevy_input::gamepad::ButtonSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::Gamepad": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "id": { + "type": { + "$ref": "#/$defs/usize" + } + } + }, + "required": [ + "id" + ], + "short_name": "Gamepad", + "title": "bevy_input::gamepad::Gamepad", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::GamepadAxis": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "axis_type": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::GamepadAxisType" + } + }, + "gamepad": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::Gamepad" + } + } + }, + "required": [ + "gamepad", + "axis_type" + ], + "short_name": "GamepadAxis", + "title": "bevy_input::gamepad::GamepadAxis", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::GamepadAxisType": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "LeftStickX" + }, + { + "title": "LeftStickY" + }, + { + "title": "LeftZ" + }, + { + "title": "RightStickX" + }, + { + "title": "RightStickY" + }, + { + "title": "RightZ" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u8" + } + } + ], + "short_name": "Other", + "title": "Other", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "GamepadAxisType", + "title": "bevy_input::gamepad::GamepadAxisType", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_input::gamepad::GamepadButton": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "button_type": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::GamepadButtonType" + } + }, + "gamepad": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::Gamepad" + } + } + }, + "required": [ + "gamepad", + "button_type" + ], + "short_name": "GamepadButton", + "title": "bevy_input::gamepad::GamepadButton", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::GamepadButtonInput": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "button": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::GamepadButton" + } + }, + "state": { + "type": { + "$ref": "#/$defs/bevy_input::ButtonState" + } + } + }, + "required": [ + "button", + "state" + ], + "short_name": "GamepadButtonInput", + "title": "bevy_input::gamepad::GamepadButtonInput", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::gamepad::GamepadButtonType": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "South" + }, + { + "title": "East" + }, + { + "title": "North" + }, + { + "title": "West" + }, + { + "title": "C" + }, + { + "title": "Z" + }, + { + "title": "LeftTrigger" + }, + { + "title": "LeftTrigger2" + }, + { + "title": "RightTrigger" + }, + { + "title": "RightTrigger2" + }, + { + "title": "Select" + }, + { + "title": "Start" + }, + { + "title": "Mode" + }, + { + "title": "LeftThumb" + }, + { + "title": "RightThumb" + }, + { + "title": "DPadUp" + }, + { + "title": "DPadDown" + }, + { + "title": "DPadLeft" + }, + { + "title": "DPadRight" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u8" + } + } + ], + "short_name": "Other", + "title": "Other", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "GamepadButtonType", + "title": "bevy_input::gamepad::GamepadButtonType", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_input::gamepad::GamepadConnection": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::GamepadInfo" + } + } + ], + "short_name": "Connected", + "title": "Connected", + "type": "array", + "typeInfo": "Tuple" + }, + { + "title": "Disconnected" + } + ], + "short_name": "GamepadConnection", + "title": "bevy_input::gamepad::GamepadConnection", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_input::gamepad::GamepadSettings": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "axis_settings": { + "type": { + "$ref": "#/$defs/bevy_utils::hashbrown::HashMap" + } + }, + "button_axis_settings": { + "type": { + "$ref": "#/$defs/bevy_utils::hashbrown::HashMap" + } + }, + "button_settings": { + "type": { + "$ref": "#/$defs/bevy_utils::hashbrown::HashMap" + } + }, + "default_axis_settings": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::AxisSettings" + } + }, + "default_button_axis_settings": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::ButtonAxisSettings" + } + }, + "default_button_settings": { + "type": { + "$ref": "#/$defs/bevy_input::gamepad::ButtonSettings" + } + } + }, + "required": [ + "default_button_settings", + "default_axis_settings", + "default_button_axis_settings", + "button_settings", + "axis_settings", + "button_axis_settings" + ], + "short_name": "GamepadSettings", + "title": "bevy_input::gamepad::GamepadSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::keyboard::KeyCode": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Key1", + "Key2", + "Key3", + "Key4", + "Key5", + "Key6", + "Key7", + "Key8", + "Key9", + "Key0", + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + "Escape", + "F1", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "F10", + "F11", + "F12", + "F13", + "F14", + "F15", + "F16", + "F17", + "F18", + "F19", + "F20", + "F21", + "F22", + "F23", + "F24", + "Snapshot", + "Scroll", + "Pause", + "Insert", + "Home", + "Delete", + "End", + "PageDown", + "PageUp", + "Left", + "Up", + "Right", + "Down", + "Back", + "Return", + "Space", + "Compose", + "Caret", + "Numlock", + "Numpad0", + "Numpad1", + "Numpad2", + "Numpad3", + "Numpad4", + "Numpad5", + "Numpad6", + "Numpad7", + "Numpad8", + "Numpad9", + "AbntC1", + "AbntC2", + "NumpadAdd", + "Apostrophe", + "Apps", + "Asterisk", + "Plus", + "At", + "Ax", + "Backslash", + "Calculator", + "Capital", + "Colon", + "Comma", + "Convert", + "NumpadDecimal", + "NumpadDivide", + "Equals", + "Grave", + "Kana", + "Kanji", + "AltLeft", + "BracketLeft", + "ControlLeft", + "ShiftLeft", + "SuperLeft", + "Mail", + "MediaSelect", + "MediaStop", + "Minus", + "NumpadMultiply", + "Mute", + "MyComputer", + "NavigateForward", + "NavigateBackward", + "NextTrack", + "NoConvert", + "NumpadComma", + "NumpadEnter", + "NumpadEquals", + "Oem102", + "Period", + "PlayPause", + "Power", + "PrevTrack", + "AltRight", + "BracketRight", + "ControlRight", + "ShiftRight", + "SuperRight", + "Semicolon", + "Slash", + "Sleep", + "Stop", + "NumpadSubtract", + "Sysrq", + "Tab", + "Underline", + "Unlabeled", + "VolumeDown", + "VolumeUp", + "Wake", + "WebBack", + "WebFavorites", + "WebForward", + "WebHome", + "WebRefresh", + "WebSearch", + "WebStop", + "Yen", + "Copy", + "Paste", + "Cut" + ], + "short_name": "KeyCode", + "title": "bevy_input::keyboard::KeyCode", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_input::keyboard::KeyboardInput": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "key_code": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "scan_code": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "state": { + "type": { + "$ref": "#/$defs/bevy_input::ButtonState" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "scan_code", + "state", + "window" + ], + "short_name": "KeyboardInput", + "title": "bevy_input::keyboard::KeyboardInput", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::keyboard::ScanCode": { + "isComponent": false, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u32" + } + } + ], + "short_name": "ScanCode", + "title": "bevy_input::keyboard::ScanCode", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_input::mouse::MouseButton": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "Left" + }, + { + "title": "Right" + }, + { + "title": "Middle" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u16" + } + } + ], + "short_name": "Other", + "title": "Other", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "MouseButton", + "title": "bevy_input::mouse::MouseButton", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_input::mouse::MouseButtonInput": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "button": { + "type": { + "$ref": "#/$defs/bevy_input::mouse::MouseButton" + } + }, + "state": { + "type": { + "$ref": "#/$defs/bevy_input::ButtonState" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "button", + "state", + "window" + ], + "short_name": "MouseButtonInput", + "title": "bevy_input::mouse::MouseButtonInput", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::mouse::MouseMotion": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "delta": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "delta" + ], + "short_name": "MouseMotion", + "title": "bevy_input::mouse::MouseMotion", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::mouse::MouseScrollUnit": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Line", + "Pixel" + ], + "short_name": "MouseScrollUnit", + "title": "bevy_input::mouse::MouseScrollUnit", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_input::mouse::MouseWheel": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "unit": { + "type": { + "$ref": "#/$defs/bevy_input::mouse::MouseScrollUnit" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + }, + "x": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "unit", + "x", + "y", + "window" + ], + "short_name": "MouseWheel", + "title": "bevy_input::mouse::MouseWheel", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::touch::ForceTouch": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "altitude_angle": { + "title": "altitude_angle", + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "force": { + "title": "force", + "type": { + "$ref": "#/$defs/f64" + } + }, + "max_possible_force": { + "title": "max_possible_force", + "type": { + "$ref": "#/$defs/f64" + } + } + }, + "required": [ + "force", + "max_possible_force" + ], + "short_name": "Calibrated", + "title": "Calibrated", + "type": "object", + "typeInfo": "Struct" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f64" + } + } + ], + "short_name": "Normalized", + "title": "Normalized", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "ForceTouch", + "title": "bevy_input::touch::ForceTouch", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_input::touch::TouchInput": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "force": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "id": { + "type": { + "$ref": "#/$defs/u64" + } + }, + "phase": { + "type": { + "$ref": "#/$defs/bevy_input::touch::TouchPhase" + } + }, + "position": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "phase", + "position", + "id" + ], + "short_name": "TouchInput", + "title": "bevy_input::touch::TouchInput", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_input::touch::TouchPhase": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Started", + "Moved", + "Ended", + "Canceled" + ], + "short_name": "TouchPhase", + "title": "bevy_input::touch::TouchPhase", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_input::touchpad::TouchpadMagnify": { + "isComponent": false, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "TouchpadMagnify", + "title": "bevy_input::touchpad::TouchpadMagnify", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_input::touchpad::TouchpadRotate": { + "isComponent": false, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "TouchpadRotate", + "title": "bevy_input::touchpad::TouchpadRotate", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_math::Rect": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "max": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + }, + "min": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "min", + "max" + ], + "short_name": "Rect", + "title": "bevy_math::Rect", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::alpha::AlphaMode": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "Opaque" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Mask", + "title": "Mask", + "type": "array", + "typeInfo": "Tuple" + }, + { + "title": "Blend" + }, + { + "title": "Premultiplied" + }, + { + "title": "Add" + }, + { + "title": "Multiply" + } + ], + "short_name": "AlphaMode", + "title": "bevy_pbr::alpha::AlphaMode", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_pbr::bundle::CascadesVisibleEntities": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "CascadesVisibleEntities", + "title": "bevy_pbr::bundle::CascadesVisibleEntities", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::bundle::CubemapVisibleEntities": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "CubemapVisibleEntities", + "title": "bevy_pbr::bundle::CubemapVisibleEntities", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::environment_map::EnvironmentMapLight": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "diffuse_map": { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + }, + "specular_map": { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + } + }, + "required": [ + "diffuse_map", + "specular_map" + ], + "short_name": "EnvironmentMapLight", + "title": "bevy_pbr::environment_map::EnvironmentMapLight", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::fog::FogSettings": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "directional_light_color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "directional_light_exponent": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "falloff": { + "type": { + "$ref": "#/$defs/bevy_pbr::fog::FogFalloff" + } + } + }, + "required": [ + "color", + "directional_light_color", + "directional_light_exponent", + "falloff" + ], + "short_name": "FogSettings", + "title": "bevy_pbr::fog::FogSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::AmbientLight": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "properties": { + "brightness": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + } + }, + "required": [ + "color", + "brightness" + ], + "short_name": "AmbientLight", + "title": "bevy_pbr::light::AmbientLight", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::Cascade": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "projection": { + "type": { + "$ref": "#/$defs/glam::Mat4" + } + }, + "texel_size": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "view_projection": { + "type": { + "$ref": "#/$defs/glam::Mat4" + } + }, + "view_transform": { + "type": { + "$ref": "#/$defs/glam::Mat4" + } + } + }, + "required": [ + "view_transform", + "projection", + "view_projection", + "texel_size" + ], + "short_name": "Cascade", + "title": "bevy_pbr::light::Cascade", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::CascadeShadowConfig": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "bounds": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + }, + "minimum_distance": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "overlap_proportion": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "bounds", + "overlap_proportion", + "minimum_distance" + ], + "short_name": "CascadeShadowConfig", + "title": "bevy_pbr::light::CascadeShadowConfig", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::Cascades": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "cascades": { + "type": { + "$ref": "#/$defs/bevy_utils::hashbrown::HashMap, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>" + } + } + }, + "required": [ + "cascades" + ], + "short_name": "Cascades", + "title": "bevy_pbr::light::Cascades", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::ClusterConfig": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "title": "None" + }, + { + "title": "Single" + }, + { + "additionalProperties": false, + "properties": { + "dimensions": { + "title": "dimensions", + "type": { + "$ref": "#/$defs/glam::UVec3" + } + }, + "dynamic_resizing": { + "title": "dynamic_resizing", + "type": { + "$ref": "#/$defs/bool" + } + }, + "z_config": { + "title": "z_config", + "type": { + "$ref": "#/$defs/bevy_pbr::light::ClusterZConfig" + } + } + }, + "required": [ + "dimensions", + "z_config", + "dynamic_resizing" + ], + "short_name": "XYZ", + "title": "XYZ", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "dynamic_resizing": { + "title": "dynamic_resizing", + "type": { + "$ref": "#/$defs/bool" + } + }, + "total": { + "title": "total", + "type": { + "$ref": "#/$defs/u32" + } + }, + "z_config": { + "title": "z_config", + "type": { + "$ref": "#/$defs/bevy_pbr::light::ClusterZConfig" + } + }, + "z_slices": { + "title": "z_slices", + "type": { + "$ref": "#/$defs/u32" + } + } + }, + "required": [ + "total", + "z_slices", + "z_config", + "dynamic_resizing" + ], + "short_name": "FixedZ", + "title": "FixedZ", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "ClusterConfig", + "title": "bevy_pbr::light::ClusterConfig", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_pbr::light::ClusterFarZMode": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "MaxLightRange" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Constant", + "title": "Constant", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "ClusterFarZMode", + "title": "bevy_pbr::light::ClusterFarZMode", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_pbr::light::ClusterZConfig": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "far_z_mode": { + "type": { + "$ref": "#/$defs/bevy_pbr::light::ClusterFarZMode" + } + }, + "first_slice_depth": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "first_slice_depth", + "far_z_mode" + ], + "short_name": "ClusterZConfig", + "title": "bevy_pbr::light::ClusterZConfig", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::DirectionalLight": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "illuminance": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "shadow_depth_bias": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "shadow_normal_bias": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "shadows_enabled": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "color", + "illuminance", + "shadows_enabled", + "shadow_depth_bias", + "shadow_normal_bias" + ], + "short_name": "DirectionalLight", + "title": "bevy_pbr::light::DirectionalLight", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::DirectionalLightShadowMap": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "properties": { + "size": { + "type": { + "$ref": "#/$defs/usize" + } + } + }, + "required": [ + "size" + ], + "short_name": "DirectionalLightShadowMap", + "title": "bevy_pbr::light::DirectionalLightShadowMap", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::NotShadowCaster": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "NotShadowCaster", + "title": "bevy_pbr::light::NotShadowCaster", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::NotShadowReceiver": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "NotShadowReceiver", + "title": "bevy_pbr::light::NotShadowReceiver", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::PointLight": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "intensity": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "radius": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "range": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "shadow_depth_bias": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "shadow_normal_bias": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "shadows_enabled": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "color", + "intensity", + "range", + "radius", + "shadows_enabled", + "shadow_depth_bias", + "shadow_normal_bias" + ], + "short_name": "PointLight", + "title": "bevy_pbr::light::PointLight", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::PointLightShadowMap": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "properties": { + "size": { + "type": { + "$ref": "#/$defs/usize" + } + } + }, + "required": [ + "size" + ], + "short_name": "PointLightShadowMap", + "title": "bevy_pbr::light::PointLightShadowMap", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::light::ShadowFilteringMethod": { + "isComponent": true, + "isResource": false, + "oneOf": [ + "Hardware2x2", + "Castano13", + "Jimenez14" + ], + "short_name": "ShadowFilteringMethod", + "title": "bevy_pbr::light::ShadowFilteringMethod", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_pbr::light::SpotLight": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "inner_angle": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "intensity": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "outer_angle": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "radius": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "range": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "shadow_depth_bias": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "shadow_normal_bias": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "shadows_enabled": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "color", + "intensity", + "range", + "radius", + "shadows_enabled", + "shadow_depth_bias", + "shadow_normal_bias", + "outer_angle", + "inner_angle" + ], + "short_name": "SpotLight", + "title": "bevy_pbr::light::SpotLight", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::material::DefaultOpaqueRendererMethod": { + "isComponent": false, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_pbr::material::OpaqueRendererMethod" + } + } + ], + "short_name": "DefaultOpaqueRendererMethod", + "title": "bevy_pbr::material::DefaultOpaqueRendererMethod", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_pbr::pbr_material::StandardMaterial": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "alpha_mode": { + "type": { + "$ref": "#/$defs/bevy_pbr::alpha::AlphaMode" + } + }, + "attenuation_color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "attenuation_distance": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "base_color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "base_color_texture": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + }, + "deferred_lighting_pass_id": { + "type": { + "$ref": "#/$defs/u8" + } + }, + "depth_bias": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "depth_map": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + }, + "diffuse_transmission": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "double_sided": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "emissive": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "emissive_texture": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + }, + "flip_normal_map_y": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "fog_enabled": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "ior": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "max_parallax_layer_count": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "metallic": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "metallic_roughness_texture": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + }, + "normal_map_texture": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + }, + "occlusion_texture": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + }, + "opaque_render_method": { + "type": { + "$ref": "#/$defs/bevy_pbr::material::OpaqueRendererMethod" + } + }, + "parallax_depth_scale": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "parallax_mapping_method": { + "type": { + "$ref": "#/$defs/bevy_pbr::parallax::ParallaxMappingMethod" + } + }, + "perceptual_roughness": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "reflectance": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "specular_transmission": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "thickness": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "unlit": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "base_color", + "emissive", + "perceptual_roughness", + "metallic", + "reflectance", + "diffuse_transmission", + "specular_transmission", + "thickness", + "ior", + "attenuation_distance", + "attenuation_color", + "flip_normal_map_y", + "double_sided", + "unlit", + "fog_enabled", + "alpha_mode", + "depth_bias", + "parallax_depth_scale", + "parallax_mapping_method", + "max_parallax_layer_count", + "opaque_render_method", + "deferred_lighting_pass_id" + ], + "short_name": "StandardMaterial", + "title": "bevy_pbr::pbr_material::StandardMaterial", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::ssao::ScreenSpaceAmbientOcclusionSettings": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "quality_level": { + "type": { + "$ref": "#/$defs/bevy_pbr::ssao::ScreenSpaceAmbientOcclusionQualityLevel" + } + } + }, + "required": [ + "quality_level" + ], + "short_name": "ScreenSpaceAmbientOcclusionSettings", + "title": "bevy_pbr::ssao::ScreenSpaceAmbientOcclusionSettings", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::wireframe::NoWireframe": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "NoWireframe", + "title": "bevy_pbr::wireframe::NoWireframe", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::wireframe::Wireframe": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "Wireframe", + "title": "bevy_pbr::wireframe::Wireframe", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_pbr::wireframe::WireframeConfig": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "properties": { + "default_color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "global": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "global", + "default_color" + ], + "short_name": "WireframeConfig", + "title": "bevy_pbr::wireframe::WireframeConfig", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::dynamics::rigid_body::AdditionalMassProperties": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Mass", + "title": "Mass", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_rapier3d::dynamics::rigid_body::MassProperties" + } + } + ], + "short_name": "MassProperties", + "title": "MassProperties", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "AdditionalMassProperties", + "title": "bevy_rapier3d::dynamics::rigid_body::AdditionalMassProperties", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_rapier3d::dynamics::rigid_body::Ccd": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "enabled": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "enabled" + ], + "short_name": "Ccd", + "title": "bevy_rapier3d::dynamics::rigid_body::Ccd", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::dynamics::rigid_body::Damping": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "angular_damping": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "linear_damping": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "linear_damping", + "angular_damping" + ], + "short_name": "Damping", + "title": "bevy_rapier3d::dynamics::rigid_body::Damping", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::dynamics::rigid_body::Dominance": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "groups": { + "type": { + "$ref": "#/$defs/i8" + } + } + }, + "required": [ + "groups" + ], + "short_name": "Dominance", + "title": "bevy_rapier3d::dynamics::rigid_body::Dominance", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::dynamics::rigid_body::ExternalForce": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "force": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + "torque": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + } + }, + "required": [ + "force", + "torque" + ], + "short_name": "ExternalForce", + "title": "bevy_rapier3d::dynamics::rigid_body::ExternalForce", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::dynamics::rigid_body::ExternalImpulse": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "impulse": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + "torque_impulse": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + } + }, + "required": [ + "impulse", + "torque_impulse" + ], + "short_name": "ExternalImpulse", + "title": "bevy_rapier3d::dynamics::rigid_body::ExternalImpulse", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::dynamics::rigid_body::GravityScale": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "GravityScale", + "title": "bevy_rapier3d::dynamics::rigid_body::GravityScale", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_rapier3d::dynamics::rigid_body::LockedAxes": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u8" + } + } + ], + "short_name": "LockedAxes", + "title": "bevy_rapier3d::dynamics::rigid_body::LockedAxes", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_rapier3d::dynamics::rigid_body::MassProperties": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "local_center_of_mass": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + "mass": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "principal_inertia": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + "principal_inertia_local_frame": { + "type": { + "$ref": "#/$defs/glam::Quat" + } + } + }, + "required": [ + "local_center_of_mass", + "mass", + "principal_inertia_local_frame", + "principal_inertia" + ], + "short_name": "MassProperties", + "title": "bevy_rapier3d::dynamics::rigid_body::MassProperties", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::dynamics::rigid_body::RigidBody": { + "isComponent": true, + "isResource": false, + "oneOf": [ + "Dynamic", + "Fixed", + "KinematicPositionBased", + "KinematicVelocityBased" + ], + "short_name": "RigidBody", + "title": "bevy_rapier3d::dynamics::rigid_body::RigidBody", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_rapier3d::dynamics::rigid_body::Sleeping": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "angular_threshold": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "linear_threshold": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "sleeping": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "linear_threshold", + "angular_threshold", + "sleeping" + ], + "short_name": "Sleeping", + "title": "bevy_rapier3d::dynamics::rigid_body::Sleeping", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::dynamics::rigid_body::Velocity": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "angvel": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + "linvel": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + } + }, + "required": [ + "linvel", + "angvel" + ], + "short_name": "Velocity", + "title": "bevy_rapier3d::dynamics::rigid_body::Velocity", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::geometry::collider::CollidingEntities": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_utils::HashSet" + } + } + ], + "short_name": "CollidingEntities", + "title": "bevy_rapier3d::geometry::collider::CollidingEntities", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_rapier3d::geometry::collider::CollisionGroups": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "filters": { + "type": { + "$ref": "#/$defs/bevy_rapier3d::geometry::collider::Group" + } + }, + "memberships": { + "type": { + "$ref": "#/$defs/bevy_rapier3d::geometry::collider::Group" + } + } + }, + "required": [ + "memberships", + "filters" + ], + "short_name": "CollisionGroups", + "title": "bevy_rapier3d::geometry::collider::CollisionGroups", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::geometry::collider::ContactForceEventThreshold": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "ContactForceEventThreshold", + "title": "bevy_rapier3d::geometry::collider::ContactForceEventThreshold", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_rapier3d::geometry::collider::Friction": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "coefficient": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "combine_rule": { + "type": { + "$ref": "#/$defs/bevy_rapier3d::dynamics::CoefficientCombineRule" + } + } + }, + "required": [ + "coefficient", + "combine_rule" + ], + "short_name": "Friction", + "title": "bevy_rapier3d::geometry::collider::Friction", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::geometry::collider::Group": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u32" + } + } + ], + "short_name": "Group", + "title": "bevy_rapier3d::geometry::collider::Group", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_rapier3d::geometry::collider::Restitution": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "coefficient": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "combine_rule": { + "type": { + "$ref": "#/$defs/bevy_rapier3d::dynamics::CoefficientCombineRule" + } + } + }, + "required": [ + "coefficient", + "combine_rule" + ], + "short_name": "Restitution", + "title": "bevy_rapier3d::geometry::collider::Restitution", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::geometry::collider::Sensor": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "Sensor", + "title": "bevy_rapier3d::geometry::collider::Sensor", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::geometry::collider::SolverGroups": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "filters": { + "type": { + "$ref": "#/$defs/bevy_rapier3d::geometry::collider::Group" + } + }, + "memberships": { + "type": { + "$ref": "#/$defs/bevy_rapier3d::geometry::collider::Group" + } + } + }, + "required": [ + "memberships", + "filters" + ], + "short_name": "SolverGroups", + "title": "bevy_rapier3d::geometry::collider::SolverGroups", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_rapier3d::render::DebugRenderContext": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "properties": { + "enabled": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "enabled" + ], + "short_name": "DebugRenderContext", + "title": "bevy_rapier3d::render::DebugRenderContext", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::camera::camera::Camera": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "hdr": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "is_active": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "msaa_writeback": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "order": { + "type": { + "$ref": "#/$defs/isize" + } + }, + "viewport": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + } + }, + "required": [ + "order", + "is_active", + "hdr", + "msaa_writeback" + ], + "short_name": "Camera", + "title": "bevy_render::camera::camera::Camera", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::camera::camera::CameraRenderGraph": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::borrow::Cow" + } + } + ], + "short_name": "CameraRenderGraph", + "title": "bevy_render::camera::camera::CameraRenderGraph", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_render::camera::camera::RenderTarget": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_window::window::WindowRef" + } + } + ], + "short_name": "Window", + "title": "Window", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + } + ], + "short_name": "Image", + "title": "Image", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_render::camera::manual_texture_view::ManualTextureViewHandle" + } + } + ], + "short_name": "TextureView", + "title": "TextureView", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "RenderTarget", + "title": "bevy_render::camera::camera::RenderTarget", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_render::camera::camera::Viewport": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "depth": { + "type": { + "$ref": "#/$defs/core::ops::Range" + } + }, + "physical_position": { + "type": { + "$ref": "#/$defs/glam::UVec2" + } + }, + "physical_size": { + "type": { + "$ref": "#/$defs/glam::UVec2" + } + } + }, + "required": [ + "physical_position", + "physical_size", + "depth" + ], + "short_name": "Viewport", + "title": "bevy_render::camera::camera::Viewport", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::camera::projection::OrthographicProjection": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "area": { + "type": { + "$ref": "#/$defs/bevy_math::Rect" + } + }, + "far": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "near": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "scale": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "scaling_mode": { + "type": { + "$ref": "#/$defs/bevy_render::camera::projection::ScalingMode" + } + }, + "viewport_origin": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "near", + "far", + "viewport_origin", + "scaling_mode", + "scale", + "area" + ], + "short_name": "OrthographicProjection", + "title": "bevy_render::camera::projection::OrthographicProjection", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::camera::projection::PerspectiveProjection": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "aspect_ratio": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "far": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "fov": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "near": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "fov", + "aspect_ratio", + "near", + "far" + ], + "short_name": "PerspectiveProjection", + "title": "bevy_render::camera::projection::PerspectiveProjection", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::camera::projection::Projection": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_render::camera::projection::PerspectiveProjection" + } + } + ], + "short_name": "Perspective", + "title": "Perspective", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_render::camera::projection::OrthographicProjection" + } + } + ], + "short_name": "Orthographic", + "title": "Orthographic", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Projection", + "title": "bevy_render::camera::projection::Projection", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_render::camera::projection::ScalingMode": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "height": { + "title": "height", + "type": { + "$ref": "#/$defs/f32" + } + }, + "width": { + "title": "width", + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "width", + "height" + ], + "short_name": "Fixed", + "title": "Fixed", + "type": "object", + "typeInfo": "Struct" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "WindowSize", + "title": "WindowSize", + "type": "array", + "typeInfo": "Tuple" + }, + { + "additionalProperties": false, + "properties": { + "min_height": { + "title": "min_height", + "type": { + "$ref": "#/$defs/f32" + } + }, + "min_width": { + "title": "min_width", + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "min_width", + "min_height" + ], + "short_name": "AutoMin", + "title": "AutoMin", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "max_height": { + "title": "max_height", + "type": { + "$ref": "#/$defs/f32" + } + }, + "max_width": { + "title": "max_width", + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "max_width", + "max_height" + ], + "short_name": "AutoMax", + "title": "AutoMax", + "type": "object", + "typeInfo": "Struct" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "FixedVertical", + "title": "FixedVertical", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "FixedHorizontal", + "title": "FixedHorizontal", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "ScalingMode", + "title": "bevy_render::camera::projection::ScalingMode", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_render::color::Color": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "alpha": { + "title": "alpha", + "type": { + "$ref": "#/$defs/f32" + } + }, + "blue": { + "title": "blue", + "type": { + "$ref": "#/$defs/f32" + } + }, + "green": { + "title": "green", + "type": { + "$ref": "#/$defs/f32" + } + }, + "red": { + "title": "red", + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "red", + "green", + "blue", + "alpha" + ], + "short_name": "Rgba", + "title": "Rgba", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "alpha": { + "title": "alpha", + "type": { + "$ref": "#/$defs/f32" + } + }, + "blue": { + "title": "blue", + "type": { + "$ref": "#/$defs/f32" + } + }, + "green": { + "title": "green", + "type": { + "$ref": "#/$defs/f32" + } + }, + "red": { + "title": "red", + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "red", + "green", + "blue", + "alpha" + ], + "short_name": "RgbaLinear", + "title": "RgbaLinear", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "alpha": { + "title": "alpha", + "type": { + "$ref": "#/$defs/f32" + } + }, + "hue": { + "title": "hue", + "type": { + "$ref": "#/$defs/f32" + } + }, + "lightness": { + "title": "lightness", + "type": { + "$ref": "#/$defs/f32" + } + }, + "saturation": { + "title": "saturation", + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "hue", + "saturation", + "lightness", + "alpha" + ], + "short_name": "Hsla", + "title": "Hsla", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "alpha": { + "title": "alpha", + "type": { + "$ref": "#/$defs/f32" + } + }, + "chroma": { + "title": "chroma", + "type": { + "$ref": "#/$defs/f32" + } + }, + "hue": { + "title": "hue", + "type": { + "$ref": "#/$defs/f32" + } + }, + "lightness": { + "title": "lightness", + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "lightness", + "chroma", + "hue", + "alpha" + ], + "short_name": "Lcha", + "title": "Lcha", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "Color", + "title": "bevy_render::color::Color", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_render::globals::GlobalsUniform": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "properties": { + "delta_time": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "frame_count": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "time": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "time", + "delta_time", + "frame_count" + ], + "short_name": "GlobalsUniform", + "title": "bevy_render::globals::GlobalsUniform", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::mesh::mesh::Indices": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + ], + "short_name": "U16", + "title": "U16", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + ], + "short_name": "U32", + "title": "U32", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Indices", + "title": "bevy_render::mesh::mesh::Indices", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_render::mesh::mesh::Mesh": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "indices": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "morph_target_names": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + }, + "morph_targets": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + } + }, + "required": [], + "short_name": "Mesh", + "title": "bevy_render::mesh::mesh::Mesh", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::mesh::mesh::skinning::SkinnedMesh": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "inverse_bindposes": { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + }, + "joints": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + }, + "required": [ + "inverse_bindposes", + "joints" + ], + "short_name": "SkinnedMesh", + "title": "bevy_render::mesh::mesh::skinning::SkinnedMesh", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::mesh::morph::MeshMorphWeights": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "weights": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + }, + "required": [ + "weights" + ], + "short_name": "MeshMorphWeights", + "title": "bevy_render::mesh::morph::MeshMorphWeights", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::mesh::morph::MorphWeights": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "first_mesh": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + }, + "weights": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + }, + "required": [ + "weights" + ], + "short_name": "MorphWeights", + "title": "bevy_render::mesh::morph::MorphWeights", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::primitives::Aabb": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "center": { + "type": { + "$ref": "#/$defs/glam::Vec3A" + } + }, + "half_extents": { + "type": { + "$ref": "#/$defs/glam::Vec3A" + } + } + }, + "required": [ + "center", + "half_extents" + ], + "short_name": "Aabb", + "title": "bevy_render::primitives::Aabb", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::primitives::CascadesFrusta": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "CascadesFrusta", + "title": "bevy_render::primitives::CascadesFrusta", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::primitives::CubemapFrusta": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "CubemapFrusta", + "title": "bevy_render::primitives::CubemapFrusta", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::primitives::Frustum": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "Frustum", + "title": "bevy_render::primitives::Frustum", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::texture::image::Image": { + "isComponent": false, + "isResource": false, + "short_name": "Image", + "title": "bevy_render::texture::image::Image", + "type": "object", + "typeInfo": "Value" + }, + "bevy_render::view::ColorGrading": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "exposure": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "gamma": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "post_saturation": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "pre_saturation": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "exposure", + "gamma", + "pre_saturation", + "post_saturation" + ], + "short_name": "ColorGrading", + "title": "bevy_render::view::ColorGrading", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::view::Msaa": { + "isComponent": false, + "isResource": true, + "oneOf": [ + "Off", + "Sample2", + "Sample4", + "Sample8" + ], + "short_name": "Msaa", + "title": "bevy_render::view::Msaa", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_render::view::visibility::InheritedVisibility": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bool" + } + } + ], + "short_name": "InheritedVisibility", + "title": "bevy_render::view::visibility::InheritedVisibility", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_render::view::visibility::NoFrustumCulling": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "NoFrustumCulling", + "title": "bevy_render::view::visibility::NoFrustumCulling", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::view::visibility::ViewVisibility": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bool" + } + } + ], + "short_name": "ViewVisibility", + "title": "bevy_render::view::visibility::ViewVisibility", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_render::view::visibility::Visibility": { + "isComponent": true, + "isResource": false, + "oneOf": [ + "Inherited", + "Hidden", + "Visible" + ], + "short_name": "Visibility", + "title": "bevy_render::view::visibility::Visibility", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_render::view::visibility::VisibleEntities": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "VisibleEntities", + "title": "bevy_render::view::visibility::VisibleEntities", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_render::view::visibility::render_layers::RenderLayers": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/u32" + } + } + ], + "short_name": "RenderLayers", + "title": "bevy_render::view::visibility::render_layers::RenderLayers", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_sprite::mesh2d::color_material::ColorMaterial": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "texture": { + "type": { + "$ref": "#/$defs/core::option::Option>" + } + } + }, + "required": [ + "color" + ], + "short_name": "ColorMaterial", + "title": "bevy_sprite::mesh2d::color_material::ColorMaterial", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_sprite::mesh2d::mesh::Mesh2dHandle": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + } + ], + "short_name": "Mesh2dHandle", + "title": "bevy_sprite::mesh2d::mesh::Mesh2dHandle", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_sprite::sprite::Anchor": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "Center" + }, + { + "title": "BottomLeft" + }, + { + "title": "BottomCenter" + }, + { + "title": "BottomRight" + }, + { + "title": "CenterLeft" + }, + { + "title": "CenterRight" + }, + { + "title": "TopLeft" + }, + { + "title": "TopCenter" + }, + { + "title": "TopRight" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + ], + "short_name": "Custom", + "title": "Custom", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Anchor", + "title": "bevy_sprite::sprite::Anchor", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_sprite::sprite::Sprite": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "anchor": { + "type": { + "$ref": "#/$defs/bevy_sprite::sprite::Anchor" + } + }, + "color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "custom_size": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "flip_x": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "flip_y": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "rect": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + } + }, + "required": [ + "color", + "flip_x", + "flip_y", + "anchor" + ], + "short_name": "Sprite", + "title": "bevy_sprite::sprite::Sprite", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_sprite::texture_atlas::TextureAtlas": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "size": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + }, + "texture": { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + }, + "texture_handles": { + "type": { + "$ref": "#/$defs/core::option::Option, usize, bevy_utils::hashbrown::hash_map::DefaultHashBuilder>>" + } + }, + "textures": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + }, + "required": [ + "texture", + "size", + "textures" + ], + "short_name": "TextureAtlas", + "title": "bevy_sprite::texture_atlas::TextureAtlas", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_sprite::texture_atlas::TextureAtlasSprite": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "anchor": { + "type": { + "$ref": "#/$defs/bevy_sprite::sprite::Anchor" + } + }, + "color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "custom_size": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "flip_x": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "flip_y": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "index": { + "type": { + "$ref": "#/$defs/usize" + } + } + }, + "required": [ + "color", + "index", + "flip_x", + "flip_y", + "anchor" + ], + "short_name": "TextureAtlasSprite", + "title": "bevy_sprite::texture_atlas::TextureAtlasSprite", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_text::pipeline::TextLayoutInfo": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "glyphs": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + }, + "logical_size": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "glyphs", + "logical_size" + ], + "short_name": "TextLayoutInfo", + "title": "bevy_text::pipeline::TextLayoutInfo", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_text::text2d::Text2dBounds": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "size": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "size" + ], + "short_name": "Text2dBounds", + "title": "bevy_text::text2d::Text2dBounds", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_text::text::BreakLineOn": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "WordBoundary", + "AnyCharacter", + "NoWrap" + ], + "short_name": "BreakLineOn", + "title": "bevy_text::text::BreakLineOn", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_text::text::Text": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "alignment": { + "type": { + "$ref": "#/$defs/bevy_text::text::TextAlignment" + } + }, + "linebreak_behavior": { + "type": { + "$ref": "#/$defs/bevy_text::text::BreakLineOn" + } + }, + "sections": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + }, + "required": [ + "sections", + "alignment", + "linebreak_behavior" + ], + "short_name": "Text", + "title": "bevy_text::text::Text", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_text::text::TextAlignment": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Left", + "Center", + "Right" + ], + "short_name": "TextAlignment", + "title": "bevy_text::text::TextAlignment", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_text::text::TextSection": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "style": { + "type": { + "$ref": "#/$defs/bevy_text::text::TextStyle" + } + }, + "value": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + }, + "required": [ + "value", + "style" + ], + "short_name": "TextSection", + "title": "bevy_text::text::TextSection", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_text::text::TextStyle": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "font": { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + }, + "font_size": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "font", + "font_size", + "color" + ], + "short_name": "TextStyle", + "title": "bevy_text::text::TextStyle", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_time::stopwatch::Stopwatch": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "elapsed": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "paused": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "elapsed", + "paused" + ], + "short_name": "Stopwatch", + "title": "bevy_time::stopwatch::Stopwatch", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_time::time::Time<()>": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "properties": { + "context": { + "type": { + "$ref": "#/$defs/()" + } + }, + "delta": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "delta_seconds": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "delta_seconds_f64": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "elapsed": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "elapsed_seconds": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "elapsed_seconds_f64": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "elapsed_seconds_wrapped": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "elapsed_seconds_wrapped_f64": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "elapsed_wrapped": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "wrap_period": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + } + }, + "required": [ + "context", + "wrap_period", + "delta", + "delta_seconds", + "delta_seconds_f64", + "elapsed", + "elapsed_seconds", + "elapsed_seconds_f64", + "elapsed_wrapped", + "elapsed_seconds_wrapped", + "elapsed_seconds_wrapped_f64" + ], + "short_name": "Time<()>", + "title": "bevy_time::time::Time<()>", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_time::time::Time": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "properties": { + "context": { + "type": { + "$ref": "#/$defs/bevy_time::fixed::Fixed" + } + }, + "delta": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "delta_seconds": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "delta_seconds_f64": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "elapsed": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "elapsed_seconds": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "elapsed_seconds_f64": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "elapsed_seconds_wrapped": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "elapsed_seconds_wrapped_f64": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "elapsed_wrapped": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "wrap_period": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + } + }, + "required": [ + "context", + "wrap_period", + "delta", + "delta_seconds", + "delta_seconds_f64", + "elapsed", + "elapsed_seconds", + "elapsed_seconds_f64", + "elapsed_wrapped", + "elapsed_seconds_wrapped", + "elapsed_seconds_wrapped_f64" + ], + "short_name": "Time", + "title": "bevy_time::time::Time", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_time::time::Time": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "properties": { + "context": { + "type": { + "$ref": "#/$defs/bevy_time::real::Real" + } + }, + "delta": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "delta_seconds": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "delta_seconds_f64": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "elapsed": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "elapsed_seconds": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "elapsed_seconds_f64": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "elapsed_seconds_wrapped": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "elapsed_seconds_wrapped_f64": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "elapsed_wrapped": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "wrap_period": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + } + }, + "required": [ + "context", + "wrap_period", + "delta", + "delta_seconds", + "delta_seconds_f64", + "elapsed", + "elapsed_seconds", + "elapsed_seconds_f64", + "elapsed_wrapped", + "elapsed_seconds_wrapped", + "elapsed_seconds_wrapped_f64" + ], + "short_name": "Time", + "title": "bevy_time::time::Time", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_time::time::Time": { + "additionalProperties": false, + "isComponent": false, + "isResource": true, + "properties": { + "context": { + "type": { + "$ref": "#/$defs/bevy_time::virt::Virtual" + } + }, + "delta": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "delta_seconds": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "delta_seconds_f64": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "elapsed": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "elapsed_seconds": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "elapsed_seconds_f64": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "elapsed_seconds_wrapped": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "elapsed_seconds_wrapped_f64": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "elapsed_wrapped": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "wrap_period": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + } + }, + "required": [ + "context", + "wrap_period", + "delta", + "delta_seconds", + "delta_seconds_f64", + "elapsed", + "elapsed_seconds", + "elapsed_seconds_f64", + "elapsed_wrapped", + "elapsed_seconds_wrapped", + "elapsed_seconds_wrapped_f64" + ], + "short_name": "Time", + "title": "bevy_time::time::Time", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_time::timer::Timer": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "duration": { + "type": { + "$ref": "#/$defs/bevy_utils::Duration" + } + }, + "finished": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "mode": { + "type": { + "$ref": "#/$defs/bevy_time::timer::TimerMode" + } + }, + "stopwatch": { + "type": { + "$ref": "#/$defs/bevy_time::stopwatch::Stopwatch" + } + }, + "times_finished_this_tick": { + "type": { + "$ref": "#/$defs/u32" + } + } + }, + "required": [ + "stopwatch", + "duration", + "mode", + "finished", + "times_finished_this_tick" + ], + "short_name": "Timer", + "title": "bevy_time::timer::Timer", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_transform::components::global_transform::GlobalTransform": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::Affine3A" + } + } + ], + "short_name": "GlobalTransform", + "title": "bevy_transform::components::global_transform::GlobalTransform", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_transform::components::transform::Transform": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "rotation": { + "type": { + "$ref": "#/$defs/glam::Quat" + } + }, + "scale": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + "translation": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + } + }, + "required": [ + "translation", + "rotation", + "scale" + ], + "short_name": "Transform", + "title": "bevy_transform::components::transform::Transform", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::UiScale": { + "isComponent": false, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f64" + } + } + ], + "short_name": "UiScale", + "title": "bevy_ui::UiScale", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_ui::camera_config::UiCameraConfig": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "show_ui": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "show_ui" + ], + "short_name": "UiCameraConfig", + "title": "bevy_ui::camera_config::UiCameraConfig", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::focus::FocusPolicy": { + "isComponent": true, + "isResource": false, + "oneOf": [ + "Block", + "Pass" + ], + "short_name": "FocusPolicy", + "title": "bevy_ui::focus::FocusPolicy", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::focus::Interaction": { + "isComponent": true, + "isResource": false, + "oneOf": [ + "Pressed", + "Hovered", + "None" + ], + "short_name": "Interaction", + "title": "bevy_ui::focus::Interaction", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::focus::RelativeCursorPosition": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "normalized": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "normalized_visible_node_rect": { + "type": { + "$ref": "#/$defs/bevy_math::Rect" + } + } + }, + "required": [ + "normalized_visible_node_rect" + ], + "short_name": "RelativeCursorPosition", + "title": "bevy_ui::focus::RelativeCursorPosition", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::geometry::UiRect": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "bottom": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "left": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "right": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "top": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + } + }, + "required": [ + "left", + "right", + "top", + "bottom" + ], + "short_name": "UiRect", + "title": "bevy_ui::geometry::UiRect", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::geometry::Val": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "Auto" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Px", + "title": "Px", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Percent", + "title": "Percent", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Vw", + "title": "Vw", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Vh", + "title": "Vh", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "VMin", + "title": "VMin", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "VMax", + "title": "VMax", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Val", + "title": "bevy_ui::geometry::Val", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_ui::measurement::ContentSize": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "ContentSize", + "title": "bevy_ui::measurement::ContentSize", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::AlignContent": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Default", + "Start", + "End", + "FlexStart", + "FlexEnd", + "Center", + "Stretch", + "SpaceBetween", + "SpaceEvenly", + "SpaceAround" + ], + "short_name": "AlignContent", + "title": "bevy_ui::ui_node::AlignContent", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::AlignItems": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Default", + "Start", + "End", + "FlexStart", + "FlexEnd", + "Center", + "Baseline", + "Stretch" + ], + "short_name": "AlignItems", + "title": "bevy_ui::ui_node::AlignItems", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::AlignSelf": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Auto", + "Start", + "End", + "FlexStart", + "FlexEnd", + "Center", + "Baseline", + "Stretch" + ], + "short_name": "AlignSelf", + "title": "bevy_ui::ui_node::AlignSelf", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::BackgroundColor": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + } + ], + "short_name": "BackgroundColor", + "title": "bevy_ui::ui_node::BackgroundColor", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_ui::ui_node::BorderColor": { + "isComponent": true, + "isResource": false, + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + } + ], + "short_name": "BorderColor", + "title": "bevy_ui::ui_node::BorderColor", + "type": "array", + "typeInfo": "TupleStruct" + }, + "bevy_ui::ui_node::CalculatedClip": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "clip": { + "type": { + "$ref": "#/$defs/bevy_math::Rect" + } + } + }, + "required": [ + "clip" + ], + "short_name": "CalculatedClip", + "title": "bevy_ui::ui_node::CalculatedClip", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::Direction": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Inherit", + "LeftToRight", + "RightToLeft" + ], + "short_name": "Direction", + "title": "bevy_ui::ui_node::Direction", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::Display": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Flex", + "Grid", + "None" + ], + "short_name": "Display", + "title": "bevy_ui::ui_node::Display", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::FlexDirection": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Row", + "Column", + "RowReverse", + "ColumnReverse" + ], + "short_name": "FlexDirection", + "title": "bevy_ui::ui_node::FlexDirection", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::FlexWrap": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "NoWrap", + "Wrap", + "WrapReverse" + ], + "short_name": "FlexWrap", + "title": "bevy_ui::ui_node::FlexWrap", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::GridAutoFlow": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Row", + "Column", + "RowDense", + "ColumnDense" + ], + "short_name": "GridAutoFlow", + "title": "bevy_ui::ui_node::GridAutoFlow", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::GridPlacement": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "end": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "span": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "start": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + } + }, + "required": [], + "short_name": "GridPlacement", + "title": "bevy_ui::ui_node::GridPlacement", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::GridTrack": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "max_sizing_function": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::MaxTrackSizingFunction" + } + }, + "min_sizing_function": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::MinTrackSizingFunction" + } + } + }, + "required": [ + "min_sizing_function", + "max_sizing_function" + ], + "short_name": "GridTrack", + "title": "bevy_ui::ui_node::GridTrack", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::JustifyContent": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Default", + "Start", + "End", + "FlexStart", + "FlexEnd", + "Center", + "Stretch", + "SpaceBetween", + "SpaceEvenly", + "SpaceAround" + ], + "short_name": "JustifyContent", + "title": "bevy_ui::ui_node::JustifyContent", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::JustifyItems": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Default", + "Start", + "End", + "Center", + "Baseline", + "Stretch" + ], + "short_name": "JustifyItems", + "title": "bevy_ui::ui_node::JustifyItems", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::JustifySelf": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Auto", + "Start", + "End", + "Center", + "Baseline", + "Stretch" + ], + "short_name": "JustifySelf", + "title": "bevy_ui::ui_node::JustifySelf", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::Node": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "calculated_size": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + }, + "outline_offset": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "outline_width": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "stack_index": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "unrounded_size": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "stack_index", + "calculated_size", + "outline_width", + "outline_offset", + "unrounded_size" + ], + "short_name": "Node", + "title": "bevy_ui::ui_node::Node", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::Outline": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "color": { + "type": { + "$ref": "#/$defs/bevy_render::color::Color" + } + }, + "offset": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "width": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + } + }, + "required": [ + "width", + "offset", + "color" + ], + "short_name": "Outline", + "title": "bevy_ui::ui_node::Outline", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::Overflow": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::OverflowAxis" + } + }, + "y": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::OverflowAxis" + } + } + }, + "required": [ + "x", + "y" + ], + "short_name": "Overflow", + "title": "bevy_ui::ui_node::Overflow", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::OverflowAxis": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Visible", + "Clip" + ], + "short_name": "OverflowAxis", + "title": "bevy_ui::ui_node::OverflowAxis", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::PositionType": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Relative", + "Absolute" + ], + "short_name": "PositionType", + "title": "bevy_ui::ui_node::PositionType", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_ui::ui_node::RepeatedGridTrack": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "repetition": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::GridTrackRepetition" + } + }, + "tracks": { + "type": { + "$ref": "#/$defs/smallvec::SmallVec<[bevy_ui::ui_node::GridTrack; 1]>" + } + } + }, + "required": [ + "repetition", + "tracks" + ], + "short_name": "RepeatedGridTrack", + "title": "bevy_ui::ui_node::RepeatedGridTrack", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::Style": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "align_content": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::AlignContent" + } + }, + "align_items": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::AlignItems" + } + }, + "align_self": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::AlignSelf" + } + }, + "aspect_ratio": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "border": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::UiRect" + } + }, + "bottom": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "column_gap": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "direction": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::Direction" + } + }, + "display": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::Display" + } + }, + "flex_basis": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "flex_direction": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::FlexDirection" + } + }, + "flex_grow": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "flex_shrink": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "flex_wrap": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::FlexWrap" + } + }, + "grid_auto_columns": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + }, + "grid_auto_flow": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::GridAutoFlow" + } + }, + "grid_auto_rows": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + }, + "grid_column": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::GridPlacement" + } + }, + "grid_row": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::GridPlacement" + } + }, + "grid_template_columns": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + }, + "grid_template_rows": { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + }, + "height": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "justify_content": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::JustifyContent" + } + }, + "justify_items": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::JustifyItems" + } + }, + "justify_self": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::JustifySelf" + } + }, + "left": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "margin": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::UiRect" + } + }, + "max_height": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "max_width": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "min_height": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "min_width": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "overflow": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::Overflow" + } + }, + "padding": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::UiRect" + } + }, + "position_type": { + "type": { + "$ref": "#/$defs/bevy_ui::ui_node::PositionType" + } + }, + "right": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "row_gap": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "top": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + }, + "width": { + "type": { + "$ref": "#/$defs/bevy_ui::geometry::Val" + } + } + }, + "required": [ + "display", + "position_type", + "overflow", + "direction", + "left", + "right", + "top", + "bottom", + "width", + "height", + "min_width", + "min_height", + "max_width", + "max_height", + "align_items", + "justify_items", + "align_self", + "justify_self", + "align_content", + "justify_content", + "margin", + "padding", + "border", + "flex_direction", + "flex_wrap", + "flex_grow", + "flex_shrink", + "flex_basis", + "row_gap", + "column_gap", + "grid_auto_flow", + "grid_template_rows", + "grid_template_columns", + "grid_auto_rows", + "grid_auto_columns", + "grid_row", + "grid_column" + ], + "short_name": "Style", + "title": "bevy_ui::ui_node::Style", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::UiImage": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "flip_x": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "flip_y": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "texture": { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + } + }, + "required": [ + "texture", + "flip_x", + "flip_y" + ], + "short_name": "UiImage", + "title": "bevy_ui::ui_node::UiImage", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::UiTextureAtlasImage": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "flip_x": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "flip_y": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "index": { + "type": { + "$ref": "#/$defs/usize" + } + } + }, + "required": [ + "index", + "flip_x", + "flip_y" + ], + "short_name": "UiTextureAtlasImage", + "title": "bevy_ui::ui_node::UiTextureAtlasImage", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::ui_node::ZIndex": { + "isComponent": true, + "isResource": false, + "oneOf": [ + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/i32" + } + } + ], + "short_name": "Local", + "title": "Local", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/i32" + } + } + ], + "short_name": "Global", + "title": "Global", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "ZIndex", + "title": "bevy_ui::ui_node::ZIndex", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_ui::widget::button::Button": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "Button", + "title": "bevy_ui::widget::button::Button", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::widget::image::UiImageSize": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "size": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "size" + ], + "short_name": "UiImageSize", + "title": "bevy_ui::widget::image::UiImageSize", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::widget::label::Label": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "Label", + "title": "bevy_ui::widget::label::Label", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_ui::widget::text::TextFlags": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "needs_new_measure_func": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "needs_recompute": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "needs_new_measure_func", + "needs_recompute" + ], + "short_name": "TextFlags", + "title": "bevy_ui::widget::text::TextFlags", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_utils::Duration": { + "isComponent": false, + "isResource": false, + "short_name": "Duration", + "title": "bevy_utils::Duration", + "type": "object", + "typeInfo": "Value" + }, + "bevy_utils::HashSet": { + "isComponent": false, + "isResource": false, + "short_name": "HashSet", + "title": "bevy_utils::HashSet", + "type": "object", + "typeInfo": "Value" + }, + "bevy_utils::Instant": { + "isComponent": false, + "isResource": false, + "short_name": "Instant", + "title": "bevy_utils::Instant", + "type": "object", + "typeInfo": "Value" + }, + "bevy_utils::Uuid": { + "isComponent": false, + "isResource": false, + "short_name": "Uuid", + "title": "bevy_utils::Uuid", + "type": "object", + "typeInfo": "Value" + }, + "bevy_window::cursor::CursorIcon": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Default", + "Crosshair", + "Hand", + "Arrow", + "Move", + "Text", + "Wait", + "Help", + "Progress", + "NotAllowed", + "ContextMenu", + "Cell", + "VerticalText", + "Alias", + "Copy", + "NoDrop", + "Grab", + "Grabbing", + "AllScroll", + "ZoomIn", + "ZoomOut", + "EResize", + "NResize", + "NeResize", + "NwResize", + "SResize", + "SeResize", + "SwResize", + "WResize", + "EwResize", + "NsResize", + "NeswResize", + "NwseResize", + "ColResize", + "RowResize" + ], + "short_name": "CursorIcon", + "title": "bevy_window::cursor::CursorIcon", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_window::event::ApplicationLifetime": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Started", + "Suspended", + "Resumed" + ], + "short_name": "ApplicationLifetime", + "title": "bevy_window::event::ApplicationLifetime", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_window::event::CursorEntered": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window" + ], + "short_name": "CursorEntered", + "title": "bevy_window::event::CursorEntered", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::CursorLeft": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window" + ], + "short_name": "CursorLeft", + "title": "bevy_window::event::CursorLeft", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::CursorMoved": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "position": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window", + "position" + ], + "short_name": "CursorMoved", + "title": "bevy_window::event::CursorMoved", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::FileDragAndDrop": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "additionalProperties": false, + "properties": { + "path_buf": { + "title": "path_buf", + "type": { + "$ref": "#/$defs/std::path::PathBuf" + } + }, + "window": { + "title": "window", + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window", + "path_buf" + ], + "short_name": "DroppedFile", + "title": "DroppedFile", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "path_buf": { + "title": "path_buf", + "type": { + "$ref": "#/$defs/std::path::PathBuf" + } + }, + "window": { + "title": "window", + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window", + "path_buf" + ], + "short_name": "HoveredFile", + "title": "HoveredFile", + "type": "object", + "typeInfo": "Struct" + }, + { + "additionalProperties": false, + "properties": { + "window": { + "title": "window", + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window" + ], + "short_name": "HoveredFileCanceled", + "title": "HoveredFileCanceled", + "type": "object", + "typeInfo": "Struct" + } + ], + "short_name": "FileDragAndDrop", + "title": "bevy_window::event::FileDragAndDrop", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_window::event::ReceivedCharacter": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "char": { + "type": { + "$ref": "#/$defs/char" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window", + "char" + ], + "short_name": "ReceivedCharacter", + "title": "bevy_window::event::ReceivedCharacter", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::RequestRedraw": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "RequestRedraw", + "title": "bevy_window::event::RequestRedraw", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowBackendScaleFactorChanged": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "scale_factor": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window", + "scale_factor" + ], + "short_name": "WindowBackendScaleFactorChanged", + "title": "bevy_window::event::WindowBackendScaleFactorChanged", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowCloseRequested": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window" + ], + "short_name": "WindowCloseRequested", + "title": "bevy_window::event::WindowCloseRequested", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowClosed": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window" + ], + "short_name": "WindowClosed", + "title": "bevy_window::event::WindowClosed", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowCreated": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window" + ], + "short_name": "WindowCreated", + "title": "bevy_window::event::WindowCreated", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowFocused": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "focused": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window", + "focused" + ], + "short_name": "WindowFocused", + "title": "bevy_window::event::WindowFocused", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowMoved": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "entity": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + }, + "position": { + "type": { + "$ref": "#/$defs/glam::IVec2" + } + } + }, + "required": [ + "entity", + "position" + ], + "short_name": "WindowMoved", + "title": "bevy_window::event::WindowMoved", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowResized": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "height": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "width": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window", + "width", + "height" + ], + "short_name": "WindowResized", + "title": "bevy_window::event::WindowResized", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowScaleFactorChanged": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "scale_factor": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window", + "scale_factor" + ], + "short_name": "WindowScaleFactorChanged", + "title": "bevy_window::event::WindowScaleFactorChanged", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::event::WindowThemeChanged": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "theme": { + "type": { + "$ref": "#/$defs/bevy_window::window::WindowTheme" + } + }, + "window": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + } + }, + "required": [ + "window", + "theme" + ], + "short_name": "WindowThemeChanged", + "title": "bevy_window::event::WindowThemeChanged", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::window::CompositeAlphaMode": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Auto", + "Opaque", + "PreMultiplied", + "PostMultiplied", + "Inherit" + ], + "short_name": "CompositeAlphaMode", + "title": "bevy_window::window::CompositeAlphaMode", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_window::window::Cursor": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "grab_mode": { + "type": { + "$ref": "#/$defs/bevy_window::window::CursorGrabMode" + } + }, + "hit_test": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "icon": { + "type": { + "$ref": "#/$defs/bevy_window::cursor::CursorIcon" + } + }, + "visible": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "icon", + "visible", + "grab_mode", + "hit_test" + ], + "short_name": "Cursor", + "title": "bevy_window::window::Cursor", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::window::CursorGrabMode": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "None", + "Confined", + "Locked" + ], + "short_name": "CursorGrabMode", + "title": "bevy_window::window::CursorGrabMode", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_window::window::EnabledButtons": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "close": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "maximize": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "minimize": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "minimize", + "maximize", + "close" + ], + "short_name": "EnabledButtons", + "title": "bevy_window::window::EnabledButtons", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::window::InternalWindowState": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "maximize_request": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "minimize_request": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "physical_cursor_position": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + } + }, + "required": [], + "short_name": "InternalWindowState", + "title": "bevy_window::window::InternalWindowState", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::window::MonitorSelection": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "Current" + }, + { + "title": "Primary" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/usize" + } + } + ], + "short_name": "Index", + "title": "Index", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "MonitorSelection", + "title": "bevy_window::window::MonitorSelection", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_window::window::PresentMode": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "AutoVsync", + "AutoNoVsync", + "Fifo", + "FifoRelaxed", + "Immediate", + "Mailbox" + ], + "short_name": "PresentMode", + "title": "bevy_window::window::PresentMode", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_window::window::PrimaryWindow": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": {}, + "required": [], + "short_name": "PrimaryWindow", + "title": "bevy_window::window::PrimaryWindow", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::window::Window": { + "additionalProperties": false, + "isComponent": true, + "isResource": false, + "properties": { + "canvas": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + }, + "composite_alpha_mode": { + "type": { + "$ref": "#/$defs/bevy_window::window::CompositeAlphaMode" + } + }, + "cursor": { + "type": { + "$ref": "#/$defs/bevy_window::window::Cursor" + } + }, + "decorations": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "enabled_buttons": { + "type": { + "$ref": "#/$defs/bevy_window::window::EnabledButtons" + } + }, + "fit_canvas_to_parent": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "focused": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "ime_enabled": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "ime_position": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + }, + "internal": { + "type": { + "$ref": "#/$defs/bevy_window::window::InternalWindowState" + } + }, + "mode": { + "type": { + "$ref": "#/$defs/bevy_window::window::WindowMode" + } + }, + "position": { + "type": { + "$ref": "#/$defs/bevy_window::window::WindowPosition" + } + }, + "present_mode": { + "type": { + "$ref": "#/$defs/bevy_window::window::PresentMode" + } + }, + "prevent_default_event_handling": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "resizable": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "resize_constraints": { + "type": { + "$ref": "#/$defs/bevy_window::window::WindowResizeConstraints" + } + }, + "resolution": { + "type": { + "$ref": "#/$defs/bevy_window::window::WindowResolution" + } + }, + "title": { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + }, + "transparent": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "visible": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "window_level": { + "type": { + "$ref": "#/$defs/bevy_window::window::WindowLevel" + } + }, + "window_theme": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + } + }, + "required": [ + "cursor", + "present_mode", + "mode", + "position", + "resolution", + "title", + "composite_alpha_mode", + "resize_constraints", + "resizable", + "enabled_buttons", + "decorations", + "transparent", + "focused", + "window_level", + "fit_canvas_to_parent", + "prevent_default_event_handling", + "internal", + "ime_enabled", + "ime_position", + "visible" + ], + "short_name": "Window", + "title": "bevy_window::window::Window", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::window::WindowLevel": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "AlwaysOnBottom", + "Normal", + "AlwaysOnTop" + ], + "short_name": "WindowLevel", + "title": "bevy_window::window::WindowLevel", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_window::window::WindowMode": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Windowed", + "BorderlessFullscreen", + "SizedFullscreen", + "Fullscreen" + ], + "short_name": "WindowMode", + "title": "bevy_window::window::WindowMode", + "type": "string", + "typeInfo": "Enum" + }, + "bevy_window::window::WindowPosition": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "Automatic" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_window::window::MonitorSelection" + } + } + ], + "short_name": "Centered", + "title": "Centered", + "type": "array", + "typeInfo": "Tuple" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::IVec2" + } + } + ], + "short_name": "At", + "title": "At", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "WindowPosition", + "title": "bevy_window::window::WindowPosition", + "type": "object", + "typeInfo": "Enum" + }, + "bevy_window::window::WindowResizeConstraints": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "max_height": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "max_width": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "min_height": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "min_width": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "min_width", + "min_height", + "max_width", + "max_height" + ], + "short_name": "WindowResizeConstraints", + "title": "bevy_window::window::WindowResizeConstraints", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::window::WindowResolution": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "physical_height": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "physical_width": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "scale_factor": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "scale_factor_override": { + "type": { + "$ref": "#/$defs/core::option::Option" + } + } + }, + "required": [ + "physical_width", + "physical_height", + "scale_factor" + ], + "short_name": "WindowResolution", + "title": "bevy_window::window::WindowResolution", + "type": "object", + "typeInfo": "Struct" + }, + "bevy_window::window::WindowTheme": { + "isComponent": false, + "isResource": false, + "oneOf": [ + "Light", + "Dark" + ], + "short_name": "WindowTheme", + "title": "bevy_window::window::WindowTheme", + "type": "string", + "typeInfo": "Enum" + }, + "bool": { + "isComponent": false, + "isResource": false, + "short_name": "bool", + "title": "bool", + "type": "boolean", + "typeInfo": "Value" + }, + "char": { + "isComponent": false, + "isResource": false, + "short_name": "char", + "title": "char", + "type": "string", + "typeInfo": "Value" + }, + "core::ops::Range": { + "isComponent": false, + "isResource": false, + "short_name": "Range", + "title": "core::ops::Range", + "type": "object", + "typeInfo": "Value" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "None" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::string::String" + } + } + ], + "short_name": "Some", + "title": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "title": "core::option::Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option>": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "None" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/alloc::vec::Vec" + } + } + ], + "short_name": "Some", + "title": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option>", + "title": "core::option::Option>", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option>": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "None" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_asset::handle::Handle" + } + } + ], + "short_name": "Some", + "title": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option>", + "title": "core::option::Option>", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "None" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_render::camera::camera::Viewport" + } + } + ], + "short_name": "Some", + "title": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "title": "core::option::Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "None" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bevy_render::mesh::mesh::Indices" + } + } + ], + "short_name": "Some", + "title": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "title": "core::option::Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "None" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/bool" + } + } + ], + "short_name": "Some", + "title": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "title": "core::option::Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "None" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f32" + } + } + ], + "short_name": "Some", + "title": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "title": "core::option::Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "None" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/f64" + } + } + ], + "short_name": "Some", + "title": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "title": "core::option::Option", + "type": "object", + "typeInfo": "Enum" + }, + "core::option::Option": { + "isComponent": false, + "isResource": false, + "oneOf": [ + { + "title": "None" + }, + { + "items": false, + "prefixItems": [ + { + "type": { + "$ref": "#/$defs/glam::DVec2" + } + } + ], + "short_name": "Some", + "title": "Some", + "type": "array", + "typeInfo": "Tuple" + } + ], + "short_name": "Option", + "title": "core::option::Option", + "type": "object", + "typeInfo": "Enum" + }, + "f32": { + "isComponent": false, + "isResource": false, + "short_name": "f32", + "title": "f32", + "type": "float", + "typeInfo": "Value" + }, + "f64": { + "isComponent": false, + "isResource": false, + "short_name": "f64", + "title": "f64", + "type": "float", + "typeInfo": "Value" + }, + "glam::Affine2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "matrix2": { + "type": { + "$ref": "#/$defs/glam::Mat2" + } + }, + "translation": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "matrix2", + "translation" + ], + "short_name": "Affine2", + "title": "glam::Affine2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Affine3A": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "matrix3": { + "type": { + "$ref": "#/$defs/glam::Mat3A" + } + }, + "translation": { + "type": { + "$ref": "#/$defs/glam::Vec3A" + } + } + }, + "required": [ + "matrix3", + "translation" + ], + "short_name": "Affine3A", + "title": "glam::Affine3A", + "type": "object", + "typeInfo": "Struct" + }, + "glam::BVec2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "y": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "x", + "y" + ], + "short_name": "BVec2", + "title": "glam::BVec2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::BVec3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "y": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "z": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "x", + "y", + "z" + ], + "short_name": "BVec3", + "title": "glam::BVec3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::BVec3A": { + "isComponent": false, + "isResource": false, + "short_name": "BVec3A", + "title": "glam::BVec3A", + "type": "object", + "typeInfo": "Value" + }, + "glam::BVec4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "w": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "x": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "y": { + "type": { + "$ref": "#/$defs/bool" + } + }, + "z": { + "type": { + "$ref": "#/$defs/bool" + } + } + }, + "required": [ + "x", + "y", + "z", + "w" + ], + "short_name": "BVec4", + "title": "glam::BVec4", + "type": "object", + "typeInfo": "Struct" + }, + "glam::BVec4A": { + "isComponent": false, + "isResource": false, + "short_name": "BVec4A", + "title": "glam::BVec4A", + "type": "object", + "typeInfo": "Value" + }, + "glam::DAffine2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "matrix2": { + "type": { + "$ref": "#/$defs/glam::DMat2" + } + }, + "translation": { + "type": { + "$ref": "#/$defs/glam::DVec2" + } + } + }, + "required": [ + "matrix2", + "translation" + ], + "short_name": "DAffine2", + "title": "glam::DAffine2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DAffine3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "matrix3": { + "type": { + "$ref": "#/$defs/glam::DMat3" + } + }, + "translation": { + "type": { + "$ref": "#/$defs/glam::DVec3" + } + } + }, + "required": [ + "matrix3", + "translation" + ], + "short_name": "DAffine3", + "title": "glam::DAffine3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DMat2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x_axis": { + "type": { + "$ref": "#/$defs/glam::DVec2" + } + }, + "y_axis": { + "type": { + "$ref": "#/$defs/glam::DVec2" + } + } + }, + "required": [ + "x_axis", + "y_axis" + ], + "short_name": "DMat2", + "title": "glam::DMat2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DMat3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x_axis": { + "type": { + "$ref": "#/$defs/glam::DVec3" + } + }, + "y_axis": { + "type": { + "$ref": "#/$defs/glam::DVec3" + } + }, + "z_axis": { + "type": { + "$ref": "#/$defs/glam::DVec3" + } + } + }, + "required": [ + "x_axis", + "y_axis", + "z_axis" + ], + "short_name": "DMat3", + "title": "glam::DMat3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DMat4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "w_axis": { + "type": { + "$ref": "#/$defs/glam::DVec4" + } + }, + "x_axis": { + "type": { + "$ref": "#/$defs/glam::DVec4" + } + }, + "y_axis": { + "type": { + "$ref": "#/$defs/glam::DVec4" + } + }, + "z_axis": { + "type": { + "$ref": "#/$defs/glam::DVec4" + } + } + }, + "required": [ + "x_axis", + "y_axis", + "z_axis", + "w_axis" + ], + "short_name": "DMat4", + "title": "glam::DMat4", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DQuat": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "w": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "x": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "z": { + "type": { + "$ref": "#/$defs/f64" + } + } + }, + "required": [ + "x", + "y", + "z", + "w" + ], + "short_name": "DQuat", + "title": "glam::DQuat", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DVec2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f64" + } + } + }, + "required": [ + "x", + "y" + ], + "short_name": "DVec2", + "title": "glam::DVec2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DVec3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "z": { + "type": { + "$ref": "#/$defs/f64" + } + } + }, + "required": [ + "x", + "y", + "z" + ], + "short_name": "DVec3", + "title": "glam::DVec3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::DVec4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "w": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "x": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f64" + } + }, + "z": { + "type": { + "$ref": "#/$defs/f64" + } + } + }, + "required": [ + "x", + "y", + "z", + "w" + ], + "short_name": "DVec4", + "title": "glam::DVec4", + "type": "object", + "typeInfo": "Struct" + }, + "glam::IVec2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/i32" + } + } + }, + "required": [ + "x", + "y" + ], + "short_name": "IVec2", + "title": "glam::IVec2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::IVec3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/i32" + } + } + }, + "required": [ + "x", + "y", + "z" + ], + "short_name": "IVec3", + "title": "glam::IVec3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::IVec4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "w": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "x": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/i32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/i32" + } + } + }, + "required": [ + "x", + "y", + "z", + "w" + ], + "short_name": "IVec4", + "title": "glam::IVec4", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Mat2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x_axis": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + }, + "y_axis": { + "type": { + "$ref": "#/$defs/glam::Vec2" + } + } + }, + "required": [ + "x_axis", + "y_axis" + ], + "short_name": "Mat2", + "title": "glam::Mat2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Mat3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x_axis": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + "y_axis": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + }, + "z_axis": { + "type": { + "$ref": "#/$defs/glam::Vec3" + } + } + }, + "required": [ + "x_axis", + "y_axis", + "z_axis" + ], + "short_name": "Mat3", + "title": "glam::Mat3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Mat3A": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x_axis": { + "type": { + "$ref": "#/$defs/glam::Vec3A" + } + }, + "y_axis": { + "type": { + "$ref": "#/$defs/glam::Vec3A" + } + }, + "z_axis": { + "type": { + "$ref": "#/$defs/glam::Vec3A" + } + } + }, + "required": [ + "x_axis", + "y_axis", + "z_axis" + ], + "short_name": "Mat3A", + "title": "glam::Mat3A", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Mat4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "w_axis": { + "type": { + "$ref": "#/$defs/glam::Vec4" + } + }, + "x_axis": { + "type": { + "$ref": "#/$defs/glam::Vec4" + } + }, + "y_axis": { + "type": { + "$ref": "#/$defs/glam::Vec4" + } + }, + "z_axis": { + "type": { + "$ref": "#/$defs/glam::Vec4" + } + } + }, + "required": [ + "x_axis", + "y_axis", + "z_axis", + "w_axis" + ], + "short_name": "Mat4", + "title": "glam::Mat4", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Quat": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "w": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "x": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "x", + "y", + "z", + "w" + ], + "short_name": "Quat", + "title": "glam::Quat", + "type": "object", + "typeInfo": "Struct" + }, + "glam::UVec2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/u32" + } + } + }, + "required": [ + "x", + "y" + ], + "short_name": "UVec2", + "title": "glam::UVec2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::UVec3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/u32" + } + } + }, + "required": [ + "x", + "y", + "z" + ], + "short_name": "UVec3", + "title": "glam::UVec3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::UVec4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "w": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "x": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/u32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/u32" + } + } + }, + "required": [ + "x", + "y", + "z", + "w" + ], + "short_name": "UVec4", + "title": "glam::UVec4", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Vec2": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "x", + "y" + ], + "short_name": "Vec2", + "title": "glam::Vec2", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Vec3": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "x", + "y", + "z" + ], + "short_name": "Vec3", + "title": "glam::Vec3", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Vec3A": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "x": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "x", + "y", + "z" + ], + "short_name": "Vec3A", + "title": "glam::Vec3A", + "type": "object", + "typeInfo": "Struct" + }, + "glam::Vec4": { + "additionalProperties": false, + "isComponent": false, + "isResource": false, + "properties": { + "w": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "x": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "y": { + "type": { + "$ref": "#/$defs/f32" + } + }, + "z": { + "type": { + "$ref": "#/$defs/f32" + } + } + }, + "required": [ + "x", + "y", + "z", + "w" + ], + "short_name": "Vec4", + "title": "glam::Vec4", + "type": "object", + "typeInfo": "Struct" + }, + "i128": { + "isComponent": false, + "isResource": false, + "short_name": "i128", + "title": "i128", + "type": "int", + "typeInfo": "Value" + }, + "i16": { + "isComponent": false, + "isResource": false, + "short_name": "i16", + "title": "i16", + "type": "int", + "typeInfo": "Value" + }, + "i32": { + "isComponent": false, + "isResource": false, + "short_name": "i32", + "title": "i32", + "type": "int", + "typeInfo": "Value" + }, + "i64": { + "isComponent": false, + "isResource": false, + "short_name": "i64", + "title": "i64", + "type": "int", + "typeInfo": "Value" + }, + "i8": { + "isComponent": false, + "isResource": false, + "short_name": "i8", + "title": "i8", + "type": "int", + "typeInfo": "Value" + }, + "isize": { + "isComponent": false, + "isResource": false, + "short_name": "isize", + "title": "isize", + "type": "int", + "typeInfo": "Value" + }, + "smallvec::SmallVec<[bevy_ecs::Entity; 8]>": { + "isComponent": false, + "isResource": false, + "items": { + "type": { + "$ref": "#/$defs/bevy_ecs::Entity" + } + }, + "short_name": "SmallVec<[Entity; 8]>", + "title": "smallvec::SmallVec<[bevy_ecs::Entity; 8]>", + "type": "array", + "typeInfo": "List" + }, + "std::ffi::OsString": { + "isComponent": false, + "isResource": false, + "short_name": "OsString", + "title": "std::ffi::OsString", + "type": "object", + "typeInfo": "Value" + }, + "std::path::PathBuf": { + "isComponent": false, + "isResource": false, + "short_name": "PathBuf", + "title": "std::path::PathBuf", + "type": "object", + "typeInfo": "Value" + }, + "u128": { + "isComponent": false, + "isResource": false, + "short_name": "u128", + "title": "u128", + "type": "uint", + "typeInfo": "Value" + }, + "u16": { + "isComponent": false, + "isResource": false, + "short_name": "u16", + "title": "u16", + "type": "uint", + "typeInfo": "Value" + }, + "u32": { + "isComponent": false, + "isResource": false, + "short_name": "u32", + "title": "u32", + "type": "uint", + "typeInfo": "Value" + }, + "u64": { + "isComponent": false, + "isResource": false, + "short_name": "u64", + "title": "u64", + "type": "uint", + "typeInfo": "Value" + }, + "u8": { + "isComponent": false, + "isResource": false, + "short_name": "u8", + "title": "u8", + "type": "uint", + "typeInfo": "Value" + }, + "usize": { + "isComponent": false, + "isResource": false, + "short_name": "usize", + "title": "usize", + "type": "uint", + "typeInfo": "Value" + } + }, + "$schema": "https://json-schema.org/draft/2020-12/schema", + "title": "bevy component registry schema" +} \ No newline at end of file diff --git a/testing/bevy_registry_export/basic/src/core/mod.rs b/testing/bevy_registry_export/basic/src/core/mod.rs new file mode 100644 index 0000000..5421e4e --- /dev/null +++ b/testing/bevy_registry_export/basic/src/core/mod.rs @@ -0,0 +1,22 @@ +use bevy::prelude::*; +use bevy_gltf_blueprints::*; +use bevy_registry_export::*; + +pub struct CorePlugin; +impl Plugin for CorePlugin { + fn build(&self, app: &mut App) { + app.add_plugins(( + ExportRegistryPlugin { + save_path: "assets/registry.json".into(), + ..Default::default() + }, + BlueprintsPlugin { + legacy_mode: false, + library_folder: "models/library".into(), + format: GltfFormat::GLB, + aabbs: true, + ..Default::default() + }, + )); + } +} diff --git a/testing/bevy_registry_export/basic/src/game/in_game.rs b/testing/bevy_registry_export/basic/src/game/in_game.rs new file mode 100644 index 0000000..2338956 --- /dev/null +++ b/testing/bevy_registry_export/basic/src/game/in_game.rs @@ -0,0 +1,128 @@ +use bevy::prelude::*; +use bevy_gltf_blueprints::{BluePrintBundle, BlueprintName, GameWorldTag}; +use bevy_gltf_worlflow_examples_common::{assets::GameAssets, GameState, InAppRunning}; + +use bevy_rapier3d::prelude::Velocity; +use rand::Rng; + +pub fn setup_game( + mut commands: Commands, + game_assets: Res, + models: Res>, + mut next_game_state: ResMut>, +) { + println!("setting up all stuff"); + commands.insert_resource(AmbientLight { + color: Color::WHITE, + brightness: 0.2, + }); + // here we actually spawn our game world/level + + commands.spawn(( + SceneBundle { + // note: because of this issue https://github.com/bevyengine/bevy/issues/10436, "world" is now a gltf file instead of a scene + scene: models + .get(game_assets.world.id()) + .expect("main level should have been loaded") + .scenes[0] + .clone(), + ..default() + }, + bevy::prelude::Name::from("world"), + GameWorldTag, + InAppRunning, + )); + + next_game_state.set(GameState::InGame) +} + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct UnregisteredComponent; + +pub fn spawn_test( + keycode: Res>, + mut commands: Commands, + + mut game_world: Query<(Entity, &Children), With>, +) { + if keycode.just_pressed(KeyCode::T) { + let world = game_world.single_mut(); + let world = world.1[0]; + + let mut rng = rand::thread_rng(); + let range = 5.5; + let x: f32 = rng.gen_range(-range..range); + let y: f32 = rng.gen_range(-range..range); + + let mut rng = rand::thread_rng(); + let range = 0.8; + let vel_x: f32 = rng.gen_range(-range..range); + let vel_y: f32 = rng.gen_range(2.0..2.5); + let vel_z: f32 = rng.gen_range(-range..range); + + let name_index: u64 = rng.gen(); + + let new_entity = commands + .spawn(( + BluePrintBundle { + blueprint: BlueprintName("Health_Pickup".to_string()), + ..Default::default() + }, + bevy::prelude::Name::from(format!("test{}", name_index)), + // BlueprintName("Health_Pickup".to_string()), + // SpawnHere, + TransformBundle::from_transform(Transform::from_xyz(x, 2.0, y)), + Velocity { + linvel: Vec3::new(vel_x, vel_y, vel_z), + angvel: Vec3::new(0.0, 0.0, 0.0), + }, + )) + .id(); + commands.entity(world).add_child(new_entity); + } +} + +pub fn spawn_test_unregisted_components( + keycode: Res>, + mut commands: Commands, + + mut game_world: Query<(Entity, &Children), With>, +) { + if keycode.just_pressed(KeyCode::U) { + let world = game_world.single_mut(); + let world = world.1[0]; + + let mut rng = rand::thread_rng(); + let range = 5.5; + let x: f32 = rng.gen_range(-range..range); + let y: f32 = rng.gen_range(-range..range); + + let mut rng = rand::thread_rng(); + let range = 0.8; + let vel_x: f32 = rng.gen_range(-range..range); + let vel_y: f32 = rng.gen_range(2.0..2.5); + let vel_z: f32 = rng.gen_range(-range..range); + + let name_index: u64 = rng.gen(); + + let new_entity = commands + .spawn(( + BluePrintBundle { + blueprint: BlueprintName("Health_Pickup".to_string()), + ..Default::default() + }, + bevy::prelude::Name::from(format!("test{}", name_index)), + // BlueprintName("Health_Pickup".to_string()), + // SpawnHere, + TransformBundle::from_transform(Transform::from_xyz(x, 2.0, y)), + Velocity { + linvel: Vec3::new(vel_x, vel_y, vel_z), + angvel: Vec3::new(0.0, 0.0, 0.0), + }, + UnregisteredComponent, + )) + .id(); + commands.entity(world).add_child(new_entity); + } +} diff --git a/testing/bevy_registry_export/basic/src/game/in_main_menu.rs b/testing/bevy_registry_export/basic/src/game/in_main_menu.rs new file mode 100644 index 0000000..c1a4b8b --- /dev/null +++ b/testing/bevy_registry_export/basic/src/game/in_main_menu.rs @@ -0,0 +1,112 @@ +use bevy::prelude::*; +use bevy_gltf_worlflow_examples_common::{AppState, InMainMenu}; + +pub fn setup_main_menu(mut commands: Commands) { + commands.spawn((Camera2dBundle::default(), InMainMenu)); + + commands.spawn(( + TextBundle::from_section( + "SOME GAME TITLE !!", + TextStyle { + //font: asset_server.load("fonts/FiraMono-Medium.ttf"), + font_size: 18.0, + color: Color::WHITE, + ..Default::default() + }, + ) + .with_style(Style { + position_type: PositionType::Absolute, + top: Val::Px(100.0), + left: Val::Px(200.0), + ..default() + }), + InMainMenu, + )); + + commands.spawn(( + TextBundle::from_section( + "New Game (press Enter to start, press T once the game is started for demo spawning)", + TextStyle { + //font: asset_server.load("fonts/FiraMono-Medium.ttf"), + font_size: 18.0, + color: Color::WHITE, + ..Default::default() + }, + ) + .with_style(Style { + position_type: PositionType::Absolute, + top: Val::Px(200.0), + left: Val::Px(200.0), + ..default() + }), + InMainMenu, + )); + + /* + commands.spawn(( + TextBundle::from_section( + "Load Game", + TextStyle { + //font: asset_server.load("fonts/FiraMono-Medium.ttf"), + font_size: 18.0, + color: Color::WHITE, + ..Default::default() + }, + ) + .with_style(Style { + position_type: PositionType::Absolute, + top: Val::Px(250.0), + left: Val::Px(200.0), + ..default() + }), + InMainMenu + )); + + commands.spawn(( + TextBundle::from_section( + "Exit Game", + TextStyle { + //font: asset_server.load("fonts/FiraMono-Medium.ttf"), + font_size: 18.0, + color: Color::WHITE, + ..Default::default() + }, + ) + .with_style(Style { + position_type: PositionType::Absolute, + top: Val::Px(300.0), + left: Val::Px(200.0), + ..default() + }), + InMainMenu + ));*/ +} + +pub fn teardown_main_menu(bla: Query>, mut commands: Commands) { + for bli in bla.iter() { + commands.entity(bli).despawn_recursive(); + } +} + +pub fn main_menu( + keycode: Res>, + + mut next_app_state: ResMut>, + // mut next_game_state: ResMut>, + // mut save_requested_events: EventWriter, + // mut load_requested_events: EventWriter, +) { + if keycode.just_pressed(KeyCode::Return) { + next_app_state.set(AppState::AppLoading); + // next_game_state.set(GameState::None); + } + + if keycode.just_pressed(KeyCode::L) { + next_app_state.set(AppState::AppLoading); + // load_requested_events.send(LoadRequest { path: "toto".into() }) + } + + if keycode.just_pressed(KeyCode::S) { + // save_requested_events.send(SaveRequest { path: "toto".into() }) + } +} diff --git a/testing/bevy_registry_export/basic/src/game/mod.rs b/testing/bevy_registry_export/basic/src/game/mod.rs new file mode 100644 index 0000000..b236141 --- /dev/null +++ b/testing/bevy_registry_export/basic/src/game/mod.rs @@ -0,0 +1,22 @@ +pub mod in_game; +pub use in_game::*; + +pub mod in_main_menu; +pub use in_main_menu::*; + +use bevy::prelude::*; +use bevy_gltf_worlflow_examples_common::{AppState, GameState}; + +pub struct GamePlugin; +impl Plugin for GamePlugin { + fn build(&self, app: &mut App) { + app.add_systems( + Update, + (spawn_test, spawn_test_unregisted_components).run_if(in_state(GameState::InGame)), + ) + .add_systems(OnEnter(AppState::MenuRunning), setup_main_menu) + .add_systems(OnExit(AppState::MenuRunning), teardown_main_menu) + .add_systems(Update, main_menu.run_if(in_state(AppState::MenuRunning))) + .add_systems(OnEnter(AppState::AppRunning), setup_game); + } +} diff --git a/testing/bevy_registry_export/basic/src/main.rs b/testing/bevy_registry_export/basic/src/main.rs new file mode 100644 index 0000000..8fca426 --- /dev/null +++ b/testing/bevy_registry_export/basic/src/main.rs @@ -0,0 +1,27 @@ +use bevy::prelude::*; +use bevy_editor_pls::prelude::*; +use bevy_gltf_worlflow_examples_common::CommonPlugin; + +mod core; +use crate::core::*; + +mod game; +use game::*; + +mod test_components; +use test_components::*; + +fn main() { + App::new() + .add_plugins(( + DefaultPlugins.set(AssetPlugin::default()), + // editor + EditorPlugin::default(), + // our custom plugins + CommonPlugin, + CorePlugin, // reusable plugins + GamePlugin, // specific to our game + ComponentsTestPlugin, // Showcases different type of components /structs + )) + .run(); +} diff --git a/testing/bevy_registry_export/basic/src/test_components.rs b/testing/bevy_registry_export/basic/src/test_components.rs new file mode 100644 index 0000000..58a19c2 --- /dev/null +++ b/testing/bevy_registry_export/basic/src/test_components.rs @@ -0,0 +1,190 @@ +use bevy::{ + pbr::{ExtendedMaterial, MaterialExtension}, + prelude::*, + render::render_resource::*, +}; +use std::ops::Range; + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct UnitTest; + +#[derive(Component, Reflect, Default, Debug, Deref, DerefMut)] +#[reflect(Component)] +struct TupleTestF32(f32); + +#[derive(Component, Reflect, Default, Debug, Deref, DerefMut)] +#[reflect(Component)] +struct TupleTestU64(u64); + +#[derive(Component, Reflect, Default, Debug, Deref, DerefMut)] +#[reflect(Component)] +pub struct TupleTestStr(String); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TupleTest2(f32, u64, String); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TupleTestBool(bool); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TupleVec2(Vec2); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TupleVec3(Vec3); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TupleVec(Vec); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TupleVecF32F32(Vec<(f32, f32)>); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +struct TupleTestColor(Color); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub struct BasicTest { + a: f32, + b: u64, + c: String, +} + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub enum EnumTest { + Metal, + Wood, + Rock, + Cloth, + Squishy, + #[default] + None, +} + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub struct NestingTestLevel2 { + text: String, + enable: bool, + enum_inner: EnumTest, + color: TupleTestColor, + toggle: TupleTestBool, + basic: BasicTest, + pub nested: NestingTestLevel3, + colors_list: VecOfColors, +} + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub struct NestingTestLevel3 { + vec: TupleVec3, +} + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub struct NestedTupleStuff(f32, u64, NestingTestLevel2); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub enum EnumComplex { + Float(f32), + Wood(String), + Vec(BasicTest), + SomeThing, + StructLike { + a: f32, + b: u32, + c: String, + }, + #[default] + None, +} + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub struct VecOfVec3s2(Vec); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub struct VecOfColors(Vec); + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub struct AAAAddedCOMPONENT; + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub struct AComponentWithAnExtremlyExageratedOrMaybeNotButCouldBeNameOrWut; + +/* fn toto(){ + let bla:core::ops::Range = Range { start: 0.1, end: 5.0}; +} */ + +#[derive(Component, Reflect, Default, Debug)] +#[reflect(Component)] +pub struct VecOfF32s(Vec); + +// test for extended materials +#[derive(Asset, AsBindGroup, Reflect, Debug, Clone)] +struct MyExtension { + // We need to ensure that the bindings of the base material and the extension do not conflict, + // so we start from binding slot 100, leaving slots 0-99 for the base material. + #[uniform(100)] + quantize_steps: u32, +} + +impl MaterialExtension for MyExtension { + fn fragment_shader() -> ShaderRef { + "shaders/extended_material.wgsl".into() + } + + fn deferred_fragment_shader() -> ShaderRef { + "shaders/extended_material.wgsl".into() + } +} + +pub struct ComponentsTestPlugin; +impl Plugin for ComponentsTestPlugin { + fn build(&self, app: &mut App) { + app.register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::>() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::() + .register_type::<(f32, f32)>() + .register_type::>() + .register_type::>() + .register_type::>() + .register_type::() + .register_type::>() + .register_type::() + .register_type::>() + // .register_type::() + .register_type::() + .add_plugins(MaterialPlugin::< + ExtendedMaterial, + >::default()); + } +} diff --git a/tools/bevy_components/README.md b/tools/bevy_components/README.md index 426e127..2c385d3 100644 --- a/tools/bevy_components/README.md +++ b/tools/bevy_components/README.md @@ -15,6 +15,9 @@ of your Bevy components you get a nicely packed custom_property to use with ... > Important: the tooling is still in the early stages, even if it is feature complete : use with caution!. +> IMPORTANT !! if you have previously used v0.1 , v0.2 had a breaking change, please see [this](#regenerate-ui-values) section on how to upgrade your data to v0.2.\ +This problem should not be present going forward + ## Installation: * grab the latest release zip file from the releases tab (choose the bevy_components releases !) @@ -95,6 +98,24 @@ it will automatically update the value of the corresponding custom property ![edit component](./docs/edit_component2.png) +### Create components from custom properties + +- IF you have a valid component type and the correct corresponding RON string in the custom_property value (this button will not appear if not), this add-on can automatically +generate the corresponding component for you: + +- Fill/check your custom property (here for Aabb) + +![generate_components 2](./docs/generate_components2.png) + +- click on the button + +![generate_components](./docs/generate_components.png) + +-voila ! + +![generate_components 3](./docs/generate_components3.png) + + ### copy & pasting - you can also copy & paste components between objects @@ -161,21 +182,39 @@ It will add the component to the select object ## advanced configuration - - there are also additional QOL features, that you should not need most of the time + ### registry file polling - - "update custom properties of current object" : will go over **all components** that you have defined for the **currently selected object**, and re-generate the + + * by default, the add-on will check for changes in your registry file every second, and refresh the UI accordingly + * you can set the polling frequency or turn it off if you do not want auto-refresh + + ![registry file polling](./docs/registry_polling.png) + + + ### regenerate custom property values + + - "update custom properties of current object" : will go over **all components** that you have defined for the **currently selected object**, and re-generate the corresponding custom property values ![update custom properties](./docs/other_options.png) - - "update custom properties of ALL objects" : same as above but it will do so for the **ALL objects in your blend file** (so can be slow!), and re-generate the + - "update custom properties of ALL objects" : same as above but it will do so for the **ALL objects in your blend file** (so can be slow!), and re-generate the corresponding custom property values ![update custom properties for all](./docs/other_options2.png) + + ### regenerate UI values + + - since v0.2, you have the option to regenerate (for the selected object or all objects, as above) to regenerate your UI values from the custom property values + + ![update UI FROM custom properties](./docs/update_ui_from_custom_properties.png) + + > IMPORTANT !! use this if you have previously used v0.1 , as v0.2 had a breaking change, that makes it **necessary** to use this **once** to upgrade the UI data + ## Additional important information @@ -191,6 +230,11 @@ Please see the documentation of those crates for more information. you can find an example [here](https://github.com/kaosat-dev/Blender_bevy_components_workflow/tree/main/examples/bevy_registry_export/) +## Known issues & limitations: + +* **Range** data (ie ```Range``` etc) are not handled at this time (issue seems to be on the Bevy side) +* **Entity** structs are always set to 0 (setting entity values on the Blender side at this time does not make much sense anyway) + ## License This tool, all its code, contents & assets is Dual-licensed under either of diff --git a/tools/bevy_components/TODO.md b/tools/bevy_components/TODO.md index 994e6f0..a18dd11 100644 --- a/tools/bevy_components/TODO.md +++ b/tools/bevy_components/TODO.md @@ -133,7 +133,77 @@ UI: - [x] update version - [x] add ability to set legacy mode for bevy_gltf_components ? - - [ ] release all versions - - [ ] update main documentation, add compatibility version grid + - [x] release all versions + - [x] update main documentation, add compatibility version grid - \ No newline at end of file + +## Phase 2 + +- [x] fix handling of long component names + - [x] fix nesting level handling issue for new system : ie basic component DOES NOT work, but nestedLevel2 does + - add goddam tests ! + - [ ] verify some weird prop => custom property values (Calculated Clip for example) + +- [x] fix "reload registry" not clearing all previous data (reloading registry does not seem to account for added/removed components in the registry ) +- add file watcher for registry + - [x] have the watcher work as expected + - [ ] add handling of removed registry file + - [ ] clear & reset handler when the file browser for the registry is used +- [ ] re-enable watcher + +- tests + clear && pytest -svv --blender-executable /blender/blender-4.0.2-linux-x64/blender + + - [x] load registry + - just check list of components vs lists in registry + - [x] try adding all components + - [x] select an object + - [x] call the add_component operator + + - [x] change params + - use field names + component definitions to set values + - [x] find a way to shuffle params of ALL components based on a reliable, repeatable seed + + - [x] test propgroup values => custom property values + - [x] test custom property value => propgroup value + + - check if all went well + + - [x] fix issues with incorect custom_property generation + - [x] fix issue with object variants for enums + + - [ ] add handling for core::ops::Range & other ranges + - [x] add handling for alloc::borrow::Cow + - [x] add handling of isize + + - [x] indirection level + - currently + - short_name +_"ui => direct lookup + - problem : max 64 chars for propertyGroupNames + - possible solution + - propertyGroupName storage: simple , incremented INT (call it propGroupId for ex) + - lookup shortName => propGroupId + + - do a first pass, by replacing manual propGroupNames creation with a function + - in a second pass, replace the innards + +- add button to regenerate cutom prop values from custom properties (allows us to sidestep any future issues with internals changing) + - [x] fix lists + - [x] fix enums (see Clusterconfig) + - [x] need an example with one tupple one struct + - [x] projection + - [ ] additionalmassproperties + - [x] fix tupleStructs (see TupleVecF32F32) => always the same problem of having us pre-parse data without knowing what we have inside + - find a way to only split by level 0 (highest level) nesting "," seperators, ignoring any level of nesting until we dig one level deeper + - solve nesting level use issues + +- [x] remove metadata when deleting components +- [x] add try catch around custom_prop => propGroup +- [x] enhance the GenerateComponent_From_custom_property_Operator to use the new system to actually generate the stuff + +- coherence in operators: + - component_name vs component_type + - [x] delete => remove + +- [x] clean up reloading of registry settings +- [x] clean up file watcher \ No newline at end of file diff --git a/tools/bevy_components/__init__.py b/tools/bevy_components/__init__.py index b63f3eb..74637f0 100644 --- a/tools/bevy_components/__init__.py +++ b/tools/bevy_components/__init__.py @@ -1,7 +1,7 @@ bl_info = { "name": "bevy_components", "author": "kaosigh", - "version": (0, 1, 0), + "version": (0, 2, 0), "blender": (3, 4, 0), "location": "VIEW_3D", "description": "UI to help create Bevy blueprints and components", @@ -16,13 +16,13 @@ from bpy.props import (StringProperty) from .helpers import load_settings from .blueprints import CreateBlueprintOperator -from .components.operators import CopyComponentOperator, DeleteComponentOperator, GenerateComponent_From_custom_property_Operator, PasteComponentOperator, AddComponentOperator, Toggle_ComponentVisibility +from .components.operators import CopyComponentOperator, RemoveComponentOperator, GenerateComponent_From_custom_property_Operator, PasteComponentOperator, AddComponentOperator, Toggle_ComponentVisibility from .registry.registry import ComponentsRegistry,MissingBevyType -from .registry.operators import (COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_ALL, COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_CURRENT, ReloadRegistryOperator, OT_OpenFilebrowser) +from .registry.operators import (COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_ALL, COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_CURRENT, COMPONENTS_OT_REFRESH_PROPGROUPS_FROM_CUSTOM_PROPERTIES_ALL, COMPONENTS_OT_REFRESH_PROPGROUPS_FROM_CUSTOM_PROPERTIES_CURRENT, ReloadRegistryOperator, OT_OpenFilebrowser) from .registry.ui import (BEVY_COMPONENTS_PT_Configuration, BEVY_COMPONENTS_PT_MissingTypesPanel, MISSING_TYPES_UL_List) -from .components.metadata import (ComponentInfos, ComponentsMeta, ensure_metadata_for_all_objects) +from .components.metadata import (ComponentMetadata, ComponentsMeta, ensure_metadata_for_all_objects) from .propGroups.prop_groups import (generate_propertyGroups_for_components) from .components.lists import GENERIC_LIST_OT_actions, Generic_LIST_OT_AddItem, Generic_LIST_OT_RemoveItem, Generic_LIST_OT_SelectItem from .components.definitions_list import (ComponentDefinitionsList, ClearComponentDefinitionsList) @@ -86,14 +86,14 @@ classes = [ AddComponentOperator, CopyComponentOperator, PasteComponentOperator, - DeleteComponentOperator, + RemoveComponentOperator, GenerateComponent_From_custom_property_Operator, Toggle_ComponentVisibility, ComponentDefinitionsList, ClearComponentDefinitionsList, - ComponentInfos, + ComponentMetadata, ComponentsMeta, MissingBevyType, ComponentsRegistry, @@ -102,6 +102,9 @@ classes = [ ReloadRegistryOperator, COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_ALL, COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_CURRENT, + + COMPONENTS_OT_REFRESH_PROPGROUPS_FROM_CUSTOM_PROPERTIES_ALL, + COMPONENTS_OT_REFRESH_PROPGROUPS_FROM_CUSTOM_PROPERTIES_CURRENT, BEVY_COMPONENTS_PT_MainPanel, BEVY_COMPONENTS_PT_ComponentsPanel, @@ -119,19 +122,14 @@ from bpy.app.handlers import persistent @persistent def post_load(file_name): - print("post load", file_name) registry = bpy.context.window_manager.components_registry - registry.schemaPath = load_settings(registry.settings_save_path)["schemaPath"] - registry.load_schema() - generate_propertyGroups_for_components() - ensure_metadata_for_all_objects() - - + if registry != None: + registry.load_settings() + def register(): for cls in classes: bpy.utils.register_class(cls) bpy.types.WindowManager.blueprint_name = StringProperty() - bpy.app.handlers.load_post.append(post_load) def unregister(): diff --git a/tools/bevy_components/components/metadata.py b/tools/bevy_components/components/metadata.py index 666a343..f97a342 100644 --- a/tools/bevy_components/components/metadata.py +++ b/tools/bevy_components/components/metadata.py @@ -1,9 +1,10 @@ import bpy from bpy.props import (StringProperty, BoolProperty, PointerProperty) from bpy_types import (PropertyGroup) -from ..propGroups.conversions import property_group_value_from_custom_property_value, property_group_value_to_custom_property_value +from ..propGroups.conversions_from_prop_group import property_group_value_to_custom_property_value +from ..propGroups.conversions_to_prop_group import property_group_value_from_custom_property_value -class ComponentInfos(bpy.types.PropertyGroup): +class ComponentMetadata(bpy.types.PropertyGroup): name : bpy.props.StringProperty( name = "name", default = "" @@ -51,7 +52,7 @@ class ComponentsMeta(PropertyGroup): name="infos per component", description="component" ) - components: bpy.props.CollectionProperty(type = ComponentInfos) + components: bpy.props.CollectionProperty(type = ComponentMetadata) @classmethod def register(cls): @@ -131,12 +132,12 @@ def add_metadata_to_components_without_metadata(object): def add_component_to_object(object, component_definition, value=None): cleanup_invalid_metadata(object) if object is not None: - print("add_component_to_object", component_definition) + # print("add_component_to_object", component_definition) long_name = component_definition["title"] short_name = component_definition["short_name"] registry = bpy.context.window_manager.components_registry - if registry.type_infos == None: - raise Exception('registry type infos have not been loaded yet or ar missing !') + if not registry.has_type_infos(): + raise Exception('registry type infos have not been loaded yet or are missing !') definition = registry.type_infos[long_name] # now we use our pre_generated property groups to set the initial value of our custom property (_, propertyGroup) = upsert_component_in_object(object, component_name=short_name, registry=registry) @@ -157,7 +158,7 @@ def upsert_component_in_object(object, component_name, registry): if component_definition != None: short_name = component_definition["short_name"] long_name = component_definition["title"] - property_group_name = short_name+"_ui" + property_group_name = registry.get_propertyGroupName_from_shortName(short_name) propertyGroup = None component_meta = next(filter(lambda component: component["name"] == short_name, target_components_metadata), None) @@ -175,7 +176,7 @@ def upsert_component_in_object(object, component_name, registry): if property_group_name in registry.component_propertyGroups: # we have found a matching property_group, so try to inject it # now inject property group - setattr(ComponentInfos, property_group_name, registry.component_propertyGroups[property_group_name]) # FIXME: not ideal as all ComponentInfos get the propGroup, but have not found a way to assign it per instance + setattr(ComponentMetadata, property_group_name, registry.component_propertyGroups[property_group_name]) # FIXME: not ideal as all ComponentMetadata get the propGroup, but have not found a way to assign it per instance propertyGroup = getattr(component_meta, property_group_name, None) # now deal with property groups details @@ -196,13 +197,14 @@ def upsert_component_in_object(object, component_name, registry): return(None, None) -def copy_propertyGroup_values_to_another_object(source_object, target_object, component_name): +def copy_propertyGroup_values_to_another_object(source_object, target_object, component_name, registry): if source_object == None or target_object == None or component_name == None: raise Exception('missing input data, cannot copy component propertryGroup') component_definition = find_component_definition_from_short_name(component_name) short_name = component_definition["short_name"] - property_group_name = short_name+"_ui" + property_group_name = registry.get_propertyGroupName_from_shortName(short_name) + registry = bpy.context.window_manager.components_registry source_components_metadata = source_object.components_meta.components @@ -234,3 +236,46 @@ def apply_propertyGroup_values_to_object_customProperties(object): if component_definition != None: value = property_group_value_to_custom_property_value(propertyGroup, component_definition, registry, None) object[component_name] = value + + + +def apply_customProperty_values_to_object_propertyGroups(object): + print("apply custom properties to ", object.name) + registry = bpy.context.window_manager.components_registry + for component_name in dict(object) : + if component_name == "components_meta": + continue + component_definition = find_component_definition_from_short_name(component_name) + if component_definition != None: + property_group_name = registry.get_propertyGroupName_from_shortName(component_name) + components_metadata = object.components_meta.components + source_componentMeta = next(filter(lambda component: component["name"] == component_name, components_metadata), None) + # matching component means we already have this type of component + propertyGroup = getattr(source_componentMeta, property_group_name, None) + customProperty_value = object[component_name] + #value = property_group_value_to_custom_property_value(propertyGroup, component_definition, registry, None) + + object["__disable__update"] = True # disable update callback while we set the values of the propertyGroup "tree" (as a propertyGroup can contain other propertyGroups) + property_group_value_from_custom_property_value(propertyGroup, component_definition, registry, customProperty_value) + del object["__disable__update"] + +# removes the given component from the object: removes both the custom property and the matching metadata from the object +def remove_component_from_object(object, component_name): + del object[component_name] + + components_metadata = getattr(object, "components_meta", None) + if components_metadata == None: + return False + + components_metadata = components_metadata.components + to_remove = [] + for index, component_meta in enumerate(components_metadata): + short_name = component_meta.name + if short_name == component_name: + to_remove.append(index) + break + for index in to_remove: + components_metadata.remove(index) + return True + + \ No newline at end of file diff --git a/tools/bevy_components/components/operators.py b/tools/bevy_components/components/operators.py index 8c2c3df..13ddffc 100644 --- a/tools/bevy_components/components/operators.py +++ b/tools/bevy_components/components/operators.py @@ -3,22 +3,22 @@ import json import bpy from bpy_types import Operator from bpy.props import (StringProperty) -from .metadata import add_component_to_object, add_metadata_to_components_without_metadata, copy_propertyGroup_values_to_another_object, find_component_definition_from_short_name +from .metadata import add_component_to_object, add_metadata_to_components_without_metadata, apply_customProperty_values_to_object_propertyGroups, copy_propertyGroup_values_to_another_object, find_component_definition_from_short_name, remove_component_from_object class AddComponentOperator(Operator): """Add component to blueprint""" - bl_idname = "object.addblueprint_to_component" + bl_idname = "object.add_bevy_component" bl_label = "Add component to blueprint Operator" bl_options = {"UNDO"} component_type: StringProperty( name="component_type", description="component type to add", - ) + ) # type: ignore def execute(self, context): - print("adding component to blueprint", self.component_type) object = context.object + print("adding component ", self.component_type, "to object '"+object.name+"'") has_component_type = self.component_type != "" if has_component_type and object != None: @@ -30,19 +30,19 @@ class AddComponentOperator(Operator): class CopyComponentOperator(Operator): """Copy component from blueprint""" - bl_idname = "object.copy_component" + bl_idname = "object.copy_bevy_component" bl_label = "Copy component Operator" bl_options = {"UNDO"} source_component_name: StringProperty( name="source component_name", description="name of the component to copy", - ) + ) # type: ignore source_object_name: StringProperty( name="source object name", description="name of the object to copy the component from", - ) + ) # type: ignore @classmethod def register(cls): @@ -67,7 +67,7 @@ class CopyComponentOperator(Operator): class PasteComponentOperator(Operator): """Paste component to blueprint""" - bl_idname = "object.paste_component" + bl_idname = "object.paste_bevy_component" bl_label = "Paste component to blueprint Operator" bl_options = {"UNDO"} @@ -80,67 +80,79 @@ class PasteComponentOperator(Operator): else: component_name = context.window_manager.copied_source_component_name if not component_name in source_object: - self.report({"ERROR"}, "The source component to copy a component from does not exist") + self.report({"ERROR"}, "The source component to copy from does not exist") else: component_value = source_object[component_name] print("pasting component to object: component name:", str(component_name), "component value:" + str(component_value)) print (context.object) - copy_propertyGroup_values_to_another_object(source_object, context.object, component_name) + registry = context.window_manager.components_registry + copy_propertyGroup_values_to_another_object(source_object, context.object, component_name, registry) return {'FINISHED'} -class DeleteComponentOperator(Operator): +class RemoveComponentOperator(Operator): """Delete component from blueprint""" - bl_idname = "object.delete_component" + bl_idname = "object.remove_bevy_component" bl_label = "Delete component from blueprint Operator" bl_options = {"UNDO"} component_name: StringProperty( name="component name", description="component to delete", - ) + ) # type: ignore def execute(self, context): object = context.object + + print("removing component ", self.component_name, "from object '"+object.name+"'") + if object is not None and self.component_name in object: - del object[self.component_name] + remove_component_from_object(object, self.component_name) else: - self.report({"ERROR"}, "The object/ component to remove does not exist") + self.report({"ERROR"}, "The object/ component to remove ("+ self.component_name +") does not exist") return {'FINISHED'} class GenerateComponent_From_custom_property_Operator(Operator): """generate components from custom property""" - bl_idname = "object.generate_component" + bl_idname = "object.generate_bevy_component_from_custom_property" bl_label = "Generate component from custom_property Operator" bl_options = {"UNDO"} component_name: StringProperty( name="component name", description="component to generate custom properties for", - ) + ) # type: ignore def execute(self, context): object = context.object - add_metadata_to_components_without_metadata(object) + error = False + try: + add_metadata_to_components_without_metadata(object) + apply_customProperty_values_to_object_propertyGroups(object) + except Exception as error: + del object["__disable__update"] # make sure custom properties are updateable afterwards, even in the case of failure + error = True + self.report({'ERROR'}, "Failed to update propertyGroup values from custom property: Error:" + str(error)) + if not error: + self.report({'INFO'}, "Sucessfully generated UI values for custom properties for selected object") return {'FINISHED'} - class Toggle_ComponentVisibility(Operator): """toggles components visibility""" - bl_idname = "object.toggle_component_visibility" + bl_idname = "object.toggle_bevy_component_visibility" bl_label = "Toggle component visibility" bl_options = {"UNDO"} component_name: StringProperty( name="component name", description="component to toggle", - ) + ) # type: ignore def execute(self, context): object = context.object diff --git a/tools/bevy_components/components/ui.py b/tools/bevy_components/components/ui.py index a169210..23e8fe3 100644 --- a/tools/bevy_components/components/ui.py +++ b/tools/bevy_components/components/ui.py @@ -1,12 +1,11 @@ import json import bpy from .metadata import do_object_custom_properties_have_missing_metadata -from .operators import AddComponentOperator, CopyComponentOperator, DeleteComponentOperator, GenerateComponent_From_custom_property_Operator, PasteComponentOperator, Toggle_ComponentVisibility +from .operators import AddComponentOperator, CopyComponentOperator, RemoveComponentOperator, GenerateComponent_From_custom_property_Operator, PasteComponentOperator, Toggle_ComponentVisibility def draw_propertyGroup( propertyGroup, layout, nesting =[], rootName=None): is_enum = getattr(propertyGroup, "with_enum") is_list = getattr(propertyGroup, "with_list") - #current_short_name = getattr(propertyGroup, "short_name", "") + "_ui" #nesting = nesting + [current_short_name] # we need this convoluted "nested path strings " workaround so that operators working on a given # item in our components hierarchy can get the correct propertyGroup by STRINGS because of course, we cannot pass objects to operators...sigh @@ -119,7 +118,7 @@ class BEVY_COMPONENTS_PT_ComponentsPanel(bpy.types.Panel): # we get & load our component registry registry = bpy.context.window_manager.components_registry available_components = bpy.context.window_manager.components_list - + registry_has_type_infos = registry.has_type_infos() if object is not None: row = layout.row(align=True) @@ -137,12 +136,12 @@ class BEVY_COMPONENTS_PT_ComponentsPanel(bpy.types.Panel): # paste components row = layout.row(align=True) row.operator(PasteComponentOperator.bl_idname, text="Paste component ("+bpy.context.window_manager.copied_source_component_name+")", icon="PASTEDOWN") - row.enabled = registry.type_infos != None and context.window_manager.copied_source_object != '' + row.enabled = registry_has_type_infos and context.window_manager.copied_source_object != '' layout.separator() # upgrate custom props to components - upgradeable_customProperties = registry.type_infos != None and do_object_custom_properties_have_missing_metadata(context.object) + upgradeable_customProperties = registry.has_type_infos() and do_object_custom_properties_have_missing_metadata(context.object) if upgradeable_customProperties: row = layout.row(align=True) op = row.operator(GenerateComponent_From_custom_property_Operator.bl_idname, text="generate components from custom properties" , icon="LOOP_FORWARDS") @@ -172,28 +171,29 @@ class BEVY_COMPONENTS_PT_ComponentsPanel(bpy.types.Panel): row.label(text=component_name) # we fetch the matching ui property group - root_propertyGroup_name = component_name+"_ui" - propertyGroup = getattr(component_meta, root_propertyGroup_name, None) - if propertyGroup: - # if the component has only 0 or 1 field names, display inline, otherwise change layout - single_field = len(propertyGroup.field_names) < 2 - prop_group_location = box.row(align=True).column() - if single_field: - prop_group_location = row.column(align=True)#.split(factor=0.9)#layout.row(align=False) - - if component_visible: - if component_invalid: - error_message = invalid_details if component_invalid else "Missing component UI data, please reload registry !" - prop_group_location.label(text=error_message) - draw_propertyGroup(propertyGroup, prop_group_location, [root_propertyGroup_name], component_name) - else : - row.label(text="details hidden, click on toggle to display") - else: - error_message = invalid_details if component_invalid else "Missing component UI data, please reload registry !" - row.label(text=error_message) + root_propertyGroup_name = registry.get_propertyGroupName_from_shortName(component_name) + if root_propertyGroup_name: + propertyGroup = getattr(component_meta, root_propertyGroup_name, None) + if propertyGroup: + # if the component has only 0 or 1 field names, display inline, otherwise change layout + single_field = len(propertyGroup.field_names) < 2 + prop_group_location = box.row(align=True).column() + if single_field: + prop_group_location = row.column(align=True)#.split(factor=0.9)#layout.row(align=False) + + if component_visible: + if component_invalid: + error_message = invalid_details if component_invalid else "Missing component UI data, please reload registry !" + prop_group_location.label(text=error_message) + draw_propertyGroup(propertyGroup, prop_group_location, [root_propertyGroup_name], component_name) + else : + row.label(text="details hidden, click on toggle to display") + else: + error_message = invalid_details if component_invalid else "Missing component UI data, please reload registry !" + row.label(text=error_message) # "footer" with additional controls - op = row.operator(DeleteComponentOperator.bl_idname, text="", icon="X") + op = row.operator(RemoveComponentOperator.bl_idname, text="", icon="X") op.component_name = component_name row.separator() diff --git a/tools/bevy_components/docs/generate_components.png b/tools/bevy_components/docs/generate_components.png new file mode 100644 index 0000000000000000000000000000000000000000..e77a65f871e87a3ffbb82acdef6b4944a6de714b GIT binary patch literal 3429 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 Hu0mjfj`DfO literal 0 HcmV?d00001 diff --git a/tools/bevy_components/docs/generate_components2.png b/tools/bevy_components/docs/generate_components2.png new file mode 100644 index 0000000000000000000000000000000000000000..71eaec24437f1b94d96fc516f2e28c0f6def9283 GIT binary patch literal 2513 zcmV;?2`=`DP)r5qd=7Z({B8PUY6J}0czpZ4(=&WP&+rL7!zcH8wgMOkd#`75#t_*@Jqut! z=ovnFq2~_){Btk#98>~bP_v*=LS>~9=oCHoLCu3?B~127&mDWd=c=lLc~y~g2h@CB zXUb%SEkES%EYHnxvQy`pyj?xrvkZb@(tc9FS=)0sZQ7o9$x1i*HnJC48@Z%sSIirI zXnWSHWS5V|CG^aU+1Y3a6`|1XnRgo zoUM;bxw6g0o|26|FSZ=TI(w;SX6J6)dKPBBIK+jN)1@)rhqOpE}d=ABH1fAj0tB z{v5sm0}=8b7Ji~<_=KL}6MBYE=ovntXZVDk;S+lPYwt>%)P`YbaEV$g2MI~I77F3M z&r)`Qwk*B=|39h|D>N-#dQC6tH`tODNzWhNWDLm+3fBasXN7Bm(zC)fLFrlHn()8s z`ORa6E5n=rS3ReWB=O00hDg1KO zl%9V;&q~gJDEY8Kq~X=YJSl zgu30`baT0AYH4S%$S6HOr01LNt&_N~9WoE-xfcLC!`k{h2#2ExIj{9}Y-<>cg$UOc z4rcq;#;*uiB&e5m5YXD%AVU`%rEENyCir9Vn})4&H&@Zd_GBbMnnlM zgZ|;vj55hk%IBc^#Dk#6#7OHoSmX%ZKs!UT5zP(PQhI(s&tq@qkXw~Pu0EvaQW=1q z;l2`n7D3Zv4Avt|>lwN34Mq8?>3-G<8s*y!QW6hbaltpLz@W9_LH@FFhunP1puXm9 z?>Pm}KnyAG+Zph%=9~lVjEIPqvFc0*YL;Y@p_I=+^&dUFzX37Q=jWcCvjuXwjisHT zZ49HSq3+KQ=-DX`=50;e&F34d`g-K$ml~NfJ;Sk&Fz{yE4jat8x@NkgR#`jdx+_{Y zw;QeC0|T7hg-~u|6tq2eYX@H$?$DQ0yV89$O9J*2f5pFKV1W z&0aDvSwedTokGaDdq+V=fc_4kfB1v}$opmn-rIu!?Tmni-a6 zAn)55c)4Y`nUHoyL`2JqTfSQ+%_x&hk|IetUvDwoKfj}T21%#=1fy}%vz-$tX<8|E zEbR=9!qbNOKKP)X52I|waGcYHW&Udgjd%u6Gqt zQfokr^sE`r`$rkxEaMVj)9iAtLw|>UK57M^d(EjVfRB1EH$=!Cv%ME`eQVf#ykuau z$6#Kol#vN>P>>M-w?ngu_z8pbzMX+rZdkEUlRHBq!kAXidOq%!Ni)hM12Tp53>8o3 zfSl@q0eM()5yUv@xf|)&lzO)9FY39V^!%Wn9osgHT(M~MhdrTZ$8p@DG<)Y<&nCu) zViXb;D7grOkVW}yc;|8uQ!7-$o2M4mm*LQ3AcLZj{IKWqc^1dNd3CFFAM1H15zE`UKVE|s@u#+{ZiDF6DyYF(nE*P_{x=KTBMO$z|I zfSi#d69ZFg05O;Vh$W+NQbIZL#i&)Z;+>3W|T>WQuI6k6T}hVbn)Z?yRTwA($7Cmic(wylTuy@A*5aBd4h=6cfM}v}qQCez_5MRVzCUQ>!St_keNWzy4F$jkY1qptB z6p4^xDerq2s5LEUMYNQZG^1cTCD@_dWVA?MBrh0o6a!MvyX%2w+PREYshdjAzw~)G z-J^aU)an-l=tlbo0l@KV*FWZH3H+|D-beZk?~4Nbv^>(SemMYv{ZW9x*RG#(YU=%G z^*;agK)uiZi}kGjSLV0Eag?5ash-vU%KTP1KXZR}H0Qt6v%;0({hL_N0!q&c|302+ bDLsDx8Z_0y0>hA800000NkvXXu0mjfb0W=h literal 0 HcmV?d00001 diff --git a/tools/bevy_components/docs/generate_components3.png b/tools/bevy_components/docs/generate_components3.png new file mode 100644 index 0000000000000000000000000000000000000000..685b64f6f3d5cf69b2385e1834c5b9fbc0fb1fb7 GIT binary patch literal 2477 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 literal 0 HcmV?d00001 diff --git a/tools/bevy_components/docs/registry_polling.png b/tools/bevy_components/docs/registry_polling.png new file mode 100644 index 0000000000000000000000000000000000000000..134533b45911adc568bb322b14b5a07a30978577 GIT binary patch literal 2318 zcmai0`8yMi174K)u<2ZdkLW;-ksOg3b8bG&If=@hqoE~aj!+iMk!n7OC803MF@{Y^ zSo^w4bI+A4J8~}3_VpKhzt8hN@B9AvKF|BZ`=&WM*Z}{M`wIX701>v9&H#XzVAmT- zitqA+@pb=QS#bQv)ylxYz}3|i3WY)-kn`uy+uPgQVC&S?)q{e9oSd9cC=?QjG&eW5 zwY9ajw$|6zXD}F}qoXb^E|HOu78Vv4E?nsE@7L7S92^|f)6?_z_J+Y=VPRq8FMd&(a}*?S4SWaI2_K)moI(s zbcbk)xhwYDBri6vyQzDowqvrAK2Cf)m{!_r?h<|ind<-m?4Lncn!Cn~atraqFJ?!~ zzILwfg~!7Aw7U1;Xf9XO)@67&{q^Nc#iN3WkI8GJ3L9bGNoN(5ewrPl2QH&cy&Ph` zYfrr{^EnRQGN}$B`c#;#dLC#xo!om`1W+H4x@DSW3{sZM+5txIS-j6@WmGDD9w1Hbd20CN{M< z{VFLwq@8<$x9;J+F??MGkRK@6)gqS{dhYxMg{~ESuK*>cy?(;}m=z-m+t9^5_Y0rDLvl|i*XR*C zH-0-u@NL$9qs3qzpv;BGx_xtJC=Xe4TffqS;|ySn_%Rr%0IUYq^s{AiWy43x?tO3GYPSvplJ12ZXqstd*qpKM09ngu~h2?hN zkwrbd{q&dyCkRN|NSYIMIYoSeI)JGzGY&n;dX;@!nZZ}jN-3brrc77AKcROy=*nVd z7%she^BA+>Ph8QXOT>YrQm*{nqtQ)_l^XFK9%&yN*Rdr2HH-?E|{e^|%iZ^+T%f%uFvX zT`R>FD-N(6cvJD&T!w@xoZrxH67^NbAho3ah$=TbKsdqNpiCeSMpT~%eS{$M=F+X zhF-i0k=m^yU${QThP7RT;wV?3eXRnC%D8vK`QU(+;Opu8qXnU}#s}tf_FeGk&Ak}m z)(dXzp=)-!>+W6uz4}H2dG_oJkMoUg=}8?{E$AF=%@10s;aIXyL=WXnnJdcf^jOsKP+A2@+O6PGr?}nR zUGNLGYL#*^8&5jFPU2Hy4KLn}={iUz||>M^k6GQqaCKD=geDVwwYut_c&LD7#1 zU&&=e(-OsOwgsq7cGq0q;7w<~VaBws4s+T6+xH5Am)BDdp1Cjk#)IWwpQlF$x0Nu2 z@o%oHp?b^_FX~O?_=oMK@`*}0!#D0>)q&#{vbuY`qS)b`H>YOT*@IsrDhv%HxR3G# z4ev_v=YlbJD&ASdiL4i7+3qb8p^FC=A>msY+G@q^(Z3N5%jgyyKP%-~&P=_9A38n! zO3FDPa2f|_CBes&_IeKa+FjuR+p$VzeB0F;!K8(a_Jyo9C zR|8f?7L2UrMgSYlmCQH$ds=UZV<=^}tzxAX9TB|}rlx%Tnf%OTEsUxd+%^`_LNtntDzZiQ z2|Tjzz&-28m++@SmbbtB1bIm)RRwxv7zBYf*a4*@`GHf|s_{?Lzg6lNlMg)OmckFw zFMrn|EtVuB8(Eao0^jRR$!)B=e2l|I0D;sA4v6g+p5mm{#sn(R8h^3hcL_}9wF^1v z6P`a|_oLKIV3ST-b^)LA1Fp?4qpw?BT;Uvpoq**4wxw|xgs~wA%NFbx@`sa!@~Eg! zJgo#tn@iv#(%azw;M~4JHX}s)jOl+kB*5f7k(T4O=%`8EFzHNEV)%CwpigsC>*o&o i|Lo@Os;(MtNw)o~k|pE4wY7V200=7w%WAlH@_zx!c9hrv literal 0 HcmV?d00001 diff --git a/tools/bevy_components/docs/update_ui_from_custom_properties.png b/tools/bevy_components/docs/update_ui_from_custom_properties.png new file mode 100644 index 0000000000000000000000000000000000000000..c2a1d9a09650e9be90cfe1912c66006adeefc88b GIT binary patch literal 4524 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 HwTt-=jB~%y literal 0 HcmV?d00001 diff --git a/tools/bevy_components/helpers.py b/tools/bevy_components/helpers.py index ad4d662..0c56e39 100644 --- a/tools/bevy_components/helpers.py +++ b/tools/bevy_components/helpers.py @@ -18,7 +18,6 @@ def make_empty(name, location, rotation, scale, collection): #bpy.context.view_layer.update() return empty_obj -#".gltf_auto_export_settings" def upsert_settings(name, data): stored_settings = bpy.data.texts[name] if name in bpy.data.texts else bpy.data.texts.new(name) stored_settings.clear() diff --git a/tools/bevy_components/propGroups/conversions.py b/tools/bevy_components/propGroups/conversions_from_prop_group.py similarity index 63% rename from tools/bevy_components/propGroups/conversions.py rename to tools/bevy_components/propGroups/conversions_from_prop_group.py index 57e3697..c1d5c61 100644 --- a/tools/bevy_components/propGroups/conversions.py +++ b/tools/bevy_components/propGroups/conversions_from_prop_group.py @@ -1,7 +1,5 @@ -import json from bpy_types import PropertyGroup - conversion_tables = { "bool": lambda value: value, @@ -99,9 +97,9 @@ def property_group_value_to_custom_property_value(property_group, definition, re value = getattr(property_group, variant_name) is_property_group = isinstance(value, PropertyGroup) child_property_group = value if is_property_group else None - + value = property_group_value_to_custom_property_value(child_property_group, variant_definition, registry, parent=component_name, value=value) - value = selected + str(value,) + value = selected + str(value,) #"{}{},".format(selected ,value) elif "properties" in variant_definition: value = getattr(property_group, variant_name) is_property_group = isinstance(value, PropertyGroup) @@ -110,8 +108,14 @@ def property_group_value_to_custom_property_value(property_group, definition, re value = property_group_value_to_custom_property_value(child_property_group, variant_definition, registry, parent=component_name, value=value) value = selected + str(value,) else: - print("basic enum stuff") - value = selected # here the value of the enum is just the name of the variant + value = getattr(property_group, variant_name) + is_property_group = isinstance(value, PropertyGroup) + child_property_group = value if is_property_group else None + if child_property_group: + value = property_group_value_to_custom_property_value(child_property_group, variant_definition, registry, parent=component_name, value=value) + value = selected + str(value,) + else: + value = selected # here the value of the enum is just the name of the variant else: value = selected @@ -131,9 +135,13 @@ def property_group_value_to_custom_property_value(property_group, definition, re value.append(item_value) else: value = conversion_tables[type_name](value) if is_value_type else value + value = '""' if isinstance(value, PropertyGroup) else value + - #print("VALUE", value, type(value)) #print("generating custom property value", value, type(value)) + if isinstance(value, str): + value = value.replace("'", "") + if parent == None: value = str(value).replace("'", "") value = value.replace(",)",")") @@ -141,81 +149,3 @@ def property_group_value_to_custom_property_value(property_group, definition, re value = value.replace("True", "true").replace("False", "false") return value -import re -#converts the value of a single custom property into a value (values) of a property group -def property_group_value_from_custom_property_value(property_group, definition, registry, custom_property_value): - #print(" ") - #print("setting property group value", property_group, definition, custom_property_value) - type_infos = registry.type_infos - value_types_defaults = registry.value_types_defaults - print("custom_property_value", custom_property_value) - - def parse_field(item, property_group, definition, field_name): - type_info = definition["typeInfo"] if "typeInfo" in definition else None - type_def = definition["type"] if "type" in definition else None - properties = definition["properties"] if "properties" in definition else {} - prefixItems = definition["prefixItems"] if "prefixItems" in definition else [] - has_properties = len(properties.keys()) > 0 - has_prefixItems = len(prefixItems) > 0 - is_enum = type_info == "Enum" - is_list = type_info == "List" - is_value_type = type_def in value_types_defaults - - print("parsing field", item, "type infos", type_info, "type_def", type_def) - if type_info == "Struct": - print("is object") - for field_name in property_group.field_names: - print("field name", field_name) - # sub field - if isinstance(getattr(property_group, field_name), PropertyGroup): - sub_prop_group = getattr(property_group, field_name) - ref_name = properties[field_name]["type"]["$ref"].replace("#/$defs/", "") - sub_definition = type_infos[ref_name] - parse_field(item[field_name], sub_prop_group, sub_definition, field_name) - else: - setattr(property_group, field_name, item[field_name]) - - if has_prefixItems: - if len(property_group.field_names) == 1: - setattr(property_group, "0", item) # FIXME: not ideal - else: - for field_name in property_group.field_names: - setattr(property_group, field_name, item) - if is_enum: - if type_def == "object": - regexp = re.search('(^[^\(]+)(\((.*)\))', item) - chosen_variant = regexp.group(1) - chosen_variant_value = regexp.group(3).replace("'", '"').replace("(", "[").replace(")","]") - chosen_variant_value = json.loads(chosen_variant_value) - - # first set chosen selection - field_name = property_group.field_names[0] - setattr(property_group, field_name, chosen_variant) - - # thenlook for the information about the matching variant - sub_definition= None - for variant in definition["oneOf"]: - if variant["title"] == chosen_variant: - ref_name = variant["prefixItems"][0]["type"]["$ref"].replace("#/$defs/", "") - sub_definition = type_infos[ref_name] - break - variant_name = "variant_"+chosen_variant - if isinstance(getattr(property_group, variant_name), PropertyGroup): - sub_prop_group = getattr(property_group, variant_name) - parse_field(chosen_variant_value, sub_prop_group, sub_definition, variant_name) - else: - setattr(property_group, variant_name, chosen_variant_value) - else: - field_name = property_group.field_names[0] - setattr(property_group, field_name, item) - - if is_list: - print("is list") - - if is_value_type: - print("is value type") - - try: - parse_field(custom_property_value, property_group, definition, None) - except Exception as error: - print("failed to parse raw custom property data", error) diff --git a/tools/bevy_components/propGroups/conversions_to_prop_group.py b/tools/bevy_components/propGroups/conversions_to_prop_group.py new file mode 100644 index 0000000..1bbfde2 --- /dev/null +++ b/tools/bevy_components/propGroups/conversions_to_prop_group.py @@ -0,0 +1,320 @@ +from bpy_types import PropertyGroup +import re + +def parse_struct_string(string, start_nesting=0): + #print("processing struct string", string, "start_nesting", start_nesting) + fields = {} + buff = [] + current_fieldName = None + nesting_level = 0 + + start_offset = 0 + end_offset = 0 + + for index, char in enumerate(string): + buff.append(char) + if char == "," and nesting_level == start_nesting: + #print("first case", end_offset) + end_offset = index + end_offset = len(string) if end_offset == 0 else end_offset + + val = "".join(string[start_offset:end_offset]) + fields[current_fieldName] = val.strip() + start_offset = index + 1 + #print("done with field name", current_fieldName, "value", fields[current_fieldName]) + + if char == "[" or char == "(": + nesting_level += 1 + if nesting_level == start_nesting: + start_offset = index + 1 + #print("nesting & setting start offset", start_offset) + #print("nesting down", nesting_level) + + if char == "]" or char == ")" : + #print("nesting up", nesting_level) + if nesting_level == start_nesting: + end_offset = index + #print("unesting & setting end offset", end_offset) + nesting_level -= 1 + + + if char == ":" and nesting_level == start_nesting: + end_offset = index + fieldName = "".join(string[start_offset:end_offset]) + current_fieldName = fieldName.strip() + start_offset = index + 1 + end_offset = 0 #hack + #print("starting field name", fieldName, "index", index) + buff = [] + + end_offset = len(string) if end_offset == 0 else end_offset + #print("final start and end offset", start_offset, end_offset, "total length", len(string)) + + val = "".join(string[start_offset:end_offset]) + + fields[current_fieldName] = val.strip() + #print("done with all fields", fields) + return fields + +def parse_tuplestruct_string(string, start_nesting=0): + #print("processing tuppleStruct", string, "start_nesting", start_nesting) + fields = [] + buff = [] + nesting_level = 0 + field_index = 0 + + start_offset = 0 + end_offset = 0 + # todo: strip all stuff before start_nesting + + for index, char in enumerate(string): + buff.append(char) + if char == "," and nesting_level == start_nesting: + end_offset = index + end_offset = len(string) if end_offset == 0 else end_offset + + val = "".join(string[start_offset:end_offset]) + fields.append(val.strip()) + field_index += 1 + #print("start and end offset", start_offset, end_offset, "total length", len(string)) + #print("done with field name", field_index, "value", fields) + start_offset = index + 1 + end_offset = 0 # hack + + if char == "[" or char == "(": + nesting_level += 1 + if nesting_level == start_nesting: + start_offset = index + 1 + #print("nesting & setting start offset", start_offset) + #print("nesting down", nesting_level) + + if char == "]" or char == ")" : + if nesting_level == start_nesting: + end_offset = index + #print("unesting & setting end offset", end_offset) + #print("nesting up", nesting_level) + nesting_level -= 1 + + + end_offset = len(string) if end_offset == 0 else end_offset + #print("final start and end offset", start_offset, end_offset, "total length", len(string)) + + val = "".join(string[start_offset:end_offset]) #if end_offset != 0 else buff) + fields.append(val.strip()) + fields = list(filter(lambda entry: entry != '', fields)) + #print("done with all fields", fields) + return fields + + +def parse_vec2(value, caster, typeName): + parsed = parse_struct_string(value.replace(typeName,"").replace("(", "").replace(")","") ) + return [caster(parsed['x']), caster(parsed['y'])] + +def parse_vec3(value, caster, typeName): + parsed = parse_struct_string(value.replace(typeName,"").replace("(", "").replace(")","") ) + return [caster(parsed['x']), caster(parsed['y']), caster(parsed['z'])] + +def parse_vec4(value, caster, typeName): + parsed = parse_struct_string(value.replace(typeName,"").replace("(", "").replace(")","") ) + return [caster(parsed['x']), caster(parsed['y']), caster(parsed['z']), caster(parsed['w'])] + +def parse_color(value, caster, typeName): + parsed = parse_struct_string(value.replace(typeName,"").replace("(", "").replace(")","") ) + return [caster(parsed['red']), caster(parsed['green']), caster(parsed['blue']), caster(parsed['alpha'])] + +def to_int(input): + return int(float(input)) + +type_mappings = { + "bool": lambda value: True if value == "true" else False, + + "u8": lambda value: int(value), + "u16": lambda value: int(value), + "u32": lambda value: int(value), + "u64": lambda value: int(value), + "u128": lambda value: int(value), + "u64": lambda value: int(value), + "usize": lambda value: int(value), + + "i8": lambda value: int(value), + "i16": lambda value: int(value), + "i32": lambda value: int(value), + "i64": lambda value: int(value), + "i128": lambda value: int(value), + "isize": lambda value: int(value), + + 'f32': lambda value: float(value), + 'f64': lambda value: float(value), + + "glam::Vec2": lambda value: parse_vec2(value, float, "Vec2"), + "glam::DVec2": lambda value: parse_vec2(value, float, "DVec2"), + "glam::UVec2": lambda value: parse_vec2(value, to_int, "UVec2"), + + 'glam::Vec3': lambda value: parse_vec3(value, float, "Vec3"), + "glam::Vec3A": lambda value: parse_vec3(value, float, "Vec3A"), + "glam::UVec3": lambda value: parse_vec3(value, to_int, "UVec3"), + + "glam::Vec4": lambda value: parse_vec4(value, float, "Vec4"), + "glam::DVec4": lambda value: parse_vec4(value, float, "DVec4"), + "glam::UVec4": lambda value: parse_vec4(value, to_int, "UVec4"), + + "glam::Quat": lambda value: parse_vec4(value, float, "Quat"), + + 'alloc::string::String': lambda value: str(value.replace('"', "")), + 'bevy_render::color::Color': lambda value: parse_color(value, float, "Rgba"), + 'bevy_ecs::Entity': lambda value: int(value), +} + +def is_def_value_type(definition, registry): + if definition == None: + return True + value_types_defaults = registry.value_types_defaults + type_name = definition["title"] + is_value_type = type_name in value_types_defaults + return is_value_type + +#converts the value of a single custom property into a value (values) of a property group +def property_group_value_from_custom_property_value(property_group, definition, registry, value, nesting = []): + value_types_defaults = registry.value_types_defaults + + type_info = definition["typeInfo"] if "typeInfo" in definition else None + type_def = definition["type"] if "type" in definition else None + properties = definition["properties"] if "properties" in definition else {} + prefixItems = definition["prefixItems"] if "prefixItems" in definition else [] + has_properties = len(properties.keys()) > 0 + has_prefixItems = len(prefixItems) > 0 + is_enum = type_info == "Enum" + is_list = type_info == "List" + type_name = definition["title"] + + #is_value_type = type_def in value_types_defaults or type_name in value_types_defaults + is_value_type = type_name in value_types_defaults + nesting = nesting + [definition["short_name"]] + + """print(" ") + print("raw value", value, "nesting", nesting) + print("nesting", len(nesting)) + print("definition", definition)""" + + if is_value_type: + value = value.replace("(", "").replace(")", "")# FIXME: temporary, incoherent use of nesting levels between parse_tuplestruct_string & parse_struct_string + value = type_mappings[type_name](value) if type_name in type_mappings else value + return value + elif type_info == "Struct": + if len(property_group.field_names) != 0 : + custom_property_values = parse_struct_string(value, start_nesting=1 if value.startswith("(") else 0) + for index, field_name in enumerate(property_group.field_names): + item_type_name = definition["properties"][field_name]["type"]["$ref"].replace("#/$defs/", "") + item_definition = registry.type_infos[item_type_name] if item_type_name in registry.type_infos else None + + custom_prop_value = custom_property_values[field_name] + #print("field name", field_name, "value", custom_prop_value) + propGroup_value = getattr(property_group, field_name) + is_property_group = isinstance(propGroup_value, PropertyGroup) + child_property_group = propGroup_value if is_property_group else None + if item_definition != None: + custom_prop_value = property_group_value_from_custom_property_value(child_property_group, item_definition, registry, value=custom_prop_value, nesting=nesting) + else: + custom_prop_value = custom_prop_value + + if is_def_value_type(item_definition, registry): + setattr(property_group , field_name, custom_prop_value) + + + else: + pass + #print("struct with zero fields") + + elif type_info == "Tuple": + custom_property_values = parse_tuplestruct_string(value, start_nesting=1 if len(nesting) == 1 else 1) + + for index, field_name in enumerate(property_group.field_names): + item_type_name = definition["prefixItems"][index]["type"]["$ref"].replace("#/$defs/", "") + item_definition = registry.type_infos[item_type_name] if item_type_name in registry.type_infos else None + + custom_property_value = custom_property_values[index] + + propGroup_value = getattr(property_group, field_name) + is_property_group = isinstance(propGroup_value, PropertyGroup) + child_property_group = propGroup_value if is_property_group else None + if item_definition != None: + custom_property_value = property_group_value_from_custom_property_value(child_property_group, item_definition, registry, value=custom_property_value, nesting=nesting) + if is_def_value_type(item_definition, registry): + setattr(property_group , field_name, custom_property_value) + + elif type_info == "TupleStruct": + custom_property_values = parse_tuplestruct_string(value, start_nesting=1 if len(nesting) == 1 else 0) + for index, field_name in enumerate(property_group.field_names): + item_type_name = definition["prefixItems"][index]["type"]["$ref"].replace("#/$defs/", "") + item_definition = registry.type_infos[item_type_name] if item_type_name in registry.type_infos else None + + custom_prop_value = custom_property_values[index] + + value = getattr(property_group, field_name) + is_property_group = isinstance(value, PropertyGroup) + child_property_group = value if is_property_group else None + if item_definition != None: + custom_prop_value = property_group_value_from_custom_property_value(child_property_group, item_definition, registry, value=custom_prop_value, nesting=nesting) + + if is_def_value_type(item_definition, registry): + setattr(property_group , field_name, custom_prop_value) + + elif type_info == "Enum": + field_names = property_group.field_names + if type_def == "object": + regexp = re.search('(^[^\(]+)(\((.*)\))', value) + try: + chosen_variant_raw = regexp.group(1) + chosen_variant_value = regexp.group(3) + chosen_variant_name = "variant_" + chosen_variant_raw + except: + chosen_variant_raw = value + chosen_variant_value = "" + chosen_variant_name = "variant_" + chosen_variant_raw + selection_index = property_group.field_names.index(chosen_variant_name) + variant_definition = definition["oneOf"][selection_index-1] + # first we set WHAT variant is selected + setattr(property_group, field_names[0], chosen_variant_raw) + + # and then we set the value of the variant + if "prefixItems" in variant_definition: + value = getattr(property_group, chosen_variant_name) + is_property_group = isinstance(value, PropertyGroup) + child_property_group = value if is_property_group else None + + chosen_variant_value = "(" +chosen_variant_value +")" # needed to handle nesting correctly + value = property_group_value_from_custom_property_value(child_property_group, variant_definition, registry, value=chosen_variant_value, nesting=nesting) + + elif "properties" in variant_definition: + value = getattr(property_group, chosen_variant_name) + is_property_group = isinstance(value, PropertyGroup) + child_property_group = value if is_property_group else None + + value = property_group_value_from_custom_property_value(child_property_group, variant_definition, registry, value=chosen_variant_value, nesting=nesting) + + else: + chosen_variant_raw = value + setattr(property_group, field_names[0], chosen_variant_raw) + + elif type_info == "List": + item_list = getattr(property_group, "list") + item_type_name = getattr(property_group, "type_name_short") + custom_property_values = parse_tuplestruct_string(value, start_nesting=2 if item_type_name.startswith("wrapper_") and value.startswith('(') else 1) # TODO : the additional check here is wrong, there is an issue somewhere in higher level stuff + # clear list first + item_list.clear() + #print("custom_property_values", custom_property_values, "value", value, "item_type_name", item_type_name) + + for raw_value in custom_property_values: + new_entry = item_list.add() + item_type_name = getattr(new_entry, "type_name") # we get the REAL type name + definition = registry.type_infos[item_type_name] if item_type_name in registry.type_infos else None + + if definition != None: + property_group_value_from_custom_property_value(new_entry, definition, registry, value=raw_value, nesting=nesting) + else: + try: + value = value.replace("(", "").replace(")", "")# FIXME: temporary, incoherent use of nesting levels between parse_tuplestruct_string & parse_struct_string + value = type_mappings[type_name](value) if type_name in type_mappings else value + return value + except: + pass \ No newline at end of file diff --git a/tools/bevy_components/propGroups/process_component.py b/tools/bevy_components/propGroups/process_component.py index c10d8ef..1ed8363 100644 --- a/tools/bevy_components/propGroups/process_component.py +++ b/tools/bevy_components/propGroups/process_component.py @@ -59,7 +59,6 @@ def process_component(registry, definition, update, extras=None, nesting = []): root_component = nesting[0] if len(nesting) > 0 else component_name # print("DONE:",short_name,"__annotations__", __annotations__) # print("") - # property_group_name = short_name+"_ui" property_group_params = { **extras, '__annotations__': __annotations__, @@ -75,8 +74,7 @@ def process_component(registry, definition, update, extras=None, nesting = []): -BasicTest => the registration & update callback of this one overwrites the first "basicTest" have not found a cleaner workaround so far """ - property_group_name = str(hash(str(nesting))) + short_name+"_ui" if len(nesting) > 0 else short_name+"_ui" - + property_group_name = registry.generate_propGroup_name(nesting, short_name) (property_group_pointer, property_group_class) = property_group_from_infos(property_group_name, property_group_params) # add our component propertyGroup to the registry registry.register_component_propertyGroup(property_group_name, property_group_pointer) diff --git a/tools/bevy_components/propGroups/process_enum.py b/tools/bevy_components/propGroups/process_enum.py index efd316a..e7a1e24 100644 --- a/tools/bevy_components/propGroups/process_enum.py +++ b/tools/bevy_components/propGroups/process_enum.py @@ -7,7 +7,7 @@ def process_enum(registry, definition, update, nesting): type_def = definition["type"] if "type" in definition else None values = definition["oneOf"] - nesting = nesting+ [short_name] + nesting = nesting + [short_name] __annotations__ = {} original_type_name = "enum" diff --git a/tools/bevy_components/propGroups/process_list.py b/tools/bevy_components/propGroups/process_list.py index ed332ff..0d9fc73 100644 --- a/tools/bevy_components/propGroups/process_list.py +++ b/tools/bevy_components/propGroups/process_list.py @@ -11,6 +11,7 @@ def process_list(registry, definition, update, nesting=[]): item_definition = type_infos[ref_name] item_long_name = item_definition["title"] + item_short_name = item_definition["short_name"] is_item_value_type = item_long_name in value_types_defaults property_group_class = None @@ -24,10 +25,11 @@ def process_list(registry, definition, update, nesting=[]): nesting = nesting+[short_name] item_collection = CollectionProperty(type=property_group_class) + item_short_name = item_short_name if not is_item_value_type else "wrapper_" + item_short_name __annotations__ = { "list": item_collection, "list_index": IntProperty(name = "Index for list", default = 0, update=update), - "type_name_short": StringProperty(default=short_name) + "type_name_short": StringProperty(default=item_short_name) } return __annotations__ \ No newline at end of file diff --git a/tools/bevy_components/propGroups/prop_groups.py b/tools/bevy_components/propGroups/prop_groups.py index 35c0302..8ac1a1b 100644 --- a/tools/bevy_components/propGroups/prop_groups.py +++ b/tools/bevy_components/propGroups/prop_groups.py @@ -1,5 +1,5 @@ import bpy -from .conversions import property_group_value_to_custom_property_value +from .conversions_from_prop_group import property_group_value_to_custom_property_value from .process_component import process_component from .utils import update_calback_helper @@ -8,21 +8,23 @@ def update_component(self, context, definition, component_name): registry = bpy.context.window_manager.components_registry current_object = bpy.context.object update_disabled = current_object["__disable__update"] if "__disable__update" in current_object else False + update_disabled = registry.disable_all_object_updates or update_disabled # global settings if update_disabled: return print("") - print("update in component", component_name, self) + print("update in component", component_name, self, "current_object", current_object.name) components_in_object = current_object.components_meta.components component_meta = next(filter(lambda component: component["name"] == component_name, components_in_object), None) if component_meta != None: - self = getattr(component_meta, component_name+"_ui") + property_group_name = registry.get_propertyGroupName_from_shortName(component_name) + self = getattr(component_meta, property_group_name) # we use our helper to set the values context.object[component_name] = property_group_value_to_custom_property_value(self, definition, registry, None) def generate_propertyGroups_for_components(): registry = bpy.context.window_manager.components_registry - if registry.type_infos == None: + if not registry.has_type_infos(): registry.load_type_infos() type_infos = registry.type_infos @@ -33,6 +35,6 @@ def generate_propertyGroups_for_components(): is_component = definition['isComponent'] if "isComponent" in definition else False root_property_name = short_name if is_component else None process_component(registry, definition, update_calback_helper(definition, update_component, root_property_name), None, []) - + # if we had to add any wrapper types on the fly, process them now registry.process_custom_types() \ No newline at end of file diff --git a/tools/bevy_components/pytest.ini b/tools/bevy_components/pytest.ini new file mode 100644 index 0000000..7f369af --- /dev/null +++ b/tools/bevy_components/pytest.ini @@ -0,0 +1,3 @@ +[pytest] +testpaths = + tests \ No newline at end of file diff --git a/tools/bevy_components/registry/operators.py b/tools/bevy_components/registry/operators.py index 58d124d..8abee81 100644 --- a/tools/bevy_components/registry/operators.py +++ b/tools/bevy_components/registry/operators.py @@ -5,8 +5,7 @@ from bpy.props import (StringProperty) from bpy_extras.io_utils import ImportHelper from ..helpers import upsert_settings -from ..components.metadata import apply_propertyGroup_values_to_object_customProperties, ensure_metadata_for_all_objects -from ..components.operators import GenerateComponent_From_custom_property_Operator +from ..components.metadata import apply_customProperty_values_to_object_propertyGroups, apply_propertyGroup_values_to_object_customProperties, ensure_metadata_for_all_objects from ..propGroups.prop_groups import generate_propertyGroups_for_components class ReloadRegistryOperator(Operator): @@ -18,7 +17,7 @@ class ReloadRegistryOperator(Operator): component_type: StringProperty( name="component_type", description="component type to add", - ) + ) # type: ignore def execute(self, context): print("reload registry") @@ -28,7 +27,12 @@ class ReloadRegistryOperator(Operator): print("") print("") ensure_metadata_for_all_objects() - #add_metadata_to_components_without_metadata(context.object) + + # now force refresh the ui + for area in context.screen.areas: + for region in area.regions: + if region.type == "UI": + region.tag_redraw() return {'FINISHED'} @@ -47,7 +51,7 @@ class COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_ALL(Operator): return {'FINISHED'} class COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_CURRENT(Operator): - """Apply registry to CURRENT object: update the custom property values of all objects based on their definition, if any""" + """Apply registry to CURRENT object: update the custom property values of current object based on their definition, if any""" bl_idname = "object.refresh_custom_properties_current" bl_label = "Apply Registry to current object" bl_options = {"UNDO"} @@ -57,6 +61,53 @@ class COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_CURRENT(Operator): object = context.object apply_propertyGroup_values_to_object_customProperties(object) return {'FINISHED'} + + +class COMPONENTS_OT_REFRESH_PROPGROUPS_FROM_CUSTOM_PROPERTIES_CURRENT(Operator): + """Update UI values from custom properties to CURRENT object""" + bl_idname = "object.refresh_ui_from_custom_properties_current" + bl_label = "Apply custom_properties to current object" + bl_options = {"UNDO"} + + def execute(self, context): + print("apply custom properties to current object") + object = context.object + error = False + try: + apply_customProperty_values_to_object_propertyGroups(object) + except Exception as error: + del object["__disable__update"] # make sure custom properties are updateable afterwards, even in the case of failure + error = True + self.report({'ERROR'}, "Failed to update propertyGroup values from custom property: Error:" + str(error)) + if not error: + self.report({'INFO'}, "Sucessfully generated UI values for custom properties for selected object") + + return {'FINISHED'} + +class COMPONENTS_OT_REFRESH_PROPGROUPS_FROM_CUSTOM_PROPERTIES_ALL(Operator): + """Update UI values from custom properties to ALL object""" + bl_idname = "object.refresh_ui_from_custom_properties_all" + bl_label = "Apply custom_properties to all objects" + bl_options = {"UNDO"} + + def execute(self, context): + print("apply custom properties to all object") + bpy.context.window_manager.components_registry.disable_all_object_updates = True + errors = [] + for object in bpy.data.objects: + try: + apply_customProperty_values_to_object_propertyGroups(object) + except Exception as error: + del object["__disable__update"] # make sure custom properties are updateable afterwards, even in the case of failure + errors.append( "object: '" + object.name + "', error: " + str(error)) + if len(errors) > 0: + self.report({'ERROR'}, "Failed to update propertyGroup values from custom property: Errors:" + str(errors)) + else: + self.report({'INFO'}, "Sucessfully generated UI values for custom properties for all objects") + bpy.context.window_manager.components_registry.disable_all_object_updates = False + + + return {'FINISHED'} class OT_OpenFilebrowser(Operator, ImportHelper): """Browse for registry json file""" @@ -66,7 +117,7 @@ class OT_OpenFilebrowser(Operator, ImportHelper): filter_glob: StringProperty( default='*.json', options={'HIDDEN'} - ) + ) # type: ignore def execute(self, context): """Do something with the selected file(s).""" #filename, extension = os.path.splitext(self.filepath) diff --git a/tools/bevy_components/registry/registry.py b/tools/bevy_components/registry/registry.py index 063b65d..9312cbf 100644 --- a/tools/bevy_components/registry/registry.py +++ b/tools/bevy_components/registry/registry.py @@ -1,16 +1,58 @@ import bpy import json import os +import uuid from pathlib import Path from bpy_types import (PropertyGroup) from bpy.props import (StringProperty, BoolProperty, FloatProperty, FloatVectorProperty, IntProperty, IntVectorProperty, EnumProperty, PointerProperty, CollectionProperty) -from ..components.metadata import ComponentInfos + +from ..helpers import load_settings +from ..propGroups.prop_groups import generate_propertyGroups_for_components +from ..components.metadata import ComponentMetadata, ensure_metadata_for_all_objects # helper class to store missing bevy types information class MissingBevyType(bpy.types.PropertyGroup): type_name: bpy.props.StringProperty( name="type", - ) + ) # type: ignore + +# helper function to deal with timer +def toggle_watcher(self, context): + print("toggling watcher", self.watcher_enabled, watch_schema, self, bpy.app.timers) + if not self.watcher_enabled: + try: + bpy.app.timers.unregister(watch_schema) + except Exception as error: + print("failed to unregister", error) + pass + else: + self.watcher_active = True + bpy.app.timers.register(watch_schema) + +def watch_schema(): + self = bpy.context.window_manager.components_registry + print("watching schema file for changes") + try: + stamp = os.stat(self.schemaFullPath).st_mtime + stamp = str(stamp) + if stamp != self.schemaTimeStamp and self.schemaTimeStamp != "": + print("FILE CHANGED !!", stamp, self.schemaTimeStamp) + # see here for better ways : https://stackoverflow.com/questions/11114492/check-if-a-file-is-not-open-nor-being-used-by-another-process + """try: + os.rename(path, path) + #return False + except OSError: # file is in use + print("in use") + #return True""" + #bpy.ops.object.reload_registry() + # we need to add an additional delay as the file might not have loaded yet + bpy.app.timers.register(lambda: bpy.ops.object.reload_registry(), first_interval=1) + + self.schemaTimeStamp = stamp + except Exception as error: + pass + return self.watcher_poll_frequency if self.watcher_enabled else None + # this is where we store the information for all available components class ComponentsRegistry(PropertyGroup): @@ -21,20 +63,45 @@ class ComponentsRegistry(PropertyGroup): name="schema path", description="path to the registry schema file", default="registry.json" - ) + )# type: ignore + schemaFullPath : bpy.props.StringProperty( + name="schema full path", + description="path to the registry schema file", + )# type: ignore registry: bpy.props. StringProperty( name="registry", description="component registry" - ) + )# type: ignore missing_type_infos: StringProperty( name="missing type infos", description="unregistered/missing type infos" - ) + )# type: ignore - missing_types_list: CollectionProperty(name="missing types list", type=MissingBevyType) - missing_types_list_index: IntProperty(name = "Index for missing types list", default = 0) + disable_all_object_updates: BoolProperty(name="disable_object_updates", default=False) # type: ignore + + ## file watcher + watcher_enabled: BoolProperty(name="Watcher_enabled", default=True, update=toggle_watcher)# type: ignore + watcher_active: BoolProperty(name = "Flag for watcher status", default = False)# type: ignore + + watcher_poll_frequency: IntProperty( + name="watcher poll frequency", + description="frequency (s) at wich to poll for changes to the registry file", + min=1, + max=10, + default=1 + )# type: ignore + + schemaTimeStamp: StringProperty( + name="last timestamp of schema file", + description="", + default="" + )# type: ignore + + + missing_types_list: CollectionProperty(name="missing types list", type=MissingBevyType)# type: ignore + missing_types_list_index: IntProperty(name = "Index for missing types list", default = 0)# type: ignore blender_property_mapping = { "bool": dict(type=BoolProperty, presets=dict()), @@ -52,6 +119,7 @@ class ComponentsRegistry(PropertyGroup): "i32":dict(type=IntProperty, presets=dict()), "i64":dict(type=IntProperty, presets=dict()), "i128":dict(type=IntProperty, presets=dict()), + "isize": dict(type=IntProperty, presets=dict()), "f32": dict(type=FloatProperty, presets=dict()), "f64": dict(type=FloatProperty, presets=dict()), @@ -77,9 +145,14 @@ class ComponentsRegistry(PropertyGroup): "char": dict(type=StringProperty, presets=dict()), "str": dict(type=StringProperty, presets=dict()), "alloc::string::String": dict(type=StringProperty, presets=dict()), + "alloc::borrow::Cow": dict(type=StringProperty, presets=dict()), + + "enum": dict(type=EnumProperty, presets=dict()), - #"alloc::vec::Vec": dict(type=CollectionProperty, presets=dict(type=PointerProperty(StringProperty))), #FIXME: we need more generic stuff + 'bevy_ecs::Entity': {"type": IntProperty, "presets": {"min":0} }, + 'bevy_utils::Uuid': dict(type=StringProperty, presets=dict()), + } @@ -98,12 +171,14 @@ class ComponentsRegistry(PropertyGroup): "u32":0, "u64":0, "u128":0, + "usize":0, "i8": 0, "i16":0, "i32":0, "i64":0, "i128":0, + "isize":0, "f32": 0.0, "f64":0.0, @@ -111,6 +186,7 @@ class ComponentsRegistry(PropertyGroup): "char": " ", "str": " ", "alloc::string::String": " ", + "alloc::borrow::Cow": " ", "glam::Vec2": [0.0, 0.0], "glam::DVec2": [0.0, 0.0], @@ -127,40 +203,66 @@ class ComponentsRegistry(PropertyGroup): "glam::Quat": [0.0, 0.0, 0.0, 0.0], "bevy_render::color::Color": [1.0, 1.0, 0.0, 1.0], + + 'bevy_ecs::Entity': 0,#4294967295, # this is the same as Bevy's Entity::Placeholder, too big for Blender..sigh + 'bevy_utils::Uuid': '"'+str(uuid.uuid4())+'"' + } - type_infos = None + type_infos = {} type_infos_missing = [] component_propertyGroups = {} short_names_to_long_names = {} - + custom_types_to_add = {} + invalid_components = [] @classmethod def register(cls): bpy.types.WindowManager.components_registry = PointerProperty(type=ComponentsRegistry) + bpy.context.window_manager.components_registry.watcher_active = False @classmethod def unregister(cls): + bpy.context.window_manager.components_registry.watcher_active = False + for propgroup_name in cls.component_propertyGroups.keys(): try: - delattr(ComponentInfos, propgroup_name) - print("unregistered propertyGroup", propgroup_name) + delattr(ComponentMetadata, propgroup_name) + #print("unregistered propertyGroup", propgroup_name) except Exception as error: pass - #print("failed to remove", error, "ComponentInfos") + #print("failed to remove", error, "ComponentMetadata") - del bpy.types.WindowManager.components_registry - - def load_schema(self): - # cleanup missing types list - self.missing_types_list.clear() - self.type_infos = None - self.type_infos_missing.clear() - file_path = bpy.data.filepath + try: + bpy.app.timers.unregister(watch_schema) + except Exception as error: + print("failed to unregister", error) + pass + del bpy.types.WindowManager.components_registry + + + + + def load_schema(self): + print("load schema", self) + # cleanup previous data if any + self.propGroupIdCounter = 0 + self.short_names_to_propgroup_names.clear() + self.missing_types_list.clear() + self.type_infos.clear() + self.type_infos_missing.clear() + self.component_propertyGroups.clear() + self.short_names_to_long_names.clear() + self.custom_types_to_add.clear() + self.invalid_components.clear() + + # now prepare paths to load data + file_path = bpy.data.filepath # Get the folder folder_path = os.path.dirname(file_path) path = os.path.join(folder_path, self.schemaPath) + self.schemaFullPath = path f = Path(bpy.path.abspath(path)) # make a path object of abs path with open(path) as f: @@ -168,9 +270,32 @@ class ComponentsRegistry(PropertyGroup): defs = data["$defs"] self.registry = json.dumps(defs) # FIXME:meh ? + # start timer + if not self.watcher_active and self.watcher_enabled: + self.watcher_active = True + print("registering function", watch_schema) + bpy.app.timers.register(watch_schema) + + # we load the json once, so we do not need to do it over & over again def load_type_infos(self): + print("load type infos") ComponentsRegistry.type_infos = json.loads(self.registry) + + def has_type_infos(self): + return len(self.type_infos.keys()) != 0 + + def load_settings(self): + print("loading settings") + settings = load_settings(self.settings_save_path) + + if settings!= None: + print("settings", settings) + self.schemaPath = settings["schemaPath"] + self.load_schema() + generate_propertyGroups_for_components() + ensure_metadata_for_all_objects() + # we keep a list of component propertyGroup around def register_component_propertyGroup(self, name, propertyGroup): @@ -188,7 +313,6 @@ class ComponentsRegistry(PropertyGroup): item = self.missing_types_list.add() item.type_name = type_name - custom_types_to_add = {} def add_custom_type(self, type_name, type_definition): self.custom_types_to_add[type_name] = type_definition @@ -197,9 +321,41 @@ class ComponentsRegistry(PropertyGroup): self.type_infos[type_name] = self.custom_types_to_add[type_name] self.custom_types_to_add.clear() - invalid_components = [] def add_invalid_component(self, component_name): self.invalid_components.append(component_name) + + + ########### + + propGroupIdCounter: IntProperty( + name="propGroupIdCounter", + description="", + min=0, + max=1000000000, + default=0 + ) # type: ignore + + short_names_to_propgroup_names = {} + + # generate propGroup name from nesting level & shortName: each shortName + nesting is unique + def generate_propGroup_name(self, nesting, shortName): + #print("gen propGroup name for", shortName, nesting) + #if shortName in self.short_names_to_propgroup_names and len(nesting) == 0: + # return self.get_propertyGroupName_from_shortName(shortName) + + self.propGroupIdCounter += 1 + + propGroupIndex = str(self.propGroupIdCounter) + propGroupName = propGroupIndex + "_ui" + key = str(nesting) + shortName if len(nesting) > 0 else shortName + self.short_names_to_propgroup_names[key] = propGroupName + return propGroupName + + def get_propertyGroupName_from_shortName(self, shortName): + + return self.short_names_to_propgroup_names.get(shortName, None) + + """ object[component_definition.name] = 0.5 property_manager = object.id_properties_ui(component_definition.name) diff --git a/tools/bevy_components/registry/ui.py b/tools/bevy_components/registry/ui.py index 5cced14..18ff21a 100644 --- a/tools/bevy_components/registry/ui.py +++ b/tools/bevy_components/registry/ui.py @@ -1,6 +1,11 @@ import bpy from bpy_types import (UIList) -from .operators import(OT_OpenFilebrowser, ReloadRegistryOperator, COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_ALL, COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_CURRENT) +from .operators import( + COMPONENTS_OT_REFRESH_PROPGROUPS_FROM_CUSTOM_PROPERTIES_ALL, + COMPONENTS_OT_REFRESH_PROPGROUPS_FROM_CUSTOM_PROPERTIES_CURRENT, + OT_OpenFilebrowser, ReloadRegistryOperator, + COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_ALL, + COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_CURRENT) class BEVY_COMPONENTS_PT_Configuration(bpy.types.Panel): bl_idname = "BEVY_COMPONENTS_PT_Configuration" @@ -16,6 +21,7 @@ class BEVY_COMPONENTS_PT_Configuration(bpy.types.Panel): def draw(self, context): layout = self.layout registry = context.window_manager.components_registry + registry_has_type_infos = registry.has_type_infos() selected_object = context.selected_objects[0] if len(context.selected_objects) > 0 else None row = layout.row() @@ -28,6 +34,12 @@ class BEVY_COMPONENTS_PT_Configuration(bpy.types.Panel): layout.separator() layout.operator(ReloadRegistryOperator.bl_idname, text="reload registry" , icon="FILE_REFRESH") + layout.separator() + row = layout.row() + + row.prop(registry, "watcher_enabled", text="enable registry file polling") + row.prop(registry, "watcher_poll_frequency", text="registry file poll frequency (s)") + layout.separator() layout.separator() @@ -36,13 +48,26 @@ class BEVY_COMPONENTS_PT_Configuration(bpy.types.Panel): row.alert = True row = layout.row() - row.operator(COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_CURRENT.bl_idname, text="update custom properties of current object" , icon="FILE_REFRESH") - row.enabled = registry.type_infos != None and selected_object is not None + row.operator(COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_CURRENT.bl_idname, text="update custom properties of current object" , icon="LOOP_FORWARDS") + row.enabled = registry_has_type_infos and selected_object is not None layout.separator() row = layout.row() - row.operator(COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_ALL.bl_idname, text="update custom properties of ALL objects" , icon="FILE_REFRESH") - row.enabled = registry.type_infos != None + row.operator(COMPONENTS_OT_REFRESH_CUSTOM_PROPERTIES_ALL.bl_idname, text="update custom properties of ALL objects" , icon="LOOP_FORWARDS") + row.enabled = registry_has_type_infos + + row = layout.row() + row.label(text="WARNING ! The following operations will try to overwrite your existing ui values if they have matching types on the bevy side !") + row.alert = True + + row = layout.row() + row.operator(COMPONENTS_OT_REFRESH_PROPGROUPS_FROM_CUSTOM_PROPERTIES_CURRENT.bl_idname, text="update UI FROM custom properties of current object" , icon="LOOP_BACK") + row.enabled = registry_has_type_infos and selected_object is not None + + layout.separator() + row = layout.row() + row.operator(COMPONENTS_OT_REFRESH_PROPGROUPS_FROM_CUSTOM_PROPERTIES_ALL.bl_idname, text="update UI FROM custom properties of ALL objects" , icon="LOOP_BACK") + row.enabled = registry_has_type_infos class BEVY_COMPONENTS_PT_MissingTypesPanel(bpy.types.Panel): diff --git a/tools/bevy_components/tests/__init__.py b/tools/bevy_components/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tools/bevy_components/tests/component_values_shuffler.py b/tools/bevy_components/tests/component_values_shuffler.py new file mode 100644 index 0000000..1de4f0d --- /dev/null +++ b/tools/bevy_components/tests/component_values_shuffler.py @@ -0,0 +1,216 @@ + +import random +import string +import uuid +from bpy_types import PropertyGroup + +def random_bool(): + return bool(random.getrandbits(1)) + +def rand_int(): + return random.randint(0, 100) + +def rand_float(): + return random.random() + +def random_word(length): + letters = string.ascii_lowercase + return ''.join(random.choice(letters) for i in range(length)) + +def random_vec(length, type,): + value = [] + for i in range(0, length): + if type == 'float': + value.append(rand_float()) + if type == 'int': + value.append(rand_int()) + return value + +type_mappings = { + "bool": random_bool, + + "u8": rand_int, + "u16": rand_int, + "u32": rand_int, + "u64": rand_int, + "u128": rand_int, + "u64": rand_int, + "usize": rand_int, + + "i8": rand_int, + "i16": rand_int, + "i32": rand_int, + "i64": rand_int, + "i128": rand_int, + "isize": rand_int, + + 'f32': rand_float, + 'f64': rand_float, + + "glam::Vec2": lambda : random_vec(2, 'float'), + "glam::DVec2": lambda : random_vec(2, 'float'), + "glam::UVec2": lambda : random_vec(2, 'int'), + + 'glam::Vec3': lambda : random_vec(3, 'float'), + "glam::Vec3A": lambda : random_vec(3, 'float'), + "glam::UVec3": lambda : random_vec(3, 'int'), + + "glam::Vec4": lambda : random_vec(4, 'float'), + "glam::DVec4": lambda : random_vec(4, 'float'), + "glam::UVec4": lambda : random_vec(4, 'int'), + + "glam::Quat": lambda : random_vec(4, 'float'), + + 'bevy_render::color::Color': lambda : random_vec(4, 'float'), + 'alloc::string::String': lambda : random_word(8), + 'alloc::borrow::Cow': lambda : random_word(8), + + 'bevy_ecs::Entity': lambda: 0, #4294967295, # + 'bevy_utils::Uuid': lambda: '"'+str( uuid.UUID("73b3b118-7d01-4778-8bcc-4e79055f5d22") )+'"' +} +# + +def is_def_value_type(definition, registry): + if definition == None: + return True + value_types_defaults = registry.value_types_defaults + type_name = definition["title"] + is_value_type = type_name in value_types_defaults + return is_value_type + +# see https://docs.python.org/3/library/random.html +def component_values_shuffler(seed=1, property_group=None, definition=None, registry=None, parent=None): + if parent == None: + random.seed(seed) + + value_types_defaults = registry.value_types_defaults + component_name = definition["short_name"] + type_info = definition["typeInfo"] if "typeInfo" in definition else None + type_def = definition["type"] if "type" in definition else None + properties = definition["properties"] if "properties" in definition else {} + prefixItems = definition["prefixItems"] if "prefixItems" in definition else [] + has_properties = len(properties.keys()) > 0 + has_prefixItems = len(prefixItems) > 0 + is_enum = type_info == "Enum" + is_list = type_info == "List" + type_name = definition["title"] + + #is_value_type = type_def in value_types_defaults or type_name in value_types_defaults + is_value_type = type_name in value_types_defaults + + if is_value_type: + fieldValue = type_mappings[type_name]() + return fieldValue + + elif type_info == "Struct": + for index, field_name in enumerate(property_group.field_names): + item_type_name = definition["properties"][field_name]["type"]["$ref"].replace("#/$defs/", "") + item_definition = registry.type_infos[item_type_name] if item_type_name in registry.type_infos else None + + value = getattr(property_group, field_name) + is_property_group = isinstance(value, PropertyGroup) + child_property_group = value if is_property_group else None + if item_definition != None: + value = component_values_shuffler(seed, child_property_group, item_definition, registry, parent=component_name) + else: + value = '""' + is_item_value_type = is_def_value_type(item_definition, registry) + if is_item_value_type: + #print("setting attr", field_name , "for", component_name, "to", value, "value type", is_item_value_type) + setattr(property_group , field_name, value) + + elif type_info == "Tuple": + #print("tup") + + for index, field_name in enumerate(property_group.field_names): + item_type_name = definition["prefixItems"][index]["type"]["$ref"].replace("#/$defs/", "") + item_definition = registry.type_infos[item_type_name] if item_type_name in registry.type_infos else None + + value = getattr(property_group, field_name) + is_property_group = isinstance(value, PropertyGroup) + child_property_group = value if is_property_group else None + if item_definition != None: + value = component_values_shuffler(seed, child_property_group, item_definition, registry, parent=component_name) + else: + value = '""' + + is_item_value_type = is_def_value_type(item_definition, registry) + if is_item_value_type: + #print("setting attr", field_name , "for", component_name, "to", value, "value type", is_item_value_type) + setattr(property_group , field_name, value) + + elif type_info == "TupleStruct": + #print("tupstruct") + for index, field_name in enumerate(property_group.field_names): + item_type_name = definition["prefixItems"][index]["type"]["$ref"].replace("#/$defs/", "") + item_definition = registry.type_infos[item_type_name] if item_type_name in registry.type_infos else None + + value = getattr(property_group, field_name) + is_property_group = isinstance(value, PropertyGroup) + child_property_group = value if is_property_group else None + if item_definition != None: + value = component_values_shuffler(seed, child_property_group, item_definition, registry, parent=component_name) + else: + value = '""' + + is_item_value_type = is_def_value_type(item_definition, registry) + if is_item_value_type: + setattr(property_group , field_name, value) + + elif type_info == "Enum": + available_variants = definition["oneOf"] if type_def != "object" else list(map(lambda x: x["title"], definition["oneOf"])) + selected = random.choice(available_variants) + + # set selected variant + setattr(property_group , component_name, selected) + + if type_def == "object": + selection_index = property_group.field_names.index("variant_"+selected) + variant_name = property_group.field_names[selection_index] + variant_definition = definition["oneOf"][selection_index-1] + if "prefixItems" in variant_definition: + value = getattr(property_group, variant_name) + is_property_group = isinstance(value, PropertyGroup) + child_property_group = value if is_property_group else None + + value = component_values_shuffler(seed, child_property_group, variant_definition, registry, parent=component_name) + value = selected + str(value,) + elif "properties" in variant_definition: + value = getattr(property_group, variant_name) + is_property_group = isinstance(value, PropertyGroup) + child_property_group = value if is_property_group else None + + value = component_values_shuffler(seed, child_property_group, variant_definition, registry, parent=component_name) + value = selected + str(value,) + else: + value = selected # here the value of the enum is just the name of the variant + else: + value = selected + + + + elif type_info == "List": + item_list = getattr(property_group, "list") + item_list.clear() + + item_type_name = getattr(property_group, "type_name_short") + number_of_list_items_to_add = random.randint(1, 2) + + for i in range(0, number_of_list_items_to_add): + new_entry = item_list.add() + item_type_name = getattr(new_entry, "type_name") # we get the REAL type name + definition = registry.type_infos[item_type_name] if item_type_name in registry.type_infos else None + + if definition != None: + component_values_shuffler(seed, new_entry, definition, registry, parent=component_name) + else: + pass + else: + print("something else") + fieldValue = type_mappings[type_name]() + return fieldValue + + #return value + + + \ No newline at end of file diff --git a/tools/bevy_components/tests/expected_component_values.py b/tools/bevy_components/tests/expected_component_values.py new file mode 100644 index 0000000..533a6d8 --- /dev/null +++ b/tools/bevy_components/tests/expected_component_values.py @@ -0,0 +1,427 @@ + + +expected_custom_property_values = {'AComponentWithAnExtremlyExageratedOrMaybeNotButCouldBeNameOrWut': '', + 'Aabb': '(center: Vec3A(x:0.0, y:0.0, z:0.0), half_extents: Vec3A(x:0.0, y:0.0, z:0.0))', + 'AdditionalMassProperties': 'Mass(0.0)', + 'AmbientLightSettings': '(brightness: 0.0, color: Rgba(red:1.0, green:1.0, blue:0.0, alpha:1.0))', + 'AnimationPlayer': '(animation: "", paused: true)', + 'Animations': '(named_animations: "")', + 'AutoAABBCollider': 'Cuboid', + 'BackgroundColor': '(Rgba(red:1.0, green:1.0, blue:0.0, alpha:1.0))', + 'BasicTest': '(a: 0.0, b: 0, c: " ")', + 'BloomSettings': '(composite_mode: EnergyConserving, high_pass_frequency: 0.0, intensity: 0.0, low_frequency_boost: ' + '0.0, low_frequency_boost_curvature: 0.0, prefilter_settings: (threshold: 0.0, threshold_softness: ' + '0.0))', + 'BlueprintName': '(" ")', + 'BorderColor': '(Rgba(red:1.0, green:1.0, blue:0.0, alpha:1.0))', + 'Button': '', + 'CalculatedClip': '(clip: (max: Vec2(x:0.0, y:0.0), min: Vec2(x:0.0, y:0.0)))', + 'Camera': '(hdr: true, is_active: true, msaa_writeback: true, order: 0, viewport: None)', + 'Camera2d': '(clear_color: Default)', + 'Camera3d': '(clear_color: Default, depth_load_op: Clear(0.0), depth_texture_usages: "", ' + 'screen_space_specular_transmission_quality: "", screen_space_specular_transmission_steps: 0)', + 'CameraRenderGraph': '( )', + 'CameraTrackable': '', + 'CameraTracking': '(offset: Vec3(x:0.0, y:0.0, z:0.0))', + 'CameraTrackingOffset': '(Vec3(x:0.0, y:0.0, z:0.0))', + 'CascadeShadowConfig': '(bounds: [], minimum_distance: 0.0, overlap_proportion: 0.0)', + 'Cascades': '(cascades: "")', + 'CascadesFrusta': '', + 'CascadesVisibleEntities': '', + 'Ccd': '(enabled: true)', + 'Children': '([])', + 'ClusterConfig': 'None', + 'Collider': 'Ball(0.0)', + 'CollidingEntities': '("")', + 'CollisionGroups': '(filters: (0), memberships: (0))', + 'ColorGrading': '(exposure: 0.0, gamma: 0.0, post_saturation: 0.0, pre_saturation: 0.0)', + 'ContactForceEventThreshold': '(0.0)', + 'ContentSize': '', + 'ContrastAdaptiveSharpeningSettings': '(denoise: true, enabled: true, sharpening_strength: 0.0)', + 'CubemapFrusta': '', + 'CubemapVisibleEntities': '', + 'Damping': '(angular_damping: 0.0, linear_damping: 0.0)', + 'DebandDither': 'Disabled', + 'DirectionalLight': '(color: Rgba(red:1.0, green:1.0, blue:0.0, alpha:1.0), illuminance: 0.0, shadow_depth_bias: 0.0, ' + 'shadow_normal_bias: 0.0, shadows_enabled: true)', + 'Dominance': '(groups: 0)', + 'EnumComplex': 'Float(0.0)', + 'EnumTest': 'Metal', + 'ExternalForce': '(force: Vec3(x:0.0, y:0.0, z:0.0), torque: Vec3(x:0.0, y:0.0, z:0.0))', + 'ExternalImpulse': '(impulse: Vec3(x:0.0, y:0.0, z:0.0), torque_impulse: Vec3(x:0.0, y:0.0, z:0.0))', + 'FocusPolicy': 'Block', + 'FogSettings': '(color: Rgba(red:1.0, green:1.0, blue:0.0, alpha:1.0), directional_light_color: Rgba(red:1.0, ' + 'green:1.0, blue:0.0, alpha:1.0), directional_light_exponent: 0.0, falloff: "")', + 'Friction': '(coefficient: 0.0, combine_rule: "")', + 'Frustum': '', + 'Fxaa': '(edge_threshold: "", edge_threshold_min: "", enabled: true)', + 'GlobalTransform': '((matrix3: (x_axis: Vec3A(x:0.0, y:0.0, z:0.0), y_axis: Vec3A(x:0.0, y:0.0, z:0.0), z_axis: ' + 'Vec3A(x:0.0, y:0.0, z:0.0)), translation: Vec3A(x:0.0, y:0.0, z:0.0)))', + 'GltfExtras': '(value: " ")', + 'GravityScale': '(0.0)', + 'Group': '(0)', + 'Handle<()>': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle>': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'InheritedVisibility': '(true)', + 'Interaction': 'Pressed', + 'Label': '', + 'LockedAxes': '(0)', + 'MaterialInfo': '(name: " ", source: " ")', + 'Mesh2dHandle': '(Strong(""))', + 'MeshMorphWeights': '(weights: [])', + 'MorphWeights': '(first_mesh: "", weights: [])', + 'Name': '(hash: 0, name: )', + 'NestedTupleStuff': '(0.0, 0, (basic: (a: 0.0, b: 0, c: " "), color: (Rgba(red:1.0, green:1.0, blue:0.0, alpha:1.0)), ' + 'colors_list: ([]), enable: true, enum_inner: Metal, nested: (vec: (Vec3(x:0.0, y:0.0, z:0.0))), ' + 'text: " ", toggle: (true)))', + 'NestingTestLevel2': '(basic: (a: 0.0, b: 0, c: " "), color: (Rgba(red:1.0, green:1.0, blue:0.0, alpha:1.0)), ' + 'colors_list: ([]), enable: true, enum_inner: Metal, nested: (vec: (Vec3(x:0.0, y:0.0, z:0.0))), ' + 'text: " ", toggle: (true))', + 'NestingTestLevel3': '(vec: (Vec3(x:0.0, y:0.0, z:0.0)))', + 'NoFrustumCulling': '', + 'NoWireframe': '', + 'Node': '(calculated_size: Vec2(x:0.0, y:0.0), outline_offset: 0.0, outline_width: 0.0, stack_index: 0, ' + 'unrounded_size: Vec2(x:0.0, y:0.0))', + 'NotShadowCaster': '', + 'NotShadowReceiver': '', + 'OrthographicProjection': '(area: (max: Vec2(x:0.0, y:0.0), min: Vec2(x:0.0, y:0.0)), far: 0.0, near: 0.0, scale: ' + '0.0, scaling_mode: Fixed(height: 0.0, width: 0.0), viewport_origin: Vec2(x:0.0, y:0.0))', + 'Outline': '(color: Rgba(red:1.0, green:1.0, blue:0.0, alpha:1.0), offset: Auto, width: Auto)', + 'Parent': '(0)', + 'PerspectiveProjection': '(aspect_ratio: 0.0, far: 0.0, fov: 0.0, near: 0.0)', + 'Pickable': '', + 'Player': '', + 'PointLight': '(color: Rgba(red:1.0, green:1.0, blue:0.0, alpha:1.0), intensity: 0.0, radius: 0.0, range: 0.0, ' + 'shadow_depth_bias: 0.0, shadow_normal_bias: 0.0, shadows_enabled: true)', + 'PrimaryWindow': '', + 'Projection': 'Perspective((aspect_ratio: 0.0, far: 0.0, fov: 0.0, near: 0.0))', + 'RelativeCursorPosition': '(normalized: "", normalized_visible_node_rect: (max: Vec2(x:0.0, y:0.0), min: Vec2(x:0.0, ' + 'y:0.0)))', + 'RenderLayers': '(0)', + 'Restitution': '(coefficient: 0.0, combine_rule: "")', + 'RigidBody': 'Dynamic', + 'SSAOSettings': '', + 'ScreenSpaceAmbientOcclusionSettings': '(quality_level: "")', + 'Sensor': '', + 'ShadowFilteringMethod': 'Hardware2x2', + 'ShadowmapSettings': '(size: 0)', + 'SkinnedMesh': '(inverse_bindposes: Strong(""), joints: [])', + 'Sleeping': '(angular_threshold: 0.0, linear_threshold: 0.0, sleeping: true)', + 'SolverGroups': '(filters: (0), memberships: (0))', + 'SpawnHere': '', + 'SpotLight': '(color: Rgba(red:1.0, green:1.0, blue:0.0, alpha:1.0), inner_angle: 0.0, intensity: 0.0, outer_angle: ' + '0.0, radius: 0.0, range: 0.0, shadow_depth_bias: 0.0, shadow_normal_bias: 0.0, shadows_enabled: true)', + 'Sprite': '(anchor: Center, color: Rgba(red:1.0, green:1.0, blue:0.0, alpha:1.0), custom_size: "", flip_x: true, ' + 'flip_y: true, rect: "")', + 'Style': '(align_content: Default, align_items: Default, align_self: Auto, aspect_ratio: None, border: (bottom: Auto, ' + 'left: Auto, right: Auto, top: Auto), bottom: Auto, column_gap: Auto, direction: Inherit, display: Flex, ' + 'flex_basis: Auto, flex_direction: Row, flex_grow: 0.0, flex_shrink: 0.0, flex_wrap: NoWrap, ' + 'grid_auto_columns: "", grid_auto_flow: Row, grid_auto_rows: "", grid_column: (end: "", span: "", start: ' + '""), grid_row: (end: "", span: "", start: ""), grid_template_columns: "", grid_template_rows: "", height: ' + 'Auto, justify_content: Default, justify_items: Default, justify_self: Auto, left: Auto, margin: (bottom: ' + 'Auto, left: Auto, right: Auto, top: Auto), max_height: Auto, max_width: Auto, min_height: Auto, min_width: ' + 'Auto, overflow: (x: Visible, y: Visible), padding: (bottom: Auto, left: Auto, right: Auto, top: Auto), ' + 'position_type: Relative, right: Auto, row_gap: Auto, top: Auto, width: Auto)', + 'Text': '(alignment: Left, linebreak_behavior: WordBoundary, sections: [])', + 'Text2dBounds': '(size: Vec2(x:0.0, y:0.0))', + 'TextFlags': '(needs_new_measure_func: true, needs_recompute: true)', + 'TextLayoutInfo': '(glyphs: "", logical_size: Vec2(x:0.0, y:0.0))', + 'TextureAtlasSprite': '(anchor: Center, color: Rgba(red:1.0, green:1.0, blue:0.0, alpha:1.0), custom_size: "", ' + 'flip_x: true, flip_y: true, index: 0)', + 'Tonemapping': 'None', + 'Transform': '(rotation: Quat(x:0.0, y:0.0, z:0.0, w:0.0), scale: Vec3(x:0.0, y:0.0, z:0.0), translation: Vec3(x:0.0, ' + 'y:0.0, z:0.0))', + 'TupleTest2': '(0.0, 0, " ")', + 'TupleTestBool': '(true)', + 'TupleTestColor': '(Rgba(red:1.0, green:1.0, blue:0.0, alpha:1.0))', + 'TupleTestF32': '(0.0)', + 'TupleTestStr': '(" ")', + 'TupleTestU64': '(0)', + 'TupleVec': '([])', + 'TupleVec2': '(Vec2(x:0.0, y:0.0))', + 'TupleVec3': '(Vec3(x:0.0, y:0.0, z:0.0))', + 'TupleVecF32F32': '([])', + 'UiCameraConfig': '(show_ui: true)', + 'UiImage': '(flip_x: true, flip_y: true, texture: Strong(""))', + 'UiImageSize': '(size: Vec2(x:0.0, y:0.0))', + 'UiTextureAtlasImage': '(flip_x: true, flip_y: true, index: 0)', + 'UnitTest': '', + 'VecOfColors': '([])', + 'VecOfF32s': '([])', + 'VecOfVec3s2': '([])', + 'Velocity': '(angvel: Vec3(x:0.0, y:0.0, z:0.0), linvel: Vec3(x:0.0, y:0.0, z:0.0))', + 'ViewVisibility': '(true)', + 'Visibility': 'Inherited', + 'VisibleEntities': '', + 'Window': '(canvas: None, composite_alpha_mode: Auto, cursor: (grab_mode: None, hit_test: true, icon: Default, ' + 'visible: true), decorations: true, enabled_buttons: (close: true, maximize: true, minimize: true), ' + 'fit_canvas_to_parent: true, focused: true, ime_enabled: true, ime_position: Vec2(x:0.0, y:0.0), internal: ' + '(maximize_request: None, minimize_request: None, physical_cursor_position: None), mode: Windowed, ' + 'position: Automatic, present_mode: AutoVsync, prevent_default_event_handling: true, resizable: true, ' + 'resize_constraints: (max_height: 0.0, max_width: 0.0, min_height: 0.0, min_width: 0.0), resolution: ' + '(physical_height: 0, physical_width: 0, scale_factor: 0.0, scale_factor_override: None), title: " ", ' + 'transparent: true, visible: true, window_level: AlwaysOnBottom, window_theme: "")', + 'Wireframe': '', + 'ZIndex': 'Local(0)'} + + + +expected_custom_property_values_randomized = {'AComponentWithAnExtremlyExageratedOrMaybeNotButCouldBeNameOrWut': '', + 'Aabb': '(center: Vec3A(x:0.5714026093482971, y:0.42888906598091125, z:0.5780913233757019), half_extents: ' + 'Vec3A(x:0.20609822869300842, y:0.8133212327957153, z:0.8235888481140137))', + 'AdditionalMassProperties': 'Mass(0.42888906598091125)', + 'AmbientLightSettings': '(brightness: 0.5714026093482971, color: Rgba(red:0.42888906598091125, ' + 'green:0.5780913233757019, blue:0.20609822869300842, alpha:0.8133212327957153))', + 'AnimationPlayer': '(animation: "", paused: true)', + 'Animations': '(named_animations: "")', + 'AutoAABBCollider': 'Capsule', + 'BackgroundColor': '(Rgba(red:0.5714026093482971, green:0.42888906598091125, blue:0.5780913233757019, ' + 'alpha:0.20609822869300842))', + 'BasicTest': '(a: 0.5714026093482971, b: 54, c: "psagopiu")', + 'BloomSettings': '(composite_mode: EnergyConserving, high_pass_frequency: 0.42888906598091125, intensity: ' + '0.5780913233757019, low_frequency_boost: 0.20609822869300842, low_frequency_boost_curvature: ' + '0.8133212327957153, prefilter_settings: (threshold: 0.8235888481140137, threshold_softness: ' + '0.6534725427627563))', + 'BlueprintName': '("sbnpsago")', + 'BorderColor': '(Rgba(red:0.5714026093482971, green:0.42888906598091125, blue:0.5780913233757019, ' + 'alpha:0.20609822869300842))', + 'Button': '', + 'CalculatedClip': '(clip: (max: Vec2(x:0.5714026093482971, y:0.42888906598091125), min: Vec2(x:0.5780913233757019, ' + 'y:0.20609822869300842)))', + 'Camera': '(hdr: true, is_active: false, msaa_writeback: false, order: 61, viewport: None)', + 'Camera2d': '(clear_color: None)', + 'Camera3d': '(clear_color: None, depth_load_op: Clear(0.42888906598091125), depth_texture_usages: "", ' + 'screen_space_specular_transmission_quality: "", screen_space_specular_transmission_steps: 73)', + 'CameraRenderGraph': '(sbnpsago)', + 'CameraTrackable': '', + 'CameraTracking': '(offset: Vec3(x:0.5714026093482971, y:0.42888906598091125, z:0.5780913233757019))', + 'CameraTrackingOffset': '(Vec3(x:0.5714026093482971, y:0.42888906598091125, z:0.5780913233757019))', + 'CascadeShadowConfig': '(bounds: [0.42888906598091125], minimum_distance: 0.5780913233757019, overlap_proportion: ' + '0.20609822869300842)', + 'Cascades': '(cascades: "")', + 'CascadesFrusta': '', + 'CascadesVisibleEntities': '', + 'Ccd': '(enabled: true)', + 'Children': '([0])', + 'ClusterConfig': 'None', + 'Collider': 'Ball(0.42888906598091125)', + 'CollidingEntities': '("")', + 'CollisionGroups': '(filters: (73), memberships: (4))', + 'ColorGrading': '(exposure: 0.5714026093482971, gamma: 0.42888906598091125, post_saturation: 0.5780913233757019, ' + 'pre_saturation: 0.20609822869300842)', + 'ContactForceEventThreshold': '(0.5714026093482971)', + 'ContentSize': '', + 'ContrastAdaptiveSharpeningSettings': '(denoise: true, enabled: false, sharpening_strength: 0.42888906598091125)', + 'CubemapFrusta': '', + 'CubemapVisibleEntities': '', + 'Damping': '(angular_damping: 0.5714026093482971, linear_damping: 0.42888906598091125)', + 'DebandDither': 'Disabled', + 'DirectionalLight': '(color: Rgba(red:0.5714026093482971, green:0.42888906598091125, blue:0.5780913233757019, ' + 'alpha:0.20609822869300842), illuminance: 0.8133212327957153, shadow_depth_bias: ' + '0.8235888481140137, shadow_normal_bias: 0.6534725427627563, shadows_enabled: false)', + 'Dominance': '(groups: 73)', + 'EnumComplex': 'StructLike(a: 0.03258506581187248, b: 61, c: "sagopiuz")', + 'EnumTest': 'Squishy', + 'ExternalForce': '(force: Vec3(x:0.5714026093482971, y:0.42888906598091125, z:0.5780913233757019), torque: ' + 'Vec3(x:0.20609822869300842, y:0.8133212327957153, z:0.8235888481140137))', + 'ExternalImpulse': '(impulse: Vec3(x:0.5714026093482971, y:0.42888906598091125, z:0.5780913233757019), ' + 'torque_impulse: Vec3(x:0.20609822869300842, y:0.8133212327957153, z:0.8235888481140137))', + 'FocusPolicy': 'Block', + 'FogSettings': '(color: Rgba(red:0.5714026093482971, green:0.42888906598091125, blue:0.5780913233757019, ' + 'alpha:0.20609822869300842), directional_light_color: Rgba(red:0.8133212327957153, ' + 'green:0.8235888481140137, blue:0.6534725427627563, alpha:0.16022956371307373), ' + 'directional_light_exponent: 0.5206693410873413, falloff: "")', + 'Friction': '(coefficient: 0.5714026093482971, combine_rule: "")', + 'Frustum': '', + 'Fxaa': '(edge_threshold: "", edge_threshold_min: "", enabled: true)', + 'GlobalTransform': '((matrix3: (x_axis: Vec3A(x:0.5714026093482971, y:0.42888906598091125, z:0.5780913233757019), ' + 'y_axis: Vec3A(x:0.20609822869300842, y:0.8133212327957153, z:0.8235888481140137), z_axis: ' + 'Vec3A(x:0.6534725427627563, y:0.16022956371307373, z:0.5206693410873413)), translation: ' + 'Vec3A(x:0.3277728259563446, y:0.24999667704105377, z:0.952816903591156)))', + 'GltfExtras': '(value: "sbnpsago")', + 'GravityScale': '(0.5714026093482971)', + 'Group': '(73)', + 'Handle<()>': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle>': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'Handle': 'Strong("")', + 'InheritedVisibility': '(true)', + 'Interaction': 'None', + 'Label': '', + 'LockedAxes': '(73)', + 'MaterialInfo': '(name: "sbnpsago", source: "piuzfbqp")', + 'Mesh2dHandle': '(Strong(""))', + 'MeshMorphWeights': '(weights: [0.42888906598091125])', + 'MorphWeights': '(first_mesh: "", weights: [0.42888906598091125])', + 'Name': '(hash: 73, name: bnpsagop)', + 'NestedTupleStuff': '(0.5714026093482971, 54, (basic: (a: 0.4825616776943207, b: 1, c: "gopiuzfb"), color: ' + '(Rgba(red:0.5206693410873413, green:0.3277728259563446, blue:0.24999667704105377, ' + 'alpha:0.952816903591156)), colors_list: ([Rgba(red:0.0445563830435276, green:0.8601610660552979, ' + 'blue:0.6031906008720398, alpha:0.38160598278045654), Rgba(red:0.2836182117462158, ' + 'green:0.6749648451805115, blue:0.456831157207489, alpha:0.6858614683151245)]), enable: true, ' + 'enum_inner: Rock, nested: (vec: (Vec3(x:0.1329781413078308, y:0.7678378224372864, ' + 'z:0.9824132323265076))), text: "otmbsahe", toggle: (false)))', + 'NestingTestLevel2': '(basic: (a: 0.5714026093482971, b: 54, c: "psagopiu"), color: (Rgba(red:0.8106188178062439, ' + 'green:0.03440357372164726, blue:0.49008557200431824, alpha:0.07608934491872787)), colors_list: ' + '([Rgba(red:0.0445563830435276, green:0.8601610660552979, blue:0.6031906008720398, ' + 'alpha:0.38160598278045654), Rgba(red:0.2836182117462158, green:0.6749648451805115, ' + 'blue:0.456831157207489, alpha:0.6858614683151245)]), enable: true, enum_inner: Rock, nested: ' + '(vec: (Vec3(x:0.1329781413078308, y:0.7678378224372864, z:0.9824132323265076))), text: ' + '"otmbsahe", toggle: (false))', + 'NestingTestLevel3': '(vec: (Vec3(x:0.5714026093482971, y:0.42888906598091125, z:0.5780913233757019)))', + 'NoFrustumCulling': '', + 'NoWireframe': '', + 'Node': '(calculated_size: Vec2(x:0.5714026093482971, y:0.42888906598091125), outline_offset: 0.5780913233757019, ' + 'outline_width: 0.20609822869300842, stack_index: 62, unrounded_size: Vec2(x:0.8235888481140137, ' + 'y:0.6534725427627563))', + 'NotShadowCaster': '', + 'NotShadowReceiver': '', + 'OrthographicProjection': '(area: (max: Vec2(x:0.5714026093482971, y:0.42888906598091125), min: ' + 'Vec2(x:0.5780913233757019, y:0.20609822869300842)), far: 0.8133212327957153, near: ' + '0.8235888481140137, scale: 0.6534725427627563, scaling_mode: ' + 'WindowSize(0.03440357372164726), viewport_origin: Vec2(x:0.49008557200431824, ' + 'y:0.07608934491872787))', + 'Outline': '(color: Rgba(red:0.5714026093482971, green:0.42888906598091125, blue:0.5780913233757019, ' + 'alpha:0.20609822869300842), offset: VMax(0.4912964105606079), width: Percent(0.6534725427627563))', + 'Parent': '(0)', + 'PerspectiveProjection': '(aspect_ratio: 0.5714026093482971, far: 0.42888906598091125, fov: 0.5780913233757019, near: ' + '0.20609822869300842)', + 'Pickable': '', + 'Player': '', + 'PointLight': '(color: Rgba(red:0.5714026093482971, green:0.42888906598091125, blue:0.5780913233757019, ' + 'alpha:0.20609822869300842), intensity: 0.8133212327957153, radius: 0.8235888481140137, range: ' + '0.6534725427627563, shadow_depth_bias: 0.16022956371307373, shadow_normal_bias: 0.5206693410873413, ' + 'shadows_enabled: false)', + 'PrimaryWindow': '', + 'Projection': 'Perspective((aspect_ratio: 0.42888906598091125, far: 0.5780913233757019, fov: 0.20609822869300842, ' + 'near: 0.8133212327957153))', + 'RelativeCursorPosition': '(normalized: "", normalized_visible_node_rect: (max: Vec2(x:0.5714026093482971, ' + 'y:0.42888906598091125), min: Vec2(x:0.5780913233757019, y:0.20609822869300842)))', + 'RenderLayers': '(73)', + 'Restitution': '(coefficient: 0.5714026093482971, combine_rule: "")', + 'RigidBody': 'Dynamic', + 'SSAOSettings': '', + 'ScreenSpaceAmbientOcclusionSettings': '(quality_level: "")', + 'Sensor': '', + 'ShadowFilteringMethod': 'Jimenez14', + 'ShadowmapSettings': '(size: 73)', + 'SkinnedMesh': '(inverse_bindposes: Strong(""), joints: [0, 0])', + 'Sleeping': '(angular_threshold: 0.5714026093482971, linear_threshold: 0.42888906598091125, sleeping: true)', + 'SolverGroups': '(filters: (73), memberships: (4))', + 'SpawnHere': '', + 'SpotLight': '(color: Rgba(red:0.5714026093482971, green:0.42888906598091125, blue:0.5780913233757019, ' + 'alpha:0.20609822869300842), inner_angle: 0.8133212327957153, intensity: 0.8235888481140137, ' + 'outer_angle: 0.6534725427627563, radius: 0.16022956371307373, range: 0.5206693410873413, ' + 'shadow_depth_bias: 0.3277728259563446, shadow_normal_bias: 0.24999667704105377, shadows_enabled: true)', + 'Sprite': '(anchor: Custom(Vec2(x:0.03258506581187248, y:0.4825616776943207)), color: Rgba(red:0.014832446351647377, ' + 'green:0.46258050203323364, blue:0.4912964105606079, alpha:0.27752065658569336), custom_size: "", flip_x: ' + 'true, flip_y: false, rect: "")', + 'Style': '(align_content: SpaceAround, align_items: Default, align_self: Baseline, aspect_ratio: ' + 'Some(0.5780913233757019), border: (bottom: Px(0.46258050203323364), left: Vw(0.8235888481140137), right: ' + 'VMin(0.8106188178062439), top: Auto), bottom: Vh(0.49008557200431824), column_gap: Auto, direction: ' + 'Inherit, display: None, flex_basis: Percent(0.0445563830435276), flex_direction: Column, flex_grow: ' + '0.6031906008720398, flex_shrink: 0.38160598278045654, flex_wrap: Wrap, grid_auto_columns: "", ' + 'grid_auto_flow: RowDense, grid_auto_rows: "", grid_column: (end: "", span: "", start: ""), grid_row: (end: ' + '"", span: "", start: ""), grid_template_columns: "", grid_template_rows: "", height: ' + 'Vw(0.17467059195041656), justify_content: FlexEnd, justify_items: Stretch, justify_self: End, left: ' + 'Px(0.45692843198776245), margin: (bottom: VMax(0.9824132323265076), left: Vw(0.6133268475532532), right: ' + 'Auto, top: Vh(0.004055144265294075)), max_height: Px(0.1949533075094223), max_width: ' + 'Percent(0.5363451838493347), min_height: VMax(0.8981962203979492), min_width: Percent(0.666689932346344), ' + 'overflow: (x: Clip, y: Clip), padding: (bottom: Vw(0.06499417871236801), left: Vh(0.32468828558921814), ' + 'right: Vh(0.15641891956329346), top: Px(0.9697836637496948)), position_type: Relative, right: Auto, ' + 'row_gap: Auto, top: Vw(0.3011642396450043), width: Vh(0.6578909158706665))', + 'Text': '(alignment: Right, linebreak_behavior: WordBoundary, sections: [(style: (color: Rgba(red:0.4825616776943207, ' + 'green:0.014832446351647377, blue:0.46258050203323364, alpha:0.4912964105606079), font: Weak(Index(index: ' + '"")), font_size: 0.03440357372164726), value: "pkchxlbn"), (style: (color: Rgba(red:0.8601610660552979, ' + 'green:0.6031906008720398, blue:0.38160598278045654, alpha:0.2836182117462158), font: Weak(Uuid(uuid: ' + '"73b3b118-7d01-4778-8bcc-4e79055f5d22")), font_size: 0.17467059195041656), value: "jvleoyho")])', + 'Text2dBounds': '(size: Vec2(x:0.5714026093482971, y:0.42888906598091125))', + 'TextFlags': '(needs_new_measure_func: true, needs_recompute: false)', + 'TextLayoutInfo': '(glyphs: "", logical_size: Vec2(x:0.5714026093482971, y:0.42888906598091125))', + 'TextureAtlasSprite': '(anchor: Custom(Vec2(x:0.03258506581187248, y:0.4825616776943207)), color: ' + 'Rgba(red:0.014832446351647377, green:0.46258050203323364, blue:0.4912964105606079, ' + 'alpha:0.27752065658569336), custom_size: "", flip_x: true, flip_y: false, index: 4)', + 'Tonemapping': 'None', + 'Transform': '(rotation: Quat(x:0.5714026093482971, y:0.42888906598091125, z:0.5780913233757019, ' + 'w:0.20609822869300842), scale: Vec3(x:0.8133212327957153, y:0.8235888481140137, z:0.6534725427627563), ' + 'translation: Vec3(x:0.16022956371307373, y:0.5206693410873413, z:0.3277728259563446))', + 'TupleTest2': '(0.5714026093482971, 54, "psagopiu")', + 'TupleTestBool': '(true)', + 'TupleTestColor': '(Rgba(red:0.5714026093482971, green:0.42888906598091125, blue:0.5780913233757019, ' + 'alpha:0.20609822869300842))', + 'TupleTestF32': '(0.5714026093482971)', + 'TupleTestStr': '("sbnpsago")', + 'TupleTestU64': '(73)', + 'TupleVec': '(["npsagopi"])', + 'TupleVec2': '(Vec2(x:0.5714026093482971, y:0.42888906598091125))', + 'TupleVec3': '(Vec3(x:0.5714026093482971, y:0.42888906598091125, z:0.5780913233757019))', + 'TupleVecF32F32': '([(0.42888906598091125, 0.5780913233757019)])', + 'UiCameraConfig': '(show_ui: true)', + 'UiImage': '(flip_x: true, flip_y: false, texture: Weak(Uuid(uuid: "73b3b118-7d01-4778-8bcc-4e79055f5d22")))', + 'UiImageSize': '(size: Vec2(x:0.5714026093482971, y:0.42888906598091125))', + 'UiTextureAtlasImage': '(flip_x: true, flip_y: false, index: 54)', + 'UnitTest': '', + 'VecOfColors': '([Rgba(red:0.42888906598091125, green:0.5780913233757019, blue:0.20609822869300842, ' + 'alpha:0.8133212327957153)])', + 'VecOfF32s': '([0.42888906598091125])', + 'VecOfVec3s2': '([(Vec3(x:0.42888906598091125, y:0.5780913233757019, z:0.20609822869300842))])', + 'Velocity': '(angvel: Vec3(x:0.5714026093482971, y:0.42888906598091125, z:0.5780913233757019), linvel: ' + 'Vec3(x:0.20609822869300842, y:0.8133212327957153, z:0.8235888481140137))', + 'ViewVisibility': '(true)', + 'Visibility': 'Visible', + 'VisibleEntities': '', + 'Window': '(canvas: None, composite_alpha_mode: PostMultiplied, cursor: (grab_mode: Confined, hit_test: true, icon: ' + 'Default, visible: false), decorations: false, enabled_buttons: (close: true, maximize: false, minimize: ' + 'true), fit_canvas_to_parent: false, focused: true, ime_enabled: true, ime_position: ' + 'Vec2(x:0.16022956371307373, y:0.5206693410873413), internal: (maximize_request: Some(false), ' + 'minimize_request: None, physical_cursor_position: Some(DVec2(x:0.0445563830435276, ' + 'y:0.8601610660552979))), mode: SizedFullscreen, position: Centered(Primary), present_mode: Fifo, ' + 'prevent_default_event_handling: true, resizable: true, resize_constraints: (max_height: ' + '0.2623211145401001, max_width: 0.17467059195041656, min_height: 0.30310511589050293, min_width: ' + '0.36258742213249207), resolution: (physical_height: 58, physical_width: 98, scale_factor: ' + '0.8600491285324097, scale_factor_override: None), title: "otmbsahe", transparent: false, visible: true, ' + 'window_level: Normal, window_theme: "")', + 'Wireframe': '', + 'ZIndex': 'Local(54)'} diff --git a/tools/bevy_components/tests/test_components.py b/tools/bevy_components/tests/test_components.py new file mode 100644 index 0000000..49487ef --- /dev/null +++ b/tools/bevy_components/tests/test_components.py @@ -0,0 +1,297 @@ +import bpy +import pytest +import pprint + +from ..propGroups.conversions_to_prop_group import property_group_value_from_custom_property_value +from ..propGroups.conversions_from_prop_group import property_group_value_to_custom_property_value +from .component_values_shuffler import component_values_shuffler +from .expected_component_values import (expected_custom_property_values, expected_custom_property_values_randomized) + +@pytest.fixture +def setup_data(request): + print("\nSetting up resources...") + + def finalizer(): + print("\nPerforming teardown...") + registry = bpy.context.window_manager.components_registry + #registry.schemaPath = "../../testing/bevy_registry_export/basic/assets/registry.json" + #bpy.ops.object.reload_registry() + + type_infos = registry.type_infos + object = bpy.context.object + remove_component_operator = bpy.ops.object.remove_bevy_component + + for type_name in type_infos: + definition = type_infos[type_name] + component_name = definition["short_name"] + if component_name in object: + try: + remove_component_operator(component_name=component_name) + except Exception as error: + pass + + request.addfinalizer(finalizer) + + return None + + +def test_components_should_generate_correct_custom_properties(setup_data): + registry = bpy.context.window_manager.components_registry + registry.schemaPath = "../../testing/bevy_registry_export/basic/assets/registry.json" + bpy.ops.object.reload_registry() + + type_infos = registry.type_infos + object = bpy.context.object + + add_component_operator = bpy.ops.object.add_bevy_component + errors = [] + addable_components = [] + added_components = [] + + custom_property_values = {} + + for type_name in type_infos: + definition = type_infos[type_name] + component_type = definition["title"] + short_name = definition["short_name"] + is_component = definition['isComponent'] if "isComponent" in definition else False + if not is_component: + continue + + addable_components.append(component_type) + + try: + add_component_operator(component_type=component_type) + + property_group_name = registry.get_propertyGroupName_from_shortName(short_name) + + target_components_metadata = object.components_meta.components + component_meta = next(filter(lambda component: component["name"] == short_name, target_components_metadata), None) + propertyGroup = getattr(component_meta, property_group_name, None) + added_components.append(component_type) + custom_property_values[short_name] = object[short_name] + assert object[short_name] == expected_custom_property_values[short_name] + + except Exception as error: + errors.append(error) + + """pp = pprint.PrettyPrinter(depth=14, width=120) + print("CUSTOM PROPERTY VALUES") + pp.pprint(custom_property_values)""" + + assert len(errors) == 0 + assert len(added_components) == 152 + + +def test_components_should_generate_correct_custom_properties_with_randomozied_values(setup_data): + registry = bpy.context.window_manager.components_registry + registry.schemaPath = "../../testing/bevy_registry_export/basic/assets/registry.json" + bpy.ops.object.reload_registry() + + type_infos = registry.type_infos + object = bpy.context.object + + add_component_operator = bpy.ops.object.add_bevy_component + errors = [] + error_components = [] + addable_components = [] + added_components = [] + + custom_property_values = {} + + for type_name in type_infos: + definition = type_infos[type_name] + component_type = definition["title"] + short_name = definition["short_name"] + is_component = definition['isComponent'] if "isComponent" in definition else False + if not is_component: + continue + + addable_components.append(component_type) + + try: + add_component_operator(component_type=component_type) + property_group_name = registry.get_propertyGroupName_from_shortName(short_name) + + target_components_metadata = object.components_meta.components + component_meta = next(filter(lambda component: component["name"] == short_name, target_components_metadata), None) + propertyGroup = getattr(component_meta, property_group_name, None) + component_values_shuffler(seed= 10, property_group=propertyGroup, definition=definition, registry=registry) + + added_components.append(component_type) + custom_property_values[short_name] = object[short_name] + assert object[short_name] == expected_custom_property_values_randomized[short_name] + + except Exception as error: + errors.append(error) + error_components.append(short_name) + + pp = pprint.PrettyPrinter(depth=14, width=120) + print("CUSTOM PROPERTY VALUES") + pp.pprint(custom_property_values) + + print("error_components", error_components) + assert len(errors) == 0 + assert len(added_components) == 152 + +def test_components_should_generate_correct_propertyGroup_values_from_custom_properties(setup_data): + registry = bpy.context.window_manager.components_registry + registry.schemaPath = "../../testing/bevy_registry_export/basic/assets/registry.json" + bpy.ops.object.reload_registry() + + type_infos = registry.type_infos + object = bpy.context.object + + add_component_operator = bpy.ops.object.add_bevy_component + errors = [] + addable_components = [] + added_components = [] + failing_components = [] + + for type_name in type_infos: + definition = type_infos[type_name] + component_type = definition["title"] + short_name = definition["short_name"] + is_component = definition['isComponent'] if "isComponent" in definition else False + if not is_component: + continue + + addable_components.append(component_type) + + try: + add_component_operator(component_type=component_type) + property_group_name = registry.get_propertyGroupName_from_shortName(short_name) + + target_components_metadata = object.components_meta.components + component_meta = next(filter(lambda component: component["name"] == short_name, target_components_metadata), None) + propertyGroup = getattr(component_meta, property_group_name, None) + added_components.append(component_type) + # randomise values + component_values_shuffler(seed= 10, property_group=propertyGroup, definition=definition, registry=registry) + custom_property_value = object[short_name] + + # first check if custom property value matches what we expect + assert custom_property_value == expected_custom_property_values_randomized[short_name] + + # we update propgroup values from custom property values + property_group_value_from_custom_property_value(propertyGroup, definition, registry, custom_property_value, nesting = []) + # and then generate it back + custom_property_value_regen = property_group_value_to_custom_property_value(propertyGroup, definition, registry, None) + assert custom_property_value_regen == expected_custom_property_values_randomized[short_name] + + # custom_property_values[short_name] = object[short_name] + #assert object[short_name] == expected_custom_property_values[short_name] + #print("CUSTOM PROPERTY ", object[short_name]) + + except Exception as error: + errors.append(error) + failing_components.append(short_name) + + for index, error in enumerate(errors): + print("ERROR", error, failing_components[index]) + assert len(errors) == 0 + assert len(added_components) == 152 + + +def test_remove_components(setup_data): + registry = bpy.context.window_manager.components_registry + registry.schemaPath = "../../testing/bevy_registry_export/basic/assets/registry.json" + bpy.ops.object.reload_registry() + + type_infos = registry.type_infos + + add_component_operator = bpy.ops.object.add_bevy_component + errors = [] + addable_components = [] + added_components = [] + + for type_name in type_infos: + definition = type_infos[type_name] + component_type = definition["title"] + short_name = definition["short_name"] + is_component = definition['isComponent'] if "isComponent" in definition else False + if not is_component: + continue + + addable_components.append(component_type) + + try: + add_component_operator(component_type=component_type) + + property_group_name = registry.get_propertyGroupName_from_shortName(short_name) + object = bpy.context.object + + target_components_metadata = object.components_meta.components + component_meta = next(filter(lambda component: component["name"] == short_name, target_components_metadata), None) + propertyGroup = getattr(component_meta, property_group_name, None) + # print("propertyGroup", propertyGroup, propertyGroup.field_names) + added_components.append(component_type) + except Exception as error: + errors.append(error) + assert len(errors) == 0 + + # now test component removal + errors.clear() + remove_component_operator = bpy.ops.object.remove_bevy_component + for component_type in added_components: + component_name = type_infos[component_type]["short_name"] + try: + remove_component_operator(component_name=component_name) + except Exception as error: + errors.append(error) + assert len(errors) == 0 + +def test_copy_paste_components(setup_data): + context = bpy.context + registry = context.window_manager.components_registry + registry.schemaPath = "../../testing/bevy_registry_export/basic/assets/registry.json" + bpy.ops.object.reload_registry() + + #component_type = "bevy_bevy_registry_export_basic_example::test_components::BasicTest" + short_name = "BasicTest" + component_type = registry.short_names_to_long_names[short_name] + + # SOURCE object setup + add_component_operator = bpy.ops.object.add_bevy_component + add_component_operator(component_type=component_type) + + property_group_name = registry.get_propertyGroupName_from_shortName(short_name) + object = context.object + + target_components_metadata = object.components_meta.components + component_meta = next(filter(lambda component: component["name"] == short_name, target_components_metadata), None) + propertyGroup = getattr(component_meta, property_group_name, None) + + setattr(propertyGroup, propertyGroup.field_names[0], 25.0) + + copy_component_operator = bpy.ops.object.copy_bevy_component + copy_component_operator(source_component_name=short_name, source_object_name=object.name) + + # --------------------------------------- + # TARGET object + bpy.ops.mesh.primitive_cube_add() + new_cube = bpy.context.selected_objects[0] + # change name + new_cube.name = "TargetCube" + target_components_metadata = new_cube.components_meta.components + component_meta = next(filter(lambda component: component["name"] == short_name, target_components_metadata), None) + + # first check that there is no component currently + assert component_meta == None + + paste_component_operator = bpy.ops.object.paste_bevy_component + paste_component_operator() + + target_components_metadata = new_cube.components_meta.components + component_meta = next(filter(lambda component: component["name"] == short_name, target_components_metadata), None) + + # now after pasting to the new object, it should have component meta + assert component_meta != None + + # and then check if the propertyGroup of the target object is correct + propertyGroup = getattr(component_meta, property_group_name, None) + assert propertyGroup.field_names == ['a', 'b', 'c'] + + a_fieldValue = getattr(propertyGroup, propertyGroup.field_names[0]) + assert a_fieldValue == 25.0 + diff --git a/tools/bevy_components/tests/test_conversions.py b/tools/bevy_components/tests/test_conversions.py new file mode 100644 index 0000000..4125ce0 --- /dev/null +++ b/tools/bevy_components/tests/test_conversions.py @@ -0,0 +1,51 @@ +from ..propGroups.conversions_to_prop_group import parse_struct_string, parse_tuplestruct_string + + +def test_parse_tuplestruct_string(): + assert parse_tuplestruct_string("(A)", start_nesting=1) == ['A'] + assert parse_tuplestruct_string("[(A)]", start_nesting=1) == ['(A)'] + + assert parse_tuplestruct_string("(a: 45, b: 65)", start_nesting=1) == ['a: 45', 'b: 65'] + assert parse_tuplestruct_string("[(a: 45, b: 65)]", start_nesting=1) == ['(a: 45, b: 65)'] + assert parse_tuplestruct_string("45, 65, 'bla'", start_nesting=0) == ['45', '65', "'bla'"] + + assert parse_tuplestruct_string("[(A), (B)]", start_nesting=1) == ['(A)', '(B)'] + + assert parse_tuplestruct_string("([(-1.8, 2.9), (0.0, -62)])", start_nesting=1) == ['[(-1.8, 2.9), (0.0, -62)]'] + assert parse_tuplestruct_string("([(-1.8, 2.9), (0.0, -62)])", start_nesting=2) == ['(-1.8, 2.9)', '(0.0, -62)'] + assert parse_tuplestruct_string("([(-1.8, 2.9), (0.0, -62), (25)])", start_nesting=2) == ['(-1.8, 2.9)', '(0.0, -62)', '(25)'] + + assert parse_tuplestruct_string("(Vec3(x:-2.0, y:120.0, z:1.0))", start_nesting=2) == ['x:-2.0', 'y:120.0', 'z:1.0'] + + assert parse_tuplestruct_string("(9)", start_nesting=1) == ['9'] + assert parse_tuplestruct_string('("toto")', start_nesting=1) == ['"toto"'] + + assert parse_tuplestruct_string("(Rgba(red:0.0, green:0.2, blue:0.9, alpha:1.0))", start_nesting=1) == ['Rgba(red:0.0, green:0.2, blue:0.9, alpha:1.0)'] + assert parse_tuplestruct_string("(Rgba(red:0.0, green:0.2, blue:0.9, alpha:1.0))", start_nesting=2) == ['red:0.0', 'green:0.2', 'blue:0.9', 'alpha:1.0'] + + assert parse_tuplestruct_string("([(-1.2, 2.9), (0.0, -62)])", start_nesting=2) == ['(-1.2, 2.9)', '(0.0, -62)'] + + assert parse_tuplestruct_string("([Rgba(red:1.0, green:1.0, blue:0.0, alpha:1.0), Rgba(red:1.0, green:0.0, blue:0.5, alpha:1.0)])", start_nesting=2) == ['Rgba(red:1.0, green:1.0, blue:0.0, alpha:1.0)', 'Rgba(red:1.0, green:0.0, blue:0.5, alpha:1.0)'] + assert parse_tuplestruct_string('(7.2, 2607, "sdf")', start_nesting=1) == ['7.2', '2607', '"sdf"'] + + assert parse_tuplestruct_string('[a, b]', start_nesting=1) == ['a', 'b'] + assert parse_tuplestruct_string('[]', start_nesting=1) == [] + +def test_parse_struct_string(): + assert parse_struct_string("a: 45, b:65") == {'a': '45', 'b':'65'} + assert parse_struct_string("x:-2.0, y:120.0, z:1.0") == {'x': '-2.0', 'y':'120.0', 'z':'1.0'} + + assert parse_struct_string("enabled: true") == {'enabled': 'true'} + assert parse_struct_string("(enabled: true)", start_nesting=1) == {'enabled': 'true'} + + + assert parse_struct_string("(filters: (25), memberships: (5))", start_nesting=1) == {'filters': '(25)', 'memberships':'(5)'} + assert parse_struct_string("groups: 0", start_nesting=0) == {'groups': '0'} + assert parse_struct_string("(groups: 0)", start_nesting=1) == {'groups': '0'} + + assert parse_struct_string("(composite_mode: EnergyConserving, high_pass_frequency: 4.0, intensity: 0.0, low_frequency_boost: -6.0, low_frequency_boost_curvature: 4.1, prefilter_settings: (threshold: -5.1, threshold_softness: 2.1))", start_nesting=1) == {'composite_mode': 'EnergyConserving', 'high_pass_frequency': '4.0', 'intensity': '0.0', 'low_frequency_boost': '-6.0', 'low_frequency_boost_curvature': '4.1', 'prefilter_settings': '(threshold: -5.1, threshold_softness: 2.1)'} + + + assert parse_struct_string("dimensions: UVec3(x:0.0, y:0.0, z:0.0), dynamic_resizing: true, z_config: (far_z_mode: MaxLightRange, first_slice_depth: 0.0)") == {'dimensions': 'UVec3(x:0.0, y:0.0, z:0.0)', 'dynamic_resizing': 'true', 'z_config': '(far_z_mode: MaxLightRange, first_slice_depth: 0.0)'} + + assert parse_struct_string('(inverse_bindposes: Strong(""), joints: [4294967295, 4294967295, 4294967295])', start_nesting=1) == {'inverse_bindposes': 'Strong("")', 'joints': '[4294967295, 4294967295, 4294967295]'} \ No newline at end of file diff --git a/tools/bevy_components/tests/test_registry.py b/tools/bevy_components/tests/test_registry.py new file mode 100644 index 0000000..8322212 --- /dev/null +++ b/tools/bevy_components/tests/test_registry.py @@ -0,0 +1,29 @@ +import bpy + + +def test_blend(): + registry = bpy.context.window_manager.components_registry + registry.schemaPath = "../../testing/bevy_registry_export/basic/assets/registry.json" + bpy.ops.object.reload_registry() + #print("registry type infos", registry.type_infos) + + short_name = "BasicTest" + component_type = registry.short_names_to_long_names[short_name] + + add_component_operator = bpy.ops.object.add_bevy_component + add_component_operator(component_type=component_type) + + property_group_name = registry.get_propertyGroupName_from_shortName(short_name) + object = bpy.context.object + + target_components_metadata = object.components_meta.components + component_meta = next(filter(lambda component: component["name"] == short_name, target_components_metadata), None) + propertyGroup = getattr(component_meta, property_group_name, None) + print("propertyGroup", propertyGroup, propertyGroup.field_names) + + + """copy_component_operator = bpy.ops.object.copy_bevy_component + copy_component_operator()""" + + + assert propertyGroup.field_names == ['a', 'b', 'c'] \ No newline at end of file diff --git a/tools/bevy_components/tests/test_shuffler.py b/tools/bevy_components/tests/test_shuffler.py new file mode 100644 index 0000000..8d5aad6 --- /dev/null +++ b/tools/bevy_components/tests/test_shuffler.py @@ -0,0 +1,141 @@ +import bpy +from .component_values_shuffler import component_values_shuffler + +def test_shuffler(): + registry = bpy.context.window_manager.components_registry + registry.schemaPath = "../../testing/bevy_registry_export/basic/assets/registry.json" + bpy.ops.object.reload_registry() + + type_infos = registry.type_infos + object = bpy.context.object + + add_component_operator = bpy.ops.object.add_bevy_component + + short_name = "BasicTest" + component_type = registry.short_names_to_long_names[short_name] + + add_component_operator(component_type=component_type) + + property_group_name = registry.get_propertyGroupName_from_shortName(short_name) + target_components_metadata = object.components_meta.components + component_meta = next(filter(lambda component: component["name"] == short_name, target_components_metadata), None) + propertyGroup = getattr(component_meta, property_group_name, None) + + definition = type_infos[component_type] + component_values_shuffler(seed= 10, property_group=propertyGroup, definition=definition, registry=registry) + + assert getattr(propertyGroup, 'a') == 0.5714026093482971 + assert getattr(propertyGroup, 'b') == 54 + assert getattr(propertyGroup, 'c') == "psagopiu" + + + # Testing a more complex component + short_name = "NestingTestLevel2" + component_type = registry.short_names_to_long_names[short_name] + add_component_operator(component_type=component_type) + + + property_group_name = registry.get_propertyGroupName_from_shortName(short_name) + target_components_metadata = object.components_meta.components + component_meta = next(filter(lambda component: component["name"] == short_name, target_components_metadata), None) + propertyGroup = getattr(component_meta, property_group_name, None) + + definition = type_infos[component_type] + component_values_shuffler(seed= 17, property_group=propertyGroup, definition=definition, registry=registry) + + print("propertyGroup", object[short_name]) + # cheating / making things easier for us for complex types: we use the custom property value + assert object[short_name] == '(basic: (a: 0.5219839215278625, b: 38, c: "ljfywwrv"), color: (Rgba(red:0.2782765030860901, green:0.9174930453300476, blue:0.24890311062335968, alpha:0.815186083316803)), colors_list: ([Rgba(red:0.2523837685585022, green:0.5016026496887207, blue:0.317435085773468, alpha:0.8463277816772461), Rgba(red:0.945193886756897, green:0.4015909433364868, blue:0.9984470009803772, alpha:0.06219279021024704)]), enable: true, enum_inner: Wood, nested: (vec: (Vec3(x:0.1509154736995697, y:0.7055686116218567, z:0.5588918924331665))), text: "vgkrdwuc", toggle: (false))' + + + # And another complex component + short_name = "EnumComplex" + component_type = registry.short_names_to_long_names[short_name] + add_component_operator(component_type=component_type) + + + property_group_name = registry.get_propertyGroupName_from_shortName(short_name) + target_components_metadata = object.components_meta.components + component_meta = next(filter(lambda component: component["name"] == short_name, target_components_metadata), None) + propertyGroup = getattr(component_meta, property_group_name, None) + + definition = type_infos[component_type] + component_values_shuffler(seed= 17, property_group=propertyGroup, definition=definition, registry=registry) + + print("propertyGroup", object[short_name]) + # cheating / making things easier for us for complex types: we use the custom property value + assert object[short_name] == 'StructLike(a: 0.41416797041893005, b: 38, c: "ljfywwrv")' + + # And another complex component + short_name = "AnimationPlayer" + component_type = registry.short_names_to_long_names[short_name] + add_component_operator(component_type=component_type) + + + property_group_name = registry.get_propertyGroupName_from_shortName(short_name) + target_components_metadata = object.components_meta.components + component_meta = next(filter(lambda component: component["name"] == short_name, target_components_metadata), None) + propertyGroup = getattr(component_meta, property_group_name, None) + + definition = type_infos[component_type] + component_values_shuffler(seed= 17, property_group=propertyGroup, definition=definition, registry=registry) + + print("propertyGroup", object[short_name]) + # cheating / making things easier for us for complex types: we use the custom property value + assert object[short_name] == '(animation: "", paused: true)' + + + + # And another complex component + short_name = "VecOfColors" + component_type = registry.short_names_to_long_names[short_name] + add_component_operator(component_type=component_type) + + + property_group_name = registry.get_propertyGroupName_from_shortName(short_name) + target_components_metadata = object.components_meta.components + component_meta = next(filter(lambda component: component["name"] == short_name, target_components_metadata), None) + propertyGroup = getattr(component_meta, property_group_name, None) + + definition = type_infos[component_type] + component_values_shuffler(seed= 17, property_group=propertyGroup, definition=definition, registry=registry) + + print("propertyGroup", object[short_name]) + # cheating / making things easier for us for complex types: we use the custom property value + assert object[short_name] == '([Rgba(red:0.8066907525062561, green:0.9604947566986084, blue:0.2896253764629364, alpha:0.766107439994812), Rgba(red:0.7042198777198792, green:0.6613830327987671, blue:0.11016204953193665, alpha:0.02693677879869938)])' + + + # And another complex component + short_name = "VecOfF32s" + component_type = registry.short_names_to_long_names[short_name] + add_component_operator(component_type=component_type) + + property_group_name = registry.get_propertyGroupName_from_shortName(short_name) + target_components_metadata = object.components_meta.components + component_meta = next(filter(lambda component: component["name"] == short_name, target_components_metadata), None) + propertyGroup = getattr(component_meta, property_group_name, None) + + definition = type_infos[component_type] + component_values_shuffler(seed= 17, property_group=propertyGroup, definition=definition, registry=registry) + + print("propertyGroup", object[short_name]) + # cheating / making things easier for us for complex types: we use the custom property value + assert object[short_name] == '([0.8066907525062561, 0.9604947566986084])' + + # And another complex component + short_name = "SkinnedMesh" + component_type = registry.short_names_to_long_names[short_name] + add_component_operator(component_type=component_type) + + property_group_name = registry.get_propertyGroupName_from_shortName(short_name) + target_components_metadata = object.components_meta.components + component_meta = next(filter(lambda component: component["name"] == short_name, target_components_metadata), None) + propertyGroup = getattr(component_meta, property_group_name, None) + + definition = type_infos[component_type] + component_values_shuffler(seed= 17, property_group=propertyGroup, definition=definition, registry=registry) + + print("propertyGroup", object[short_name]) + # cheating / making things easier for us for complex types: we use the custom property value + assert object[short_name] == '(inverse_bindposes: Weak(Uuid(uuid: "73b3b118-7d01-4778-8bcc-4e79055f5d22")), joints: [0, 0])' + \ No newline at end of file