Skip to main content

pybevy_time/
lib.rs

1pub mod plugin;
2pub mod stopwatch;
3pub mod time;
4pub mod time_context;
5pub mod timer;
6
7pub use plugin::PyTimePlugin;
8use pybevy_core::{plugin::plugin_registry, registry::global_registry};
9use pybevy_macros::{plugin_bridge, resource_bridge};
10use pyo3::prelude::*;
11pub use stopwatch::PyStopwatch;
12pub use time::{PyTime, PyTimeFixed, PyTimeReal, PyTimeVirtual};
13pub use time_context::{PyFixed, PyReal, PyVirtual};
14pub use timer::{PyTimer, PyTimerMode};
15
16plugin_bridge!(PyTimePlugin, bevy::time::TimePlugin);
17
18resource_bridge!(bevy::time::Time, PyTime);
19resource_bridge!(
20    bevy::time::Time<bevy::time::Fixed>,
21    PyTimeFixed,
22    "TimeFixed"
23);
24resource_bridge!(
25    bevy::time::Time<bevy::time::Virtual>,
26    PyTimeVirtual,
27    "TimeVirtual"
28);
29
30pub fn register_time_bridges() {
31    plugin_registry::register_plugin_bridge(TimePluginBridge);
32
33    global_registry::register_resource_bridge(TimeBridge);
34    global_registry::register_resource_bridge(TimeFixedBridge);
35    global_registry::register_resource_bridge(TimeVirtualBridge);
36}
37
38pub fn add_time_classes(m: &Bound<'_, PyModule>) -> PyResult<()> {
39    register_time_bridges();
40
41    m.add_class::<PyTimePlugin>()?;
42
43    m.add_class::<PyTime>()?;
44    m.add_class::<PyTimeFixed>()?;
45    m.add_class::<PyTimeVirtual>()?;
46    m.add_class::<PyTimeReal>()?;
47
48    m.add_class::<PyTimer>()?;
49    m.add_class::<PyTimerMode>()?;
50    m.add_class::<PyStopwatch>()?;
51    m.add_class::<PyFixed>()?;
52    m.add_class::<PyReal>()?;
53    m.add_class::<PyVirtual>()?;
54    Ok(())
55}
56
57pub fn add_module(parent: &Bound<'_, PyModule>) -> PyResult<()> {
58    let m = PyModule::new(parent.py(), "time")?;
59    add_time_classes(&m)?;
60    parent.add_submodule(&m)
61}