refactoring window size

This commit is contained in:
artem 2024-02-14 10:24:09 +03:00
parent 86356b3904
commit 2d99a49eda
3 changed files with 51 additions and 21 deletions

View File

@ -2,7 +2,8 @@
use fyrox::{
asset::manager::ResourceManager,
core::pool::Handle,
event::Event,
engine::GraphicsContext,
event::{Event, WindowEvent},
gui::message::UiMessage,
plugin::{Plugin, PluginConstructor, PluginContext, PluginRegistrationContext},
scene::{
@ -14,10 +15,12 @@ use std::path::Path;
mod map;
mod player;
mod enemy;
mod msg;
use map::build_map;
use player::Player;
use enemy::Enemy;
use msg::Message;
pub struct GameConstructor;
@ -60,7 +63,29 @@ impl Plugin for Game {
// Add your global update code here.
}
fn on_os_event(&mut self, _event: &Event<()>, _context: PluginContext) {}
fn on_os_event(&mut self, event: &Event<()>, context: PluginContext) {
if let Event::Resumed {} = event {
if let GraphicsContext::Initialized(ref graphics_context) = context.graphics_context {
let window_size = graphics_context.window.inner_size();
for script_scene in &context.script_processor.scripted_scenes {
script_scene.message_sender.send_global(Message::Resize {
width: window_size.width,
height: window_size.height
});
}
}
}
if let Event::WindowEvent { event, .. } = event {
if let WindowEvent::Resized(size) = event {
for script_scene in &context.script_processor.scripted_scenes {
script_scene.message_sender.send_global(Message::Resize {
width: size.width,
height: size.height
});
}
}
}
}
fn on_ui_message(&mut self, _context: &mut PluginContext, _message: &UiMessage) {
// Handle UI events here.

7
game/src/msg.rs Normal file
View File

@ -0,0 +1,7 @@
#[derive(Debug, Clone)]
pub enum Message {
Resize {
width: u32,
height: u32,
},
}

View File

@ -11,7 +11,6 @@ use fyrox::{
uuid_provider,
visitor::prelude::*,
},
engine::GraphicsContext,
event::{ElementState, Event, TouchPhase, WindowEvent},
keyboard::{KeyCode, PhysicalKey},
scene::{
@ -24,8 +23,9 @@ use fyrox::{
node::Node,
transform::TransformBuilder,
},
script::{ScriptContext, ScriptTrait},
script::{ScriptContext, ScriptTrait, ScriptMessageContext, ScriptMessagePayload},
};
use crate::msg::Message;
#[derive(Visit, Reflect, Debug, Clone, Default)]
pub struct Player {
@ -439,17 +439,24 @@ impl ScriptTrait for Player {
}
// Put start logic - it is called when every other script is already initialized.
fn on_start(&mut self, _context: &mut ScriptContext) {}
fn on_start(&mut self, context: &mut ScriptContext) {
context.message_dispatcher.subscribe_to::<Message>(context.handle);
}
fn on_message(
&mut self,
message: &mut dyn ScriptMessagePayload,
_ctx: &mut ScriptMessageContext,
) {
// React to message.
if let Some(Message::Resize { width, height }) = message.downcast_ref::<Message>() {
self.window_height = height.clone();
self.window_width = width.clone();
}
}
// Called whenever there is an event from OS (mouse click, keypress, etc.)
fn on_os_event(&mut self, event: &Event<()>, context: &mut ScriptContext) {
if let Event::Resumed {} = event {
if let GraphicsContext::Initialized(ref graphics_context) = context.graphics_context {
let window_size = graphics_context.window.inner_size();
self.window_height = window_size.height;
self.window_width = window_size.width;
}
}
if let Event::WindowEvent { event, .. } = event {
if let WindowEvent::KeyboardInput { event, .. } = event {
if let PhysicalKey::Code(keycode) = event.physical_key {
@ -491,15 +498,6 @@ impl ScriptTrait for Player {
_ => {}
}
}
if let WindowEvent::Resized(size) = event {
Log::info(format!(
"Resized xheight{:?}, width {:?}",
size.height, size.width
));
self.window_height = size.height;
self.window_width = size.width;
}
}
}