About popup
This commit is contained in:
parent
e31269368d
commit
c694d234e7
|
@ -1006,6 +1006,7 @@ dependencies = [
|
||||||
"ahash",
|
"ahash",
|
||||||
"egui",
|
"egui",
|
||||||
"enum-map",
|
"enum-map",
|
||||||
|
"image",
|
||||||
"log",
|
"log",
|
||||||
"mime_guess2",
|
"mime_guess2",
|
||||||
]
|
]
|
||||||
|
|
|
@ -11,7 +11,7 @@ clap = { version = "4", features = ["derive"] }
|
||||||
cpal = { git = "https://github.com/sidit77/cpal.git", rev = "66ed6be" }
|
cpal = { git = "https://github.com/sidit77/cpal.git", rev = "66ed6be" }
|
||||||
directories = "5"
|
directories = "5"
|
||||||
egui = { version = "0.29", features = ["serde"] }
|
egui = { version = "0.29", features = ["serde"] }
|
||||||
egui_extras = "0.29"
|
egui_extras = { version = "0.29", features = ["image"] }
|
||||||
egui-toast = "0.15"
|
egui-toast = "0.15"
|
||||||
egui-winit = "0.29"
|
egui-winit = "0.29"
|
||||||
egui-wgpu = { version = "0.29", features = ["winit"] }
|
egui-wgpu = { version = "0.29", features = ["winit"] }
|
||||||
|
|
|
@ -18,7 +18,7 @@ use crate::{
|
||||||
emulator::{EmulatorClient, EmulatorCommand, SimId},
|
emulator::{EmulatorClient, EmulatorCommand, SimId},
|
||||||
input::MappingProvider,
|
input::MappingProvider,
|
||||||
persistence::Persistence,
|
persistence::Persistence,
|
||||||
window::{AppWindow, GameWindow, InputWindow},
|
window::{AboutWindow, AppWindow, GameWindow, InputWindow},
|
||||||
};
|
};
|
||||||
|
|
||||||
fn load_icon() -> anyhow::Result<IconData> {
|
fn load_icon() -> anyhow::Result<IconData> {
|
||||||
|
@ -179,6 +179,10 @@ impl ApplicationHandler<UserEvent> for Application {
|
||||||
};
|
};
|
||||||
viewport.app.handle_gamepad_event(&event);
|
viewport.app.handle_gamepad_event(&event);
|
||||||
}
|
}
|
||||||
|
UserEvent::OpenAbout => {
|
||||||
|
let about = AboutWindow;
|
||||||
|
self.open(event_loop, Box::new(about));
|
||||||
|
}
|
||||||
UserEvent::OpenInput => {
|
UserEvent::OpenInput => {
|
||||||
let input = InputWindow::new(self.mappings.clone());
|
let input = InputWindow::new(self.mappings.clone());
|
||||||
self.open(event_loop, Box::new(input));
|
self.open(event_loop, Box::new(input));
|
||||||
|
@ -254,6 +258,7 @@ impl Viewport {
|
||||||
s.wrap_mode = Some(TextWrapMode::Extend);
|
s.wrap_mode = Some(TextWrapMode::Extend);
|
||||||
s.visuals.menu_rounding = Default::default();
|
s.visuals.menu_rounding = Default::default();
|
||||||
});
|
});
|
||||||
|
egui_extras::install_image_loaders(&ctx);
|
||||||
|
|
||||||
let mut info = ViewportInfo::default();
|
let mut info = ViewportInfo::default();
|
||||||
let mut builder = app.initial_viewport();
|
let mut builder = app.initial_viewport();
|
||||||
|
@ -365,6 +370,7 @@ impl Drop for Viewport {
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum UserEvent {
|
pub enum UserEvent {
|
||||||
GamepadEvent(gilrs::Event),
|
GamepadEvent(gilrs::Event),
|
||||||
|
OpenAbout,
|
||||||
OpenInput,
|
OpenInput,
|
||||||
OpenPlayer2,
|
OpenPlayer2,
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
|
pub use about::AboutWindow;
|
||||||
use egui::{Context, ViewportBuilder, ViewportId};
|
use egui::{Context, ViewportBuilder, ViewportId};
|
||||||
pub use game::GameWindow;
|
pub use game::GameWindow;
|
||||||
pub use input::InputWindow;
|
pub use input::InputWindow;
|
||||||
use winit::event::KeyEvent;
|
use winit::event::KeyEvent;
|
||||||
|
|
||||||
|
mod about;
|
||||||
mod game;
|
mod game;
|
||||||
mod game_screen;
|
mod game_screen;
|
||||||
mod input;
|
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.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("Video", |ui| {
|
||||||
ui.menu_button("Screen Size", |ui| {
|
ui.menu_button("Screen Size", |ui| {
|
||||||
let current_dims = ctx.input(|i| i.viewport().inner_rect.unwrap());
|
let current_dims = ctx.input(|i| i.viewport().inner_rect.unwrap());
|
||||||
|
@ -207,28 +237,6 @@ impl GameWindow {
|
||||||
ui.close_menu();
|
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) {
|
fn show_color_picker(&mut self, ui: &mut Ui) {
|
||||||
|
|
Loading…
Reference in New Issue