Basic rotation works.

This commit is contained in:
Nolan Darilek 2021-06-03 09:04:48 -05:00
parent ac728cc864
commit 99b6da1953

View File

@ -2,7 +2,7 @@ use std::{collections::HashMap, error::Error, fmt::Debug, hash::Hash, marker::Ph
use bevy::prelude::*;
use bevy_input_actionmap::InputMap;
use bevy_rapier2d::prelude::*;
use bevy_rapier2d::{na::UnitComplex, prelude::*};
use bevy_tts::Tts;
use derive_more::{Deref, DerefMut};
@ -85,7 +85,7 @@ fn movement_controls<S, A: 'static>(
&mut Speed,
&MaxSpeed,
Option<&RotationSpeed>,
&mut Transform,
&mut RigidBodyPosition,
Option<&Destination>,
),
With<Player>,
@ -95,7 +95,7 @@ fn movement_controls<S, A: 'static>(
S: bevy::ecs::component::Component + Clone + Debug + Eq + Hash,
A: Hash + Eq + Clone + Send + Sync,
{
for (entity, mut velocity, mut speed, max_speed, rotation_speed, mut transform, destination) in
for (entity, mut velocity, mut speed, max_speed, rotation_speed, mut position, destination) in
query.iter_mut()
{
let sprinting = if let Some(action) = config.action_sprint.clone() {
@ -108,7 +108,7 @@ fn movement_controls<S, A: 'static>(
} else {
commands.entity(entity).remove::<Sprinting>();
}
let mut direction = Vec3::default();
let mut direction = Vec2::default();
if let Some(action) = config.action_forward.clone() {
if input.active(action) {
direction.x += 1.;
@ -136,10 +136,10 @@ fn movement_controls<S, A: 'static>(
) {
let delta = rotation_speed.radians() * time.delta_seconds();
if input.active(rotate_left) {
transform.rotate(Quat::from_rotation_z(delta));
position.position.rotation *= UnitComplex::new(delta);
}
if input.active(rotate_right) {
transform.rotate(Quat::from_rotation_z(-delta));
position.position.rotation *= UnitComplex::new(-delta);
}
}
if direction.length_squared() != 0. {
@ -183,12 +183,14 @@ fn movement_controls<S, A: 'static>(
**max_speed / config.sprint_movement_factor
};
**speed = s;
direction = transform.compute_matrix().transform_vector3(direction);
let mut v = Vec2::new(direction.x, direction.y) * **speed;
if let Some(strength) = strength {
v *= strength;
direction *= strength;
}
velocity.linvel = v.into();
//direction = transform.compute_matrix().transform_vector3(direction);
let mut v: Vector<Real> = (direction * **speed).into();
v = position.position.rotation.transform_vector(&v);
velocity.linvel = v;
//velocity.linvel = position.position.rotation.transform_vector(&velocity.linvel);
} else if destination.is_none() {
velocity.linvel = Vec2::ZERO.into();
**speed = 0.;