diff --git a/src/bin/trees/main.rs b/src/bin/trees/main.rs index b82b125..06127ee 100644 --- a/src/bin/trees/main.rs +++ b/src/bin/trees/main.rs @@ -3,7 +3,11 @@ mod mono; -use bevy::{color::palettes::css::{DARK_ORANGE, ORANGE}, window::WindowResized}; +use bevy::{ + asset::LoadedFolder, + color::palettes::css::{DARK_GREY, DARK_ORANGE, GREY, ORANGE, PINK}, + window::WindowResized, +}; use games::*; use mono::*; @@ -16,7 +20,13 @@ fn main() { .insert_resource(ClearColor(WHITE.into())) .add_systems( Startup, - (init_trees, init_ui, position_camera.after(setup_camera)), + ( + init_trees, + init_ui, + init_debug_ui, + load_monologues, + position_camera.after(setup_camera), + ), ) .add_systems( Update, @@ -29,13 +39,14 @@ fn main() { end_dialog .run_if(in_state(DialogState::Idle)) .run_if(on_event::>), + spawn_debug_buttons.run_if(on_event::>), dialog_engine.run_if(on_event::), mouse_wheel_scroll.run_if(on_event::), auto_scroll.run_if(any_component_added::), dialog_box_visibility.run_if(state_changed::), monologue_asset_tooltip .run_if(on_event::>.or(on_event::>)), - scale_window.run_if(on_event::) + scale_window.run_if(on_event::), ), ) .add_observer(add_dialog_option) @@ -69,50 +80,56 @@ fn init_trees( // Spawn placeholder tree (red) { - commands.spawn(( - Tree, - TreeMonologue(server.load("trees/red.mono")), - Mesh3d(meshes.add(Plane3d::new(Vec3::Y, Vec2::splat(1.0)))), - MeshMaterial3d(materials.add(StandardMaterial { - base_color_texture: Some(server.load("placeholder/tree.png")), - base_color: WHITE.into(), - alpha_mode: AlphaMode::Blend, - ..default() - })), - Transform::from_xyz(-15.0, 0.0, 15.0).with_scale(Vec3::splat(10.0)), - )).observe(delete_tree); + commands + .spawn(( + Tree, + TreeMonologue(server.load("trees/red.mono")), + Mesh3d(meshes.add(Plane3d::new(Vec3::Y, Vec2::splat(1.0)))), + MeshMaterial3d(materials.add(StandardMaterial { + base_color_texture: Some(server.load("placeholder/tree.png")), + base_color: WHITE.into(), + alpha_mode: AlphaMode::Blend, + ..default() + })), + Transform::from_xyz(-15.0, 0.0, 15.0).with_scale(Vec3::splat(10.0)), + )) + .observe(delete_tree); } // Spawn placeholder tree (green) { - commands.spawn(( - Tree, - TreeMonologue(server.load("trees/green.mono")), - Mesh3d(meshes.add(Plane3d::new(Vec3::Y, Vec2::splat(1.0)))), - MeshMaterial3d(materials.add(StandardMaterial { - base_color_texture: Some(server.load("placeholder/tree.png")), - base_color: WHITE.into(), - alpha_mode: AlphaMode::Blend, - ..default() - })), - Transform::from_xyz(15.0, 0.0, 15.0).with_scale(Vec3::splat(10.0)), - )).observe(delete_tree); + commands + .spawn(( + Tree, + TreeMonologue(server.load("trees/green.mono")), + Mesh3d(meshes.add(Plane3d::new(Vec3::Y, Vec2::splat(1.0)))), + MeshMaterial3d(materials.add(StandardMaterial { + base_color_texture: Some(server.load("placeholder/tree.png")), + base_color: WHITE.into(), + alpha_mode: AlphaMode::Blend, + ..default() + })), + Transform::from_xyz(15.0, 0.0, 15.0).with_scale(Vec3::splat(10.0)), + )) + .observe(delete_tree); } // Spawn placeholder tree (blue) { - commands.spawn(( - Tree, - TreeMonologue(server.load("trees/blue.mono")), - Mesh3d(meshes.add(Plane3d::new(Vec3::Y, Vec2::splat(1.0)))), - MeshMaterial3d(materials.add(StandardMaterial { - base_color_texture: Some(server.load("placeholder/tree.png")), - base_color: WHITE.into(), - alpha_mode: AlphaMode::Blend, - ..default() - })), - Transform::from_xyz(0.0, 0.0, -15.0).with_scale(Vec3::splat(10.0)), - )).observe(delete_tree); + commands + .spawn(( + Tree, + TreeMonologue(server.load("trees/blue.mono")), + Mesh3d(meshes.add(Plane3d::new(Vec3::Y, Vec2::splat(1.0)))), + MeshMaterial3d(materials.add(StandardMaterial { + base_color_texture: Some(server.load("placeholder/tree.png")), + base_color: WHITE.into(), + alpha_mode: AlphaMode::Blend, + ..default() + })), + Transform::from_xyz(0.0, 0.0, -15.0).with_scale(Vec3::splat(10.0)), + )) + .observe(delete_tree); } } @@ -145,6 +162,56 @@ fn init_ui(mut commands: Commands) { .observe(hover_dialog_box_out); } +#[derive(Component)] +struct MonologuesList; + +#[derive(Component)] +struct MonologuePreview; + +/// Panel for selecting which monologue tree to spawn +/// TODO: When monologue is loaded, add a button for it in this +/// TODO: When mouse over button, preview it in the "MonologuePreview" box +fn init_debug_ui(mut commands: Commands) { + commands + .spawn(( + Node { + height: Val::Percent(90.0), + align_self: AlignSelf::Center, + justify_self: JustifySelf::Start, + ..default() + }, + GlobalZIndex(i32::MAX - 1), + DebuggingState::On, + )) + .with_children(|parent| { + parent.spawn(( + Node { + min_width: Val::Px(5.0), + min_height: Val::Px(5.0), + max_height: Val::Percent(90.0), + flex_direction: FlexDirection::Column, + padding: UiRect::all(Val::Px(10.0)), + margin: UiRect::all(Val::Px(10.0)), + ..default() + }, + BackgroundColor(PINK.into()), + MonologuesList, + )); + parent.spawn(( + Node { + min_height: Val::Px(5.0), + max_height: Val::Percent(90.0), + flex_direction: FlexDirection::Column, + padding: UiRect::all(Val::Px(10.0)), + margin: UiRect::all(Val::Px(10.0)), + ..default() + }, + BackgroundColor(ORANGE.into()), + MonologuePreview, + )); + }); +} + fn hover_dialog_box_over( trigger: Trigger>, mut query: Query<&mut BackgroundColor, With>, @@ -522,3 +589,95 @@ fn delete_tree(trigger: Trigger>, mut commands: Commands) { commands.entity(trigger.target()).despawn(); } } + +fn load_monologues(server: ResMut, mut loaded_folder: Local>) { + *loaded_folder = server.load_folder("trees"); +} + +fn spawn_debug_buttons( + mut events: EventReader>, + mut commands: Commands, + container: Single, Without