#![allow(unused_imports)]
use std::{cell::RefCell, sync::Arc};
use egui_demo_lib::DemoWindows;
use let_engine::prelude::*;
thread_local! {
static DEMO_APP: RefCell<DemoWindows> = RefCell::new(DemoWindows::default());
}
#[cfg(any(not(feature = "egui"), not(feature = "client")))]
fn main() {
eprintln!("This example requires you to have the `egui` and `client` feature enabled.");
}
#[cfg(all(feature = "egui", feature = "client"))]
fn main() {
let window_builder = WindowBuilder::new().inner_size(vec2(1280.0, 720.0));
let engine = Engine::new(
EngineSettingsBuilder::default()
.window_settings(window_builder)
.build()
.unwrap(),
)
.unwrap();
let game = Game::new();
engine.start(game);
}
#[cfg(feature = "egui")]
struct Game {
layer: Arc<Layer>,
exit: bool,
}
#[cfg(feature = "egui")]
impl Game {
pub fn new() -> Self {
Self {
layer: SCENE.new_layer(),
exit: false,
}
}
}
#[cfg(feature = "egui")]
impl let_engine::Game for Game {
fn start(&mut self) {
self.layer.set_camera_settings(CameraSettings {
zoom: 0.5,
mode: CameraScaling::Linear,
});
let mut circle = NewObject::new();
circle
.appearance
.set_model(Model::Custom(ModelData::new(make_circle!(30)).unwrap()));
circle.init(&self.layer).unwrap();
}
fn event(&mut self, event: events::Event) {
match event {
Event::Window(WindowEvent::CloseRequested) => {
self.exit = true;
}
Event::Input(InputEvent::KeyboardInput { input }) => {
if input.state == ElementState::Pressed {
if let Some(VirtualKeyCode::Escape) = input.keycode {
self.exit = true;
}
}
}
Event::Egui(ctx) => {
DEMO_APP.with_borrow_mut(|app| app.ui(&ctx));
}
_ => (),
};
}
fn exit(&self) -> bool {
self.exit
}
}