From 2afc45617d703262926d5a2e9476eb557676ce41 Mon Sep 17 00:00:00 2001 From: timokoesters Date: Sun, 16 Jun 2019 17:40:47 +0200 Subject: [PATCH] More input validation --- common/src/sys/animation.rs | 3 +-- common/src/sys/controller.rs | 44 +++++++++++++++++++++++++----------- 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/common/src/sys/animation.rs b/common/src/sys/animation.rs index 2ccc5cff18..95bb562f90 100644 --- a/common/src/sys/animation.rs +++ b/common/src/sys/animation.rs @@ -49,7 +49,6 @@ impl<'a> System<'a> for Sys { .join() { animation_info.time += dt.0 as f64; - let moving = vel.0.magnitude() > 3.0; fn impossible_animation(message: &str) -> Animation { warn!("{}", message); @@ -58,7 +57,7 @@ impl<'a> System<'a> for Sys { let animation = match ( on_ground.is_some(), - moving, + vel.0.magnitude() > 3.0, // Moving attacking.is_some(), gliding.is_some(), rolling.is_some(), diff --git a/common/src/sys/controller.rs b/common/src/sys/controller.rs index 9df950c144..cf518f7cb1 100644 --- a/common/src/sys/controller.rs +++ b/common/src/sys/controller.rs @@ -65,40 +65,58 @@ impl<'a> System<'a> for Sys { continue; } + // Move dir + if rollings.get(entity).is_none() { + move_dirs.insert( + entity, + MoveDir(if controller.move_dir.magnitude() > 1.0 { + controller.move_dir.normalized() + } else { + controller.move_dir + }), + ); + } + // Glide - if controller.glide && on_ground.is_none() && attackings.get(entity).is_none() { + if controller.glide + && glidings.get(entity).is_none() + && on_ground.is_none() + && attackings.get(entity).is_none() + && rollings.get(entity).is_none() + { glidings.insert(entity, Gliding); } else { glidings.remove(entity); } - // Move dir - move_dirs.insert( - entity, - MoveDir(if controller.move_dir.magnitude() > 1.0 { - controller.move_dir.normalized() - } else { - controller.move_dir - }), - ); - // Attack if controller.attack && attackings.get(entity).is_none() && glidings.get(entity).is_none() + && rollings.get(entity).is_none() { attackings.insert(entity, Attacking::start()); } // Jump - if on_ground.is_some() && controller.jump && vel.0.z <= 0.0 { + if controller.jump + && jumpings.get(entity).is_none() + && on_ground.is_some() + && vel.0.z <= 0.0 + { jumpings.insert(entity, Jumping); } else { jumpings.remove(entity); } // Roll - if controller.roll && rollings.get(entity).is_none() && on_ground.is_some() { + if controller.roll + && rollings.get(entity).is_none() + && attackings.get(entity).is_none() + && glidings.get(entity).is_none() + && on_ground.is_some() + && vel.0.magnitude() > 5.0 + { rollings.insert(entity, Rolling::start()); } }