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}