I want to send my EventWriter to a wasm_bindgen, so on js event I can trigger an event and do some stuff.
I'm gettinr error that ev_cursor_moved has lifetime of '1, but needs 'static.
How can I make this work?
fn cursor_event_listener(mut ev_cursor_moved: EventWriter<WindowCursorMovedEvent>) {
if let Some(window) = window() {
let cb_window = window.clone();
let cb = Closure::wrap(Box::new(move |e: JsValue| {
let event: MouseEvent = e.dyn_into().expect("closure input isn't MouseEvent");
let cursor_pos = Vec3::new(event.client_x() as f32, event.client_y() as f32, 0.);
let doc_elemnt = cb_window
.document()
.expect("window missing document?")
.document_element()
.expect("document missing root element");
let window_size = Vec3::new(
doc_elemnt.client_width() as f32,
doc_elemnt.client_height() as f32,
0.,
);
ev_cursor_moved.send(WindowCursorMovedEvent {
0: WindowCursorData {
window_size,
cursor_pos,
},
});
}) as Box<dyn FnMut(JsValue)>);
window
.add_event_listener_with_callback("mousemove", &cb.as_ref().unchecked_ref())
.expect("Failed adding on mousemove event listenter");
cb.forget();
}
}
error: lifetime may not live long enough
--> src/components/threed/camera_animator.rs:209:32
|
206 | fn cursor_event_listener(mut ev_cursor_moved: EventWriter<WindowCurso...
| ------------------- has type `bevy::prelude::Ev
entWriter<'1, WindowCursorMovedEvent>`
...
209 | let cb = Closure::wrap(Box::new(move |e: JsValue| {
| ________________________________^
210 | | let event: MouseEvent = e.dyn_into().expect("closure inpu...
211 | | let cursor_pos = Vec3::new(event.client_x() as f32, event...
212 | | let doc_elemnt = cb_window
... |
227 | | });
228 | | }) as Box<dyn FnMut(JsValue)>);
| |_____________________________________^ cast requires that `'1` must outli
ve `'static`