aboutsummaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/glues/gravity_movement/Cargo.toml9
-rw-r--r--plugins/glues/gravity_movement/src/lib.rs29
-rw-r--r--plugins/gravity/Cargo.toml8
-rw-r--r--plugins/gravity/src/gravity.rs12
-rw-r--r--plugins/gravity/src/lib.rs19
5 files changed, 77 insertions, 0 deletions
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,
+ });
+ }
+}