bevy_remote_devtools_plugin/
lib.rs1use 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}