Compare commits

..

No commits in common. "b1254d9029e9c2f7569f80c1f46d7ac7241860c5" and "4ecacb73adbd6444e8f9660cba6f45280e1a2356" have entirely different histories.

3 changed files with 33 additions and 2 deletions

View File

@ -38,5 +38,6 @@ maze_generator = "2"
once_cell = "1" once_cell = "1"
pathfinding = "4" pathfinding = "4"
rand = "0.8" rand = "0.8"
sentry = "0.29"
serde = "1" serde = "1"
shadowcast = "0.8" shadowcast = "0.8"

View File

@ -4,6 +4,9 @@ use std::{panic, thread};
use backtrace::Backtrace; use backtrace::Backtrace;
use bevy::prelude::*; use bevy::prelude::*;
#[derive(Resource)]
struct Guard(sentry::ClientInitGuard);
pub fn error_handler(In(result): In<Result<(), Box<dyn Error>>>) { pub fn error_handler(In(result): In<Result<(), Box<dyn Error>>>) {
if let Err(e) = result { if let Err(e) = result {
error!("{}", e); error!("{}", e);
@ -44,10 +47,29 @@ fn init_panic_handler() {
})); }));
} }
#[derive(Resource, Clone, Debug, Default)]
pub struct ErrorConfig {
pub sentry_dsn: Option<String>,
pub version: Option<String>,
}
pub struct ErrorPlugin; pub struct ErrorPlugin;
impl Plugin for ErrorPlugin { impl Plugin for ErrorPlugin {
fn build(&self, _app: &mut App) { fn build(&self, app: &mut App) {
init_panic_handler(); init_panic_handler();
if let Some(config) = app.world.get_resource::<ErrorConfig>() {
if let Some(dsn) = &config.sentry_dsn {
let release = config.version.clone().unwrap_or_default();
let guard = sentry::init((
dsn.as_str(),
sentry::ClientOptions {
release: Some(release.into()),
..default()
},
));
app.insert_resource(Guard(guard));
}
}
} }
} }

View File

@ -25,6 +25,7 @@ pub enum NavigationAction {
SnapRight, SnapRight,
SnapCardinal, SnapCardinal,
SnapReverse, SnapReverse,
Sprint,
} }
#[derive(Component, Clone, Copy, Debug, Deref, DerefMut, Reflect)] #[derive(Component, Clone, Copy, Debug, Deref, DerefMut, Reflect)]
@ -77,6 +78,7 @@ fn movement_controls<State>(
for (entity, mut actions, mut velocity, mut speed, max_speed, rotation_speed, transform) in for (entity, mut actions, mut velocity, mut speed, max_speed, rotation_speed, transform) in
&mut query &mut query
{ {
let sprinting = actions.pressed(NavigationAction::Sprint);
let mut cleanup = false; let mut cleanup = false;
if actions.pressed(NavigationAction::Move) { if actions.pressed(NavigationAction::Move) {
if let Some(pair) = actions.clamped_axis_pair(NavigationAction::Move) { if let Some(pair) = actions.clamped_axis_pair(NavigationAction::Move) {
@ -98,7 +100,11 @@ fn movement_controls<State>(
} else { } else {
forward_backward_movement_factor forward_backward_movement_factor
}; };
let mut s = **max_speed; let mut s = if sprinting {
**max_speed
} else {
**max_speed / config.sprint_movement_factor
};
s *= movement_factor; s *= movement_factor;
**speed = s; **speed = s;
let mut v = direction * **speed; let mut v = direction * **speed;
@ -334,6 +340,7 @@ pub struct NavigationPlugin<State> {
pub forward_movement_factor: f32, pub forward_movement_factor: f32,
pub backward_movement_factor: f32, pub backward_movement_factor: f32,
pub strafe_movement_factor: f32, pub strafe_movement_factor: f32,
pub sprint_movement_factor: f32,
pub states: Vec<State>, pub states: Vec<State>,
pub describe_undescribed_areas: bool, pub describe_undescribed_areas: bool,
pub log_area_descriptions: bool, pub log_area_descriptions: bool,
@ -345,6 +352,7 @@ impl<State> Default for NavigationPlugin<State> {
forward_movement_factor: 1., forward_movement_factor: 1.,
backward_movement_factor: 1., backward_movement_factor: 1.,
strafe_movement_factor: 1., strafe_movement_factor: 1.,
sprint_movement_factor: 3.,
states: vec![], states: vec![],
describe_undescribed_areas: false, describe_undescribed_areas: false,
log_area_descriptions: true, log_area_descriptions: true,