diff --git a/Cargo.lock b/Cargo.lock index f508b53..83cb843 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -57,7 +57,7 @@ dependencies = [ "accesskit_consumer 0.38.0", "hashbrown 0.16.1", "objc2 0.5.2", - "objc2-app-kit", + "objc2-app-kit 0.2.2", "objc2-foundation 0.2.2", ] @@ -193,6 +193,24 @@ dependencies = [ "num-traits", ] +[[package]] +name = "arboard" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0348a1c054491f4bfe6ab86a7b6ab1e44e45d899005de92f58b3df180b36ddaf" +dependencies = [ + "clipboard-win", + "log", + "objc2 0.6.4", + "objc2-app-kit 0.3.2", + "objc2-foundation 0.3.2", + "parking_lot", + "percent-encoding", + "windows-sys 0.60.2", + "wl-clipboard-rs", + "x11rb", +] + [[package]] name = "arrayref" version = "0.3.9" @@ -351,18 +369,18 @@ checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" [[package]] name = "bevy" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "950238d3049d81006a6fd6b898a34cfc01bb5462a7668795a54d640aed19fd0a" +checksum = "4bfadbebfc6599aa59289b754ac30023959854304f3d393da2cf62bb3cd5df8f" dependencies = [ "bevy_internal", ] [[package]] name = "bevy_a11y" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e86f2cb45b000a9d121a5a7606f9af4a49e72b8b6a3885dc2acac2f0897a04f1" +checksum = "3c02cd43f914ef7a0f5b16f8a3d88c378c07c92f1a8c32ac5ac4d4f73e55f9e2" dependencies = [ "accesskit", "bevy_app", @@ -373,18 +391,18 @@ dependencies = [ [[package]] name = "bevy_android" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e5e2a949be318bf7184eb084622892afcc1e8b2af44973ac53ab53201756e0" +checksum = "ae5ea5245a845cefa8efb5ff7c2a8a36cdebfb99596068780f340f0b5aba6689" dependencies = [ "android-activity", ] [[package]] name = "bevy_animation" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7da2fcd94cc32ba1c875c62e88506c0ba4775555a413e34cd172ea95fa26098e" +checksum = "dc513aac5cda673fb138236e969b4514e0a9b9f93fd33288111f147baa8af623" dependencies = [ "bevy_animation_macros", "bevy_app", @@ -415,9 +433,9 @@ dependencies = [ [[package]] name = "bevy_animation_macros" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fa3d816d7788e27da936b9c7ec27f9828906d53cb1d06e26c58cac5c5ee799f" +checksum = "eed2910d9ca5c3b48968a54c4571789e4e81935cf3c823383fcac34ca28e2b0e" dependencies = [ "bevy_macro_utils", "quote", @@ -426,9 +444,9 @@ dependencies = [ [[package]] name = "bevy_anti_alias" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "815414ea2e11afe1f2396d89279cfa0986907ef3ec673ec936d9fa695b2bfbf9" +checksum = "dde973fc942cb596b03cae0dbece0a4d9dc2d2790bbc9852aa415affc1210d3a" dependencies = [ "bevy_app", "bevy_asset", @@ -448,9 +466,9 @@ dependencies = [ [[package]] name = "bevy_app" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "671ae6f3a8d84f9ed696c531a138558596e041231a8414b6efeafa8469e841f9" +checksum = "5fd2aa472d43b4d081ef41d26300d17bd22cba6d68df2a223eb358782fa40bc6" dependencies = [ "bevy_derive", "bevy_ecs", @@ -470,9 +488,9 @@ dependencies = [ [[package]] name = "bevy_asset" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43a05907de6a362d2c609a7a1d1b4dca3b58b768f746b719ca1a3c7dfa87d391" +checksum = "1624eddbf2293441b2158506aba75e523432b898d9da26eb6ed3e20af4c7fd38" dependencies = [ "async-broadcast", "async-channel", @@ -513,9 +531,9 @@ dependencies = [ [[package]] name = "bevy_asset_macros" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9444998cc37b51dfd1572c23a501865733ea65619a7d88b47aa654ae2290a4f" +checksum = "735611c80e926e960d279cba2a6f6ab27a61291752ec3b26e76bf9a0957e11e1" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -525,9 +543,9 @@ dependencies = [ [[package]] name = "bevy_audio" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06af3bd91de885f2a5c024569779a7fb43349df611d92f7b795c66c8797378db" +checksum = "750809b7b007dd6de6e5c730e67973027a3d22392fa7fd6f5331f8cefb489a18" dependencies = [ "bevy_app", "bevy_asset", @@ -541,9 +559,9 @@ dependencies = [ [[package]] name = "bevy_camera" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20105c3e77c2fb391bf3ded3a473d60e4058b837c9bf4e3412225833e524c75a" +checksum = "96de20d0babfb51e3907eb4eb56f1e36096a6f8c77acd997f5de611df4ee067d" dependencies = [ "bevy_app", "bevy_asset", @@ -567,10 +585,11 @@ dependencies = [ [[package]] name = "bevy_clipboard" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dc5fb913f25c5a16a2a1aa2942ba3f1365a6d0f2db3c0ea5bc0be01f85dca5d" +checksum = "d0a9792c7f2e8b5b71b9572a6d98fca4ee88ed186c8a02e164540c461ae3a92e" dependencies = [ + "arboard", "bevy_app", "bevy_ecs", "bevy_log", @@ -582,9 +601,9 @@ dependencies = [ [[package]] name = "bevy_color" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e2dfc0091be6eb62fec9158b2d3e6f21b002be7bdb42dd3b8322e949c8426b0" +checksum = "5e5370beae13bea2db64744f370bb33566aa770dff91c2beae245ce82217fbbc" dependencies = [ "bevy_math", "bevy_reflect", @@ -598,9 +617,9 @@ dependencies = [ [[package]] name = "bevy_core_pipeline" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "885d640bbff6c4fa3beadbb043d0d1ae53b2fda864da18a2bf2670fb90428865" +checksum = "2564f1ba766532e8eeb20059133ff6703e8dd5c3864b92378d0d1c541096ef12" dependencies = [ "bevy_app", "bevy_asset", @@ -627,9 +646,9 @@ dependencies = [ [[package]] name = "bevy_derive" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "293df2b2f7ed65ef2ce02b2e7359faac1a9a92a8cc96c182c9de77eb06049ae0" +checksum = "9d2a03321f3bd8016a041b3ae6afe83e636b3540fbc61d571bf069a21fda3231" dependencies = [ "bevy_macro_utils", "quote", @@ -638,9 +657,9 @@ dependencies = [ [[package]] name = "bevy_dev_tools" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db815000affd21545a6d6986f180a66393aee8c84330843e854d376c8537b10f" +checksum = "ee5887919325facb6142d98de3e3d156c1b86c2375ac569e2e3547601ab05eaf" dependencies = [ "bevy_app", "bevy_asset", @@ -670,9 +689,9 @@ dependencies = [ [[package]] name = "bevy_diagnostic" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a73e11555051f37c3e0e9ef7775e77108f2482310242996fb5bb6ef8b685b78e" +checksum = "07a3a736f15486650c4c6866798a78d625c7063c991a3cc7b13f1577d89c82ae" dependencies = [ "atomic-waker", "bevy_app", @@ -688,9 +707,9 @@ dependencies = [ [[package]] name = "bevy_ecs" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4654b9b3535fa7813d2878a50e1b5ad80a361dc1c913b96ded57667f65d70a01" +checksum = "a350b2e4c2e47f7903d688affb8a723b31bca63af9789f1da88703f1ba04e354" dependencies = [ "arrayvec", "bevy_ecs_macros", @@ -716,9 +735,9 @@ dependencies = [ [[package]] name = "bevy_ecs_macro_logic" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee0b98a74141ce8dce4654c60020ebbaefab32646f42af6bbae55f282ae65ff7" +checksum = "76a10fef45a3e7dad717ba03e8b5f7ecdf3b3fd1cd1c5e425793525938e90d5f" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -728,9 +747,9 @@ dependencies = [ [[package]] name = "bevy_ecs_macros" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dc958a194d226d618404e0fea99a3c8b4146207a00a3ba07fa712bf71607240" +checksum = "3916d712264b6f3ec9c964ba10719450ea371e537e202a2ffcfa9f6a5e68169d" dependencies = [ "bevy_ecs_macro_logic", "bevy_macro_utils", @@ -741,9 +760,9 @@ dependencies = [ [[package]] name = "bevy_encase_derive" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14dc5bf9e6cb46c4401a66625b5f7eb9654a7f3c8586423c428b79586a1c55cd" +checksum = "be03820f64f2279ae9d826c882e4ef764516ff75ab7bdc39bb40801891533b89" dependencies = [ "bevy_macro_utils", "encase_derive_impl", @@ -751,9 +770,9 @@ dependencies = [ [[package]] name = "bevy_feathers" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e744e047f9328a9c072982569fabbbc837db0474fd902473b5f438f8688c30b6" +checksum = "e2bb6cfa726defd90add3eb71dc8b1ab32ca441f2531130679bfa880af2fb1f1" dependencies = [ "accesskit", "bevy_a11y", @@ -783,9 +802,9 @@ dependencies = [ [[package]] name = "bevy_gilrs" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7998fe83c89d527efa83c85c574a17f7bb6e34881d638ecb7f706d9d79e82f3c" +checksum = "b8215d166d5c4a9f821713a1a549a57c5f8bdf404745c84f7a8b920b7b7d92b2" dependencies = [ "bevy_app", "bevy_ecs", @@ -799,9 +818,9 @@ dependencies = [ [[package]] name = "bevy_gizmos" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c0cbd55cc33b6412777d60d8c24a96bee148c82a5731f35ac85b2df4a7cf957" +checksum = "2ac5bcad0b8d141ef64f4a89643f74f11827ea6ef48073192b39d69156ed1b92" dependencies = [ "bevy_app", "bevy_asset", @@ -822,9 +841,9 @@ dependencies = [ [[package]] name = "bevy_gizmos_macros" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9903f2614f53bacacb92bef1e407afe3a27a4abddb500bfd479909c5d7b254df" +checksum = "b37bbaa6241480b119da406fc261c9cf85d435addad880ae564c9b0f54a89a28" dependencies = [ "bevy_macro_utils", "quote", @@ -833,9 +852,9 @@ dependencies = [ [[package]] name = "bevy_gizmos_render" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd569456c4b19bafa6d37c1bd9cc743fdadda3a2f23d79d2ceb0a088ea8d475f" +checksum = "2ea2b6266d210bca0aa3bcba7e17204e437b4e86cecd4021ab7dcd32da576a02" dependencies = [ "bevy_app", "bevy_asset", @@ -862,9 +881,9 @@ dependencies = [ [[package]] name = "bevy_gltf" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84e21ad83b7dc8d456491ea3d50057685d8c4cca8bc52a1b4a7161c86c369842" +checksum = "0d17df73b26adfb8be89f0716b8667c60660bdd2d589863b8901caca58c99841" dependencies = [ "async-lock", "base64", @@ -898,9 +917,9 @@ dependencies = [ [[package]] name = "bevy_image" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37bc41f69a0c6ade2e7961602517545b39ab8e42bc8c4a729bd24ffee3bcd904" +checksum = "ca63218585b83f98831214431449e9344b363349dd5cab98dae0b8129f0a0e2f" dependencies = [ "bevy_app", "bevy_asset", @@ -927,9 +946,9 @@ dependencies = [ [[package]] name = "bevy_input" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd221cf0732f5bf06caf594bdb233361ac735d4d416cf5849757b64bf4e8472a" +checksum = "b22e8b1119ff5c0b551cc11b672d25732c4e3eda72aceabc380595bd0e7bbe88" dependencies = [ "bevy_app", "bevy_ecs", @@ -944,9 +963,9 @@ dependencies = [ [[package]] name = "bevy_input_focus" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e1a14f56c6e722048ec9dc20dbbc6f46b8037f61e319ea776829199278da166" +checksum = "c4d5573eb503387f73d12acde3010d49c808c790d34691e2fb410fc54b8c72b9" dependencies = [ "bevy_app", "bevy_ecs", @@ -961,9 +980,9 @@ dependencies = [ [[package]] name = "bevy_internal" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d52a85632a749f956f92b7b391c31ce1f229e57b06de879d1b60a3bb91e4e240" +checksum = "4ba99ca2e501f14f4af3322d66ae41b5c5b6ebd3aac4d00cda47dea4c00290ae" dependencies = [ "bevy_a11y", "bevy_android", @@ -1020,9 +1039,9 @@ dependencies = [ [[package]] name = "bevy_light" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd7b5009e9cc765c30b21daf2277ea4423cbd347b05280ea0943b50c5a80cd42" +checksum = "a4f91fb900c2412c5cb7ff5083d428d8361a1d39b605df86eb259aff82f7ac45" dependencies = [ "bevy_app", "bevy_asset", @@ -1046,9 +1065,9 @@ dependencies = [ [[package]] name = "bevy_log" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2017a5fe12ea230d00cfdca00c65c262924be26e0324f7e0033c64f8cc265888" +checksum = "e24488594832237c1e3abc823642823fa057b810c3a21e14e65bdbd15d1579d5" dependencies = [ "android_log-sys", "bevy_app", @@ -1064,9 +1083,9 @@ dependencies = [ [[package]] name = "bevy_macro_utils" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "746a19912c6dc1bbe79188778573e8a253d5832c696b2fcb95578c17b29ff7ba" +checksum = "7164fe229422295bba15f1885048f34f4660db069aacb895208f996b0c7784fb" dependencies = [ "proc-macro2", "quote", @@ -1076,9 +1095,9 @@ dependencies = [ [[package]] name = "bevy_material" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "423710403b4a4d8e9ee872c6ac8108787f2396422b582d15a660a40731ddfbf0" +checksum = "3efcdb3ba04a57f6e05548884745684a2051e9692398915f57c5c276306b7f10" dependencies = [ "bevy_asset", "bevy_derive", @@ -1099,9 +1118,9 @@ dependencies = [ [[package]] name = "bevy_material_macros" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6928e167592472f6ee900f80de199cc2dafd31d4f082a86e8d594b81b973e3d" +checksum = "854f95c8f3374ef6242790de50b5cb8f5a601c698772d1447bf856067b53ee64" dependencies = [ "bevy_macro_utils", "quote", @@ -1110,9 +1129,9 @@ dependencies = [ [[package]] name = "bevy_math" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7c280440d2a5bc07ea393b5346b5712eec73ea30f0133097b8b13dade385beb" +checksum = "98ead494dcfaa9b4594eed7f09a27d868b7cc7fc9ebd655c5643322778f4a8a2" dependencies = [ "approx", "arrayvec", @@ -1130,9 +1149,9 @@ dependencies = [ [[package]] name = "bevy_mesh" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59863e6f37ef0ba1f37021bce9dd940f9dc31d15e03f548cda5fd3e674f409e" +checksum = "e2adbf8e5a5817c345986756eb0377e18a510e1d7685ef62d6c7bafcd3bab85e" dependencies = [ "bevy_app", "bevy_asset", @@ -1164,9 +1183,9 @@ checksum = "bff34eb29ff4b8a8688bc7299f14fb6b597461ca80fec03ed7d22939ab33e48f" [[package]] name = "bevy_pbr" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38ebc777de2d7f45888c68e8e04949bfb8a40aee62f700283fc340f525e67f52" +checksum = "244ae7d618b51a59c913c36b0564a295cd85ea91a5e777b542bb7bdb846a23d6" dependencies = [ "arrayvec", "bevy_app", @@ -1207,9 +1226,9 @@ dependencies = [ [[package]] name = "bevy_picking" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93468ac5937f76be3af763d496f01e899edf6d9c1a1d39a87ae4ce8eba36f78b" +checksum = "235d1ea0cd7d0ff2f37592f37b4d8504c597884296058ecadcb0d206d0258ab7" dependencies = [ "bevy_app", "bevy_asset", @@ -1231,9 +1250,9 @@ dependencies = [ [[package]] name = "bevy_platform" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3120670bb2308980f723477c9d82476fcda31f08be9b256c3f0acdee82a65094" +checksum = "fd610a417e7b4a3b9602cf11264d16cbbff8eabe689c5fed8be4e84c6a2680a3" dependencies = [ "critical-section", "foldhash 0.2.0", @@ -1253,9 +1272,9 @@ dependencies = [ [[package]] name = "bevy_post_process" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57379b51aa0f1b2066c956263e1f12686d22cf8939cf9644eebf2ee42d3dd460" +checksum = "8eb9340107f7a4292b3b1d138cffb2700f31cef580f5777f2e83f4f00eae4dc1" dependencies = [ "bevy_app", "bevy_asset", @@ -1278,15 +1297,15 @@ dependencies = [ [[package]] name = "bevy_ptr" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b511e89f7078fd21fdea77061a0ca3e737297c7011bb10c073e0aecb17c9fea6" +checksum = "1974de4b140f102fded747229ff4a61921acec07f02f0d1dcdadfe9ce177d0ff" [[package]] name = "bevy_reflect" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92abd59cbba1524c1847e9a50f74d94e6b7836c80a8edfa9c47e59f7fd81021d" +checksum = "9b76c3d056da3e299b84652ccf914c487b786857225d8ffbc8fc9509441a9e6b" dependencies = [ "assert_type_match", "bevy_platform", @@ -1313,9 +1332,9 @@ dependencies = [ [[package]] name = "bevy_reflect_derive" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90fa4e6b97fd2d582dd5ed96762a70d04505a477c833cf4f69d016dcd03d2d04" +checksum = "5fc5f820ee52afeca6d3bb83f15c1bf61ea6196c840a761a21a8bc266a3b166e" dependencies = [ "bevy_macro_utils", "indexmap", @@ -1327,9 +1346,9 @@ dependencies = [ [[package]] name = "bevy_render" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a89b2cc850a4c3fd12a6a088a4fc3e80118b2e1b569da8936f6d4d99ca1b6ee7" +checksum = "fc86a32b2eef9859e1e7d323c6d1a9150fe77aa17c30fd05abebc12f645929dc" dependencies = [ "async-channel", "bevy_app", @@ -1381,9 +1400,9 @@ dependencies = [ [[package]] name = "bevy_render_macros" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0eb5cffe5253a6ab4e4b84b2e40a6a2f4673deb16fd63ab9dfc4a015449873a" +checksum = "6be6eba0ce9770ae4576693804d6c605f8afd9c4769787414254efcf92196a90" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -1393,9 +1412,9 @@ dependencies = [ [[package]] name = "bevy_scene" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28a3c891148c40e1352fc41001c0e1894ba63fc4e2d3aca33447343c4122b782" +checksum = "33f6f4f24cd771c6fd67286a8f264a45a644dc798a36614252db220d4fbbd63b" dependencies = [ "bevy_app", "bevy_asset", @@ -1414,9 +1433,9 @@ dependencies = [ [[package]] name = "bevy_scene_macros" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4bc33a36a4e9e344985a96cd8b4abc816cf2c5d2fa002d72fd7bcd11396589c" +checksum = "4fc7844c3410e228581200f73be123467c424f62fc40499c3e869b641b582748" dependencies = [ "bevy_ecs_macro_logic", "bevy_macro_utils", @@ -1427,9 +1446,9 @@ dependencies = [ [[package]] name = "bevy_shader" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0ac51378bb6a021165ee334f846b515cd06082e24ce962adce58ad7df1c39a" +checksum = "50ba4fa5c5102a9ad1b0508c5bf8a6d02a22d5dc13c23ba908ee6d3d16a357cd" dependencies = [ "bevy_asset", "bevy_platform", @@ -1446,9 +1465,9 @@ dependencies = [ [[package]] name = "bevy_sprite" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c679b88cc655881d403929bcdf02d30f688fd8916eb1635e6e7f8585d8ae6894" +checksum = "e93e631436ff9c08613843d46521ee60f2fcb2eb5f4754eec59591ca817a2ba0" dependencies = [ "bevy_app", "bevy_asset", @@ -1472,9 +1491,9 @@ dependencies = [ [[package]] name = "bevy_sprite_render" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a65ca9a286dd5815ca4d2d41d4f83bdbb22c8a639d10b4c33eac114b369c36" +checksum = "0c0a13c775880fe8fb3e7928921b2a1b549fd92c17571e7ca5e1250e53f0e56c" dependencies = [ "bevy_app", "bevy_asset", @@ -1505,9 +1524,9 @@ dependencies = [ [[package]] name = "bevy_state" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c22e694ea52e42994aea6ed2d0b378fa1e9d5a9b615db88626e33508bc03f35" +checksum = "f69ce6a0066eb4626165e2f8c85d3cf4808cfe4cb2027df8840d5cbfe8a3428d" dependencies = [ "bevy_app", "bevy_ecs", @@ -1521,9 +1540,9 @@ dependencies = [ [[package]] name = "bevy_state_macros" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "835f45091fa0df1ff3cb10f4ca5a397d4e9249b550f1be6893b08a2a06d6eed7" +checksum = "a36dd49049023a0abbd0bd1e2b99580ed83a18c5351c64caba4c06e3b584cf9c" dependencies = [ "bevy_macro_utils", "quote", @@ -1532,9 +1551,9 @@ dependencies = [ [[package]] name = "bevy_tasks" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa34e6b9b804851ec08a41c0346c859d82e2fa98c906d74b965ee61bbbb688e4" +checksum = "1f787d4ba7237b64b30bd2d690a8cbae1ba775e0eec326711c446654cb720e7c" dependencies = [ "async-channel", "async-executor", @@ -1551,9 +1570,9 @@ dependencies = [ [[package]] name = "bevy_text" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38e1d7eb8b10229f424b4fc56c864a26c32ac02b8cd184e2cc25eceea7b5e892" +checksum = "c0b275f50fb01b1e2d411326a7750ecc2fe629c48b89997cf2a3c93fe786e076" dependencies = [ "bevy_app", "bevy_asset", @@ -1580,9 +1599,9 @@ dependencies = [ [[package]] name = "bevy_time" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c21e3be2aa4426ea1e0a7036d3d1dbbded84c319459d9f3e2a616b33563372f2" +checksum = "f6896d83d7ed32a2f89da127b7aeddf01eb702e603897cf5ddac231480a1870e" dependencies = [ "bevy_app", "bevy_ecs", @@ -1595,9 +1614,9 @@ dependencies = [ [[package]] name = "bevy_transform" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c95fefe69c9223d10e6b52a0fdf12811bab9d0c7dcb27570cb86824b451f180d" +checksum = "d94cc6065320ebeb58ae88a0863a4c4c2a642c6db698e283eb50be01a834ca5a" dependencies = [ "bevy_app", "bevy_ecs", @@ -1612,9 +1631,9 @@ dependencies = [ [[package]] name = "bevy_ui" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5519c799ecf14e2eeece8b9b823250a00c9df14523e2638b647fccfe4ff0d20" +checksum = "8a2f97c39dadfef97dbe295fc1ce212825bb9fda2becc8f558d1d7e7d7dbbedf" dependencies = [ "accesskit", "bevy_a11y", @@ -1650,9 +1669,9 @@ dependencies = [ [[package]] name = "bevy_ui_render" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f1d3921936d88bd2638dd4d87bff8fc3b9908a046a50658548045102249f93e" +checksum = "30a36be1c251417421ee070ecd1a393f0036631f7495564a8c9d4abb6042dc40" dependencies = [ "bevy_app", "bevy_asset", @@ -1683,9 +1702,9 @@ dependencies = [ [[package]] name = "bevy_ui_widgets" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fc616ccc51b36dea5cb1de91ed82569b41649923388e5ba82cb7d2f1ef18d8" +checksum = "a71063099a056a010bdbbcc1f1daf2d50bff517d69d62e5334d4c32d7bf9e9e0" dependencies = [ "accesskit", "bevy_a11y", @@ -1707,9 +1726,9 @@ dependencies = [ [[package]] name = "bevy_utils" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3aceea6c7ffdd568f866d5ca4dfe50c33440c54f7bc230c13a9ba7ab0c91aed1" +checksum = "de51fa7ea2e95d4c2d1278c5629285d59eec951cc60c992964c03f30910ef5a1" dependencies = [ "async-channel", "bevy_platform", @@ -1720,9 +1739,9 @@ dependencies = [ [[package]] name = "bevy_window" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efcc255b43db156fba393b2ff8fa552aac5e7e02ae4c6298eacdbab655ddf988" +checksum = "38373ee93a9248c14afe41d2025f4aa5e68b004b06ae7702816b180e72b39ea3" dependencies = [ "bevy_app", "bevy_asset", @@ -1739,9 +1758,9 @@ dependencies = [ [[package]] name = "bevy_winit" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308c9eb04f74f340593b3def6a7c1778fd42581d779c6db836d690c7d471f94c" +checksum = "c1e9c615f4194b1e00ba536892a3d3d3300c2a1f8e66112fdebd7077bf2744c9" dependencies = [ "accesskit", "accesskit_winit", @@ -1772,9 +1791,9 @@ dependencies = [ [[package]] name = "bevy_world_serialization" -version = "0.19.0" +version = "0.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de58ae74410d4f940e3f00484f58603b4f1a53a7d84ebe3fca258d2a3aa96620" +checksum = "36855264b9b5d229bde74f01730eb6251c72dc052404ae144a9295cc0abdefc1" dependencies = [ "bevy_app", "bevy_asset", @@ -1940,9 +1959,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.4.2" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d262e149917187838d5b42777c8253bcb64500067342904e7d429499a6f277e" +checksum = "509591b7bcd67f4ef775afad7662703b4935daaa6ec0e5605cfb1090b32a2b6d" dependencies = [ "find-msvc-tools", "jobserver", @@ -1968,6 +1987,15 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" +[[package]] +name = "clipboard-win" +version = "5.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bde03770d3df201d4fb868f2c9c59e66a3e4e2bd06692a0fe701e7103c7e84d4" +dependencies = [ + "error-code", +] + [[package]] name = "codespan-reporting" version = "0.12.0" @@ -2028,9 +2056,9 @@ checksum = "32b13ea120a812beba79e34316b3942a857c86ec1593cb34f27bb28272ce2cca" [[package]] name = "const_panic" -version = "0.2.15" +version = "0.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e262cdaac42494e3ae34c43969f9cdeb7da178bdb4b66fa6a1ea2edb4c8ae652" +checksum = "9603f79528ece8163c496f8932121cb36cfe46259e9c907bb3d8205139d7caa3" dependencies = [ "typewit", ] @@ -2343,9 +2371,9 @@ checksum = "9e5e8f6c15a24b9a3ee5efec809ccd006d3b30e8b3bb63c39af737c7f87daa1d" [[package]] name = "encase" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e3e0ff2ee0b7aa97428308dd9e1e42369cb22f5fb8dc1c55546637443a60f1e" +checksum = "b1acbc46b960480c4959213714511e22f9a2e0d361520693bcf5057b5924f53e" dependencies = [ "const_panic", "encase_derive", @@ -2354,18 +2382,18 @@ dependencies = [ [[package]] name = "encase_derive" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4d90c5d7d527c6cb8a3b114efd26a6304d9ab772656e73d8f4e32b1f3d601a2" +checksum = "1e30d38c47336a0afbdfde297b442944041cf6dccbb1a79eceea16abfb27a92a" dependencies = [ "encase_derive_impl", ] [[package]] name = "encase_derive_impl" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8bad72d8308f7a382de2391ec978ddd736e0103846b965d7e2a63a75768af30" +checksum = "495d24abe406f090f2ba8fc362ecaa8a001e192522aa75eae7b144163c3235ff" dependencies = [ "proc-macro2", "quote", @@ -2399,6 +2427,12 @@ dependencies = [ "windows-sys 0.61.2", ] +[[package]] +name = "error-code" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5343afd4a8365a643ac588dab4cf234a190c7f6c88c9f6dd6ffe00837661b7" + [[package]] name = "euclid" version = "0.22.14" @@ -2445,9 +2479,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.10" +version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b73573e6edcd2af0cdf47bd6cb58f0b3839491263c314eaad1ccf24430e1de" +checksum = "d45db016d36b838f563236e9193d0ee6ce38f3f68b6c94e914b4929c96bbb890" [[package]] name = "fixedbitset" @@ -2494,9 +2528,9 @@ dependencies = [ [[package]] name = "font-types" -version = "0.12.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a7299a780854a6d391be2ae1c8521c9368471b559dbfd6a8dbd9f407eaff100" +checksum = "75382bc7392ef10aad10935f92fc3db36d2d4dad0e5d96d8d65e04f89a07ec39" dependencies = [ "bytemuck", ] @@ -2544,24 +2578,24 @@ checksum = "aa9a19cbb55df58761df49b23516a86d432839add4af60fc256da840f66ed35b" [[package]] name = "futures-channel" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "262590f4fe6afeb0bc83be1daa64e52657fe185690a958af7f3ad0e92085c5ae" +checksum = "b1f9e3d69d39e4862ffed03ed071a76f9a13ba1d9109d355b0f0aa6b15e393c4" dependencies = [ "futures-core", ] [[package]] name = "futures-core" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cd50c473c80f6d7c3670a752354b8e569b1a7cbfdc0419ec88e5edad85e0dc7" +checksum = "92d699e522242e69e3003b94ecc1f960f3a5e015aa7c5d7486e65ad01dd94f5e" [[package]] name = "futures-io" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4577ecaa3c4f96589d473f679a71b596316f6641bc350038b962a5daf0085d7a" +checksum = "53c0fa8157de1303bfffdaa1cc2a673bfffb60102f76b0ef4441659124373fed" [[package]] name = "futures-lite" @@ -2578,26 +2612,26 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d6d3cde68c518367be28956066ddfef33813991b77a55005a69dae04bf3b10b" +checksum = "9fb9654ba8355388abeb8dcb4fc62f511300867002afc858860463bdd9fe0c44" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] name = "futures-task" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b231ed28831efb4a61a08580c4bc233ec56bc009f4cd8f52da2c3cb97df0c109" +checksum = "cd417de3d1d015fc3bfd2b1ea46dfc7bab72ef86f1cc7cc9c78e728b34a6d1fd" [[package]] name = "futures-util" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a77a90a256fce34da66415271e30f94ee91c57b04b8a2c042d9cf3220179deaa" +checksum = "0d50a92467f8ba5dd6e3ee5d4bd04d73ab2e4e1c44474a0674821dfce14b79bc" dependencies = [ "futures-core", "futures-macro", @@ -2906,9 +2940,9 @@ checksum = "dfa686283ad6dd069f105e5ab091b04c62850d3e4cf5d67debad1933f55023df" [[package]] name = "icu_collections" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2984d1cd16c883d7935b9e07e44071dca8d917fd52ecc02c04d5fa0b5a3f191c" +checksum = "fa68d21081c4a05d5a901a1c62add574c77048b6a1c67be3b50ce0b60d4ca513" dependencies = [ "displaydoc", "potential_utf", @@ -2918,26 +2952,11 @@ dependencies = [ "zerovec", ] -[[package]] -name = "icu_locale" -version = "2.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5a396343c7208121dc86e35623d3dfe19814a7613cfd14964994cdc9c9a2e26" -dependencies = [ - "icu_collections", - "icu_locale_core", - "icu_locale_data", - "icu_provider", - "potential_utf", - "tinystr", - "zerovec", -] - [[package]] name = "icu_locale_core" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92219b62b3e2b4d88ac5119f8904c10f8f61bf7e95b640d25ba3075e6cac2c29" +checksum = "d56e28588da92eee5c3201a6eff33fabdd49b62269c8938d4ff050ce4d900deb" dependencies = [ "displaydoc", "litemap", @@ -2948,16 +2967,30 @@ dependencies = [ ] [[package]] -name = "icu_locale_data" -version = "2.2.0" +name = "icu_locale_fallback" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fdcc9ac77c6d74ff5cf6e65ef3181d6af32003b16fce3a77fb451d2f695993" +checksum = "251af8e57c9400e3eb58242fe5b8b1152b2a64fdf4cf632f923c38ccee6f2fa9" +dependencies = [ + "icu_locale_core", + "icu_locale_fallback_data", + "icu_provider", + "potential_utf", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locale_fallback_data" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "decf2a22ec8fa68f1a0c1129a3f8583f8f8bc24e8b9ccbe98ead99f62a4dc3a8" [[package]] name = "icu_normalizer" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c56e5ee99d6e3d33bd91c5d85458b6005a22140021cc324cea84dd0e72cff3b4" +checksum = "12f9cf5f235641ed274641dd81c3f28d870e276763d0797aeeab72317b1c646f" dependencies = [ "icu_collections", "icu_normalizer_data", @@ -2969,16 +3002,17 @@ dependencies = [ [[package]] name = "icu_normalizer_data" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da3be0ae77ea334f4da67c12f149704f19f81d1adf7c51cf482943e84a2bad38" +checksum = "1563da1ed3e0b3bf3d74c9b85917ac9c56464d2f57242270c09c9e752f8021a0" [[package]] name = "icu_properties" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bee3b67d0ea5c2cca5003417989af8996f8604e34fb9ddf96208a033901e70de" +checksum = "7e7ca276ad3145661a65914e6daf131ca5120cd3dcee8f8f3214b8875184a148" dependencies = [ + "displaydoc", "icu_collections", "icu_locale_core", "icu_properties_data", @@ -2989,15 +3023,15 @@ dependencies = [ [[package]] name = "icu_properties_data" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2bbb201e0c04f7b4b3e14382af113e17ba4f63e2c9d2ee626b720cbce54a14" +checksum = "e590f038c1464a96894fd6d10127e90a8be4509f56ff7ecef851b15cee0b7caa" [[package]] name = "icu_provider" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "139c4cf31c8b5f33d7e199446eff9c1e02decfc2f0eec2c8d71f65befa45b421" +checksum = "92a7ed671a6aad807a8651a2e1782a6598fda9ce5185dd8158549e95a91c6428" dependencies = [ "displaydoc", "icu_locale_core", @@ -3012,24 +3046,25 @@ dependencies = [ [[package]] name = "icu_segmenter" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c0794db0b1a86193ac9c48768d0e6c52c54448e0870ad87907d456ee0dac964" +checksum = "82d07aafccd67af15d02512a6adf5896fbc5ed00f2e99b471d2efa14016db3db" dependencies = [ "icu_collections", - "icu_locale", + "icu_locale_fallback", "icu_provider", "icu_segmenter_data", "potential_utf", + "smallvec", "utf8_iter", "zerovec", ] [[package]] name = "icu_segmenter_data" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4a2c462a4d927d512f5f882a033ddd62f33a05bb9f230d98f736ac3dc85938f" +checksum = "ae293c039020f9ec10710af98d29ce6aa2051486638b49c9a6409f3b4a9e98ad" [[package]] name = "image" @@ -3064,9 +3099,9 @@ checksum = "a257582fdcde896fd96463bf2d40eefea0580021c0712a0e2b028b60b47a837a" [[package]] name = "inotify" -version = "0.11.4" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "153be1941a183ec9ccd095ddbe17a8b8d435ef6c76e9e02451b933c3999af2c8" +checksum = "4cc00ea907cab49550b7da656f80ebb97be1b997d931fbcd28d39734e17ce592" dependencies = [ "bitflags 2.13.1", "inotify-sys", @@ -3268,14 +3303,14 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981" [[package]] name = "libredox" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2026a5056764a10b2bf5d56488cba40da507f5493a6a429340e2004d9ed085fa" +checksum = "28d0a00925a9f930d679b6789b721e3a7f9ed110f41b86d2497caa780c3a070a" dependencies = [ "bitflags 2.13.1", "libc", "plain", - "redox_syscall 0.9.1", + "redox_syscall 0.9.2", ] [[package]] @@ -3308,9 +3343,9 @@ checksum = "32a66949e030da00e8c7d4434b251670a91556f4144941d37452769c25d58a53" [[package]] name = "litemap" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92daf443525c4cce67b150400bc2316076100ce0b3686209eb8cf3c31612e6f0" +checksum = "47d9d19d1d6efa0109d2f65ff4c85cddd50bd572e5a00127ab10987290bcefae" [[package]] name = "litrs" @@ -3472,6 +3507,15 @@ dependencies = [ "libc", ] +[[package]] +name = "nom" +version = "8.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df9761775871bdef83bee530e60050f7e54b1105350d6884eb0fb4f46c2f9405" +dependencies = [ + "memchr", +] + [[package]] name = "nonmax" version = "0.5.5" @@ -3519,9 +3563,9 @@ dependencies = [ [[package]] name = "num-integer" -version = "0.1.46" +version = "0.1.47" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +checksum = "7ce2d95d4b3734dc35aa2f45e1aa22cd416814592a4f9d9205e11affd5b8e10b" dependencies = [ "num-traits", ] @@ -3610,6 +3654,18 @@ dependencies = [ "objc2-quartz-core 0.2.2", ] +[[package]] +name = "objc2-app-kit" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d49e936b501e5c5bf01fda3a9452ff86dc3ea98ad5f283e1455153142d97518c" +dependencies = [ + "bitflags 2.13.1", + "objc2 0.6.4", + "objc2-core-graphics", + "objc2-foundation 0.3.2", +] + [[package]] name = "objc2-audio-toolbox" version = "0.3.2" @@ -3707,6 +3763,19 @@ dependencies = [ "objc2 0.6.4", ] +[[package]] +name = "objc2-core-graphics" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e022c9d066895efa1345f8e33e584b9f958da2fd4cd116792e15e07e4720a807" +dependencies = [ + "bitflags 2.13.1", + "dispatch2", + "objc2 0.6.4", + "objc2-core-foundation", + "objc2-io-surface", +] + [[package]] name = "objc2-core-image" version = "0.2.2" @@ -3774,6 +3843,17 @@ dependencies = [ "objc2-core-foundation", ] +[[package]] +name = "objc2-io-surface" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180788110936d59bab6bd83b6060ffdfffb3b922ba1396b312ae795e1de9d81d" +dependencies = [ + "bitflags 2.13.1", + "objc2 0.6.4", + "objc2-core-foundation", +] + [[package]] name = "objc2-link-presentation" version = "0.2.2" @@ -3782,7 +3862,7 @@ checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" dependencies = [ "block2 0.5.1", "objc2 0.5.2", - "objc2-app-kit", + "objc2-app-kit 0.2.2", "objc2-foundation 0.2.2", ] @@ -3935,6 +4015,16 @@ dependencies = [ "num-traits", ] +[[package]] +name = "os_pipe" +version = "1.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d8fae84b431384b68627d0f9b3b1245fcf9f46f6c0e3dc902e9dce64edd1967" +dependencies = [ + "libc", + "windows-sys 0.61.2", +] + [[package]] name = "owned_ttf_parser" version = "0.25.1" @@ -4064,9 +4154,9 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.33" +version = "0.3.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19f132c84eca552bf34cab8ec81f1c1dcc229b811638f9d283dceabe58c5569e" +checksum = "f6b464fbc74e149a392436b17d523f769e057cb6877f6a5c4618bc6f11800548" [[package]] name = "plain" @@ -4118,9 +4208,9 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0103b1cef7ec0cf76490e969665504990193874ea05c85ff9bab8b911d0a0564" +checksum = "d83eb9bc6d8e5cf568e7a1101d60ee05e81ed50ea106026f3d18deeb046d7661" dependencies = [ "serde_core", "writeable", @@ -4275,7 +4365,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "046a7d674daf459825b32f5062056d6882db0d2f5a479fbd76ccfc870ac18709" dependencies = [ "bytemuck", - "font-types 0.12.2", + "font-types 0.12.3", "once_cell", ] @@ -4305,9 +4395,9 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07507be7b4a5f9f26eeb41eeaebb1f5a7ff29dfb29739facc21d35bf8b11c21e" +checksum = "f1c93da5bb2c5d4e6c0ef7abeead62c89169a0a4882bfb83ac892f2423aea2fe" dependencies = [ "bitflags 2.13.1", ] @@ -4847,9 +4937,9 @@ dependencies = [ [[package]] name = "tinystr" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8323304221c2a851516f22236c5722a72eaa19749016521d6dff0824447d96d" +checksum = "b1e27c91459209c2986af3dcf603a5a74a4368754ce37414f59acc971167f643" dependencies = [ "displaydoc", "serde_core", @@ -4985,11 +5075,23 @@ dependencies = [ "wasm-bindgen", ] +[[package]] +name = "tree_magic_mini" +version = "3.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8765b90061cba6c22b5831f675da109ae5561588290f9fa2317adab2714d5a6" +dependencies = [ + "memchr", + "nom", + "petgraph", +] + [[package]] name = "tt_net_test_vibeless" version = "0.1.0" dependencies = [ "bevy", + "derive_more", ] [[package]] @@ -5048,9 +5150,9 @@ checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" [[package]] name = "uuid" -version = "1.24.0" +version = "1.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf3923a6f5c4c6382e0b653c4117f48d631ea17f38ed86e2a828e6f7412f5239" +checksum = "2cefc03fd367c0c6d4305de1b312cf00248c4114f4a0418ce6a6af769e3b0bd9" dependencies = [ "getrandom 0.4.3", "js-sys", @@ -5163,9 +5265,9 @@ dependencies = [ [[package]] name = "wayland-backend" -version = "0.3.16" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "016ccf01d1c58b6f8999612813e17c9b2390f7d70671428869913310f83f54b8" +checksum = "38a91b4eaddff87b1cd1074985e3713da4af2c49742d1b356b2c01670a67a078" dependencies = [ "cc", "downcast-rs 1.2.1", @@ -5634,6 +5736,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.60.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" +dependencies = [ + "windows-targets 0.53.5", +] + [[package]] name = "windows-sys" version = "0.61.2" @@ -5667,13 +5778,30 @@ dependencies = [ "windows_aarch64_gnullvm 0.52.6", "windows_aarch64_msvc 0.52.6", "windows_i686_gnu 0.52.6", - "windows_i686_gnullvm", + "windows_i686_gnullvm 0.52.6", "windows_i686_msvc 0.52.6", "windows_x86_64_gnu 0.52.6", "windows_x86_64_gnullvm 0.52.6", "windows_x86_64_msvc 0.52.6", ] +[[package]] +name = "windows-targets" +version = "0.53.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" +dependencies = [ + "windows-link", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", +] + [[package]] name = "windows-threading" version = "0.2.1" @@ -5695,6 +5823,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" + [[package]] name = "windows_aarch64_msvc" version = "0.42.2" @@ -5707,6 +5841,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_aarch64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" + [[package]] name = "windows_i686_gnu" version = "0.42.2" @@ -5719,12 +5859,24 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" +[[package]] +name = "windows_i686_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" + [[package]] name = "windows_i686_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" + [[package]] name = "windows_i686_msvc" version = "0.42.2" @@ -5737,6 +5889,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_i686_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" + [[package]] name = "windows_x86_64_gnu" version = "0.42.2" @@ -5749,6 +5907,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnu" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" + [[package]] name = "windows_x86_64_gnullvm" version = "0.42.2" @@ -5761,6 +5925,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" + [[package]] name = "windows_x86_64_msvc" version = "0.42.2" @@ -5773,6 +5943,12 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +[[package]] +name = "windows_x86_64_msvc" +version = "0.53.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" + [[package]] name = "winit" version = "0.30.13" @@ -5797,7 +5973,7 @@ dependencies = [ "memmap2", "ndk", "objc2 0.5.2", - "objc2-app-kit", + "objc2-app-kit 0.2.2", "objc2-foundation 0.2.2", "objc2-ui-kit", "orbclient", @@ -5841,10 +6017,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1ebf944e87a7c253233ad6766e082e3cd714b5d03812acc24c318f549614536e" [[package]] -name = "writeable" -version = "0.6.3" +name = "wl-clipboard-rs" +version = "0.9.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ffae5123b2d3fc086436f8834ae3ab053a283cfac8fe0a0b8eaae044768a4c4" +checksum = "e9651471a32e87d96ef3a127715382b2d11cc7c8bb9822ded8a7cc94072eb0a3" +dependencies = [ + "libc", + "log", + "os_pipe", + "rustix 1.1.4", + "thiserror 2.0.20", + "tree_magic_mini", + "wayland-backend", + "wayland-client", + "wayland-protocols", + "wayland-protocols-wlr", +] + +[[package]] +name = "writeable" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ad82d2a33cdc9674dc7465672f271e096168fcdbe0f799d9e6db8c5892679dc" [[package]] name = "x11-dl" @@ -5987,9 +6181,9 @@ dependencies = [ [[package]] name = "zerotrie" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f9152d31db0792fa83f70fb2f83148effb5c1f5b8c7686c3459e361d9bc20bf" +checksum = "4ea269c3bd32f0a32c321907a2ae912ba6f4649bb0fc764a15627e99a7095a3f" dependencies = [ "displaydoc", "yoke", @@ -5999,9 +6193,9 @@ dependencies = [ [[package]] name = "zerovec" -version = "0.11.6" +version = "0.11.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90f911cbc359ab6af17377d242225f4d75119aec87ea711a880987b18cd7b239" +checksum = "bb0464e17806c1d976d5cba29399c7f08e516e279e2ba493f63123b5fca67dd8" dependencies = [ "serde", "yoke", @@ -6011,13 +6205,13 @@ dependencies = [ [[package]] name = "zerovec-derive" -version = "0.11.3" +version = "0.11.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555" +checksum = "9f212a141d820099d57ffafb9569be9617a6f27d3dc881fbee8fb56642f917a9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.119", + "syn 3.0.3", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 016f041..8a29f5c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,8 @@ version = "0.1.0" edition = "2024" [dependencies] -bevy = "0.19.0" +bevy = "0.19" +derive_more = { version = "2.1.1", features = ["deref", "deref_mut"] } [profile.dev] opt-level = 1 diff --git a/src/main.rs b/src/main.rs index 7ddfdb0..0853936 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,12 +1,48 @@ -use bevy::prelude::*; -use net_ui::NetUiPlugin; +use bevy::{camera::ScalingMode, color::palettes::css::GREEN, prelude::*}; +use main_menu::MainMenuPlugin; use networking::NetworkingPlugin; -mod net_ui; +mod main_menu; mod networking; +/// We target this 16:9 resolution to make things easier. +pub const WINDOW_TARGET_WIDTH_U32: u32 = 3840; +pub const WINDOW_TARGET_HEIGHT_U32: u32 = 2160; +pub const WINDOW_TARGET_WIDTH: f32 = WINDOW_TARGET_WIDTH_U32 as f32; +pub const WINDOW_TARGET_HEIGHT: f32 = WINDOW_TARGET_HEIGHT_U32 as f32; + +/// The main overarching state of the app. +#[derive(States, Debug, Clone, Copy, Default, Eq, PartialEq, Hash)] +pub enum AppState { + #[default] + Menu, + Lobby, + Game, +} + fn main() { App::new() - .add_plugins((DefaultPlugins, NetUiPlugin, NetworkingPlugin)) + .add_plugins((DefaultPlugins, MainMenuPlugin, NetworkingPlugin)) + .add_systems(Startup, setup) + .add_systems(Update, debug_border) + .insert_resource(ClearColor(Color::srgb(0.07, 0.33, 0.45))) + .init_state::() .run(); } + +fn setup(mut commands: Commands) { + let mut projection = OrthographicProjection::default_2d(); + projection.scaling_mode = ScalingMode::AutoMin { + min_width: WINDOW_TARGET_WIDTH, + min_height: WINDOW_TARGET_HEIGHT, + }; + commands.spawn((Camera2d, Projection::Orthographic(projection))); +} + +fn debug_border(mut gizmos: Gizmos) { + gizmos.rect_2d( + Isometry2d::IDENTITY, + Vec2::new(WINDOW_TARGET_WIDTH, WINDOW_TARGET_HEIGHT), + GREEN, + ); +} diff --git a/src/main_menu.rs b/src/main_menu.rs new file mode 100644 index 0000000..e291b8f --- /dev/null +++ b/src/main_menu.rs @@ -0,0 +1,377 @@ +use crate::{AppState, WINDOW_TARGET_HEIGHT, WINDOW_TARGET_WIDTH}; +use bevy::ui_widgets::Button; +use bevy::{prelude::*, ui_widgets::Activate}; +use derive_more::{Deref, DerefMut}; + +pub struct MainMenuPlugin; + +impl Plugin for MainMenuPlugin { + fn build(&self, app: &mut App) { + app.add_systems(OnEnter(AppState::Menu), setup_menu) + .add_systems(OnExit(AppState::Menu), cleanup_menu) + .add_systems(Update, (menu_redraw).run_if(in_state(AppState::Menu))) + .add_observer(button_activate_observer) + .add_systems(Update, (scale_ui, style_ui_elements)); + } +} + +const N_LAYERS: usize = 5; + +/// A UI object that is selected. +#[derive(Component, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Default, Debug)] +struct Selected; + +/// Defines colors that a UI object should turn when interactions occur. +#[derive(Component, Clone, PartialEq, Default, Debug)] +struct InteractionColors { + default: Color, + hovered: Color, + pressed: Color, + selected: Color, + selected_hovered: Color, + selected_pressed: Color, +} +impl InteractionColors { + pub const DEFAULT: InteractionColors = InteractionColors { + default: Color::srgb(0.25, 0.63, 0.84), + hovered: Color::srgb(0.31, 0.77, 0.93), + pressed: Color::srgb(0.16, 0.55, 0.89), + selected: Color::srgb(0.93, 0.66, 0.06), + selected_hovered: Color::srgb(1., 0.74, 0.16), + selected_pressed: Color::srgb(0.86, 0.56, 0.), + }; + pub const GOOD: InteractionColors = InteractionColors { + default: Color::srgb(0.25, 0.75, 0.25), + hovered: Color::srgb(0.35, 0.85, 0.35), + pressed: Color::srgb(0.15, 0.65, 0.15), + selected: Color::srgb(0.35, 0.8, 0.35), + selected_hovered: Color::srgb(0.45, 0.9, 0.45), + selected_pressed: Color::srgb(0.25, 0.7, 0.25), + }; + pub const DANGER: InteractionColors = InteractionColors { + default: Color::srgb(0.75, 0.25, 0.25), + hovered: Color::srgb(0.85, 0.35, 0.35), + pressed: Color::srgb(0.65, 0.15, 0.15), + selected: Color::srgb(0.8, 0.3, 0.3), + selected_hovered: Color::srgb(0.9, 0.4, 0.4), + selected_pressed: Color::srgb(0.7, 0.2, 0.2), + }; +} + +/// The root of the menu +#[derive(Component, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Default, Debug)] +struct MenuRoot; + +/// The layer that the page is on. +#[derive( + Component, Copy, Clone, PartialEq, Eq, PartialOrd, Ord, Default, Debug, Deref, DerefMut, +)] +struct Layer(usize); + +/// A component that indicates the layer that this button points to. +#[derive(Component, Copy, Clone, PartialEq, Eq, Debug, Default)] +struct NextLayer(MenuLayer); + +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Default)] +pub enum MenuLayer { + #[default] + Root, + Play, + LoadSave, + Browse, + DirectConnect, + Settings, + Controls, + Graphics, +} + +impl MenuLayer { + fn render(&self, layer: usize, menu_root: Entity) -> Box { + match self { + MenuLayer::Root => Box::new(bsn! { + menu_layer(layer) + ChildOf(menu_root) + Children [ + menu_button("Play", Some(MenuLayer::Play)), + menu_button("Settings", Some(MenuLayer::Settings)), + ( + menu_button("Quit", None) + on(|_event: On, mut exit: MessageWriter| { exit.write(AppExit::Success); } ) + InteractionColors::DANGER + ), + ] + }), + MenuLayer::Play => Box::new(bsn! { + menu_layer(layer) + ChildOf(menu_root) + Children [ + menu_button("Load Save", Some(MenuLayer::LoadSave)), + menu_button("Browse Games", Some(MenuLayer::Browse)), + menu_button("Direct Connect", Some(MenuLayer::DirectConnect)), + ] + }), + MenuLayer::LoadSave => Box::new(bsn! { + menu_layer(layer) + ChildOf(menu_root) + Children [ + menu_button("Save 1", None), + menu_button("Save 2", None), + ( + menu_button("New Game", None) + InteractionColors::GOOD + ), + ] + }), + MenuLayer::Browse => Box::new(bsn! { + full_menu_layer(layer) + ChildOf(menu_root) + Children [ + menu_button("Game 1", None), + ] + }), + MenuLayer::DirectConnect => Box::new(bsn! { + full_menu_layer(layer) + ChildOf(menu_root) + Children [ + // TODO: have IP addr text box here + Text("Enter IP") + ] + }), + MenuLayer::Settings => Box::new(bsn! { + menu_layer(layer) + ChildOf(menu_root) + Children [ + menu_button("Controls", Some(MenuLayer::Controls)), + menu_button("Graphics", Some(MenuLayer::Graphics)), + ] + }), + MenuLayer::Controls => Box::new(bsn! { + full_menu_layer(layer) + ChildOf(menu_root) + Children [ + Text("Controls..") + ] + }), + MenuLayer::Graphics => Box::new(bsn! { + full_menu_layer(layer) + ChildOf(menu_root) + Children [ + Text("Graphics..") + ] + }), + } + } +} + +/// The state of the menu last frame. +#[derive(Resource, Debug, Clone, PartialEq, Eq, Hash, Deref, DerefMut)] +struct LastMenu(Vec); +/// The current state of the menu. +#[derive(Resource, Debug, Clone, PartialEq, Eq, Hash, Deref, DerefMut)] +struct CurrentMenu(Vec); + +fn setup_menu(mut commands: Commands) { + commands.insert_resource(CurrentMenu(vec![MenuLayer::Root])); + commands.insert_resource(LastMenu(vec![])); + + commands.spawn_scene(bsn! { + #MenuRoot + MenuRoot + DespawnOnExit::(AppState::Menu) + Node { + width: percent(90), + height: percent(70), + margin: UiRect::AUTO, + align_items: AlignItems::Start, + justify_content: JustifyContent::Start, + column_gap: px(10), + } + }); +} + +fn cleanup_menu(mut commands: Commands) { + commands.remove_resource::(); + commands.remove_resource::(); +} + +fn menu_redraw( + mut commands: Commands, + mut last_menu: ResMut, + current_menu: Res, + q_layers: Query<(Entity, &Layer), Without>, + s_menu_root: Single, Without)>, +) { + if current_menu.is_changed() { + let last_equal_layer = last_menu + .iter() + .zip(current_menu.iter()) + .enumerate() + .filter_map(|(idx, (last, current))| (last == current).then_some(idx as i32)) + .last() + .unwrap_or(-1); + + // delete any layers that have been deleted/changed + if last_equal_layer < last_menu.len() as i32 { + for (e, layer) in q_layers.iter() { + if layer.0 as i32 > last_equal_layer { + commands.entity(e).despawn(); + } + } + } + + // render new/changed layers + for (idx, layer) in current_menu + .iter() + .enumerate() + .skip((last_equal_layer + 1) as usize) + { + commands.spawn_scene(layer.render(idx, *s_menu_root)); + } + + // update last menu to match current menu + last_menu.0 = current_menu.0.clone(); + } +} + +fn menu_layer(layer: usize) -> impl Scene { + let name = format!("MenuLayer{}", layer); + bsn! { + Name(name) + Layer(layer) + Node { + width: percent(100.0 / N_LAYERS as f32), + height: percent(100), + flex_direction: FlexDirection::Column, + // align_items: AlignItems::Start, + align_items: AlignItems::Baseline, + justify_content: JustifyContent::FlexEnd, + row_gap: px(100), + } + } +} + +fn full_menu_layer(layer: usize) -> impl Scene { + bsn! { + menu_layer(layer) + Node { + width: Val::Auto, + flex_grow: 1., + } + BackgroundColor(Color::srgba(0.8, 0.1, 0.1, 0.7)) + } +} + +fn menu_button(label: &str, next_layer: Option) -> impl Scene { + let next_layer_component = next_layer + .map(|n| Box::new(bsn! { NextLayer(n) }) as Box) + .unwrap_or(Box::new(bsn! {})); + + bsn! { + Button + Node { + width: px(600), + height: px(130), + border: px(6), + // border_radius: BorderRadius::MAX, + justify_content: JustifyContent::Center, + align_items: AlignItems::Center, + margin: UiRect::all(px(4)), + } + next_layer_component + BorderColor::from(Color::BLACK) + InteractionColors::DEFAULT + Interaction + Children [( + Text(label) + TextFont { + // font: FontSourceTemplate::Handle("fonts/FiraSans-Bold.ttf"), + font_size: px(66.0), + } + TextColor(Color::srgb(0.9, 0.9, 0.9)) + TextShadow + )] + } +} + +fn button_activate_observer( + event: On, + mut commands: Commands, + mut menu: ResMut, + q_next_layer: Query<(&NextLayer, &ChildOf)>, + q_layer: Query<(&Layer, &Children)>, + q_selected: Query<(Entity, Has)>, +) { + if let Ok((next_layer, parent)) = q_next_layer.get(event.entity) { + let Ok((layer, layer_entries)) = q_layer.get(parent.parent()) else { + warn!( + "\"Activate\" triggered on entity with `NextLayer`, but it's parent doesn't have `Layer`!" + ); + return; + }; + + // remove all the layers after + if (layer.0 as usize) < menu.len() { + menu.0.drain((layer.0 + 1)..); + } + // push next layer + menu.push(next_layer.0); + + // update the buttons so the correct one is selected + for (entity, selected) in q_selected.iter_many(layer_entries) { + if entity == event.entity { + if !selected { + commands.entity(entity).insert(Selected); + } + } else if selected { + commands.entity(entity).remove::(); + } + } + } +} + +/// Styles the UI elements according to their [`InteractionColors`]. +fn style_ui_elements( + mut q_interaction_set: ParamSet<( + Query< + ( + &Interaction, + &mut BackgroundColor, + &InteractionColors, + Has, + ), + (Or<(Changed, Added)>, With