/* wearechat - generic multiplayer game with voip Copyright (C) 2025 metamuffin This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, version 3 of the License only. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ pub mod prefabindex; pub mod profiler; use crate::{download::Downloader, network::Network, scene_prepare::ScenePreparer}; use egui::Widget; use prefabindex::PrefabIndexInterface; use profiler::{Profiler, TimingProfiler}; use std::sync::{Arc, Mutex}; use weareshared::resources::PrefabIndex; enum Interface { Selector, Profiler(Profiler), PrefabIndex(PrefabIndexInterface), } pub struct InterfaceData { pub scene_prepare: Arc, pub network: Arc, pub downloader: Arc, pub prefab_index: Arc, pub render_timing: Arc>, } pub fn ui_selector(idata: Arc) -> impl Fn(&egui::Context) -> bool { let state = Mutex::new(Interface::Selector); move |ctx| { let mut open = true; let mut state = state.lock().unwrap(); egui::Window::new(match &*state { Interface::Selector => "Select Interface", Interface::Profiler(_) => "Profiler", Interface::PrefabIndex(_) => "Prefab Index", }) .open(&mut open) .show(ctx, |ui| match &mut *state { Interface::Selector => { if ui.button("Profiler").clicked() { *state = Interface::Profiler(Profiler { idata: idata.clone(), }) } if ui.button("Prefab Index").clicked() { *state = Interface::PrefabIndex(PrefabIndexInterface { idata: idata.clone(), }) } ui.response() } Interface::Profiler(profiler) => profiler.ui(ui), Interface::PrefabIndex(prefab_index_interface) => prefab_index_interface.ui(ui), }); open } }