Untitled
unknown
rust
2 years ago
8.0 kB
8
Indexable
use bevy::winit::WinitWindows; use bevy::{ input::common_conditions::input_toggle_active, prelude::*, window::{PresentMode, PrimaryWindow, WindowTheme}, }; use bevy_egui::{EguiContext, EguiPlugin}; use bevy_inspector_egui::{ bevy_inspector::hierarchy::SelectedEntities, DefaultInspectorConfigPlugin, }; use std::io::Cursor; use winit::window::Icon; mod app_setup; #[derive(Component)] struct MainCamera; #[derive(Resource, Default)] struct MyWorldCoords { x: f32, y: f32, } #[derive(Resource, Default)] struct Money { amount: u32, } #[derive(Resource)] struct ToggleBool { toggle_print: bool, } #[derive(Resource, Default)] struct PrintsStruct { prints: Vec<String>, prints_number: usize, } impl PrintsStruct { fn add_print(&mut self, new_print: String) { // Add the new print at the beginning self.prints.insert(0, new_print); self.prints_number += 1; // Maintain a maximum of 5 prints if self.prints.len() > 7 { self.prints.truncate(7); } } } fn main () { App::new () .add_plugins ((DefaultPlugins.set(WindowPlugin { primary_window: Some(Window { title: "Clicker Game Version 1.0!".into(), position: WindowPosition::At(IVec2 { x: (360), y: (140) }), //Here you can change it resolution: (1200.0, 800.0).into(), // You can also do WindowPosition::Centered(Current) or present_mode: PresentMode::AutoVsync, // WindowPosition::Automatic fit_canvas_to_parent: true, prevent_default_event_handling: false, window_theme: Some(WindowTheme::Dark), ..default() }), ..default() }),)) .add_plugins(EguiPlugin) .add_plugins(DefaultInspectorConfigPlugin) .add_systems(PostStartup, (post_startup,)) .add_systems(Startup, (setup, set_window_icon)) .add_systems( Update, ( mouse_button_input, my_cursor_system, inspector_ui.run_if(input_toggle_active(true, KeyCode::Escape)), ), ) .run(); } fn inspector_ui (world: &mut World, mut selected_entities: Local<SelectedEntities>) { let mut egui_context = world .query_filtered::<&mut EguiContext, With<PrimaryWindow>>() .single(world) .clone(); egui::SidePanel::left ("hierarchy") .default_width(200.0) .show(egui_context.get_mut(), |ui| { egui::ScrollArea::vertical().show(ui, |ui| { ui.heading("Hierarchy"); bevy_inspector_egui::bevy_inspector::hierarchy::hierarchy_ui( world, ui, &mut selected_entities, ); ui.label("Press escape to toggle UI"); ui.allocate_space(ui.available_size()); }); }); egui::SidePanel::right ("inspector") .default_width(250.0) .show(egui_context.get_mut(), |ui| { egui::ScrollArea::vertical().show(ui, |ui| { ui.heading("Inspector"); let mut toggle_resource = world.get_resource_mut::<ToggleBool>().unwrap(); let mut toggle_print = toggle_resource.toggle_print; if ui.button("Toggle Print").clicked() { toggle_print = !toggle_print; toggle_resource.toggle_print = toggle_print; println!("Toggle Print: {}", toggle_print); } match selected_entities.as_slice() { &[entity] => { bevy_inspector_egui::bevy_inspector::ui_for_entity(world, entity, ui); } entities => { bevy_inspector_egui::bevy_inspector::ui_for_entities_shared_components( world, entities, ui, ); } } ui.allocate_space(ui.available_size()); }); }); egui::TopBottomPanel::bottom ("prints") .default_height(150.0) .show(egui_context.get_mut(), |ui| { egui::ScrollArea::vertical().show(ui, |ui| { ui.heading("Prints"); let print_resource = world.get_resource::<PrintsStruct>().unwrap(); let prints_vec = &print_resource.prints; let prints_nums = print_resource.prints_number; for (index, print_text) in prints_vec.iter().enumerate().rev() { let print_number = prints_nums - index;// Calculate the correct print number ui.label(format!("print ({}): {}", print_number, print_text)); } ui.allocate_space(ui.available_size()); }); }); } fn setup (mut commands: Commands, asset_server: Res<AssetServer>) { let texture = asset_server.load("Clicker.png"); commands.spawn((Camera2dBundle { ..default() }, MainCamera)); commands.spawn((SpriteBundle { texture, ..default() },)); commands.init_resource::<MyWorldCoords>(); commands.insert_resource::<Money>(Money { amount: 0 }); commands.init_resource::<PrintsStruct>(); commands.insert_resource::<ToggleBool>(ToggleBool { toggle_print: false, }); } fn post_startup (mut print: ResMut<PrintsStruct>) { println!("\n\n Game Starts, Have Fun!\n"); print.add_print("Game Starts, Have Fun!".to_string()); } fn set_window_icon ( windows: NonSend<WinitWindows>, primary_window: Query<Entity, With<PrimaryWindow>>, ) { let primary_entity = primary_window.single(); let primary = windows.get_window(primary_entity).unwrap(); let icon_buf = Cursor::new(include_bytes!("../Assets/icon_256x256.png")); if let Ok(image) = image::load(icon_buf, image::ImageFormat::Png) { let image = image.into_rgba8(); let (width, height) = image.dimensions(); let rgba = image.into_raw(); let icon = Icon::from_rgba(rgba, width, height).unwrap(); primary.set_window_icon(Some(icon)); }; } fn mouse_button_input ( buttons: Res<Input<MouseButton>>, mycoords: Res<MyWorldCoords>, toggle_bool: Res<ToggleBool>, mut money: ResMut<Money>, mut print: ResMut<PrintsStruct>, ) { if buttons.just_pressed (MouseButton::Left) { println!("MouseButtonWasPressed"); if cursor_in_clicker(&mycoords, &toggle_bool) { money.amount += 10; let money_string = format!("Money: {}", money.amount); print.add_print(money_string); println!("Money: {}", money.amount); } } } fn cursor_in_clicker (mycoords: &MyWorldCoords, toggle_bool: &ToggleBool) -> bool { if toggle_bool.toggle_print { eprintln!("Cursor X: {}\nCursor Y: {}", mycoords.x, mycoords.y); } (mycoords.x <= 100.0 && mycoords.x >= -100.0) && (mycoords.y <= 100.0 && mycoords.y >= -100.0) } fn my_cursor_system ( mut mycoords: ResMut<MyWorldCoords>, q_window: Query<&Window, With<PrimaryWindow>>, q_camera: Query<(&Camera, &GlobalTransform), With<MainCamera>>, ) { let (camera, camera_transform) = q_camera.single(); let window = q_window.single(); if let Some(world_position) = window .cursor_position() .and_then(|cursor| camera.viewport_to_world(camera_transform, cursor)) .map(|ray| ray.origin.truncate()) { mycoords.x = world_position.x; mycoords.y = world_position.y; //eprintln!("World coords: {}/{}", world_position.x, world_position.y); } }
Editor is loading...
Leave a Comment