very basic (and broken) physics based movement
This commit is contained in:
parent
464df31d43
commit
88063a3fc9
4 changed files with 315 additions and 28 deletions
293
Cargo.lock
generated
293
Cargo.lock
generated
|
@ -270,7 +270,7 @@ dependencies = [
|
|||
"bevy_reflect",
|
||||
"bevy_tasks",
|
||||
"bevy_utils",
|
||||
"crossbeam-channel",
|
||||
"crossbeam-channel 0.4.4",
|
||||
"downcast-rs",
|
||||
"js-sys",
|
||||
"ndk-glue",
|
||||
|
@ -363,7 +363,7 @@ dependencies = [
|
|||
"bevy_utils",
|
||||
"bitflags",
|
||||
"downcast-rs",
|
||||
"fixedbitset",
|
||||
"fixedbitset 0.3.1",
|
||||
"lazy_static",
|
||||
"parking_lot",
|
||||
"rand",
|
||||
|
@ -507,6 +507,18 @@ dependencies = [
|
|||
"bevy_window",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bevy_rapier3d"
|
||||
version = "0.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c11b4b13050eb907f824c92b598e418e75f710c50a3c35a2cd3f97f6f5afc0e1"
|
||||
dependencies = [
|
||||
"bevy",
|
||||
"concurrent-queue",
|
||||
"nalgebra",
|
||||
"rapier3d",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "bevy_reflect"
|
||||
version = "0.4.0"
|
||||
|
@ -714,8 +726,8 @@ dependencies = [
|
|||
"bevy_utils",
|
||||
"bevy_window",
|
||||
"bevy_winit",
|
||||
"crossbeam-channel",
|
||||
"crossbeam-utils",
|
||||
"crossbeam-channel 0.4.4",
|
||||
"crossbeam-utils 0.7.2",
|
||||
"futures-lite",
|
||||
"parking_lot",
|
||||
"wgpu",
|
||||
|
@ -1171,16 +1183,75 @@ dependencies = [
|
|||
"cfg-if 1.0.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fd01a6eb3daaafa260f6fc94c3a6c36390abc2080e38e3e34ced87393fb77d80"
|
||||
dependencies = [
|
||||
"cfg-if 1.0.0",
|
||||
"crossbeam-channel 0.5.0",
|
||||
"crossbeam-deque",
|
||||
"crossbeam-epoch",
|
||||
"crossbeam-queue",
|
||||
"crossbeam-utils 0.8.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-channel"
|
||||
version = "0.4.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b153fe7cbef478c567df0f972e02e6d736db11affe43dfc9c56a9374d1adfb87"
|
||||
dependencies = [
|
||||
"crossbeam-utils",
|
||||
"crossbeam-utils 0.7.2",
|
||||
"maybe-uninit",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-channel"
|
||||
version = "0.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775"
|
||||
dependencies = [
|
||||
"cfg-if 1.0.0",
|
||||
"crossbeam-utils 0.8.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-deque"
|
||||
version = "0.8.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9"
|
||||
dependencies = [
|
||||
"cfg-if 1.0.0",
|
||||
"crossbeam-epoch",
|
||||
"crossbeam-utils 0.8.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-epoch"
|
||||
version = "0.9.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a1aaa739f95311c2c7887a76863f500026092fb1dce0161dab577e559ef3569d"
|
||||
dependencies = [
|
||||
"cfg-if 1.0.0",
|
||||
"const_fn",
|
||||
"crossbeam-utils 0.8.1",
|
||||
"lazy_static",
|
||||
"memoffset",
|
||||
"scopeguard",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-queue"
|
||||
version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0f6cb3c7f5b8e51bc3ebb73a2327ad4abdbd119dc13223f14f961d2f38486756"
|
||||
dependencies = [
|
||||
"cfg-if 1.0.0",
|
||||
"crossbeam-utils 0.8.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-utils"
|
||||
version = "0.7.2"
|
||||
|
@ -1192,6 +1263,17 @@ dependencies = [
|
|||
"lazy_static",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crossbeam-utils"
|
||||
version = "0.8.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "02d96d1e189ef58269ebe5b97953da3274d83a93af647c2ddd6f9dab28cedb8d"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"cfg-if 1.0.0",
|
||||
"lazy_static",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "d3d12"
|
||||
version = "0.3.2"
|
||||
|
@ -1361,13 +1443,19 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "find-crate"
|
||||
version = "0.6.1"
|
||||
version = "0.6.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "057a1d48e8ff33649ee2d7c510b79ecf1f8a52b684d446a72de600ad7e2823b6"
|
||||
checksum = "e82d9a3770cc1839f610f61f90bb1167c37581e97ed3400cfb6cf66fbd69a639"
|
||||
dependencies = [
|
||||
"toml",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "fixedbitset"
|
||||
version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d"
|
||||
|
||||
[[package]]
|
||||
name = "fixedbitset"
|
||||
version = "0.3.1"
|
||||
|
@ -1559,6 +1647,15 @@ dependencies = [
|
|||
"byteorder",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "generational-arena"
|
||||
version = "0.2.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8e1d3b771574f62d0548cee0ad9057857e9fc25d7a3335f140c84f6acd0bf601"
|
||||
dependencies = [
|
||||
"cfg-if 0.1.10",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "generator"
|
||||
version = "0.6.23"
|
||||
|
@ -1572,6 +1669,16 @@ dependencies = [
|
|||
"winapi 0.3.9",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "generic-array"
|
||||
version = "0.14.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817"
|
||||
dependencies = [
|
||||
"typenum",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "getrandom"
|
||||
version = "0.1.15"
|
||||
|
@ -1854,6 +1961,12 @@ dependencies = [
|
|||
"svg_fmt",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hashbrown"
|
||||
version = "0.9.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04"
|
||||
|
||||
[[package]]
|
||||
name = "hermit-abi"
|
||||
version = "0.1.17"
|
||||
|
@ -1912,6 +2025,16 @@ dependencies = [
|
|||
"scoped_threadpool",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "indexmap"
|
||||
version = "1.6.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4fb1fa934250de4de8aef298d81c729a7d33d8c239daa3a7575e6b92bfc7313b"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"hashbrown",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "inflections"
|
||||
version = "1.1.1"
|
||||
|
@ -1952,6 +2075,7 @@ checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec"
|
|||
dependencies = [
|
||||
"cfg-if 1.0.0",
|
||||
"js-sys",
|
||||
"time 0.2.23",
|
||||
"wasm-bindgen",
|
||||
"web-sys",
|
||||
]
|
||||
|
@ -2095,6 +2219,12 @@ version = "0.1.4"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a"
|
||||
|
||||
[[package]]
|
||||
name = "libm"
|
||||
version = "0.2.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a"
|
||||
|
||||
[[package]]
|
||||
name = "libudev-sys"
|
||||
version = "0.1.4"
|
||||
|
@ -2178,6 +2308,15 @@ version = "0.1.8"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
|
||||
|
||||
[[package]]
|
||||
name = "matrixmultiply"
|
||||
version = "0.2.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "916806ba0031cd542105d916a97c8572e1fa6dd79c9c51e7eb43a09ec2dd84c1"
|
||||
dependencies = [
|
||||
"rawpointer",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "maybe-uninit"
|
||||
version = "2.0.0"
|
||||
|
@ -2190,6 +2329,15 @@ version = "2.3.4"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
|
||||
|
||||
[[package]]
|
||||
name = "memoffset"
|
||||
version = "0.6.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "metal"
|
||||
version = "0.20.0"
|
||||
|
@ -2299,6 +2447,43 @@ dependencies = [
|
|||
"thiserror",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "nalgebra"
|
||||
version = "0.23.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c9bd52e9c9922d5702d5c2a105ceacc3c1206e781d3d130f4d2b7ad5f43c144b"
|
||||
dependencies = [
|
||||
"approx",
|
||||
"generic-array",
|
||||
"matrixmultiply",
|
||||
"num-complex",
|
||||
"num-rational",
|
||||
"num-traits",
|
||||
"rand",
|
||||
"rand_distr",
|
||||
"simba",
|
||||
"typenum",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ncollide3d"
|
||||
version = "0.26.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7fa86028ca1d3ac2ff5946c64e3f82fc6e9cdfaef2bef716f9fbf7e1559298ec"
|
||||
dependencies = [
|
||||
"approx",
|
||||
"bitflags",
|
||||
"downcast-rs",
|
||||
"either",
|
||||
"nalgebra",
|
||||
"num-traits",
|
||||
"petgraph",
|
||||
"simba",
|
||||
"slab",
|
||||
"slotmap",
|
||||
"smallvec",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "ndk"
|
||||
version = "0.2.1"
|
||||
|
@ -2399,7 +2584,7 @@ checksum = "a8b946889dfdad884379cd56367d93b6d0ce8889cc027d26a69a3a31c0a03bb5"
|
|||
dependencies = [
|
||||
"anymap",
|
||||
"bitflags",
|
||||
"crossbeam-channel",
|
||||
"crossbeam-channel 0.4.4",
|
||||
"filetime",
|
||||
"fsevent",
|
||||
"fsevent-sys",
|
||||
|
@ -2411,6 +2596,15 @@ dependencies = [
|
|||
"winapi 0.3.9",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-complex"
|
||||
version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "747d632c0c558b87dbabbe6a82f3b4ae03720d0646ac5b7b4dae89394be5f2c5"
|
||||
dependencies = [
|
||||
"num-traits",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num-derive"
|
||||
version = "0.3.3"
|
||||
|
@ -2461,6 +2655,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
|
||||
dependencies = [
|
||||
"autocfg",
|
||||
"libm 0.2.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -2589,6 +2784,12 @@ dependencies = [
|
|||
"winapi 0.3.9",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "paste"
|
||||
version = "1.0.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c5d65c4d95931acda4498f675e332fcbdc9a06705cd07086c510e9b6009cd1c1"
|
||||
|
||||
[[package]]
|
||||
name = "peeking_take_while"
|
||||
version = "0.1.2"
|
||||
|
@ -2601,6 +2802,16 @@ version = "2.1.0"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
|
||||
|
||||
[[package]]
|
||||
name = "petgraph"
|
||||
version = "0.5.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "467d164a6de56270bd7c4d070df81d07beace25012d5103ced4e9ff08d6afdb7"
|
||||
dependencies = [
|
||||
"fixedbitset 0.2.0",
|
||||
"indexmap",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pin-project"
|
||||
version = "1.0.2"
|
||||
|
@ -2723,6 +2934,7 @@ name = "rake"
|
|||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"bevy",
|
||||
"bevy_rapier3d",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -2757,6 +2969,16 @@ dependencies = [
|
|||
"getrandom 0.1.15",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_distr"
|
||||
version = "0.3.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c9e9532ada3929fb8b2e9dbe28d1e06c9b2cc65813f074fcb6bd5fbefeff9d56"
|
||||
dependencies = [
|
||||
"num-traits",
|
||||
"rand",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "rand_hc"
|
||||
version = "0.2.0"
|
||||
|
@ -2772,6 +2994,29 @@ version = "0.1.1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a871f1e45a3a3f0c73fb60343c811238bb5143a81642e27c2ac7aac27ff01a63"
|
||||
|
||||
[[package]]
|
||||
name = "rapier3d"
|
||||
version = "0.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c7f175c71f3c2b140f17fd4683097d1b166cd253b1d8dc4cdf3467bd6281b9ef"
|
||||
dependencies = [
|
||||
"approx",
|
||||
"arrayvec",
|
||||
"bit-vec",
|
||||
"bitflags",
|
||||
"crossbeam",
|
||||
"downcast-rs",
|
||||
"generational-arena",
|
||||
"instant",
|
||||
"nalgebra",
|
||||
"ncollide3d",
|
||||
"num-derive",
|
||||
"num-traits",
|
||||
"rustc-hash",
|
||||
"simba",
|
||||
"vec_map",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "raw-window-handle"
|
||||
version = "0.3.3"
|
||||
|
@ -2781,6 +3026,12 @@ dependencies = [
|
|||
"libc",
|
||||
]
|
||||
|
||||
[[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.2.0"
|
||||
|
@ -3039,6 +3290,18 @@ version = "0.1.1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7fdf1b9db47230893d76faad238fd6097fd6d6a9245cd7a4d90dbd639536bbd2"
|
||||
|
||||
[[package]]
|
||||
name = "simba"
|
||||
version = "0.3.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "17bfe642b1728a6e89137ad428ef5d4738eca4efaba9590f9e110b8944028621"
|
||||
dependencies = [
|
||||
"approx",
|
||||
"num-complex",
|
||||
"num-traits",
|
||||
"paste",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "slab"
|
||||
version = "0.4.2"
|
||||
|
@ -3056,6 +3319,12 @@ dependencies = [
|
|||
"winapi 0.3.9",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "slotmap"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c46a3482db8f247956e464d783693ece164ca056e6e67563ee5505bdb86452cd"
|
||||
|
||||
[[package]]
|
||||
name = "smallvec"
|
||||
version = "1.5.1"
|
||||
|
@ -3188,7 +3457,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
checksum = "7b0dc6d20ce137f302edf90f9cd3d278866fd7fb139efca6f246161222ad6d87"
|
||||
dependencies = [
|
||||
"lazy_static",
|
||||
"libm",
|
||||
"libm 0.1.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -3432,6 +3701,12 @@ version = "2.0.1"
|
|||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0685c84d5d54d1c26f7d3eb96cd41550adb97baed141a761cf335d3d33bcd0ae"
|
||||
|
||||
[[package]]
|
||||
name = "typenum"
|
||||
version = "1.12.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-bidi"
|
||||
version = "0.3.4"
|
||||
|
|
|
@ -5,3 +5,4 @@ edition = "2018"
|
|||
|
||||
[dependencies]
|
||||
bevy = "0.4"
|
||||
bevy_rapier3d = "0.7.0"
|
||||
|
|
23
src/main.rs
23
src/main.rs
|
@ -1,5 +1,9 @@
|
|||
use bevy::prelude::*;
|
||||
use rake::player::{Player, PlayerPlugin};
|
||||
use bevy_rapier3d::rapier::dynamics::RigidBodyBuilder;
|
||||
use bevy_rapier3d::rapier::geometry::ColliderBuilder;
|
||||
use bevy_rapier3d::physics::RapierPhysicsPlugin;
|
||||
use bevy::input::system::exit_on_esc_system;
|
||||
|
||||
fn main() {
|
||||
App::build()
|
||||
|
@ -11,11 +15,12 @@ fn main() {
|
|||
..Default::default()
|
||||
})
|
||||
.add_plugins(DefaultPlugins)
|
||||
.add_plugin(RapierPhysicsPlugin)
|
||||
// note: debug renderer doesnt work for cylinder
|
||||
//.add_plugin(RapierRenderPlugin)
|
||||
.add_plugin(PlayerPlugin)
|
||||
.add_startup_system(init.system())
|
||||
.add_system(exit_game_system.system())
|
||||
.add_system(exit_on_esc_system.system())
|
||||
.run();
|
||||
}
|
||||
|
||||
|
@ -34,7 +39,9 @@ fn init(
|
|||
transform: Transform::from_translation(Vec3::new(0.0, 3.0, 3.0)),
|
||||
..Default::default()
|
||||
})
|
||||
.with(player);
|
||||
.with(player)
|
||||
.with(RigidBodyBuilder::new_dynamic().translation(0.0, 3.0, 0.0))
|
||||
.with(ColliderBuilder::cylinder(1.0, 0.5).friction(0.0));
|
||||
|
||||
let box_mesh = meshes.add(Mesh::from(shape::Cube { size: 0.25 }));
|
||||
let box_material = materials.add(Color::rgb(1.0, 0.2, 0.3).into());
|
||||
|
@ -54,6 +61,9 @@ fn init(
|
|||
}
|
||||
|
||||
// create a floor
|
||||
let rigid_body1 = RigidBodyBuilder::new_static();
|
||||
let collider1 = ColliderBuilder::cuboid(10.0, 1.0, 10.0);
|
||||
commands.spawn((rigid_body1, collider1));
|
||||
commands.spawn(PbrBundle {
|
||||
mesh: meshes.add(Mesh::from(shape::Plane { size: 10. })),
|
||||
material: materials.add(Color::rgb(0.5, 0.9, 0.9).into()),
|
||||
|
@ -61,12 +71,3 @@ fn init(
|
|||
..Default::default()
|
||||
});
|
||||
}
|
||||
|
||||
fn exit_game_system(
|
||||
keyboard_input: Res<Input<KeyCode>>,
|
||||
mut app_exit_events: ResMut<Events<bevy::app::AppExit>>,
|
||||
) {
|
||||
if keyboard_input.pressed(KeyCode::Escape) {
|
||||
app_exit_events.send(bevy::app::AppExit);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
use bevy::{input::mouse::MouseMotion, math::clamp, prelude::*};
|
||||
use bevy_rapier3d::rapier::dynamics::{RigidBody, RigidBodySet};
|
||||
use bevy_rapier3d::physics::RigidBodyHandleComponent;
|
||||
use bevy_rapier3d::na::{Matrix3x1};
|
||||
|
||||
pub struct Player {
|
||||
/// The speed the FlyCamera moves at. Defaults to `1.0`
|
||||
|
@ -18,7 +21,7 @@ pub struct Player {
|
|||
impl Player {
|
||||
pub fn create() -> Self {
|
||||
Self {
|
||||
speed: 1.5,
|
||||
speed: 15.,
|
||||
sensitivity: 6.0,
|
||||
friction: 1.0,
|
||||
pitch: 0.0,
|
||||
|
@ -54,10 +57,12 @@ fn movement_axis(input: &Res<Input<KeyCode>>, plus: KeyCode, minus: KeyCode) ->
|
|||
|
||||
fn camera_movement_system(
|
||||
time: Res<Time>,
|
||||
mut bodies: ResMut<RigidBodySet>,
|
||||
keyboard_input: Res<Input<KeyCode>>,
|
||||
mut query: Query<(&mut Player, &mut Transform)>,
|
||||
mut query: Query<(&mut Player, &mut Transform, &RigidBodyHandleComponent)>,
|
||||
) {
|
||||
for (mut player, mut transform) in query.iter_mut() {
|
||||
for (mut player, transform, handle) in query.iter_mut() {
|
||||
let body: &mut RigidBody = bodies.get_mut(handle.handle()).unwrap();
|
||||
let (axis_h, axis_v, axis_float) = (
|
||||
movement_axis(&keyboard_input, KeyCode::D, KeyCode::A),
|
||||
movement_axis(&keyboard_input, KeyCode::S, KeyCode::W),
|
||||
|
@ -82,6 +87,9 @@ fn camera_movement_system(
|
|||
|
||||
player.velocity += accel * time.delta_seconds();
|
||||
|
||||
let vel = Matrix3x1::new(player.velocity.x, body.linvel().y, player.velocity.z);
|
||||
body.set_linvel(vel, true);
|
||||
|
||||
let delta_friction = friction * time.delta_seconds();
|
||||
|
||||
player.velocity = if (player.velocity + delta_friction).signum() != player.velocity.signum() {
|
||||
|
@ -89,8 +97,6 @@ fn camera_movement_system(
|
|||
} else {
|
||||
player.velocity + delta_friction
|
||||
};
|
||||
|
||||
transform.translation += player.velocity;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -102,8 +108,9 @@ struct State {
|
|||
fn mouse_motion_system(
|
||||
time: Res<Time>,
|
||||
mut state: ResMut<State>,
|
||||
mut bodies: ResMut<RigidBodySet>,
|
||||
mouse_motion_events: Res<Events<MouseMotion>>,
|
||||
mut query: Query<(&mut Player, &mut Transform)>,
|
||||
mut query: Query<(&mut Player, &mut Transform, &RigidBodyHandleComponent)>,
|
||||
) {
|
||||
let mut delta: Vec2 = Vec2::zero();
|
||||
for event in state.mouse_motion_event_reader.iter(&mouse_motion_events) {
|
||||
|
@ -113,7 +120,8 @@ fn mouse_motion_system(
|
|||
return;
|
||||
}
|
||||
|
||||
for (mut options, mut transform) in query.iter_mut() {
|
||||
for (mut options, mut transform, handle) in query.iter_mut() {
|
||||
let body: &mut RigidBody = bodies.get_mut(handle.handle()).unwrap();
|
||||
options.yaw -= delta.x * options.sensitivity * time.delta_seconds();
|
||||
options.pitch += delta.y * options.sensitivity * time.delta_seconds();
|
||||
|
||||
|
@ -124,7 +132,9 @@ fn mouse_motion_system(
|
|||
let pitch_radians = options.pitch.to_radians();
|
||||
|
||||
transform.rotation = Quat::from_axis_angle(Vec3::unit_y(), yaw_radians)
|
||||
* Quat::from_axis_angle(-Vec3::unit_x(), pitch_radians);
|
||||
* Quat::from_axis_angle(-Vec3::unit_x(), pitch_radians) * 10.;
|
||||
|
||||
body.set_angvel(Matrix3x1::new(pitch_radians, yaw_radians, 0.), true);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue