bevyhub_core/render/
screenshot.rs1use bevy::input::keyboard::KeyboardInput;
2use bevy::prelude::*;
3use bevy::render::view::screenshot::save_to_disk;
4use bevy::render::view::screenshot::Screenshot;
5use serde::Deserialize;
6use serde::Serialize;
7
8#[derive(Debug, Clone, Serialize, Deserialize, Event, Reflect)]
9pub struct SaveScreenshot {
10 pub filename: String,
11}
12
13
14pub fn screenshot_on_event(
15 trigger: Trigger<SaveScreenshot>,
16 mut commands: Commands,
17) {
18 let filename = trigger.event().filename.clone();
19 log::info!("Saved screenshot to {}", filename);
20 commands
21 .spawn(Screenshot::primary_window())
22 .observe(save_to_disk(filename));
23}
24
25pub fn screenshot_on_keypress(
27 mut commands: Commands,
28 mut events: EventReader<KeyboardInput>,
30 keys: Res<ButtonInput<KeyCode>>,
31 mut counter: Local<u32>,
32) {
33 if events.read().count() == 0 {
34 return;
35 }
36 if keys.any_pressed([KeyCode::ControlRight, KeyCode::ControlLeft])
37 && keys.just_pressed(KeyCode::KeyS)
38 {
39 #[cfg(not(target_arch = "wasm32"))]
40 std::fs::create_dir_all("target/screenshots").ok();
41 #[cfg(not(target_arch = "wasm32"))]
42 let path = format!("target/screenshots/screenshot-{}.png", *counter);
43 #[cfg(target_arch = "wasm32")]
44 let path = format!("screenshot-{}.png", *counter);
45 *counter += 1;
46 log::info!("Saved screenshot to {}", path);
47 commands
48 .spawn(Screenshot::primary_window())
49 .observe(save_to_disk(path));
50 }
51}