diff --git a/src/bin/trees/main.rs b/src/bin/trees/main.rs index f47e1d2..017e09c 100644 --- a/src/bin/trees/main.rs +++ b/src/bin/trees/main.rs @@ -32,15 +32,15 @@ fn main() { 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::), + dialog_box_visibility.run_if(state_changed::), monologue_asset_tooltip - .run_if(on_event::> - .or(on_event::>)), + .run_if(on_event::>.or(on_event::>)), ), ) .add_observer(add_dialog_option) .add_observer(add_dialog_line) + .add_observer(add_tree_monologue) + .add_observer(remove_tree_monologue) .run(); } @@ -58,72 +58,59 @@ fn init_trees( mut commands: Commands, mut meshes: ResMut>, mut materials: ResMut>, + mut ambient_light: ResMut, server: Res, ) { - let tree_card_mesh = meshes.add(Plane3d::new(Vec3::Y, Vec2::splat(1.0))); - - let tree_image = server.load("placeholder/tree.png"); + // Global light + { + ambient_light.brightness = 500.0; + } // Spawn placeholder tree (red) { - let tree_material_red = materials.add(StandardMaterial { - base_color_texture: Some(tree_image.clone()), - base_color: RED.into(), - alpha_mode: AlphaMode::Blend, - ..default() - }); - let monologue: Handle = server.load("trees/red.mono"); - let tree_transform_red = - Transform::from_xyz(-15.0, 0.0, 15.0).with_scale(Vec3::splat(10.0)); commands.spawn(( Tree, - TreeMonologue(monologue), - Mesh3d(tree_card_mesh.clone()), - MeshMaterial3d(tree_material_red), - tree_transform_red, - Name::new("Red"), + 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)), )); } // Spawn placeholder tree (green) { - let tree_material_green = materials.add(StandardMaterial { - base_color_texture: Some(tree_image.clone()), - base_color: GREEN.into(), - alpha_mode: AlphaMode::Blend, - ..default() - }); - let monologue: Handle = server.load("trees/green.mono"); - let tree_transform_green = - Transform::from_xyz(15.0, 0.0, 15.0).with_scale(Vec3::splat(10.0)); commands.spawn(( Tree, - TreeMonologue(monologue), - Mesh3d(tree_card_mesh.clone()), - MeshMaterial3d(tree_material_green), - tree_transform_green, - Name::new("Green"), + 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)), )); } // Spawn placeholder tree (blue) { - let tree_material_blue = materials.add(StandardMaterial { - base_color_texture: Some(tree_image.clone()), - base_color: BLUE.into(), - alpha_mode: AlphaMode::Blend, - ..default() - }); - let monologue: Handle = server.load("trees/blue.mono"); - let tree_transform_blue = - Transform::from_xyz(0.0, 0.0, -15.0).with_scale(Vec3::splat(10.0)); commands.spawn(( Tree, - TreeMonologue(monologue), - Mesh3d(tree_card_mesh.clone()), - MeshMaterial3d(tree_material_blue), - tree_transform_blue, - Name::new("Blue"), + 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)), )); } } @@ -252,9 +239,9 @@ fn start_dialog( query: Query<&TreeMonologue>, ) { click_events.read().for_each(|event| { - info!("Click event detected"); + debug!("Click event detected"); if let Ok(TreeMonologue(handle)) = query.get(event.target) { - info!("Tree Monologue received, sending start dialog event"); + debug!("Tree Monologue received, sending start dialog event"); dialog_events.write(DialogEvent::Start(handle.clone())); dialog_events.write(DialogEvent::NextBatch); } @@ -268,7 +255,7 @@ fn end_dialog( query: Query, With, With)>>, ) { click_events.read().for_each(|event| { - info!("Click even triggered end of dialog: {:?}", event.target); + debug!("Click even triggered end of dialog: {:?}", event.target); if !query.contains(event.target) { dialog_events.write(DialogEvent::End); } @@ -336,11 +323,14 @@ fn dialog_engine( debug!("Dialog ended"); // Remove the TreeMonologue component from the active tree - monologue_trees.iter().filter_map(|(entity, tree_monologue)| { - (*tree_monologue == TreeMonologue(handle.clone())).then_some(entity) - }).for_each(|e| { - commands.entity(e).remove::(); - }); + monologue_trees + .iter() + .filter_map(|(entity, tree_monologue)| { + (*tree_monologue == TreeMonologue(handle.clone())).then_some(entity) + }) + .for_each(|e| { + commands.entity(e).remove::(); + }); // Remove lines from dialog box lines.iter().for_each(|e| { @@ -466,3 +456,32 @@ fn monologue_asset_tooltip( } }); } + +fn add_tree_monologue( + trigger: Trigger, + query: Query<&MeshMaterial3d>, + mut materials: ResMut>, +) { + // Get the affected entity's MeshMaterial3d + if let Ok(handle) = query.get(trigger.target()) { + // Get the concrete StandardMaterial + if let Some(material) = materials.get_mut(handle) { + material.base_color = WHITE.with_alpha(1.0).into(); + } + } +} + +fn remove_tree_monologue( + trigger: Trigger, + query: Query<&MeshMaterial3d>, + mut materials: ResMut>, +) { + // Get the affected entity's MeshMaterial3d + if let Ok(handle) = query.get(trigger.target()) { + // Get the concrete StandardMaterial + if let Some(material) = materials.get_mut(handle) { + // Make it dull + material.base_color = WHITE.with_alpha(0.9).into(); + } + } +} diff --git a/src/bin/trees/mono.rs b/src/bin/trees/mono.rs index e81b732..26b2ac9 100644 --- a/src/bin/trees/mono.rs +++ b/src/bin/trees/mono.rs @@ -61,7 +61,7 @@ impl AssetLoader for MonologueLoader { .filter(|sub: &Vec| !sub.is_empty()) .collect(); - info!("Monologue: {:#?}", value); + debug!("Monologue: {:#?}", value); let thing = Monologue { value }; Ok(thing) diff --git a/src/debug.rs b/src/debug.rs index 6bfe2dc..b6d10e9 100644 --- a/src/debug.rs +++ b/src/debug.rs @@ -1,6 +1,7 @@ use bevy::{ color::palettes::css::MAGENTA, - pbr::wireframe::{WireframeConfig, WireframePlugin}, platform::collections::HashMap, + pbr::wireframe::{WireframeConfig, WireframePlugin}, + platform::collections::HashMap, }; use super::*; @@ -31,7 +32,8 @@ impl Plugin for DebuggingPlugin { .run_if(state_changed::), toggle_debug_state.run_if(on_keyboard_press(KeyCode::F12)), ( - (hover_mesh, hover_ui).run_if(on_event::>.or(on_event::>)), + (hover_mesh, hover_ui) + .run_if(on_event::>.or(on_event::>)), tooltip_follow.run_if(any_component_changed::), sync_resource_to_ui::.run_if(resource_changed::), ) @@ -167,7 +169,7 @@ fn hover_mesh( let pos = (t.translation.x, t.translation.y, t.translation.z); let name = match n { Some(x) => x, - None => "???", + None => "N/A", }; tooltip.insert("ID", format!("{e}")); tooltip.insert("Pos", format!("{pos:.3?}")); @@ -198,7 +200,7 @@ fn hover_ui( if let Ok(n) = nodes.get(e) { let name = match n { Some(x) => x, - None => "???", + None => "N/A", }; tooltip.insert("ID", format!("{e}")); tooltip.insert("Name", name.into());