diff options
| -rw-r--r-- | Cargo.lock | 19 | ||||
| -rw-r--r-- | Cargo.toml | 15 | ||||
| -rw-r--r-- | plugins/glues/gravity_movement/Cargo.toml | 9 | ||||
| -rw-r--r-- | plugins/glues/gravity_movement/src/lib.rs | 29 | ||||
| -rw-r--r-- | plugins/gravity/Cargo.toml | 8 | ||||
| -rw-r--r-- | plugins/gravity/src/gravity.rs | 12 | ||||
| -rw-r--r-- | plugins/gravity/src/lib.rs | 19 | ||||
| -rw-r--r-- | src/main.rs | 2 |
8 files changed, 110 insertions, 3 deletions
@@ -1969,6 +1969,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f079e83a288787bcd14a6aea84cee5c87a67c5a3e660c30f557a3d24761b3527" [[package]] +name = "ch-gravity" +version = "0.1.0" +dependencies = [ + "bevy", + "ch-macro-rules", +] + +[[package]] +name = "ch-gravity-movement" +version = "0.1.0" +dependencies = [ + "bevy", + "ch-gravity", + "ch-movement", +] + +[[package]] name = "ch-macro-rules" version = "0.1.0" @@ -1994,6 +2011,8 @@ name = "cigarette_hacker_bevy" version = "0.1.0" dependencies = [ "bevy", + "ch-gravity", + "ch-gravity-movement", "ch-movement", ] @@ -5,7 +5,9 @@ edition.workspace = true [dependencies] bevy.workspace = true -ch-movement = { path = "plugins/movement" } +ch-movement.workspace = true +ch-gravity.workspace = true +ch-gravity-movement.workspace = true [workspace.dependencies] # Core @@ -16,6 +18,11 @@ proc-macro2 = "1.0.107" quote = "1.0.47" syn = "3.0.3" +# Plugins +ch-movement = { path = "plugins/movement" } +ch-gravity = { path = "plugins/gravity" } +ch-gravity-movement = { path = "plugins/glues/gravity_movement" } + # Utils ch-macros = { path = "utils/macros" } ch-macro-rules = { path = "utils/macro_rules" } @@ -25,7 +32,9 @@ version = "0.1.0" edition = "2024" [workspace] -members = [ - "plugins/movement", "utils/macro_rules", +members = ["plugins/glues/gravity_movement", + "plugins/gravity", + "plugins/movement", + "utils/macro_rules", "utils/macros" ] 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<Gravity>) { + 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, + }); + } +} diff --git a/src/main.rs b/src/main.rs index 4906590..df08db9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -9,5 +9,7 @@ fn main() { let mut app = App::new(); app.add_plugins(DefaultPlugins); app.add_plugins(ch_movement::CHMovementPlugin); + app.add_plugins(ch_gravity::CHGravityPlugin); + app.add_plugins(ch_gravity_movement::CHGravityMovementGluePlugin); app.run(); } |
