About popup
This commit is contained in:
		
							parent
							
								
									e31269368d
								
							
						
					
					
						commit
						c694d234e7
					
				| 
						 | 
				
			
			@ -1006,6 +1006,7 @@ dependencies = [
 | 
			
		|||
 "ahash",
 | 
			
		||||
 "egui",
 | 
			
		||||
 "enum-map",
 | 
			
		||||
 "image",
 | 
			
		||||
 "log",
 | 
			
		||||
 "mime_guess2",
 | 
			
		||||
]
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,7 +11,7 @@ clap = { version = "4", features = ["derive"] }
 | 
			
		|||
cpal = { git = "https://github.com/sidit77/cpal.git", rev = "66ed6be" }
 | 
			
		||||
directories = "5"
 | 
			
		||||
egui = { version = "0.29", features = ["serde"] }
 | 
			
		||||
egui_extras = "0.29"
 | 
			
		||||
egui_extras = { version = "0.29", features = ["image"] }
 | 
			
		||||
egui-toast = "0.15"
 | 
			
		||||
egui-winit = "0.29"
 | 
			
		||||
egui-wgpu = { version = "0.29", features = ["winit"] }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,7 @@ use crate::{
 | 
			
		|||
    emulator::{EmulatorClient, EmulatorCommand, SimId},
 | 
			
		||||
    input::MappingProvider,
 | 
			
		||||
    persistence::Persistence,
 | 
			
		||||
    window::{AppWindow, GameWindow, InputWindow},
 | 
			
		||||
    window::{AboutWindow, AppWindow, GameWindow, InputWindow},
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
fn load_icon() -> anyhow::Result<IconData> {
 | 
			
		||||
| 
						 | 
				
			
			@ -179,6 +179,10 @@ impl ApplicationHandler<UserEvent> for Application {
 | 
			
		|||
                };
 | 
			
		||||
                viewport.app.handle_gamepad_event(&event);
 | 
			
		||||
            }
 | 
			
		||||
            UserEvent::OpenAbout => {
 | 
			
		||||
                let about = AboutWindow;
 | 
			
		||||
                self.open(event_loop, Box::new(about));
 | 
			
		||||
            }
 | 
			
		||||
            UserEvent::OpenInput => {
 | 
			
		||||
                let input = InputWindow::new(self.mappings.clone());
 | 
			
		||||
                self.open(event_loop, Box::new(input));
 | 
			
		||||
| 
						 | 
				
			
			@ -254,6 +258,7 @@ impl Viewport {
 | 
			
		|||
            s.wrap_mode = Some(TextWrapMode::Extend);
 | 
			
		||||
            s.visuals.menu_rounding = Default::default();
 | 
			
		||||
        });
 | 
			
		||||
        egui_extras::install_image_loaders(&ctx);
 | 
			
		||||
 | 
			
		||||
        let mut info = ViewportInfo::default();
 | 
			
		||||
        let mut builder = app.initial_viewport();
 | 
			
		||||
| 
						 | 
				
			
			@ -365,6 +370,7 @@ impl Drop for Viewport {
 | 
			
		|||
#[derive(Debug)]
 | 
			
		||||
pub enum UserEvent {
 | 
			
		||||
    GamepadEvent(gilrs::Event),
 | 
			
		||||
    OpenAbout,
 | 
			
		||||
    OpenInput,
 | 
			
		||||
    OpenPlayer2,
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,10 @@
 | 
			
		|||
pub use about::AboutWindow;
 | 
			
		||||
use egui::{Context, ViewportBuilder, ViewportId};
 | 
			
		||||
pub use game::GameWindow;
 | 
			
		||||
pub use input::InputWindow;
 | 
			
		||||
use winit::event::KeyEvent;
 | 
			
		||||
 | 
			
		||||
mod about;
 | 
			
		||||
mod game;
 | 
			
		||||
mod game_screen;
 | 
			
		||||
mod input;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
use egui::{CentralPanel, Context, Image, ViewportBuilder, ViewportId};
 | 
			
		||||
 | 
			
		||||
use super::AppWindow;
 | 
			
		||||
 | 
			
		||||
pub struct AboutWindow;
 | 
			
		||||
 | 
			
		||||
impl AppWindow for AboutWindow {
 | 
			
		||||
    fn viewport_id(&self) -> ViewportId {
 | 
			
		||||
        ViewportId::from_hash_of("About")
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn initial_viewport(&self) -> ViewportBuilder {
 | 
			
		||||
        ViewportBuilder::default()
 | 
			
		||||
            .with_title("About Lemur")
 | 
			
		||||
            .with_inner_size((300.0, 200.0))
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn show(&mut self, ctx: &Context) {
 | 
			
		||||
        CentralPanel::default().show(ctx, |ui| {
 | 
			
		||||
            ui.vertical_centered(|ui| {
 | 
			
		||||
                ui.label("Lemur Virtual Boy Emulator");
 | 
			
		||||
                ui.hyperlink("https://git.virtual-boy.com/PVB/lemur");
 | 
			
		||||
                let logo = Image::new(egui::include_image!("../../assets/lemur-256x256.png"))
 | 
			
		||||
                    .max_width(256.0)
 | 
			
		||||
                    .maintain_aspect_ratio(true);
 | 
			
		||||
                ui.add(logo);
 | 
			
		||||
            });
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -98,6 +98,36 @@ impl GameWindow {
 | 
			
		|||
                ui.close_menu();
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
        ui.menu_button("Options", |ui| self.show_options_menu(ctx, ui));
 | 
			
		||||
        ui.menu_button("Multiplayer", |ui| {
 | 
			
		||||
            if self.sim_id == SimId::Player1
 | 
			
		||||
                && !self.client.has_player_2()
 | 
			
		||||
                && ui.button("Open Player 2").clicked()
 | 
			
		||||
            {
 | 
			
		||||
                self.client
 | 
			
		||||
                    .send_command(EmulatorCommand::StartSecondSim(None));
 | 
			
		||||
                self.proxy.send_event(UserEvent::OpenPlayer2).unwrap();
 | 
			
		||||
                ui.close_menu();
 | 
			
		||||
            }
 | 
			
		||||
            if self.client.has_player_2() {
 | 
			
		||||
                let linked = self.client.are_sims_linked();
 | 
			
		||||
                if linked && ui.button("Unlink").clicked() {
 | 
			
		||||
                    self.client.send_command(EmulatorCommand::Unlink);
 | 
			
		||||
                    ui.close_menu();
 | 
			
		||||
                }
 | 
			
		||||
                if !linked && ui.button("Link").clicked() {
 | 
			
		||||
                    self.client.send_command(EmulatorCommand::Link);
 | 
			
		||||
                    ui.close_menu();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
        ui.menu_button("About", |ui| {
 | 
			
		||||
            self.proxy.send_event(UserEvent::OpenAbout).unwrap();
 | 
			
		||||
            ui.close_menu();
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn show_options_menu(&mut self, ctx: &Context, ui: &mut Ui) {
 | 
			
		||||
        ui.menu_button("Video", |ui| {
 | 
			
		||||
            ui.menu_button("Screen Size", |ui| {
 | 
			
		||||
                let current_dims = ctx.input(|i| i.viewport().inner_rect.unwrap());
 | 
			
		||||
| 
						 | 
				
			
			@ -207,28 +237,6 @@ impl GameWindow {
 | 
			
		|||
                ui.close_menu();
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
        ui.menu_button("Multiplayer", |ui| {
 | 
			
		||||
            if self.sim_id == SimId::Player1
 | 
			
		||||
                && !self.client.has_player_2()
 | 
			
		||||
                && ui.button("Open Player 2").clicked()
 | 
			
		||||
            {
 | 
			
		||||
                self.client
 | 
			
		||||
                    .send_command(EmulatorCommand::StartSecondSim(None));
 | 
			
		||||
                self.proxy.send_event(UserEvent::OpenPlayer2).unwrap();
 | 
			
		||||
                ui.close_menu();
 | 
			
		||||
            }
 | 
			
		||||
            if self.client.has_player_2() {
 | 
			
		||||
                let linked = self.client.are_sims_linked();
 | 
			
		||||
                if linked && ui.button("Unlink").clicked() {
 | 
			
		||||
                    self.client.send_command(EmulatorCommand::Unlink);
 | 
			
		||||
                    ui.close_menu();
 | 
			
		||||
                }
 | 
			
		||||
                if !linked && ui.button("Link").clicked() {
 | 
			
		||||
                    self.client.send_command(EmulatorCommand::Link);
 | 
			
		||||
                    ui.close_menu();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fn show_color_picker(&mut self, ui: &mut Ui) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue