separate out renderer crate (#13)
* add keyboard handler * some cleanup * add l key binding * Fix WASM shared memory generation for Rust nightly 2025-10-20+ Add explicit linker flags for shared memory generation after Rust PR #147225 removed automatic flags with +atomics. This fixes DataCloneError when sharing memory with workers. Changes: - Add --shared-memory, --max-memory, --import-memory flags - Export TLS symbols: __wasm_init_tls, __tls_size, __tls_align, __tls_base - Update both Cargo.toml and package.json build scripts Amp-Thread-ID: https://ampcode.com/threads/T-41d99b69-5754-4fdf-b06e-a46343fa7485 Co-authored-by: Amp <amp@ampcode.com> * add a level-editor crate * remove redundant worker setup * simplify app setup * add SceneBuilder * separate out default scene implementation in a crate * define default method for MeshBuilder --------- Co-authored-by: Amp <amp@ampcode.com>
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
use core::fmt;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub enum WindowEvent {
|
||||
Resize(ResizeMessage),
|
||||
PointerMove(MouseMessage),
|
||||
PointerClick(MouseMessage),
|
||||
PointerWheel(WheelMessage),
|
||||
Keyboard(KeyboardMessage),
|
||||
}
|
||||
|
||||
// Display for WindowEvent
|
||||
impl fmt::Display for WindowEvent {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
match self {
|
||||
WindowEvent::Resize(msg) => write!(f, "Resize: {:?}", msg),
|
||||
WindowEvent::PointerMove(msg) => write!(f, "PointerMove: {:?}", msg),
|
||||
WindowEvent::PointerClick(msg) => write!(f, "PointerClick: {:?}", msg),
|
||||
WindowEvent::PointerWheel(msg) => write!(f, "PointerWheel: {:?}", msg),
|
||||
WindowEvent::Keyboard(msg) => write!(f, "Keyboard: {:?}", msg),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct ResizeMessage {
|
||||
pub scale_factor: f64,
|
||||
pub width: f64,
|
||||
pub height: f64,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct MouseMessage {
|
||||
pub scale_factor: f64,
|
||||
pub button: f64,
|
||||
pub buttons: u16,
|
||||
pub client_x: f64,
|
||||
pub client_y: f64,
|
||||
pub movement_x: f64,
|
||||
pub movement_y: f64,
|
||||
pub offset_x: f64,
|
||||
pub offset_y: f64,
|
||||
}
|
||||
|
||||
impl MouseMessage {
|
||||
pub fn from_evt(event: web_sys::MouseEvent) -> Self {
|
||||
let window = web_sys::window().unwrap();
|
||||
Self {
|
||||
scale_factor: window.device_pixel_ratio(),
|
||||
button: event.button() as f64,
|
||||
buttons: event.buttons(),
|
||||
client_x: event.client_x() as f64,
|
||||
client_y: event.client_y() as f64,
|
||||
movement_x: event.movement_x() as f64,
|
||||
movement_y: event.movement_y() as f64,
|
||||
offset_x: event.offset_x() as f64,
|
||||
offset_y: event.offset_y() as f64,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct WheelMessage {
|
||||
pub scale_factor: f64,
|
||||
pub delta_x: f64,
|
||||
pub delta_y: f64,
|
||||
pub delta_z: f64,
|
||||
pub delta_mode: u32,
|
||||
pub client_x: f64,
|
||||
pub client_y: f64,
|
||||
}
|
||||
|
||||
impl WheelMessage {
|
||||
pub fn from_evt(event: web_sys::WheelEvent) -> Self {
|
||||
let window = web_sys::window().unwrap();
|
||||
Self {
|
||||
scale_factor: window.device_pixel_ratio(),
|
||||
delta_x: event.delta_x(),
|
||||
delta_y: event.delta_y(),
|
||||
delta_z: event.delta_z(),
|
||||
delta_mode: event.delta_mode(),
|
||||
client_x: event.client_x() as f64,
|
||||
client_y: event.client_y() as f64,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct KeyboardMessage {
|
||||
pub key: String,
|
||||
pub code: String,
|
||||
pub alt_key: bool,
|
||||
pub ctrl_key: bool,
|
||||
pub meta_key: bool,
|
||||
pub shift_key: bool,
|
||||
pub location: u32,
|
||||
pub repeat: bool,
|
||||
}
|
||||
|
||||
impl KeyboardMessage {
|
||||
pub fn from_evt(event: web_sys::KeyboardEvent) -> Self {
|
||||
Self {
|
||||
key: event.key(),
|
||||
code: event.code(),
|
||||
alt_key: event.alt_key(),
|
||||
ctrl_key: event.ctrl_key(),
|
||||
meta_key: event.meta_key(),
|
||||
shift_key: event.shift_key(),
|
||||
location: event.location(),
|
||||
repeat: event.repeat(),
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user