Skip to main content

pybevy_transform/
lib.rs

1pub mod global_transform;
2pub mod transform;
3
4use bevy::transform::components::{GlobalTransform, Transform};
5pub use global_transform::PyGlobalTransform;
6use pybevy_core::{PyPlugin, plugin::plugin_registry, registry::global_registry};
7use pybevy_macros::{component_bridge, plugin_bridge};
8use pyo3::prelude::*;
9pub use transform::PyTransform;
10
11component_bridge!(
12    Transform,
13    PyTransform,
14    view_fields = [translation, rotation, scale]
15);
16component_bridge!(GlobalTransform, PyGlobalTransform, no_insert);
17
18#[pyclass(name = "TransformPlugin", extends = PyPlugin, frozen)]
19#[derive(Debug, Clone, Copy)]
20pub struct PyTransformPlugin;
21
22#[pymethods]
23impl PyTransformPlugin {
24    #[new]
25    pub fn new() -> (Self, PyPlugin) {
26        (PyTransformPlugin, PyPlugin)
27    }
28}
29
30impl Default for PyTransformPlugin {
31    fn default() -> Self {
32        PyTransformPlugin
33    }
34}
35
36plugin_bridge!(PyTransformPlugin, bevy::transform::TransformPlugin);
37
38pub fn register_transform_bridges() {
39    global_registry::register_component_bridge(TransformBridge);
40    global_registry::register_component_bridge(GlobalTransformBridge);
41    plugin_registry::register_plugin_bridge(TransformPluginBridge);
42    register_transform_batch();
43}
44
45pub fn add_transform_classes(m: &Bound<'_, PyModule>) -> PyResult<()> {
46    register_transform_bridges();
47    m.add_class::<PyTransformPlugin>()?;
48    m.add_class::<PyTransform>()?;
49    m.add_class::<PyGlobalTransform>()?;
50    Ok(())
51}
52
53pub fn add_module(parent: &Bound<'_, PyModule>) -> PyResult<()> {
54    let m = PyModule::new(parent.py(), "transform")?;
55    add_transform_classes(&m)?;
56    parent.add_submodule(&m)
57}