Blacksite/crates/editor/src/lib.rs

168 lines
5.3 KiB
Rust

//! In-process level editor library for the Bevy FPS foundation.
#![allow(clippy::type_complexity)]
pub mod assets;
pub mod ext;
pub mod history;
pub mod infra;
pub mod operators;
pub mod play;
pub mod project;
pub mod render_target;
pub mod scene;
pub mod ui;
pub mod viewport;
// Flat re-exports preserve legacy `crate::module` paths.
pub use assets::asset_db;
pub use ext::brp;
pub use ext::command_queue;
pub use ext::extensibility;
#[cfg(feature = "hot-reload")]
pub use ext::hot_reload;
pub use play::net_editor;
pub use play::state;
pub use project::collaboration;
pub use project::diagnostics_bundle;
pub use project::launcher;
pub use project::project_io;
pub use project::session;
pub use project::settings_ui;
pub use scene::scene_io;
pub use scene::scene_schema;
pub use scene::scene_view;
pub use viewport::actor_icons;
pub use viewport::brush_csg;
pub use viewport::brush_edit;
pub use viewport::brush_tool;
pub use viewport::camera;
pub use viewport::gizmos;
pub use viewport::material_drop;
pub use viewport::render_view;
pub use viewport::rendering_diagnostics;
pub use viewport::selection;
pub use viewport::selection_outline;
pub use viewport::visualizers;
use bevy::app::PluginGroupBuilder;
use bevy::prelude::*;
use bevy_egui::EguiPlugin;
use game::{
launch, GameInputEnabled, GameInputFocused, GamePlugin, GameRenderBootstrap,
GameSceneBootstrap, SimEnabled,
};
use transform_gizmo_bevy::prelude::TransformGizmoPlugin;
use actor_icons::ActorIconsPlugin;
use asset_db::AssetDbPlugin;
use brush_csg::BrushCsgPlugin;
use brush_edit::BrushEditPlugin;
use brush_tool::BrushToolPlugin;
use camera::EditorCameraPlugin;
use extensibility::ExtensibilityPlugin;
use gizmos::EditorGizmoPlugin;
use history::EditorHistoryPlugin;
use infra::EditorInfraPlugin;
use material_drop::MaterialDropPlugin;
use operators::OperatorPlugin;
use play::audio_preview::AudioPreviewPlugin;
use play::PlaySessionPlugin;
use project::collaboration::CollaborationPlugin;
use project_io::ProjectIoPlugin;
use render_view::RenderViewPlugin;
use scene_io::SceneIoPlugin;
use scene_view::SceneViewPlugin;
use selection::EditorSelectionPlugin;
use selection_outline::SelectionOutlinePlugin;
use session::EditorSessionPlugin;
use settings_ui::SettingsUiPlugin;
use state::EditorStatePlugin;
use ui::EditorUiPlugin;
use viewport::ViewportPlugin;
use visualizers::EditorVisualizersPlugin;
/// Ordered editor plugin bundle. Registration order is part of the startup contract
/// (see `docs/editor/architecture.md` and ADR 0008).
pub struct EditorPluginGroup;
impl PluginGroup for EditorPluginGroup {
fn build(self) -> PluginGroupBuilder {
let group = PluginGroupBuilder::start::<Self>()
.add(EditorInfraPlugin)
.add(ProjectIoPlugin)
.add(scene_schema::SceneSchemaPlugin)
.add(net_editor::NetEditorPlugin)
.add(AssetDbPlugin)
.add(OperatorPlugin)
.add(ExtensibilityPlugin)
.add(SettingsUiPlugin)
.add(assets::EditorAssetsPlugin)
.add(assets::ThumbnailsPlugin)
.add(EditorStatePlugin)
.add(RenderViewPlugin)
.add(SceneViewPlugin)
.add(PlaySessionPlugin)
.add(ViewportPlugin)
.add(BrushCsgPlugin)
.add(BrushEditPlugin)
.add(BrushToolPlugin)
.add(EditorCameraPlugin)
.add(AudioPreviewPlugin)
.add(ActorIconsPlugin)
.add(MaterialDropPlugin)
.add(EditorSelectionPlugin)
.add(SelectionOutlinePlugin)
.add(EditorGizmoPlugin)
.add(EditorVisualizersPlugin)
.add(EditorHistoryPlugin)
.add(SceneIoPlugin)
.add(CollaborationPlugin)
.add(EditorUiPlugin)
.add(EditorSessionPlugin)
.add(brp::BrpPlugin);
#[cfg(feature = "hot-reload")]
let group = group.add(hot_reload::HotReloadPlugin);
group
}
}
/// Shared Bevy app wiring for the in-process editor (game sim + egui shell).
pub fn configure_editor_app(app: &mut App) {
app.add_plugins(launch::default_plugins("Bevy FPS Editor"))
.insert_resource(GameInputEnabled(false))
.insert_resource(GameInputFocused(false))
.insert_resource(SimEnabled(false))
.insert_resource(GameRenderBootstrap {
defer_player_camera_fx: true,
})
.insert_resource(GameSceneBootstrap {
defer_default_level: true,
})
.add_plugins(GamePlugin)
.add_plugins(MeshPickingPlugin)
.add_plugins(TransformGizmoPlugin)
.add_plugins(EguiPlugin::default())
.add_plugins(EditorPluginGroup);
}
/// Register game-provided editor panel hooks (ADR 0007 dogfood).
pub fn register_game_editor_plugins(app: &mut App) {
for setup in game::editor_ext::editor_panel_setups() {
extensibility::register_editor_plugin(app, Box::new(GamePanelAdapter(*setup)));
}
ext::game_inspector::register_game_inspector_sections(app);
}
struct GamePanelAdapter(game::editor_ext::EditorPanelSetup);
impl extensibility::EditorPlugin for GamePanelAdapter {
fn name(&self) -> &str {
"game.fps_demo_panel"
}
fn register(&self, app: &mut App) {
(self.0)(app);
app.add_plugins(ext::game_panels::GameEditorPanelsPlugin);
}
}