show/hide camera preview image

This commit is contained in:
Dmitry Stepanov
2025-05-07 17:31:30 +03:00
parent cb1e953b0f
commit 61ee35bcc3
2 changed files with 30 additions and 12 deletions
+23 -12
View File
@@ -37,8 +37,10 @@ use crate::{
scene::{camera::Camera, node::Node},
},
scene::{GameScene, Selection},
send_sync_message, Message,
send_sync_message, send_sync_messages, Message,
};
use fyrox::core::algebra::Vector2;
use fyrox::gui::widget::WidgetMessage;
use fyrox::scene::collider::BitMask;
pub struct CameraPreviewControlPanel {
@@ -55,9 +57,8 @@ impl CameraPreviewControlPanel {
let preview_frame;
let window = WindowBuilder::new(
WidgetBuilder::new()
.with_width(200.0)
.with_height(250.0)
.with_name("CameraPanel"),
.with_name("CameraPanel")
.with_min_size(Vector2::new(180.0, 45.0)),
)
.with_title(WindowTitle::text("Camera Preview"))
.with_content(
@@ -182,6 +183,15 @@ impl CameraPreviewControlPanel {
game_scene.preview_camera = node_handle;
send_sync_message(
engine.user_interfaces.first(),
WidgetMessage::visibility(
self.preview_frame,
MessageDirection::ToWidget,
true,
),
);
self.camera_state = Some((node_handle, scene.graph[node_handle].clone_box()));
break;
}
@@ -201,14 +211,15 @@ impl CameraPreviewControlPanel {
game_scene.preview_camera = Handle::NONE;
send_sync_message(
engine.user_interfaces.first(),
ImageMessage::texture(self.preview_frame, MessageDirection::ToWidget, None),
);
send_sync_message(
engine.user_interfaces.first(),
CheckBoxMessage::checked(self.preview, MessageDirection::ToWidget, Some(false)),
let ui = engine.user_interfaces.first();
send_sync_messages(
ui,
[
// Don't keep the render target alive after the preview mode is off.
ImageMessage::texture(self.preview_frame, MessageDirection::ToWidget, None),
CheckBoxMessage::checked(self.preview, MessageDirection::ToWidget, Some(false)),
WidgetMessage::visibility(self.preview_frame, MessageDirection::ToWidget, false),
],
);
}
+7
View File
@@ -210,6 +210,13 @@ pub fn send_sync_message(ui: &UserInterface, mut msg: UiMessage) {
ui.send_message(msg);
}
pub fn send_sync_messages<const N: usize>(ui: &UserInterface, mut messages: [UiMessage; N]) {
for message in &mut messages {
message.flags = MSG_SYNC_FLAG;
}
ui.send_messages(messages);
}
lazy_static! {
static ref EDITOR_TEXTURE_CACHE: Mutex<FxHashMap<usize, TextureResource>> = Default::default();
}