Add conversions between Visibility and bool (#14784)

# Objective

Fixes #14521. 

## Solution

Added to methods to the VIsibility. 
```rs
is_visible() -> Result<bool, String>
```
 and 
```rs
visbility_from_bool(bool) -> Visibility
```

## Testing

Ran 
* `cargo run -p ci -- lints`
* `cargo run -p ci -- test`
* `cargo run -p ci -- compile`
it seems to be working. 
However I got few error messages :`ERROR bevy_log: could not set global
logger and tracing subscriber as they are already set. Consider
disabling LogPlugin` in `cargo run -p ci -- test`, even though all test
passed. I'm not sure if that's expected behaviour

Ps. I'm new to contributing, please correct me if anything is wrong
This commit is contained in:
Stanisław Kawulok 2024-08-19 23:40:54 +02:00 committed by GitHub
parent d2fa55db6b
commit e37bf18e2b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -21,6 +21,8 @@ use crate::{
primitives::{Aabb, Frustum, Sphere},
};
use thiserror::Error;
use super::NoCpuCulling;
/// User indication of whether an entity is visible. Propagates down the entity hierarchy.
@ -47,6 +49,43 @@ pub enum Visibility {
Visible,
}
/// Enum of errors that could occur during conversion to [`bool`]
#[non_exhaustive]
#[derive(Error, Debug)]
pub enum VisibilityToBoolConversionError {
#[error("The variant `{0:?}` cannot be converted to a bool")]
VariantNotSupported(Visibility),
}
/// Implements conversion from bool to Visibility
/// `true` corresponds to [`Visibility::Visible`], while false corresponds to [`Visibility::Hidden`].
impl From<bool> for Visibility {
fn from(visible: bool) -> Visibility {
if visible {
Visibility::Visible
} else {
Visibility::Hidden
}
}
}
/// Implements conversion from [`Visibility`] to [`bool`]
/// - returns `Ok(true)` if `Visibility::Visible`
/// - returns `Ok(false)` if `Visibility::Hidden`
/// - returns `Err()` if `Visibility::Inherited`
impl TryFrom<Visibility> for bool {
type Error = VisibilityToBoolConversionError;
fn try_from(visible: Visibility) -> Result<Self, Self::Error> {
match visible {
Visibility::Hidden => Ok(false),
Visibility::Visible => Ok(true),
Visibility::Inherited => Err(VisibilityToBoolConversionError::VariantNotSupported(
Visibility::Inherited,
)),
}
}
}
// Allows `&Visibility == Visibility`
impl PartialEq<Visibility> for &Visibility {
#[inline]