fixed formatting errors reported by cargo fmt

This commit is contained in:
NIMFER 2024-03-28 19:49:21 +01:00
parent c494f7db80
commit da1629bc1a
3 changed files with 78 additions and 59 deletions

View file

@ -22,17 +22,8 @@ pub struct CharacterControllerPlugin;
impl Plugin for CharacterControllerPlugin {
fn build(&self, app: &mut App) {
app.add_systems(Update,(
keyboard_input,
move_character,
)
);
app.add_systems(FixedUpdate, (
dampen_movement,
update_grounded
)
);
app.add_systems(Update, (keyboard_input, move_character));
app.add_systems(FixedUpdate, (dampen_movement, update_grounded));
app.add_event::<MovementAction>();
}
}
@ -40,7 +31,7 @@ impl Plugin for CharacterControllerPlugin{
#[derive(Event)]
pub enum MovementAction {
Move(Vector2),
Jump
Jump,
}
#[derive(Component)]
@ -83,7 +74,6 @@ impl CharacterControllerBundle {
let mut caster_shape = controller_collider.clone();
caster_shape.set_scale(Vector::ONE * 0.99, 10);
Self {
character_controller: controller,
rigid_body: RigidBody::Dynamic,
@ -93,7 +83,8 @@ impl CharacterControllerBundle {
Vector::ZERO,
Quaternion::default(),
Direction3d::NEG_Y,
).with_max_time_of_impact(0.2),
)
.with_max_time_of_impact(0.2),
locked_axis: LockedAxes::ROTATION_LOCKED,
restitution: Restitution::new(0.0),
}
@ -110,14 +101,18 @@ impl Default for CharacterControllerBundle {
}
}
pub fn update_grounded(mut commands: Commands, mut query: Query<(Entity, &CharacterController, &Rotation, &ShapeHits)>){
pub fn update_grounded(
mut commands: Commands,
mut query: Query<(Entity, &CharacterController, &Rotation, &ShapeHits)>,
) {
for (entity, character_controller, rotation, hits) in &mut query {
let is_grounded = hits.iter().any(|hit| {
let angle = rotation.rotate(-hit.normal2).angle_between(Vector::Y).abs();
println!("slope angle: {} / {}", angle, character_controller.max_slope_angle);
println!(
"slope angle: {} / {}",
angle, character_controller.max_slope_angle
);
angle <= character_controller.max_slope_angle
});
@ -130,10 +125,12 @@ pub fn update_grounded(mut commands: Commands, mut query: Query<(Entity, &Charac
commands.entity(entity).remove::<Grounded>();
}
}
}
pub fn keyboard_input(mut movement_event_writer: EventWriter<MovementAction>, keyboard_input: Res<ButtonInput<KeyCode>>){
pub fn keyboard_input(
mut movement_event_writer: EventWriter<MovementAction>,
keyboard_input: Res<ButtonInput<KeyCode>>,
) {
let up = keyboard_input.any_pressed([KeyCode::KeyW, KeyCode::ArrowUp]);
let down = keyboard_input.any_pressed([KeyCode::KeyS, KeyCode::ArrowDown]);
let left = keyboard_input.any_pressed([KeyCode::KeyA, KeyCode::ArrowLeft]);
@ -155,9 +152,14 @@ pub fn keyboard_input(mut movement_event_writer: EventWriter<MovementAction>, ke
pub fn move_character(
time: Res<Time>,
mut movement_event_reader: EventReader<MovementAction>,
mut query: Query<(&mut LinearVelocity, &CharacterController, Has<Grounded>, &Rotation, &ShapeHits)>,
)
{
mut query: Query<(
&mut LinearVelocity,
&CharacterController,
Has<Grounded>,
&Rotation,
&ShapeHits,
)>,
) {
let delta_time = time.delta_seconds_f64().adjust_precision();
for event in movement_event_reader.read() {
@ -167,19 +169,33 @@ pub fn move_character(
if is_grounded {
let mut slope_factor = 1.0;
for hit in shape_hits.iter() {
let angle = rotation.rotate(-hit.normal2).angle_between(Vector::Y).abs();
let angle =
rotation.rotate(-hit.normal2).angle_between(Vector::Y).abs();
if angle <= character_controller.max_slope_angle {
slope_factor *= (angle / character_controller.max_slope_angle).cos();
velocity.x += direction.x * character_controller.movement_acceleration * slope_factor * delta_time;
velocity.z -= direction.y * character_controller.movement_acceleration * slope_factor * delta_time;
slope_factor *=
(angle / character_controller.max_slope_angle).cos();
velocity.x += direction.x
* character_controller.movement_acceleration
* slope_factor
* delta_time;
velocity.z -= direction.y
* character_controller.movement_acceleration
* slope_factor
* delta_time;
} else {
velocity.x = 0.0;
velocity.z = 0.0;
}
}
} else {
velocity.x += direction.x * character_controller.movement_acceleration * character_controller.air_control_factor * delta_time ;
velocity.z -= direction.y * character_controller.movement_acceleration * character_controller.air_control_factor * delta_time ;
velocity.x += direction.x
* character_controller.movement_acceleration
* character_controller.air_control_factor
* delta_time;
velocity.z -= direction.y
* character_controller.movement_acceleration
* character_controller.air_control_factor
* delta_time;
}
}
MovementAction::Jump => {
@ -192,8 +208,6 @@ pub fn move_character(
}
}
pub fn dampen_movement(mut qeury: Query<(&mut LinearVelocity, &CharacterController)>) {
for (mut velocity, character_controller) in &mut qeury {
// We could use `LinearDamping`, but we don't want to dampen movement along the Y axis

View file

@ -17,11 +17,11 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#![allow(clippy::type_complexity)]
use bevy::prelude::*;
#[cfg(debug_assertions)]
use bevy::diagnostic::{FrameTimeDiagnosticsPlugin, LogDiagnosticsPlugin};
use bevy_xpbd_3d::prelude::*;
use bevy::prelude::*;
use bevy_editor_pls::prelude::*;
use bevy_xpbd_3d::prelude::*;
mod charcacter_controller;
use charcacter_controller::*;
@ -29,16 +29,17 @@ pub struct GamePlugin;
impl Plugin for GamePlugin {
fn build(&self, app: &mut App) {
app.add_plugins((
PhysicsPlugins::default(),
CharacterControllerPlugin,
))
app.add_plugins((PhysicsPlugins::default(), CharacterControllerPlugin))
.add_systems(Startup, setup)
.add_systems(Update, spawn_map);
#[cfg(debug_assertions)]
{
app.add_plugins((FrameTimeDiagnosticsPlugin, EditorPlugin::default(), LogDiagnosticsPlugin::default()));
app.add_plugins((
FrameTimeDiagnosticsPlugin,
EditorPlugin::default(),
LogDiagnosticsPlugin::default(),
));
}
app.world.init_resource::<IsMapSpawned>();
@ -54,14 +55,16 @@ fn setup(
mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<StandardMaterial>>,
) {
//player
commands.spawn((CharacterControllerBundle::new(Collider::capsule(1.0, 0.5), CharacterController::default()), PbrBundle{
commands.spawn((
CharacterControllerBundle::new(Collider::capsule(1.0, 0.5), CharacterController::default()),
PbrBundle {
mesh: meshes.add(Capsule3d::new(0.5, 1.0)),
material: materials.add(Color::rgb_u8(124, 144, 255)),
transform: Transform::from_xyz(0.0, 5.0, 0.0),
..default()
}));
},
));
// light
commands.spawn(PointLightBundle {
point_light: PointLight {
@ -83,7 +86,9 @@ fn spawn_map(
mut is_map_spawned: ResMut<IsMapSpawned>,
mut commands: Commands,
) {
if is_map_spawned.0 {return;}
if is_map_spawned.0 {
return;
}
let scene = asset_server.load("test_map.gltf#Scene0");

View file

@ -23,8 +23,8 @@ use bevy::prelude::*;
use bevy::window::PrimaryWindow;
use bevy::winit::WinitWindows;
use bevy::DefaultPlugins;
use ttt_ce::GamePlugin;
use std::io::Cursor;
use ttt_ce::GamePlugin;
use winit::window::Icon;
fn main() {