diff --git a/.vscode/launch.json b/.vscode/launch.json index c72d3ea..8cc2e22 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -7,12 +7,12 @@ { "type": "cppvsdbg", "stopAtEntry": false, - // "console": "externalTerminal", + "console": "externalTerminal", "request": "launch", "name": "Debug", "program": "${workspaceRoot}/target/debug/phos.exe", "args": [], - "cwd": "${workspaceRoot}", + "cwd": "${workspaceRoot}/target/debug", "preLaunchTask": "Build" } ] diff --git a/Cargo.lock b/Cargo.lock index 78cb9a7..f4c3d4d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -224,6 +224,15 @@ dependencies = [ "libloading 0.7.4", ] +[[package]] +name = "asset_loader" +version = "0.1.0" +dependencies = [ + "bevy", + "serde", + "serde_json", +] + [[package]] name = "async-broadcast" version = "0.5.1" @@ -309,9 +318,9 @@ checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "bevy" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea370412c322af887c9115442d8f2ec991b652f163a1d8920ecaf08cae63f2bc" +checksum = "65b9eadaacf8fe971331bc3f250f35c18bc9dace3f96b483062f38ac07e3a1b4" dependencies = [ "bevy_internal", ] @@ -358,9 +367,9 @@ dependencies = [ [[package]] name = "bevy_a11y" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6192db480a04d4a0ad5d89a2fbd78ccca5ce902829a49ec2d1dbc213222ed8b1" +checksum = "cd8ef2795f7f5c816a4eda04834083eb5a92e8fef603bc21d2091c6e3b63621a" dependencies = [ "accesskit", "bevy_app", @@ -370,9 +379,9 @@ dependencies = [ [[package]] name = "bevy_animation" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef3bbaf9233c428d8dd4b66a41b5381e41c67da860d9dc2118a8e6610ec874c" +checksum = "e553d68bc937586010ed2194ac66b751bc6238cf622b3ed5a86f4e1581e94509" dependencies = [ "bevy_app", "bevy_asset", @@ -389,9 +398,9 @@ dependencies = [ [[package]] name = "bevy_app" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b508824497f3a3a2fab8398dc3944a4d4adddcc30ee25cd6d45b0a57336549ce" +checksum = "ab348a32e46d21c5d61794294a92d415a770d26c7ba8951830b127b40b53ccc4" dependencies = [ "bevy_derive", "bevy_ecs", @@ -405,9 +414,9 @@ dependencies = [ [[package]] name = "bevy_asset" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf224b57fb65e1cde921afe0b343c2d595531dbf882c41abad01bbc665a05c4" +checksum = "50028e0d4f28a9f6aab48f61b688ba2793141188f88cdc9aa6c2bca2cc02ad35" dependencies = [ "async-broadcast", "async-fs", @@ -437,9 +446,9 @@ dependencies = [ [[package]] name = "bevy_asset_macros" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "684c855651e7734740b76ada0e7daed116c46d393f9031cc45c4fe9ad5829548" +checksum = "6617475908368418d815360148fdbb82f879dc255a70d2d7baa3766f0cd4bfd7" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -449,9 +458,9 @@ dependencies = [ [[package]] name = "bevy_audio" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0af1796b7e56c2f49de5be72fb2aadb8f9310d6173d70040fd2eff1c7cb29009" +checksum = "b0f12495e230cd5cf59c6051cdd820c97d7fe4f0597d4d9c3240c62e9c65b485" dependencies = [ "bevy_app", "bevy_asset", @@ -467,9 +476,9 @@ dependencies = [ [[package]] name = "bevy_core" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1a8f4722fb978d308b6311f3dd61f6885165055ad05ce3dfc1b2fd001bb017e" +checksum = "12b0042f241ba7cd61487aadd8addfb56f7eeb662d713ac1577026704508fc6c" dependencies = [ "bevy_app", "bevy_ecs", @@ -482,9 +491,9 @@ dependencies = [ [[package]] name = "bevy_core_pipeline" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "568659c43c8f1805f434b5fc0f8e700c263391403f899312bb0e4bc8d8b9ca70" +checksum = "48b7a471cb8ba665f12f7a167faa5566c11386f5bfc77d2e10bfde22b179f7b3" dependencies = [ "bevy_app", "bevy_asset", @@ -504,9 +513,9 @@ dependencies = [ [[package]] name = "bevy_derive" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7de77523d154e220a740e568a89f52fac7de481374bdecbbbeb283a37580ba34" +checksum = "f0e01f8343f391e2d6a63b368b82fb5b252ed43c8713fc87f9a8f2d59407dd00" dependencies = [ "bevy_macro_utils", "quote", @@ -515,9 +524,9 @@ dependencies = [ [[package]] name = "bevy_diagnostic" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b5b031eeafc17bed997313ca15c8e4ed8b97fe2e9ef48e980833e4bf5cfa0e7" +checksum = "e1401cdccec7e49378d013dfb0ff62c251f85b3be19dcdf04cfd827f793d1ee9" dependencies = [ "bevy_app", "bevy_core", @@ -531,9 +540,9 @@ dependencies = [ [[package]] name = "bevy_ecs" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a027175613f630a51273c0f8ae909dd54ea3ce72eb573f456056553f79918ac" +checksum = "98e612a8e7962ead849e370f3a7e972b88df879ced05cd9dad6a0286d14650cf" dependencies = [ "async-channel", "bevy_ecs_macros", @@ -551,9 +560,9 @@ dependencies = [ [[package]] name = "bevy_ecs_macros" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55dbbb6300f08cef5983497970db8545d3cbda6ee4f410a6c6742b7b6bbfd3af" +checksum = "807b5106c3410e58f4f523b55ea3c071e2a09e31e9510f3c22021c6a04732b5b" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -577,9 +586,9 @@ dependencies = [ [[package]] name = "bevy_encase_derive" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df72ac1273fcdb8105736c42815442ae1291f1f577e34cb7e9d18f732103e2f0" +checksum = "887087a5e522d9f20733a84dd7e6e9ca04cd8fdfac659220ed87d675eebc83a7" dependencies = [ "bevy_macro_utils", "encase_derive_impl", @@ -587,9 +596,9 @@ dependencies = [ [[package]] name = "bevy_gilrs" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02146d8a92ac322717185005a17b488e74b2ec08ca3f9eb8a7cadb7f0486cb70" +checksum = "7d133c65ab756f130c65cf00f37dc293fb9a9336c891802baf006c63e300d0e2" dependencies = [ "bevy_app", "bevy_ecs", @@ -603,9 +612,9 @@ dependencies = [ [[package]] name = "bevy_gizmos" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66e9965860d505e2ea4144850904cefd8b528f59477061df8563194dc954ad58" +checksum = "054df3550a9d423a961de65b459946ff23304f97f25af8a62c23f4259db8506d" dependencies = [ "bevy_app", "bevy_asset", @@ -625,9 +634,9 @@ dependencies = [ [[package]] name = "bevy_gizmos_macros" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e689be764256a5a0d1f01c5f1dbaa3439e98a1338bf88b496db184d28e00c9" +checksum = "abdcaf74d8cd34aa5c3293527e7a012826840886ad3496c1b963ed8b66b1619f" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -637,9 +646,9 @@ dependencies = [ [[package]] name = "bevy_gltf" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d0cd8fd1c1ce3a57ca96eaee05f406ad65865efd02606e5f288b5f7767d8c6f" +checksum = "21ecf404295055deb7fe037495891bc135ca10d46bc5b6c55f9ab7b7ebc61d31" dependencies = [ "base64", "bevy_animation", @@ -667,9 +676,9 @@ dependencies = [ [[package]] name = "bevy_hierarchy" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b2999d1e5bb877b475c9b2d17643d5fb47fc4cc49ea48ba3ab5a6b00ed850a6" +checksum = "bbb3dfad24866a6713dafa3065a91c5cf5e355f6e1b191c25d704ae54185246c" dependencies = [ "bevy_app", "bevy_core", @@ -681,9 +690,9 @@ dependencies = [ [[package]] name = "bevy_input" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c22481e4290e2eca68b0c1f5f0a826f185d8f5e40e05c86bb6044dcfe3a04b3" +checksum = "47f2b2b3df168c6ef661d25e09abf5bd4fecaacd400f27e5db650df1c3fa3a3b" dependencies = [ "bevy_app", "bevy_ecs", @@ -696,9 +705,9 @@ dependencies = [ [[package]] name = "bevy_internal" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ac9275cc7f4bce41dff1e62b853933e242f9e5c076d89f06156cf743097d6a0" +checksum = "f58ec0ce77603df9474cde61f429126bfe06eb79094440e9141afb4217751c79" dependencies = [ "bevy_a11y", "bevy_animation", @@ -735,9 +744,9 @@ dependencies = [ [[package]] name = "bevy_log" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "20c7b4e2443654d68b6f8c54e5f1ce3a16c8a9af10f4832390dcae36c1323307" +checksum = "a5eea6c527fd828b7fef8d0f518167f27f405b904a16f227b644687d3f46a809" dependencies = [ "android_log-sys", "bevy_app", @@ -751,9 +760,9 @@ dependencies = [ [[package]] name = "bevy_macro_utils" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bbbf88fc577a21ee9994feed2253ee9838b63fb976783b7a549edfbe07c6764" +checksum = "eb270c98a96243b29465139ed10bda2f675d00a11904f6588a5f7fc4774119c7" dependencies = [ "proc-macro2", "quote", @@ -764,9 +773,9 @@ dependencies = [ [[package]] name = "bevy_math" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d30721f36a0b5f9ad39deb140c50b85cbbaefebab8d10bd20d9de1c9572f968" +checksum = "f06daa26ffb82d90ba772256c0ba286f6c305c392f6976c9822717974805837c" dependencies = [ "glam", "serde", @@ -774,18 +783,18 @@ dependencies = [ [[package]] name = "bevy_mikktspace" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc081a695c3513f09fdc640bf7f66cd73c47eb479da50312bf9710ee6927729d" +checksum = "a0d7ef7f2a826d0b19f059035831ce00a5e930435cc53c61e045773d0483f67a" dependencies = [ "glam", ] [[package]] name = "bevy_pbr" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d90401eb58acb1c9627f11f75b076bfdeab2af9a4aea4540cb525efc5782b613" +checksum = "75b29c80269fa6db55c9e33701edd3ecb73d8866ca8cb814d49a9d3fb72531b6" dependencies = [ "bevy_app", "bevy_asset", @@ -808,15 +817,28 @@ dependencies = [ [[package]] name = "bevy_ptr" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea003584000ef02b73800cc7cb62ee74792fff431e6a8df36863c43bf56fb491" +checksum = "8050e2869fe341db6874203b5a01ff12673807a2c7c80cb829f6c7bea6997268" + +[[package]] +name = "bevy_rapier3d" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ac2b344d110e8aff2dab7ca6ed428dfcbbfeeb8f20827825996538f24e7fcdf" +dependencies = [ + "bevy", + "bitflags 2.5.0", + "log", + "nalgebra", + "rapier3d", +] [[package]] name = "bevy_reflect" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1101dbd44ae35e5c66802e46cfba1182e49f6163c824bee380d4acab5b2f640" +checksum = "ccbd7de21d586457a340a0962ad0747dc5098ff925eb6b27a918c4bdd8252f7b" dependencies = [ "bevy_math", "bevy_ptr", @@ -832,9 +854,9 @@ dependencies = [ [[package]] name = "bevy_reflect_derive" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2a8791d5841a6db862571f709d7ee70c2a5eb1634c3a4329817d04f0e307c2d" +checksum = "3ce33051bd49036d4a5a62aa3f2068672ec55f3ebe92aa0d003a341f15cc37ac" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -845,9 +867,9 @@ dependencies = [ [[package]] name = "bevy_render" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75bbb48471f8cd06f5253e271f9b793695f5b821fc9d39a875497905578d9867" +checksum = "88b2c4b644c739c0b474b6f8f7b0bc68ac13d83b59688781e9a7753c52780177" dependencies = [ "async-channel", "bevy_app", @@ -890,9 +912,9 @@ dependencies = [ [[package]] name = "bevy_render_macros" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffd61a89e7a1b55c78a0aef1fcadd0247fe74a101c00f831791db73d63465051" +checksum = "720b88406e786e378829b7d43c1ffb5300186912b99904d0d4d8ec6698a4f210" dependencies = [ "bevy_macro_utils", "proc-macro2", @@ -902,9 +924,9 @@ dependencies = [ [[package]] name = "bevy_scene" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368b989251241efb590976e309e4778ed9d04eb896c37ea6b874a374432a0b3e" +checksum = "1f3d2caa1bfe7542dbe2c62e1bcc10791ba181fb744d2fe6711d1d373354da7c" dependencies = [ "bevy_app", "bevy_asset", @@ -922,9 +944,9 @@ dependencies = [ [[package]] name = "bevy_sprite" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f52d807086d2c92bc37ee770aa6dbb442b62cdc5665b9c6dd32629b8fae05e4" +checksum = "8cad1b555161f50e5d62b7fdf7ebeef1b24338aae7a88e51985da9553cd60ddf" dependencies = [ "bevy_app", "bevy_asset", @@ -948,9 +970,9 @@ dependencies = [ [[package]] name = "bevy_tasks" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40be36aeec06b8f0eb87894922c6a7fbd8f2a5c8e77dcb9dcbf77641046988c0" +checksum = "f07fcc4969b357de143509925b39c9a2c56eaa8750828d97f319ca9ed41897cb" dependencies = [ "async-channel", "async-executor", @@ -962,9 +984,9 @@ dependencies = [ [[package]] name = "bevy_text" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48f0e51919e13c0c39ecdffcf843e8a8d95fd8861023b02b3ee486d3fa4b6003" +checksum = "c4e8456ae0bea7d6b7621e42c1c12bf66c0891381e62c948ab23920673ce611c" dependencies = [ "ab_glyph", "bevy_app", @@ -984,9 +1006,9 @@ dependencies = [ [[package]] name = "bevy_time" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06fc48cf59acd2b1c52e61787b5bb3db1a0f923cc6ccc68c0d8ab2b5894cfd28" +checksum = "38ea5ae9fe7f56f555dbb05a88d34931907873e3f0c7dc426591839eef72fe3e" dependencies = [ "bevy_app", "bevy_ecs", @@ -998,9 +1020,9 @@ dependencies = [ [[package]] name = "bevy_transform" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b962ae4253f5413b64a839ab8e8d63bc3e3db45f41d06b6ddc7886acdcb5d0f5" +checksum = "a0d51a1f332cc00939d2f19ed6b909e5ed7037e39c7e25cc86930d79d432163e" dependencies = [ "bevy_app", "bevy_ecs", @@ -1012,9 +1034,9 @@ dependencies = [ [[package]] name = "bevy_ui" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3449b963573a56b484cf4f8883f1b5b8eaccaaeda8f28a70c006e3291450f77" +checksum = "b6bbc30be39cfbfa3a073b541d22aea43ab14452dea12d7411ce201df17ff7b1" dependencies = [ "bevy_a11y", "bevy_app", @@ -1040,9 +1062,9 @@ dependencies = [ [[package]] name = "bevy_utils" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac758c2e8509a4a260b7a91f920be3beee6ab9e76e388494240ac5d672779159" +checksum = "5a9f845a985c00e0ee8dc2d8af3f417be925fb52aad4bda5b96e2e58a2b4d2eb" dependencies = [ "ahash", "bevy_utils_proc_macros", @@ -1059,9 +1081,9 @@ dependencies = [ [[package]] name = "bevy_utils_proc_macros" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "014c80f466ed01821a2e602d63cd5076915c1af5de5fa3c074cc4a9ca898ada7" +checksum = "bef158627f30503d5c18c20c60b444829f698d343516eeaf6eeee078c9a45163" dependencies = [ "proc-macro2", "quote", @@ -1070,9 +1092,9 @@ dependencies = [ [[package]] name = "bevy_window" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa0c2a1e580b3b0ad0c928a5e250c8375c6a8a70d8b0f483b23d3bf5b670cc1a" +checksum = "976202d2ed838176595b550ac654b15ae236e0178a6f19a94ca6d58f2a96ca60" dependencies = [ "bevy_a11y", "bevy_app", @@ -1087,9 +1109,9 @@ dependencies = [ [[package]] name = "bevy_winit" -version = "0.13.1" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2c408d459172758a4cfa37e3452d4ea0898101ec2b6d92aa3eb698511bef389" +checksum = "aa66539aa93d8522b146bf82de429714ea6370a6061fc1f1ff7bcacd4e64c6c4" dependencies = [ "accesskit_winit", "approx", @@ -1550,6 +1572,19 @@ dependencies = [ "cfg-if", ] +[[package]] +name = "crossbeam" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + [[package]] name = "crossbeam-channel" version = "0.5.12" @@ -1559,6 +1594,34 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.19" @@ -2408,6 +2471,12 @@ dependencies = [ "windows-targets 0.52.4", ] +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + [[package]] name = "libredox" version = "0.0.2" @@ -2478,6 +2547,16 @@ dependencies = [ "regex-automata 0.1.10", ] +[[package]] +name = "matrixmultiply" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7574c1cf36da4798ab73da5b215bbf444f50718207754cb522201d78d1cd0ff2" +dependencies = [ + "autocfg", + "rawpointer", +] + [[package]] name = "memchr" version = "2.7.1" @@ -2556,6 +2635,34 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "nalgebra" +version = "0.32.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ea4908d4f23254adda3daa60ffef0f1ac7b8c3e9a864cf3cc154b251908a2ef" +dependencies = [ + "approx", + "glam", + "matrixmultiply", + "nalgebra-macros", + "num-complex", + "num-rational", + "num-traits", + "simba", + "typenum", +] + +[[package]] +name = "nalgebra-macros" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91761aed67d03ad966ef783ae962ef9bbaca728d2dd7ceb7939ec110fffad998" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "ndk" version = "0.8.0" @@ -2661,6 +2768,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "num-complex" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" +dependencies = [ + "num-traits", +] + [[package]] name = "num-derive" version = "0.4.2" @@ -2672,6 +2788,26 @@ dependencies = [ "syn 2.0.55", ] +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.18" @@ -2679,6 +2815,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -2880,6 +3017,27 @@ dependencies = [ "windows-targets 0.48.5", ] +[[package]] +name = "parry3d" +version = "0.13.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ccba18a65dba56c08dadfa936e0c9efbc883b3a26dc77d2685f78be10f7667c" +dependencies = [ + "approx", + "arrayvec", + "bitflags 1.3.2", + "downcast-rs", + "either", + "nalgebra", + "num-derive", + "num-traits", + "rustc-hash", + "simba", + "slab", + "smallvec", + "spade", +] + [[package]] name = "paste" version = "1.0.14" @@ -2908,6 +3066,7 @@ version = "0.1.0" dependencies = [ "bevy", "bevy-inspector-egui", + "bevy_rapier3d", "camera_system", "iyes_perf_ui", "noise 0.8.2", @@ -3111,6 +3270,27 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab" +[[package]] +name = "rapier3d" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d07a833e0aa3bc57010caaa50bf75fa78afc03a74207607db740da4e4579a1" +dependencies = [ + "approx", + "arrayvec", + "bit-vec", + "bitflags 1.3.2", + "crossbeam", + "downcast-rs", + "nalgebra", + "num-derive", + "num-traits", + "parry3d", + "rustc-hash", + "simba", + "vec_map", +] + [[package]] name = "raw-window-handle" version = "0.5.2" @@ -3123,6 +3303,12 @@ version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42a9830a0e1b9fb145ebb365b8bc4ccd75f290f98c0247deafbbe2c75cefb544" +[[package]] +name = "rawpointer" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" + [[package]] name = "rectangle-pack" version = "0.4.2" @@ -3197,6 +3383,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" +[[package]] +name = "robust" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf4a6aa5f6d6888f39e980649f3ad6b666acdce1d78e95b8a2cb076e687ae30" + [[package]] name = "rodio" version = "0.17.3" @@ -3255,6 +3447,15 @@ version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" +[[package]] +name = "safe_arch" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f398075ce1e6a179b46f51bd88d0598b92b00d3551f1a2d4ac49e771b56ac354" +dependencies = [ + "bytemuck", +] + [[package]] name = "same-file" version = "1.0.6" @@ -3316,6 +3517,19 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "simba" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "061507c94fc6ab4ba1c9a0305018408e312e17c041eb63bef8aa726fa33aceae" +dependencies = [ + "approx", + "num-complex", + "num-traits", + "paste", + "wide", +] + [[package]] name = "simd-adler32" version = "0.3.7" @@ -3358,6 +3572,18 @@ dependencies = [ "serde", ] +[[package]] +name = "spade" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61addf9117b11d1f5b4bf6fe94242ba25f59d2d4b2080544b771bd647024fd00" +dependencies = [ + "hashbrown", + "num-traits", + "robust", + "smallvec", +] + [[package]] name = "spirv" version = "0.3.0+sdk-1.3.268.0" @@ -3608,6 +3834,12 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + [[package]] name = "unicode-bidi" version = "0.3.15" @@ -3924,6 +4156,16 @@ dependencies = [ "web-sys", ] +[[package]] +name = "wide" +version = "0.7.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89beec544f246e679fc25490e3f8e08003bc4bf612068f325120dad4cea02c1c" +dependencies = [ + "bytemuck", + "safe_arch", +] + [[package]] name = "widestring" version = "1.0.2" @@ -4293,6 +4535,7 @@ dependencies = [ name = "world_generation" version = "0.1.0" dependencies = [ + "asset_loader", "bevy", "noise 0.9.0", "serde", diff --git a/Cargo.toml b/Cargo.toml index 709cd34..05c599f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,14 +1,14 @@ [workspace] - +resolver = "2" members = [ "game/main", - "engine/world_generation" - , "game/camera_system"] -resolver = "2" + "engine/world_generation", + "game/camera_system" + , "engine/asset_loader"] # Enable a small amount of optimization in debug mode -#[profile.dev] -#opt-level = 1 +[profile.dev] +opt-level = 1 # Enable high optimizations for dependencies (incl. Bevy), but not for our code: [profile.dev.package."*"] diff --git a/engine/asset_loader/Cargo.toml b/engine/asset_loader/Cargo.toml new file mode 100644 index 0000000..90b1ec5 --- /dev/null +++ b/engine/asset_loader/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "asset_loader" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +serde = "1.0.197" +serde_json = "1.0.115" +bevy = "0.13.2" diff --git a/engine/asset_loader/src/lib.rs b/engine/asset_loader/src/lib.rs new file mode 100644 index 0000000..88b34bb --- /dev/null +++ b/engine/asset_loader/src/lib.rs @@ -0,0 +1,57 @@ +pub mod macros { + + #[macro_export] + macro_rules! create_asset_loader { + ( + $plugin_name: ident, + $loader_name: ident, + $asset_type: ident, + $extensions: expr + ) => { + use bevy::prelude::*; + pub struct $plugin_name; + impl Plugin for $plugin_name { + fn build(&self, app: &mut App) { + app.init_asset::<$asset_type>() + .init_asset_loader::<$loader_name>(); + } + } + + #[derive(Default)] + pub struct $loader_name; + + impl AssetLoader for $loader_name { + type Asset = $asset_type; + + type Settings = (); + + type Error = String; + + fn load<'a>( + &'a self, + reader: &'a mut bevy::asset::io::Reader, + _settings: &'a Self::Settings, + _load_context: &'a mut bevy::asset::LoadContext, + ) -> bevy::utils::BoxedFuture<'a, Result> { + return Box::pin(async move { + let mut data: String = String::new(); + let read_result = reader.read_to_string(&mut data).await; + if read_result.is_err() { + return Err(read_result.err().unwrap().to_string()); + } + let serialized: Result = + serde_json::from_str(&data); + if serialized.is_err() { + return Err(serialized.err().unwrap().to_string()); + } + return Ok(serialized.unwrap()); + }); + } + + fn extensions(&self) -> &[&str] { + $extensions + } + } + }; + } +} diff --git a/engine/world_generation/Cargo.toml b/engine/world_generation/Cargo.toml index 5a6b6c2..f01df4e 100644 --- a/engine/world_generation/Cargo.toml +++ b/engine/world_generation/Cargo.toml @@ -6,7 +6,8 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -bevy = "0.13.1" +bevy = "0.13.2" noise = "0.9.0" serde = {version="1.0.197", features=["derive"]} serde_json = "1.0.115" +asset_loader = {path = "../asset_loader"} diff --git a/engine/world_generation/src/lib.rs b/engine/world_generation/src/lib.rs index e7854be..20ce9d8 100644 --- a/engine/world_generation/src/lib.rs +++ b/engine/world_generation/src/lib.rs @@ -1,3 +1,8 @@ +pub mod heightmap; +pub mod hex_utils; +pub mod mesh_generator; +pub mod tile_manager; + pub mod prelude { use crate::hex_utils::HexCoord; use bevy::math::{IVec2, UVec2}; @@ -65,8 +70,3 @@ pub mod prelude { pub const ATTRIBUTE_TEXTURE_INDEX: MeshVertexAttribute = MeshVertexAttribute::new("TextureIndex", 988540917, VertexFormat::Uint32); } - -pub mod heightmap; -pub mod hex_utils; -pub mod mesh_generator; -pub mod tile_manager; diff --git a/engine/world_generation/src/tile_manager.rs b/engine/world_generation/src/tile_manager.rs index 7c44db2..9438667 100644 --- a/engine/world_generation/src/tile_manager.rs +++ b/engine/world_generation/src/tile_manager.rs @@ -1,29 +1,36 @@ use std::{collections::HashMap, fs}; -use bevy::ecs::system::Resource; +use asset_loader::create_asset_loader; +use bevy::{ + asset::{Asset, AssetLoader, AsyncReadExt}, + ecs::system::Resource, + reflect::TypePath, +}; use serde::{Deserialize, Serialize}; - -#[derive(Resource)] +#[derive(Resource, Debug)] pub struct TileManager { - pub tiles: HashMap, + pub tiles: HashMap, } -#[derive(Serialize, Deserialize, Debug)] -pub struct TileDefination { +#[derive(Serialize, Deserialize, Debug, TypePath, Asset)] +pub struct TileAsset { + #[serde(skip_serializing, skip_deserializing)] pub id: u32, + pub name: String, pub texture_id: u32, pub side_texture_id: u32, } +create_asset_loader!(TileAssetPlugin, TileAssetLoader, TileAsset, &["tile.json"]); + impl TileManager { - pub fn new(path: String) -> Option { + pub fn new(path: &str) -> Result { let mut cur_id: u32 = 0; let paths = fs::read_dir(path); if paths.is_err() { - print!("{}", paths.err().unwrap()); - return None; + return Err(paths.err().unwrap().to_string()); } let mut manager = TileManager { @@ -37,16 +44,14 @@ impl TileManager { } let data = fs::read_to_string(cur_path); if data.is_err() { - print!("{}", data.err().unwrap()); - return None; + return Err(data.err().unwrap().to_string()); } - let result: Result = + let result: Result = serde_json::from_str(data.unwrap().as_str()); if result.is_err() { - print!("{}", result.err().unwrap()); - return None; + return Err(result.err().unwrap().to_string()); } let mut tile = result.unwrap(); @@ -56,6 +61,6 @@ impl TileManager { cur_id += 1; } - return Some(manager); + return Ok(manager); } } diff --git a/game/main/Cargo.toml b/game/main/Cargo.toml index 2dfd25e..0c251db 100644 --- a/game/main/Cargo.toml +++ b/game/main/Cargo.toml @@ -7,9 +7,10 @@ build = "build.rs" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -bevy = "0.13.1" +bevy = "0.13.2" bevy-inspector-egui = "0.23.4" iyes_perf_ui = "0.2.3" noise = "0.8.2" world_generation ={path="../../engine/world_generation"} camera_system={path = "../camera_system"} +bevy_rapier3d = { version = "0.25.0", features = [ "simd-stable", "debug-render-3d" ] } diff --git a/game/main/assets/tiles/Terra/Grass.tile.json b/game/main/assets/tiles/Terra/Grass.tile.json new file mode 100644 index 0000000..dd48965 --- /dev/null +++ b/game/main/assets/tiles/Terra/Grass.tile.json @@ -0,0 +1,5 @@ +{ + "name": "Grass", + "texture_id": 1, + "side_texture_id": 2 +} \ No newline at end of file diff --git a/game/main/src/macros.rs b/game/main/src/macros.rs new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/game/main/src/macros.rs @@ -0,0 +1 @@ + diff --git a/game/main/src/phos.rs b/game/main/src/phos.rs index 4bbe45e..8a7348a 100644 --- a/game/main/src/phos.rs +++ b/game/main/src/phos.rs @@ -2,9 +2,12 @@ use crate::prelude::*; use bevy::asset::LoadState; use bevy::pbr::ExtendedMaterial; use bevy::{pbr::CascadeShadowConfig, prelude::*}; +use bevy_rapier3d::plugin::{NoUserData, RapierPhysicsPlugin}; +use bevy_rapier3d::render::RapierDebugRenderPlugin; use camera_system::PhosCameraPlugin; use iyes_perf_ui::prelude::*; use world_generation::hex_utils::offset_to_world; +use world_generation::tile_manager::{TileAsset, TileAssetPlugin}; use world_generation::{ heightmap::generate_heightmap, mesh_generator::generate_chunk_mesh, prelude::*, }; @@ -17,13 +20,24 @@ impl Plugin for PhosGamePlugin { .add_plugins(MaterialPlugin::< ExtendedMaterial, >::default()); + + //Systems - Startup app.add_systems(Startup, init_game) .add_systems(Startup, (load_textures, create_map).chain()); - app.add_systems(Update, (check_texture, spawn_map)); + //Systems - Update + app.add_systems(Update, (check_texture, spawn_map, print_tiles)); + + //Perf UI app.add_plugins(bevy::diagnostic::FrameTimeDiagnosticsPlugin) .add_plugins(bevy::diagnostic::EntityCountDiagnosticsPlugin) .add_plugins(bevy::diagnostic::SystemInformationDiagnosticsPlugin) .add_plugins(PerfUiPlugin); + + //Assets + app.add_plugins(TileAssetPlugin); + //Physics + app.add_plugins(RapierPhysicsPlugin::::default()) + .add_plugins(RapierDebugRenderPlugin::default()); } } @@ -52,12 +66,25 @@ fn init_game(mut commands: Commands) { commands.insert_resource(PhosMap::default()); } +#[derive(Resource)] +struct TileResource(Handle); + fn load_textures(mut commands: Commands, asset_server: Res) { let main_tex = asset_server.load("textures/world/stack.png"); commands.insert_resource(ChunkAtlas { handle: main_tex.clone(), is_loaded: false, }); + + let handle: Handle = asset_server.load("tiles/Terra/Grass.tile.json"); + + commands.insert_resource(TileResource(handle)); +} + +fn print_tiles(tile_assets: Res>) { + for (_, tile) in tile_assets.iter() { + println!("Tile: {}", tile.name); + } } fn check_texture(