mirror of
https://github.com/bevyengine/bevy
synced 2024-11-10 07:04:33 +00:00
Fix axis settings constructor (#7233)
# Objective Currently, the `AxisSettings::new` function is unusable due to an implementation quirk. It only allows `AxisSettings` where the bounds that are supposed to be positive are negative! ## Solution - We fix the bound check - We add a test to make sure the method is usable Seems like the error slipped through because of the relatively verbose code style. With all those `if/else`, very long names, range syntax, the bound check is actually hard to spot. I first refactored a lot of code, but I left out the refactor because the fix should be integrated independently. --- ## Changelog - Fix `AxisSettings::new` only accepting invalid bounds
This commit is contained in:
parent
83028994d1
commit
2f4cf76866
1 changed files with 18 additions and 7 deletions
|
@ -583,7 +583,7 @@ impl ButtonSettings {
|
|||
/// Otherwise, values will not be rounded.
|
||||
///
|
||||
/// The valid range is `[-1.0, 1.0]`.
|
||||
#[derive(Debug, Clone, Reflect, FromReflect)]
|
||||
#[derive(Debug, Clone, Reflect, FromReflect, PartialEq)]
|
||||
#[reflect(Debug, Default)]
|
||||
pub struct AxisSettings {
|
||||
/// Values that are higher than `livezone_upperbound` will be rounded up to -1.0.
|
||||
|
@ -611,7 +611,7 @@ impl Default for AxisSettings {
|
|||
}
|
||||
|
||||
impl AxisSettings {
|
||||
/// Creates a new `AxisSettings` instance.
|
||||
/// Creates a new [`AxisSettings`] instance.
|
||||
///
|
||||
/// # Arguments
|
||||
///
|
||||
|
@ -622,9 +622,10 @@ impl AxisSettings {
|
|||
/// + `threshold` - the minimum value by which input must change before the change is registered.
|
||||
///
|
||||
/// Restrictions:
|
||||
/// + `-1.0 <= ``livezone_lowerbound`` <= ``deadzone_lowerbound`` <= 0.0 <= ``deadzone_upperbound`` <=
|
||||
/// ``livezone_upperbound`` <= 1.0`
|
||||
/// + `0.0 <= ``threshold`` <= 2.0`
|
||||
///
|
||||
/// + `-1.0 <= livezone_lowerbound <= deadzone_lowerbound <= 0.0`
|
||||
/// + `0.0 <= deadzone_upperbound <= livezone_upperbound <= 1.0`
|
||||
/// + `0.0 <= threshold <= 2.0`
|
||||
///
|
||||
/// # Errors
|
||||
///
|
||||
|
@ -646,11 +647,11 @@ impl AxisSettings {
|
|||
Err(AxisSettingsError::DeadZoneLowerBoundOutOfRange(
|
||||
deadzone_lowerbound,
|
||||
))
|
||||
} else if !(-1.0..=0.0).contains(&deadzone_upperbound) {
|
||||
} else if !(0.0..=1.0).contains(&deadzone_upperbound) {
|
||||
Err(AxisSettingsError::DeadZoneUpperBoundOutOfRange(
|
||||
deadzone_upperbound,
|
||||
))
|
||||
} else if !(-1.0..=0.0).contains(&livezone_upperbound) {
|
||||
} else if !(0.0..=1.0).contains(&livezone_upperbound) {
|
||||
Err(AxisSettingsError::LiveZoneUpperBoundOutOfRange(
|
||||
livezone_upperbound,
|
||||
))
|
||||
|
@ -1489,6 +1490,16 @@ mod tests {
|
|||
#[test]
|
||||
fn test_try_out_of_range_axis_settings() {
|
||||
let mut axis_settings = AxisSettings::default();
|
||||
assert_eq!(
|
||||
AxisSettings::new(-0.95, -0.05, 0.05, 0.95, 0.001),
|
||||
Ok(AxisSettings {
|
||||
livezone_lowerbound: -0.95,
|
||||
deadzone_lowerbound: -0.05,
|
||||
deadzone_upperbound: 0.05,
|
||||
livezone_upperbound: 0.95,
|
||||
threshold: 0.001,
|
||||
})
|
||||
);
|
||||
assert_eq!(
|
||||
Err(AxisSettingsError::LiveZoneLowerBoundOutOfRange(-2.0)),
|
||||
axis_settings.try_set_livezone_lowerbound(-2.0)
|
||||
|
|
Loading…
Reference in a new issue