pybevy_pbr 0.2.1

PBR components for PyBevy
Documentation
use bevy::pbr::ScreenSpaceAmbientOcclusion;
use pybevy_core::{ComponentStorage, PyComponent};
use pybevy_macros::component_storage;
use pyo3::prelude::*;

use crate::PyScreenSpaceAmbientOcclusionQualityLevel;

#[component_storage(ScreenSpaceAmbientOcclusion)]
#[pyclass(name = "ScreenSpaceAmbientOcclusion", extends = PyComponent)]
#[derive(Debug, Clone)]
pub struct PyScreenSpaceAmbientOcclusion {
    pub(crate) storage: ComponentStorage<ScreenSpaceAmbientOcclusion>,
}

#[pymethods]
impl PyScreenSpaceAmbientOcclusion {
    #[new]
    #[pyo3(signature = (
        quality_level = PyScreenSpaceAmbientOcclusionQualityLevel::Medium(),
        constant_object_thickness = 0.5
    ))]
    pub fn new(
        quality_level: PyScreenSpaceAmbientOcclusionQualityLevel,
        constant_object_thickness: f32,
    ) -> (Self, PyComponent) {
        Self::from_owned(ScreenSpaceAmbientOcclusion {
            quality_level: quality_level.into(),
            constant_object_thickness,
        })
    }

    #[getter]
    pub fn quality_level(&self) -> PyResult<PyScreenSpaceAmbientOcclusionQualityLevel> {
        Ok(self.as_ref()?.quality_level.into())
    }

    #[setter]
    pub fn set_quality_level(
        &mut self,
        level: PyScreenSpaceAmbientOcclusionQualityLevel,
    ) -> PyResult<()> {
        self.as_mut()?.quality_level = level.into();
        Ok(())
    }

    #[getter]
    pub fn constant_object_thickness(&self) -> PyResult<f32> {
        Ok(self.as_ref()?.constant_object_thickness)
    }

    #[setter]
    pub fn set_constant_object_thickness(&mut self, thickness: f32) -> PyResult<()> {
        self.as_mut()?.constant_object_thickness = thickness;
        Ok(())
    }

    pub fn __eq__(&self, other: &Self) -> PyResult<bool> {
        Ok(self.as_ref()? == other.as_ref()?)
    }
}