From 56fea25a879411ee7b056e2017368e45649ce736 Mon Sep 17 00:00:00 2001
From: tuxmain <tuxmain@zettascript.org>
Date: Thu, 25 Aug 2022 09:55:39 +0200
Subject: [PATCH] Filter spawn functions
---
src/filters.rs | 53 +++++++++++++++++++++++++++++++++++++++++++-
src/levels/level1.rs | 46 ++++++++++++--------------------------
2 files changed, 66 insertions(+), 33 deletions(-)
diff --git a/src/filters.rs b/src/filters.rs
index e34b458..9a18af2 100644
--- a/src/filters.rs
+++ b/src/filters.rs
@@ -1,4 +1,6 @@
-use bevy::prelude::*;
+use crate::game::Level;
+
+use bevy::prelude::{shape::Quad, *};
use bevy_rapier2d::prelude::*;
#[derive(Component)]
@@ -36,6 +38,32 @@ pub struct AbsorbingFilter {
pub filter: PassThroughFilter,
}
+pub fn spawn_absorbing_filter(
+ commands: &mut Commands,
+ meshes: &mut ResMut<Assets<Mesh>>,
+ materials: &mut ResMut<Assets<ColorMaterial>>,
+
+ transform: Transform,
+ size: Vec2,
+ color: Color,
+) {
+ let mut material_color = color;
+ material_color.set_a(0.5);
+ commands
+ .spawn_bundle(AbsorbingFilter {
+ mesh: ColorMesh2dBundle {
+ mesh: meshes.add(Mesh::from(Quad { size, flip: false })).into(),
+ material: materials.add(material_color.into()),
+ transform,
+ ..Default::default()
+ },
+ collider: Collider::cuboid(size.x / 2., size.y / 2.),
+ sensor: Sensor,
+ filter: PassThroughFilter::Absorbing(color),
+ })
+ .insert(Level);
+}
+
#[derive(Bundle)]
pub struct RotatingFilter {
#[bundle]
@@ -46,3 +74,26 @@ pub struct RotatingFilter {
pub velocity: Velocity,
pub rigid_body: RigidBody,
}
+
+pub fn spawn_rotating_filter(
+ commands: &mut Commands,
+ asset_server: &Res<AssetServer>,
+
+ transform: Transform,
+ angle: f32,
+) {
+ commands
+ .spawn_bundle(RotatingFilter {
+ sprite: SpriteBundle {
+ texture: asset_server.get_handle("bevy.png"),
+ transform,
+ ..Default::default()
+ },
+ collider: Collider::ball(32.),
+ sensor: Sensor,
+ filter: PassThroughFilter::Rotating(angle),
+ velocity: Velocity::angular(1.),
+ rigid_body: RigidBody::KinematicVelocityBased,
+ })
+ .insert(Level);
+}
diff --git a/src/levels/level1.rs b/src/levels/level1.rs
index f2d7a73..8bcf4bb 100644
--- a/src/levels/level1.rs
+++ b/src/levels/level1.rs
@@ -52,37 +52,19 @@ pub fn setup(
],
);
- commands
- .spawn_bundle(AbsorbingFilter {
- mesh: ColorMesh2dBundle {
- mesh: meshes
- .add(Mesh::from(Quad {
- size: Vec2 { x: 128.0, y: 16.0 },
- flip: false,
- }))
- .into(),
- material: materials.add(Color::rgba(1., 0., 0., 0.5).into()),
- transform: Transform::from_xyz(0., 0., 2.),
- ..Default::default()
- },
- collider: Collider::cuboid(64., 8.),
- sensor: Sensor,
- filter: PassThroughFilter::Absorbing(Color::RED),
- })
- .insert(Level);
+ spawn_absorbing_filter(
+ commands,
+ meshes,
+ materials,
+ Transform::from_xyz(0., 0., 2.),
+ Vec2 { x: 128.0, y: 16.0 },
+ Color::RED,
+ );
- commands
- .spawn_bundle(RotatingFilter {
- sprite: SpriteBundle {
- texture: asset_server.get_handle("bevy.png"),
- transform: Transform::from_xyz(256., -224., 2.),
- ..Default::default()
- },
- collider: Collider::ball(32.),
- sensor: Sensor,
- filter: PassThroughFilter::Rotating(45.),
- velocity: Velocity::angular(1.),
- rigid_body: RigidBody::KinematicVelocityBased,
- })
- .insert(Level);
+ spawn_rotating_filter(
+ commands,
+ asset_server,
+ Transform::from_xyz(256., -224., 2.),
+ 45.,
+ );
}