Compare commits

..

3 commits

Author SHA1 Message Date
Joe Ardent
f7ddd5bc61 abandoning failed attempt 2025-05-18 15:52:15 -07:00
Joe Ardent
961cf08601 update deps 2025-05-18 15:06:22 -07:00
Joe Ardent
35655d3f3c doesn't really work, but some good ideas 2025-05-11 15:37:43 -07:00
4 changed files with 358 additions and 219 deletions

349
Cargo.lock generated
View file

@ -89,7 +89,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ed7572b7ba83a31e20d1b48970ee402d2e3e0537dcfe0a3ff4d6eb7508617d43"
dependencies = [
"alsa-sys",
"bitflags 2.9.0",
"bitflags 2.9.1",
"cfg-if",
"libc",
]
@ -111,7 +111,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ef6978589202a00cd7e118380c448a08b6ed394c3a8df3a430d0898e3a42d046"
dependencies = [
"android-properties",
"bitflags 2.9.0",
"bitflags 2.9.1",
"cc",
"cesu8",
"jni",
@ -219,14 +219,15 @@ dependencies = [
[[package]]
name = "async-executor"
version = "1.13.1"
version = "1.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec"
checksum = "bb812ffb58524bdd10860d7d974e2f01cc0950c2438a74ee5ec2e2280c6c4ffa"
dependencies = [
"async-task",
"concurrent-queue",
"fastrand",
"futures-lite",
"pin-project-lite",
"slab",
]
@ -288,15 +289,16 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
[[package]]
name = "avian3d"
version = "0.2.0"
source = "git+https://github.com/Jondolf/avian?branch=main#50d01bc837f3e1a95bba03673925848a543c3c5e"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8ba10c23fee3d432f3c6cf8d036e269d952b8840c1ca4fa6a021ab926786dc4"
dependencies = [
"avian_derive",
"bevy",
"bevy_heavy",
"bevy_math",
"bevy_transform_interpolation",
"bitflags 2.9.0",
"bitflags 2.9.1",
"derive_more",
"itertools 0.13.0",
"nalgebra",
@ -306,7 +308,8 @@ dependencies = [
[[package]]
name = "avian_derive"
version = "0.2.2"
source = "git+https://github.com/Jondolf/avian?branch=main#50d01bc837f3e1a95bba03673925848a543c3c5e"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "12b257f601a1535e0d4a7a7796f535e3a13de62fd422b16dff7c14d27f0d4048"
dependencies = [
"proc-macro-error2",
"proc-macro2",
@ -423,7 +426,7 @@ dependencies = [
"bevy_tasks",
"bevy_utils",
"bevy_window",
"bitflags 2.9.0",
"bitflags 2.9.1",
"blake3",
"crossbeam-channel",
"derive_more",
@ -511,7 +514,7 @@ dependencies = [
"bevy_transform",
"bevy_utils",
"bevy_window",
"bitflags 2.9.0",
"bitflags 2.9.1",
"bytemuck",
"nonmax",
"radsort",
@ -587,7 +590,7 @@ dependencies = [
"bevy_reflect",
"bevy_tasks",
"bevy_utils",
"bitflags 2.9.0",
"bitflags 2.9.1",
"bumpalo",
"concurrent-queue",
"derive_more",
@ -715,8 +718,9 @@ dependencies = [
[[package]]
name = "bevy_heavy"
version = "0.1.0"
source = "git+https://github.com/Jondolf/bevy_heavy#3905efe581700296de8f48d33388c5471dfca785"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "34ccc861fea2ff58c67f4df119512e204050bd7631a3a9c65e1a5e9d162cce28"
dependencies = [
"bevy_math",
"bevy_reflect",
@ -735,7 +739,7 @@ dependencies = [
"bevy_platform",
"bevy_reflect",
"bevy_utils",
"bitflags 2.9.0",
"bitflags 2.9.1",
"bytemuck",
"futures-lite",
"guillotiere",
@ -894,7 +898,7 @@ dependencies = [
"bevy_reflect",
"bevy_transform",
"bevy_utils",
"bitflags 2.9.0",
"bitflags 2.9.1",
"bytemuck",
"hexasphere",
"serde",
@ -933,7 +937,7 @@ dependencies = [
"bevy_transform",
"bevy_utils",
"bevy_window",
"bitflags 2.9.0",
"bitflags 2.9.1",
"bytemuck",
"derive_more",
"fixedbitset",
@ -1060,7 +1064,7 @@ dependencies = [
"bevy_transform",
"bevy_utils",
"bevy_window",
"bitflags 2.9.0",
"bitflags 2.9.1",
"bytemuck",
"codespan-reporting",
"derive_more",
@ -1141,7 +1145,7 @@ dependencies = [
"bevy_transform",
"bevy_utils",
"bevy_window",
"bitflags 2.9.0",
"bitflags 2.9.1",
"bytemuck",
"derive_more",
"fixedbitset",
@ -1265,8 +1269,9 @@ dependencies = [
[[package]]
name = "bevy_transform_interpolation"
version = "0.1.0"
source = "git+https://github.com/Jondolf/bevy_transform_interpolation#9fd7fe92c32e2d30e38b80566dfa7b740119b593"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72c7c6c4e6a3d5415b3a29a17bd20c17cd0e2f068b96b24e263316d58d5346ea"
dependencies = [
"bevy",
]
@ -1377,7 +1382,7 @@ version = "0.70.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f49d8fed880d473ea71efb9bf597651e77201bdd4893efe54c9e5d65ae04ce6f"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
"cexpr",
"clang-sys",
"itertools 0.13.0",
@ -1429,9 +1434,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "bitflags"
version = "2.9.0"
version = "2.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
checksum = "1b8e56985ec62d17e9c1001dc89c88ecd7dc08e47eba5ec7c29c7b5eeecde967"
dependencies = [
"serde",
]
@ -1485,9 +1490,9 @@ checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf"
[[package]]
name = "bytemuck"
version = "1.22.0"
version = "1.23.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6b1fc10dbac614ebc03540c9dbd60e83887fda27794998c6528f1782047d540"
checksum = "9134a6ef01ce4b366b50689c94f82c14bc72bc5d0386829828a2e2752ef7958c"
dependencies = [
"bytemuck_derive",
]
@ -1527,7 +1532,7 @@ version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b99da2f8558ca23c71f4fd15dc57c906239752dd27ff3c00a1d56b685b7cbfec"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
"log",
"polling",
"rustix",
@ -1537,9 +1542,9 @@ dependencies = [
[[package]]
name = "cc"
version = "1.2.20"
version = "1.2.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "04da6a0d40b948dfc4fa8f5bbf402b0fc1a64a28dbf7d12ffd683550f2c1b63a"
checksum = "5f4ac86a9e5bc1e2b3449ab9d7d3a6a405e3d1bb28d7b9be8614f55846ae3766"
dependencies = [
"jobserver",
"libc",
@ -1733,7 +1738,7 @@ version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e418dd4f5128c3e93eab12246391c54a20c496811131f85754dc8152ee207892"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
"fontdb",
"log",
"rangemap",
@ -1820,11 +1825,11 @@ checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929"
[[package]]
name = "ctrlc"
version = "3.4.6"
version = "3.4.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "697b5419f348fd5ae2478e8018cb016c00a5881c7f46c717de98ffd135a5651c"
checksum = "46f93780a459b7d656ef7f071fe699c4d3d2cb201c4b24d085b6ddc505276e73"
dependencies = [
"nix",
"nix 0.30.1",
"windows-sys 0.59.0",
]
@ -1911,9 +1916,9 @@ checksum = "ea8a8b81cacc08888170eef4d13b775126db426d0b348bee9d18c2c1eaf123cf"
[[package]]
name = "dpi"
version = "0.1.1"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f25c0e292a7ca6d6498557ff1df68f32c99850012b6ea401cf8daf771f22ff53"
checksum = "d8b14ccef22fc6f5a8f4d7d768562a182c04ce9a3b3157b91390b52ddfdf1a76"
[[package]]
name = "either"
@ -1980,9 +1985,9 @@ dependencies = [
[[package]]
name = "errno"
version = "0.3.11"
version = "0.3.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "976dd42dc7e85965fe702eb8164f21f450704bdde31faefd6471dba214cb594e"
checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18"
dependencies = [
"libc",
"windows-sys 0.59.0",
@ -2063,18 +2068,18 @@ checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
[[package]]
name = "font-types"
version = "0.8.4"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fa6a5e5a77b5f3f7f9e32879f484aa5b3632ddfbe568a16266c904a6f32cdaf"
checksum = "02a596f5713680923a2080d86de50fe472fb290693cf0f701187a1c8b36996b7"
dependencies = [
"bytemuck",
]
[[package]]
name = "fontconfig-parser"
version = "0.5.7"
version = "0.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c1fcfcd44ca6e90c921fee9fa665d530b21ef1327a4c1a6c5250ea44b776ada7"
checksum = "bbc773e24e02d4ddd8395fd30dc147524273a83e54e0f312d986ea30de5f5646"
dependencies = [
"roxmltree",
]
@ -2179,9 +2184,9 @@ dependencies = [
[[package]]
name = "getrandom"
version = "0.3.2"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0"
checksum = "26145e563e54f2cadc477553f1ec5ee650b00862f0a58bcd12cbdc5f0ea2d2f4"
dependencies = [
"cfg-if",
"libc",
@ -2215,7 +2220,7 @@ dependencies = [
"libc",
"libudev-sys",
"log",
"nix",
"nix 0.29.0",
"uuid",
"vec_map",
"wasm-bindgen",
@ -2315,7 +2320,7 @@ version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fbcd2dba93594b227a1f57ee09b8b9da8892c34d55aa332e034a228d0fe6a171"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
"gpu-alloc-types",
]
@ -2325,7 +2330,7 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "98ff03b468aa837d70984d55f5d3f846f6ec31fe34bbb97c4f85219caeee1ca4"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
]
[[package]]
@ -2346,7 +2351,7 @@ version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dcf29e94d6d243368b7a56caa16bc213e4f9f8ed38c4d9557069527b5d5281ca"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
"gpu-descriptor-types",
"hashbrown",
]
@ -2357,7 +2362,7 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fdf242682df893b86f33a73828fb09ca4b2d3bb6cc95249707fc684d27484b91"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
]
[[package]]
@ -2397,9 +2402,9 @@ dependencies = [
[[package]]
name = "hashbrown"
version = "0.15.2"
version = "0.15.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289"
checksum = "84b26c544d002229e640969970a2e74021aadf6e2f96372b9c58eff97de08eb3"
dependencies = [
"allocator-api2",
"equivalent",
@ -2491,7 +2496,7 @@ version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f37dccff2791ab604f9babef0ba14fbe0be30bd368dc541e2b08d07c8aa908f3"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
"inotify-sys",
"libc",
]
@ -2567,7 +2572,7 @@ version = "0.1.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a"
dependencies = [
"getrandom 0.3.2",
"getrandom 0.3.3",
"libc",
]
@ -2632,19 +2637,19 @@ checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa"
[[package]]
name = "libloading"
version = "0.8.6"
version = "0.8.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34"
checksum = "6a793df0d7afeac54f95b471d3af7f0d4fb975699f972341a4b76988d49cdf0c"
dependencies = [
"cfg-if",
"windows-targets 0.52.6",
"windows-targets 0.53.0",
]
[[package]]
name = "libm"
version = "0.2.13"
version = "0.2.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c9627da5196e5d8ed0b0495e61e518847578da83483c37288316d9b2e03a7f72"
checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de"
[[package]]
name = "libredox"
@ -2652,9 +2657,9 @@ version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
"libc",
"redox_syscall 0.5.11",
"redox_syscall 0.5.12",
]
[[package]]
@ -2724,9 +2729,9 @@ dependencies = [
[[package]]
name = "matrixmultiply"
version = "0.3.9"
version = "0.3.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9380b911e3e96d10c1f415da0876389aaf1b56759054eeb0de7df940c456ba1a"
checksum = "a06de3016e9fae57a36fd14dba131fccf49f74b40b7fbdb472f96e361ec71a08"
dependencies = [
"autocfg",
"rawpointer",
@ -2753,7 +2758,7 @@ version = "0.31.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f569fb946490b5743ad69813cb19629130ce9374034abe31614a36402d18f99e"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
"block",
"core-graphics-types",
"foreign-types",
@ -2786,7 +2791,7 @@ checksum = "e380993072e52eef724eddfcde0ed013b0c023c3f0417336ed041aa9f076994e"
dependencies = [
"arrayvec",
"bit-set 0.8.0",
"bitflags 2.9.0",
"bitflags 2.9.1",
"cfg_aliases",
"codespan-reporting",
"hexf-parse",
@ -2855,7 +2860,7 @@ version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2076a31b7010b17a38c01907c45b945e8f11495ee4dd588309718901b1f7a5b7"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
"jni-sys",
"log",
"ndk-sys 0.5.0+25.2.9519653",
@ -2869,7 +2874,7 @@ version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c3f42e7bbe13d351b6bead8286a43aac9534b82bd3cc43e47037f012ebfd62d4"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
"jni-sys",
"log",
"ndk-sys 0.6.0+11769913",
@ -2908,7 +2913,19 @@ version = "0.29.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
"cfg-if",
"cfg_aliases",
"libc",
]
[[package]]
name = "nix"
version = "0.30.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74523f3a35e05aba87a1d978330aef40f67b0304ac79c1c00b294c9830543db6"
dependencies = [
"bitflags 2.9.1",
"cfg-if",
"cfg_aliases",
"libc",
@ -3061,7 +3078,7 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e4e89ad9e3d7d297152b17d39ed92cd50ca8063a89a9fa569046d41568891eff"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
"block2",
"libc",
"objc2",
@ -3077,7 +3094,7 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
"block2",
"objc2",
"objc2-core-location",
@ -3101,7 +3118,7 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
"block2",
"objc2",
"objc2-foundation",
@ -3113,7 +3130,7 @@ version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c10c2894a6fed806ade6027bcd50662746363a9589d3ec9d9bef30a4e4bc166"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
]
[[package]]
@ -3152,7 +3169,7 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0ee638a5da3799329310ad4cfa62fbf045d5f56e3ef5ba4149e7452dcf89d5a8"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
"block2",
"dispatch",
"libc",
@ -3177,7 +3194,7 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
"block2",
"objc2",
"objc2-foundation",
@ -3189,7 +3206,7 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
"block2",
"objc2",
"objc2-foundation",
@ -3212,7 +3229,7 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
"block2",
"objc2",
"objc2-cloud-kit",
@ -3244,7 +3261,7 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
"block2",
"objc2",
"objc2-core-location",
@ -3347,20 +3364,20 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
dependencies = [
"cfg-if",
"libc",
"redox_syscall 0.5.11",
"redox_syscall 0.5.12",
"smallvec",
"windows-targets 0.52.6",
]
[[package]]
name = "parry3d"
version = "0.17.5"
version = "0.17.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5d6c81f7d291d5ba572951242779a672f73ed605fe5520045c0bccdb381e913"
checksum = "6aeb9659a05b1783fb2e9bc94f48225ae5b40817eb45b62569c0e4dd767a6e51"
dependencies = [
"approx",
"arrayvec",
"bitflags 2.9.0",
"bitflags 2.9.1",
"downcast-rs 1.2.1",
"either",
"ena",
@ -3663,9 +3680,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
[[package]]
name = "read-fonts"
version = "0.25.3"
version = "0.29.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6f9e8a4f503e5c8750e4cd3b32a4e090035c46374b305a15c70bad833dca05f"
checksum = "5ce8e2ca6b24313587a03ca61bb74c384e2a815bd90cf2866cfc9f5fb7a11fa0"
dependencies = [
"bytemuck",
"font-types",
@ -3688,11 +3705,11 @@ dependencies = [
[[package]]
name = "redox_syscall"
version = "0.5.11"
version = "0.5.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3"
checksum = "928fca9cf2aa042393a8325b9ead81d2f0df4cb12e1e24cef072922ccd99c5af"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
]
[[package]]
@ -3747,9 +3764,9 @@ checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832"
[[package]]
name = "robust"
version = "1.1.0"
version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cbf4a6aa5f6d6888f39e980649f3ad6b666acdce1d78e95b8a2cb076e687ae30"
checksum = "4e27ee8bb91ca0adcf0ecb116293afa12d393f9c2b9b9cd54d33e8078fe19839"
[[package]]
name = "rodio"
@ -3768,7 +3785,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b91f7eff05f748767f183df4320a63d6936e9c6107d97c9e6bdd9784f4289c94"
dependencies = [
"base64 0.21.7",
"bitflags 2.9.0",
"bitflags 2.9.1",
"serde",
"serde_derive",
]
@ -3808,7 +3825,7 @@ version = "0.38.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
"errno",
"libc",
"linux-raw-sys",
@ -3827,7 +3844,7 @@ version = "0.14.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cfb9cf8877777222e4a3bc7eb247e398b56baba500c38c1c46842431adc8b55c"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
"bytemuck",
"libm",
"smallvec",
@ -3840,9 +3857,9 @@ dependencies = [
[[package]]
name = "ruzstd"
version = "0.8.0"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c581601827da5c717bfae77d7b187e54293d23d8fb6b700b4b5e9b5828a13cc3"
checksum = "3640bec8aad418d7d03c72ea2de10d5c646a598f9883c7babc160d91e3c1b26c"
dependencies = [
"twox-hash",
]
@ -3957,9 +3974,9 @@ checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe"
[[package]]
name = "skrifa"
version = "0.26.6"
version = "0.31.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8cc1aa86c26dbb1b63875a7180aa0819709b33348eb5b1491e4321fae388179d"
checksum = "bbe6666ab11018ab91ff7b03f1a3b9fdbecfb610848436fefa5ce50343d3d913"
dependencies = [
"bytemuck",
"read-fonts",
@ -4025,7 +4042,7 @@ version = "0.3.0+sdk-1.3.268.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "eda41003dc44290527a59b13432d4a0379379fa074b70174882adfbdfd917844"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
]
[[package]]
@ -4076,9 +4093,9 @@ checksum = "0193cc4331cfd2f3d2011ef287590868599a2f33c3e69bc22c1a3d3acf9e02fb"
[[package]]
name = "swash"
version = "0.2.2"
version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fae9a562c7b46107d9c78cd78b75bbe1e991c16734c0aee8ff0ee711fb8b620a"
checksum = "5dce3f0af95643c855cdc449fbaa17d8c2cd08e0b00a49a6babcbe6e71667f3d"
dependencies = [
"skrifa",
"yazi",
@ -4087,9 +4104,9 @@ dependencies = [
[[package]]
name = "syn"
version = "2.0.100"
version = "2.0.101"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0"
checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf"
dependencies = [
"proc-macro2",
"quote",
@ -4212,9 +4229,9 @@ checksum = "3da5db5a963e24bc68be8b17b6fa82814bb22ee8660f192bb182771d498f09a3"
[[package]]
name = "toml_edit"
version = "0.22.25"
version = "0.22.26"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "10558ed0bd2a1562e630926a2d1f0b98c827da99fabd3fe20920a59642504485"
checksum = "310068873db2c5b3e7659d2cc35d21855dbafa50d1ce336397c666e3cb08137e"
dependencies = [
"indexmap",
"toml_datetime",
@ -4404,7 +4421,7 @@ version = "1.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9"
dependencies = [
"getrandom 0.3.2",
"getrandom 0.3.3",
"js-sys",
"serde",
"wasm-bindgen",
@ -4562,7 +4579,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "35904fb00ba2d2e0a4d002fcbbb6e1b89b574d272a50e5fc95f6e81cf281c245"
dependencies = [
"arrayvec",
"bitflags 2.9.0",
"bitflags 2.9.1",
"cfg_aliases",
"document-features",
"js-sys",
@ -4589,7 +4606,7 @@ checksum = "671c25545d479b47d3f0a8e373aceb2060b67c6eb841b24ac8c32348151c7a0c"
dependencies = [
"arrayvec",
"bit-vec 0.8.0",
"bitflags 2.9.0",
"bitflags 2.9.1",
"cfg_aliases",
"document-features",
"indexmap",
@ -4616,7 +4633,7 @@ dependencies = [
"arrayvec",
"ash",
"bit-set 0.8.0",
"bitflags 2.9.0",
"bitflags 2.9.1",
"block",
"bytemuck",
"cfg_aliases",
@ -4658,7 +4675,7 @@ version = "24.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "50ac044c0e76c03a0378e7786ac505d010a873665e2d51383dcff8dd227dc69c"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
"js-sys",
"log",
"serde",
@ -4743,7 +4760,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c5ee8f3d025738cb02bad7868bbb5f8a6327501e870bf51f1b455b0a2454a419"
dependencies = [
"windows-collections",
"windows-core 0.61.0",
"windows-core 0.61.1",
"windows-future",
"windows-link",
"windows-numerics",
@ -4755,7 +4772,7 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3beeceb5e5cfd9eb1d76b381630e82c4241ccd0d27f1a39ed41b2760b255c5e8"
dependencies = [
"windows-core 0.61.0",
"windows-core 0.61.1",
]
[[package]]
@ -4795,25 +4812,26 @@ dependencies = [
[[package]]
name = "windows-core"
version = "0.61.0"
version = "0.61.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980"
checksum = "46ec44dc15085cea82cf9c78f85a9114c463a369786585ad2882d1ff0b0acf40"
dependencies = [
"windows-implement 0.60.0",
"windows-interface 0.59.1",
"windows-link",
"windows-result 0.3.2",
"windows-strings 0.4.0",
"windows-result 0.3.3",
"windows-strings 0.4.1",
]
[[package]]
name = "windows-future"
version = "0.2.0"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a1d6bbefcb7b60acd19828e1bc965da6fcf18a7e39490c5f8be71e54a19ba32"
checksum = "fc6a41e98427b19fe4b73c550f060b59fa592d7d686537eebf9385621bfbad8e"
dependencies = [
"windows-core 0.61.0",
"windows-core 0.61.1",
"windows-link",
"windows-threading",
]
[[package]]
@ -4894,7 +4912,7 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9150af68066c4c5c07ddc0ce30421554771e528bde427614c61038bc2c92c2b1"
dependencies = [
"windows-core 0.61.0",
"windows-core 0.61.1",
"windows-link",
]
@ -4918,9 +4936,9 @@ dependencies = [
[[package]]
name = "windows-result"
version = "0.3.2"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252"
checksum = "4b895b5356fc36103d0f64dd1e94dfa7ac5633f1c9dd6e80fe9ec4adef69e09d"
dependencies = [
"windows-link",
]
@ -4937,9 +4955,9 @@ dependencies = [
[[package]]
name = "windows-strings"
version = "0.4.0"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97"
checksum = "2a7ab927b2637c19b3dbe0965e75d8f2d30bdd697a1516191cad2ec4df8fb28a"
dependencies = [
"windows-link",
]
@ -5010,13 +5028,38 @@ 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.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1e4c7e8ceaaf9cb7d7507c974735728ab453b67ef8f18febdd7c11fe59dca8b"
dependencies = [
"windows_aarch64_gnullvm 0.53.0",
"windows_aarch64_msvc 0.53.0",
"windows_i686_gnu 0.53.0",
"windows_i686_gnullvm 0.53.0",
"windows_i686_msvc 0.53.0",
"windows_x86_64_gnu 0.53.0",
"windows_x86_64_gnullvm 0.53.0",
"windows_x86_64_msvc 0.53.0",
]
[[package]]
name = "windows-threading"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b66463ad2e0ea3bbf808b7f1d371311c80e115c0b71d60efc142cafbcfb057a6"
dependencies = [
"windows-link",
]
[[package]]
name = "windows_aarch64_gnullvm"
version = "0.42.2"
@ -5035,6 +5078,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.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764"
[[package]]
name = "windows_aarch64_msvc"
version = "0.42.2"
@ -5053,6 +5102,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.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c"
[[package]]
name = "windows_i686_gnu"
version = "0.42.2"
@ -5071,12 +5126,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.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3"
[[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.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11"
[[package]]
name = "windows_i686_msvc"
version = "0.42.2"
@ -5095,6 +5162,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.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d"
[[package]]
name = "windows_x86_64_gnu"
version = "0.42.2"
@ -5113,6 +5186,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.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba"
[[package]]
name = "windows_x86_64_gnullvm"
version = "0.42.2"
@ -5131,6 +5210,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.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57"
[[package]]
name = "windows_x86_64_msvc"
version = "0.42.2"
@ -5150,14 +5235,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
[[package]]
name = "winit"
version = "0.30.9"
name = "windows_x86_64_msvc"
version = "0.53.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a809eacf18c8eca8b6635091543f02a5a06ddf3dad846398795460e6e0ae3cc0"
checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486"
[[package]]
name = "winit"
version = "0.30.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b0d05bd8908e14618c9609471db04007e644fd9cce6529756046cfc577f9155e"
dependencies = [
"android-activity",
"atomic-waker",
"bitflags 2.9.0",
"bitflags 2.9.1",
"block2",
"bytemuck",
"calloop",
@ -5195,9 +5286,9 @@ dependencies = [
[[package]]
name = "winnow"
version = "0.7.7"
version = "0.7.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6cb8234a863ea0e8cd7284fcdd4f145233eb00fee02bbdd9861aec44e6477bc5"
checksum = "c06928c8748d81b05c9be96aad92e1b6ff01833332f281e8cfca3be4b35fc9ec"
dependencies = [
"memchr",
]
@ -5208,7 +5299,7 @@ version = "0.39.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
]
[[package]]
@ -5249,7 +5340,7 @@ version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d039de8032a9a8856a6be89cea3e5d12fdd82306ab7c94d74e6deab2460651c5"
dependencies = [
"bitflags 2.9.0",
"bitflags 2.9.1",
"dlib",
"log",
"once_cell",
@ -5276,9 +5367,9 @@ checksum = "e01738255b5a16e78bbb83e7fbba0a1e7dd506905cfc53f4622d89015a03fbb5"
[[package]]
name = "zeno"
version = "0.3.2"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc0de2315dc13d00e5df3cd6b8d2124a6eaec6a2d4b6a1c5f37b7efad17fcc17"
checksum = "6df3dc4292935e51816d896edcd52aa30bc297907c26167fec31e2b0c6a32524"
[[package]]
name = "zerocopy"

View file

@ -9,10 +9,8 @@ bevy = { version = "0.16", features = ["bevy_dev_tools", "configurable_error_han
[dependencies.avian3d]
default-features = false
#version = "0.2"
git = "https://github.com/Jondolf/avian"
branch = "main"
features = ["3d", "f32", "parry-f32", "debug-plugin", "default-collider", "collider-from-mesh"]
version = "0.3"
features = ["3d", "parry-f32", "debug-plugin", "collider-from-mesh", "diagnostic_ui"]
[features]

View file

@ -21,10 +21,10 @@ use crate::physics::CatControllerState;
pub const SPRING_CONSTANT: Scalar = 40.0;
pub const DAMPING_CONSTANT: Scalar = 10.0;
pub const WHEEL_RADIUS: Scalar = 0.4;
pub const REST_DISTANCE: Scalar = 1.5 + WHEEL_RADIUS;
pub const REST_DISTANCE: Scalar = 1.0 + WHEEL_RADIUS;
pub const FRICTION_COEFF: Scalar = 0.9;
pub const FRONT_ATTACH: Vec3 = Vec3::new(0.0, 0.0, -0.5);
pub const REAR_ATTACH: Vec3 = Vec3::new(0.0, 0.0, 0.5);
pub const FRONT_ATTACH: Vec3 = Vec3::new(0.0, 0.0, -1.5);
pub const REAR_ATTACH: Vec3 = Vec3::new(0.0, 0.0, 1.5);
#[derive(Component)]
pub struct CyberBikeBody;
@ -141,9 +141,9 @@ fn spawn_children(
let mesh = meshes.add(mesh);
let material = materials.add(wheel_material);
let front_rake = Vec3::new(0.0, -1.0, -0.9).normalize(); // about 30 degrees
let front_rake = Vec3::new(0.0, -1.0, 0.0); // about 30 degrees
let front_wheel_pos = FRONT_ATTACH + (front_rake * REST_DISTANCE);
let rear_rake = Vec3::new(0.0, -1.0, 0.9).normalize();
let rear_rake = Vec3::new(0.0, -1.0, 0.0);
let rear_wheel_pos = REAR_ATTACH + (rear_rake * REST_DISTANCE);
children![
@ -161,7 +161,7 @@ fn spawn_children(
WheelConfig::new(
FRONT_ATTACH,
REST_DISTANCE,
SPRING_CONSTANT - 5.0,
SPRING_CONSTANT - 25.0,
DAMPING_CONSTANT,
FRICTION_COEFF,
WHEEL_RADIUS,

View file

@ -20,9 +20,9 @@ pub struct CatControllerSettings {
impl Default for CatControllerSettings {
fn default() -> Self {
Self {
kp: 60.0,
kd: 30.0,
ki: 0.0,
kp: 40.0,
kd: 14.0,
ki: 2.0,
}
}
}
@ -46,6 +46,7 @@ impl Default for CatControllerState {
impl CatControllerState {
pub fn update_roll(&mut self, error: f32, dt: f32) -> (f32, f32) {
dbg!(error);
let lim = self.roll_limit;
self.roll_integral = (self.roll_integral + (error * dt)).min(lim).max(-lim);
let derivative = (error - self.roll_prev) / dt;
@ -55,14 +56,14 @@ impl CatControllerState {
}
mod systems {
use std::f32::consts::{FRAC_PI_3, FRAC_PI_4};
use std::f32::consts::FRAC_PI_4;
use avian3d::prelude::{
ComputedCenterOfMass, ExternalForce, ExternalTorque, Gravity, LinearVelocity, RayCaster,
RayHits, RigidBodyQueryReadOnly,
AngularVelocity, Collider, ComputedCenterOfMass, ExternalForce, ExternalTorque, Gravity,
LinearVelocity, PhysicsDiagnosticsUiSettings, RayCaster, RayHits, RigidBodyQueryReadOnly,
};
use bevy::{
ecs::system::{Populated, Single},
ecs::system::{Populated, Query, Single},
prelude::{
ButtonInput, Color, Gizmos, GlobalTransform, KeyCode, Quat, Res, ResMut, Time,
Transform, Vec, Vec3, With, Without,
@ -87,60 +88,80 @@ mod systems {
}
pub(super) fn calculate_lean(
bike_state: Single<(&LinearVelocity, &Transform), With<CyberBikeBody>>,
wheels: Populated<&GlobalTransform, With<CyberWheel>>,
input: Res<InputState>,
velocity: Single<&LinearVelocity, With<CyberBikeBody>>,
wheels: Populated<&GlobalTransform, (With<Collider>, With<CyberWheel>)>,
gravity: Res<Gravity>,
input: Res<InputState>,
mut lean: ResMut<CyberLean>,
) {
let mut wheels = wheels.iter();
let w1 = wheels.next().unwrap();
let w2 = wheels.next().unwrap();
let base = (w1.translation() - w2.translation()).length().abs();
let (velocity, xform) = bike_state.into_inner();
let vel = velocity.dot(*xform.forward());
let v_squared = vel.powi(2);
let d: GlobalTransform = Default::default();
let mut w = [&d; 2];
for (i, xform) in wheels.iter().enumerate() {
w[i] = xform;
}
let wheelbase = w[0].translation() - w[1].translation();
let base = wheelbase.length();
let steering_angle = yaw_to_angle(input.yaw);
let radius = base / steering_angle.tan();
let gravity = gravity.0.length();
let v2_r = v_squared / radius;
let tan_theta = (v2_r / gravity).clamp(-FRAC_PI_3, FRAC_PI_3);
let lin_vel = velocity.into_inner();
let right = wheelbase.cross(gravity.0).normalize();
let up = right.cross(wheelbase).normalize();
let gdir = gravity.0.normalize();
let up = up * -gdir.dot(up).signum();
let gravity = gravity.0.dot(up);
let tan_theta = lin_vel.length_squared() / (radius * gravity);
if tan_theta.is_normal() {
lean.lean = tan_theta.atan().clamp(-FRAC_PI_3, FRAC_PI_3);
} else {
//lean.lean = 0.0;
let atan = tan_theta.atan();
if atan.is_normal() {
lean.lean = atan;
}
}
}
pub(super) fn apply_lean(
bike_query: Single<(&Transform, &mut ExternalTorque, &mut CatControllerState)>,
wheels: Populated<(&WheelState, &GlobalTransform, &CyberWheel)>,
wheels: Populated<(&WheelState, &CyberWheel)>,
time: Res<Time>,
settings: Res<CatControllerSettings>,
lean: Res<CyberLean>,
mut gizmos: Gizmos,
) {
let (xform, mut torque, mut control_vars) = bike_query.into_inner();
let (xform, mut force, mut control_vars) = bike_query.into_inner();
let mut factor = 1.0;
let mut rxform = GlobalTransform::default();
let mut fxform = GlobalTransform::default();
for (wheel_state, xform, cwheel) in wheels.iter() {
if wheel_state.contact_point.is_none() {
factor -= 0.25;
}
match cwheel {
CyberWheel::Front => {
fxform = *xform;
}
CyberWheel::Rear => {
rxform = *xform;
let mut front = None;
let mut rear = None;
let mut normal = None;
for (state, wheel) in wheels.iter() {
if state.contact_point.is_none() {
factor -= 0.5;
} else {
normal = Some(state.contact_normal.unwrap());
match wheel {
CyberWheel::Front => {
front = Some(state.contact_point.unwrap());
}
CyberWheel::Rear => {
rear = Some(state.contact_point.unwrap());
}
}
}
}
let tork_axis = (rxform.translation() - fxform.translation()).normalize();
let axis = match (front, rear) {
(Some(f), Some(r)) => (r - f).normalize(),
(None, Some(_)) | (Some(_), None) => {
let normal = normal.unwrap();
normal.cross(*xform.left())
}
_ => return,
};
let world_up = Vec3::Y; //xform.translation.normalize();
let rot = Quat::from_axis_angle(*xform.back(), lean.lean);
@ -171,10 +192,9 @@ mod systems {
let mag =
(settings.kp * roll_error) + (settings.ki * integral) + (settings.kd * derivative);
if mag.is_finite() {
//let lean_force = factor * mag * *xform.left();
let tork = factor * mag * tork_axis;
let lean_torq = factor * mag * axis;
torque.apply_torque(tork);
force.apply_torque(lean_torq);
gizmos.arrow(
xform.translation + *xform.up(),
@ -287,7 +307,7 @@ mod systems {
let bike_vel = bike_vel.0;
let dt = time.delta().as_secs_f32();
let max_thrust = 500.0;
let max_thrust = 8000.0;
let yaw_angle = -yaw_to_angle(input.yaw);
for (mut state, config, wheel) in wheels.iter_mut() {
@ -301,7 +321,7 @@ mod systems {
let thrust_mag = input.throttle * max_thrust * dt;
let (thrust_dir, thrust_force) = match wheel {
CyberWheel::Rear => (forward, thrust_mag),
CyberWheel::Front => (rot * forward, thrust_mag * 0.1),
CyberWheel::Front => (rot * forward, 0.0),
};
let thrust = thrust_force * thrust_dir;
@ -318,15 +338,14 @@ mod systems {
let diff = bike_vel - vel;
bevy::log::debug!("{wheel:?}: vel diff: {diff:?} ({})", diff.length(),);
let mut force = thrust + friction;
force *= dt * 50.0;
let force_mag = force.length();
if force_mag > max_force_mag {
state.sliding = true;
force = force.normalize_or_zero() * max_force_mag;
} else {
state.sliding = false;
}
let force = thrust + friction * dt;
// let force_mag = force.length();
// if force_mag > max_force_mag {
// state.sliding = true;
// force = force.normalize_or_zero() * max_force_mag;
// } else {
// state.sliding = false;
// }
bike_force.apply_force_at_point(
force,
@ -376,8 +395,6 @@ mod systems {
);
}
bevy::log::debug!("speed: {}, drag force: {}", vel.length(), drag.length());
gizmos.arrow(
xform.translation,
xform.translation + drag * 10.,
@ -385,37 +402,58 @@ mod systems {
);
}
pub(super) fn ef(
bike: Single<(&ExternalForce, &GlobalTransform), With<CyberBikeBody>>,
mut gizmos: Gizmos,
) {
let (force, xform) = bike.into_inner();
let start = xform.translation() + (2.0 * Vec3::Y);
let force = force.length() * force.normalize_or_zero();
gizmos.arrow(start, start + force, Color::linear_rgb(1.0, 0.0, 0.0));
}
pub(super) fn tweak(
mut config: Populated<&mut WheelConfig>,
mut config: ResMut<CatControllerSettings>,
mut keys: ResMut<ButtonInput<KeyCode>>,
mut ui: ResMut<PhysicsDiagnosticsUiSettings>,
) {
let keyset: std::collections::HashSet<_> = keys.get_pressed().collect();
let shifted = keyset.contains(&KeyCode::ShiftLeft) || keyset.contains(&KeyCode::ShiftRight);
let config = config.iter_mut();
for ref mut c in config {
for key in &keyset {
match key {
KeyCode::KeyS => {
if shifted {
c.konstant += 0.2;
} else {
c.konstant -= 0.2;
}
bevy::log::info!(c.konstant);
}
KeyCode::KeyD => {
if shifted {
c.damping += 0.1;
} else {
c.damping -= 0.1;
}
bevy::log::info!(c.damping);
}
_ => continue,
for key in &keyset {
match key {
KeyCode::KeyP => {
if shifted {
config.kp += 1.0;
} else {
config.kp -= 1.0;
}
}
KeyCode::KeyD => {
if shifted {
config.kd += 1.0;
} else {
config.kd -= 1.0;
}
}
KeyCode::KeyI => {
if shifted {
config.ki += 1.0;
} else {
config.ki -= 1.0;
}
}
KeyCode::KeyU => {
let enabled = ui.enabled;
ui.enabled = !enabled;
}
_ => continue,
}
}
bevy::log::info!(?config);
let released: Vec<_> = keys.get_just_released().copied().collect();
for key in released {
keys.clear_just_released(key);
@ -423,7 +461,7 @@ mod systems {
}
}
use systems::{apply_lean, calculate_lean, drag, suspension, tweak, wheel_action};
use systems::{apply_lean, calculate_lean, drag, ef, suspension, tweak, wheel_action};
pub struct CyberPhysicsPlugin;
@ -431,14 +469,26 @@ impl Plugin for CyberPhysicsPlugin {
fn build(&self, app: &mut App) {
app.init_resource::<CatControllerSettings>()
.init_resource::<CyberLean>()
.add_plugins((PhysicsPlugins::default(), PhysicsDebugPlugin::default()))
.insert_resource(SubstepCount(12))
.add_plugins((
PhysicsPlugins::default(),
PhysicsDebugPlugin::default(),
PhysicsDiagnosticsUiPlugin,
))
.insert_resource(SubstepCount(24))
.add_systems(Startup, |mut gravity: ResMut<Gravity>| {
gravity.0 *= 1.0;
})
.add_systems(
FixedUpdate,
(calculate_lean, apply_lean, suspension, wheel_action, drag).chain(),
(
calculate_lean,
apply_lean,
suspension,
wheel_action,
drag,
ef,
)
.chain(),
)
.add_systems(Update, tweak);
}