bevy_remote_devtools_plugin/
lib.rs

1use bevy::{
2    prelude::*,
3    render::{RenderApp, RenderStage},
4};
5use sync::*;
6
7mod api;
8mod assets;
9mod render_graph;
10mod serialization;
11mod sync;
12mod tracing_tracking;
13
14pub struct RemoteDevToolsPlugin {
15    pub port: u16,
16    pub name: Option<String>,
17}
18
19impl RemoteDevToolsPlugin {
20    pub fn new(name: &str, port: u16) -> Self {
21        Self {
22            name: Some(name.to_string()),
23            port,
24        }
25    }
26}
27
28impl Default for RemoteDevToolsPlugin {
29    fn default() -> Self {
30        Self {
31            name: None,
32            port: 3030,
33        }
34    }
35}
36
37pub(crate) struct DevToolsSettings {
38    name: Option<String>,
39}
40
41impl Plugin for RemoteDevToolsPlugin {
42    fn build(&self, app: &mut App) {
43        app.insert_resource(DevToolsSettings {
44            name: self.name.clone(),
45        });
46
47        app.register_type::<DevInfo>();
48
49        tracing_tracking::init(app);
50        api::start(self.port);
51
52        app.add_stage_before(
53            CoreStage::First,
54            "devtools_begin",
55            SystemStage::single_threaded(),
56        );
57        app.add_stage_after(
58            CoreStage::Last,
59            "devtools_end",
60            SystemStage::single_threaded(),
61        );
62        app.add_system_to_stage(
63            "devtools_begin",
64            execute_world_tasks_begin.exclusive_system(),
65        );
66        app.add_system_to_stage("devtools_end", execute_world_tasks_end.exclusive_system());
67
68        app.sub_app_mut(RenderApp).add_system_to_stage(
69            RenderStage::Render,
70            execute_world_tasks_render_app.exclusive_system(),
71        );
72    }
73}
74
75#[derive(Component, Reflect, Default)]
76#[reflect(Component)]
77pub struct DevInfo {
78    pub name: String,
79    pub module: String,
80}
81
82#[macro_export]
83macro_rules! dev_named {
84    ($name:expr) => {
85        $crate::DevInfo {
86            name: $name.to_string(),
87            module: module_path!().to_string(),
88        }
89    };
90}