From 8ff60fdeb0dda7cb6eb7ed91c5084fc107f33365 Mon Sep 17 00:00:00 2001 From: 魏曹先生 <1992414357@qq.com> Date: Sat, 8 Aug 2026 15:49:38 +0800 Subject: feat: add gravity and gravity-movement plugins Add CHGravityPlugin to manage the global gravity resource and CHGravityMovementGluePlugin to apply gravity to movement velocity each fixed update. Update workspace dependencies and include the new crates in the main app. --- plugins/glues/gravity_movement/Cargo.toml | 9 +++++++++ plugins/glues/gravity_movement/src/lib.rs | 29 +++++++++++++++++++++++++++++ plugins/gravity/Cargo.toml | 8 ++++++++ plugins/gravity/src/gravity.rs | 12 ++++++++++++ plugins/gravity/src/lib.rs | 19 +++++++++++++++++++ 5 files changed, 77 insertions(+) create mode 100644 plugins/glues/gravity_movement/Cargo.toml create mode 100644 plugins/glues/gravity_movement/src/lib.rs create mode 100644 plugins/gravity/Cargo.toml create mode 100644 plugins/gravity/src/gravity.rs create mode 100644 plugins/gravity/src/lib.rs (limited to 'plugins') diff --git a/plugins/glues/gravity_movement/Cargo.toml b/plugins/glues/gravity_movement/Cargo.toml new file mode 100644 index 0000000..4b5790c --- /dev/null +++ b/plugins/glues/gravity_movement/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "ch-gravity-movement" +version.workspace = true +edition.workspace = true + +[dependencies] +bevy.workspace = true +ch-movement.workspace = true +ch-gravity.workspace = true diff --git a/plugins/glues/gravity_movement/src/lib.rs b/plugins/glues/gravity_movement/src/lib.rs new file mode 100644 index 0000000..da31061 --- /dev/null +++ b/plugins/glues/gravity_movement/src/lib.rs @@ -0,0 +1,29 @@ +//! CH Glue - Gravity & Movement +//! +//! This module provides the glue layer for the Gravity and Movement modules. + +#![deny(missing_docs)] + +use bevy::{ + app::{FixedUpdate, Plugin}, + ecs::system::{Query, Res}, +}; +use ch_gravity::Gravity; +use ch_movement::{Movement, Velocity}; + +/// Cigarette Hacker gravity movement glue +pub struct CHGravityMovementGluePlugin; + +impl Plugin for CHGravityMovementGluePlugin { + fn build(&self, app: &mut bevy::app::App) { + app.add_systems(FixedUpdate, apply_gravity_to_movement); + } +} + +fn apply_gravity_to_movement(mut query: Query<(&mut Velocity, &Movement)>, gravity: Res) { + for (mut velocity, _movement) in query.iter_mut() { + velocity.x += gravity.x; + velocity.y += gravity.y; + velocity.z += gravity.z; + } +} diff --git a/plugins/gravity/Cargo.toml b/plugins/gravity/Cargo.toml new file mode 100644 index 0000000..1221f40 --- /dev/null +++ b/plugins/gravity/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "ch-gravity" +version.workspace = true +edition.workspace = true + +[dependencies] +bevy.workspace = true +ch-macro-rules.workspace = true diff --git a/plugins/gravity/src/gravity.rs b/plugins/gravity/src/gravity.rs new file mode 100644 index 0000000..6d7030c --- /dev/null +++ b/plugins/gravity/src/gravity.rs @@ -0,0 +1,12 @@ +use bevy::{ + ecs::resource::Resource, + math::Vec3, + prelude::{Deref, DerefMut}, +}; + +/// Represents the global gravity +#[derive(Resource, Deref, DerefMut, PartialEq, Default, Clone)] +pub struct Gravity { + #[deref] + pub(crate) gravity: Vec3, +} diff --git a/plugins/gravity/src/lib.rs b/plugins/gravity/src/lib.rs new file mode 100644 index 0000000..4282256 --- /dev/null +++ b/plugins/gravity/src/lib.rs @@ -0,0 +1,19 @@ +//! CH Modules - Gravity +//! +//! CH Gravity provides the basic in-game representation of gravity + +use bevy::{app::Plugin, math::Vec3}; +use ch_macro_rules::import; + +import!(gravity); + +/// Cigarette Hacker gravity plugin +pub struct CHGravityPlugin; + +impl Plugin for CHGravityPlugin { + fn build(&self, app: &mut bevy::app::App) { + app.insert_resource(Gravity { + gravity: Vec3::new(0., 1., 0.) * -9.8, + }); + } +} -- cgit