Skip to content

Commit

Permalink
Add conversions between Visibility and bool (#14784)
Browse files Browse the repository at this point in the history
# 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
  • Loading branch information
Stanleeeeey authored Aug 19, 2024
1 parent d2fa55d commit e37bf18
Showing 1 changed file with 39 additions and 0 deletions.
39 changes: 39 additions & 0 deletions crates/bevy_render/src/view/visibility/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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]
Expand Down

0 comments on commit e37bf18

Please sign in to comment.