mirror of
https://github.com/FyroxEngine/Fyrox.git
synced 2026-10-12 02:02:20 +00:00
fixed examples
This commit is contained in:
+16
-17
@@ -13,7 +13,7 @@ use fyrox::{
|
||||
pool::Handle,
|
||||
},
|
||||
engine::{executor::Executor, GraphicsContext, GraphicsContextParams},
|
||||
event::{ElementState, Event, VirtualKeyCode, WindowEvent},
|
||||
event::{ElementState, Event, WindowEvent},
|
||||
event_loop::ControlFlow,
|
||||
gui::{
|
||||
message::MessageDirection,
|
||||
@@ -33,6 +33,7 @@ use fyrox::{
|
||||
},
|
||||
window::WindowAttributes,
|
||||
};
|
||||
use winit::keyboard::KeyCode;
|
||||
|
||||
struct SceneLoader {
|
||||
scene: Scene,
|
||||
@@ -175,26 +176,24 @@ impl Plugin for Game {
|
||||
_control_flow: &mut ControlFlow,
|
||||
) {
|
||||
if let Event::WindowEvent {
|
||||
event: WindowEvent::KeyboardInput { input, .. },
|
||||
event: WindowEvent::KeyboardInput { event: input, .. },
|
||||
..
|
||||
} = event
|
||||
{
|
||||
if let Some(key_code) = input.virtual_keycode {
|
||||
match key_code {
|
||||
VirtualKeyCode::W => {
|
||||
self.input_controller.move_forward = input.state == ElementState::Pressed
|
||||
}
|
||||
VirtualKeyCode::S => {
|
||||
self.input_controller.move_backward = input.state == ElementState::Pressed
|
||||
}
|
||||
VirtualKeyCode::A => {
|
||||
self.input_controller.move_left = input.state == ElementState::Pressed
|
||||
}
|
||||
VirtualKeyCode::D => {
|
||||
self.input_controller.move_right = input.state == ElementState::Pressed
|
||||
}
|
||||
_ => (),
|
||||
match input.physical_key {
|
||||
KeyCode::KeyW => {
|
||||
self.input_controller.move_forward = input.state == ElementState::Pressed
|
||||
}
|
||||
KeyCode::KeyS => {
|
||||
self.input_controller.move_backward = input.state == ElementState::Pressed
|
||||
}
|
||||
KeyCode::KeyA => {
|
||||
self.input_controller.move_left = input.state == ElementState::Pressed
|
||||
}
|
||||
KeyCode::KeyD => {
|
||||
self.input_controller.move_right = input.state == ElementState::Pressed
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+16
-18
@@ -10,7 +10,7 @@ use fyrox::{
|
||||
core::{algebra::Vector3, color::Color, futures::executor::block_on, pool::Handle},
|
||||
engine::{executor::Executor, GraphicsContext, GraphicsContextParams},
|
||||
event::Event,
|
||||
event::{ElementState, VirtualKeyCode, WindowEvent},
|
||||
event::{ElementState, WindowEvent},
|
||||
event_loop::ControlFlow,
|
||||
gui::{
|
||||
message::MessageDirection,
|
||||
@@ -27,6 +27,7 @@ use fyrox::{
|
||||
},
|
||||
window::WindowAttributes,
|
||||
};
|
||||
use winit::keyboard::KeyCode;
|
||||
|
||||
struct SceneLoader {
|
||||
scene: Scene,
|
||||
@@ -114,27 +115,24 @@ impl Plugin for Game {
|
||||
_control_flow: &mut ControlFlow,
|
||||
) {
|
||||
if let Event::WindowEvent {
|
||||
event: WindowEvent::KeyboardInput { input, .. },
|
||||
event: WindowEvent::KeyboardInput { event: input, .. },
|
||||
..
|
||||
} = event
|
||||
{
|
||||
// Handle key input events via `WindowEvent`, not via `DeviceEvent` (#32)
|
||||
if let Some(key_code) = input.virtual_keycode {
|
||||
match key_code {
|
||||
VirtualKeyCode::W => {
|
||||
self.input_controller.move_forward = input.state == ElementState::Pressed
|
||||
}
|
||||
VirtualKeyCode::S => {
|
||||
self.input_controller.move_backward = input.state == ElementState::Pressed
|
||||
}
|
||||
VirtualKeyCode::A => {
|
||||
self.input_controller.move_left = input.state == ElementState::Pressed
|
||||
}
|
||||
VirtualKeyCode::D => {
|
||||
self.input_controller.move_right = input.state == ElementState::Pressed
|
||||
}
|
||||
_ => (),
|
||||
match input.physical_key {
|
||||
KeyCode::KeyW => {
|
||||
self.input_controller.move_forward = input.state == ElementState::Pressed
|
||||
}
|
||||
KeyCode::KeyS => {
|
||||
self.input_controller.move_backward = input.state == ElementState::Pressed
|
||||
}
|
||||
KeyCode::KeyA => {
|
||||
self.input_controller.move_left = input.state == ElementState::Pressed
|
||||
}
|
||||
KeyCode::KeyD => {
|
||||
self.input_controller.move_right = input.state == ElementState::Pressed
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+23
-24
@@ -26,6 +26,7 @@ pub mod shared;
|
||||
|
||||
use crate::shared::{create_ui, fix_shadows_distance, Game, GameScene};
|
||||
use std::time::Instant;
|
||||
use winit::keyboard::KeyCode;
|
||||
|
||||
use fyrox::{
|
||||
core::{
|
||||
@@ -33,7 +34,7 @@ use fyrox::{
|
||||
log::{Log, MessageKind},
|
||||
},
|
||||
engine::GraphicsContext,
|
||||
event::{Event, VirtualKeyCode, WindowEvent},
|
||||
event::{Event, WindowEvent},
|
||||
event_loop::ControlFlow,
|
||||
gui::{
|
||||
message::MessageDirection, progress_bar::ProgressBarMessage, text::TextMessage,
|
||||
@@ -181,13 +182,13 @@ fn main() {
|
||||
println!("{:?}", fyrox::core::profiler::print());
|
||||
}
|
||||
Event::WindowEvent { event, .. } => {
|
||||
match event {
|
||||
match &event {
|
||||
WindowEvent::CloseRequested => *control_flow = ControlFlow::Exit,
|
||||
WindowEvent::Resized(size) => {
|
||||
// It is very important to handle Resized event from window, because
|
||||
// renderer knows nothing about window size - it must be notified
|
||||
// directly when window size has changed.
|
||||
if let Err(e) = game.engine.set_frame_size(size.into()) {
|
||||
if let Err(e) = game.engine.set_frame_size((*size).into()) {
|
||||
Log::writeln(
|
||||
MessageKind::Error,
|
||||
format!("Unable to set frame size: {:?}", e),
|
||||
@@ -215,29 +216,27 @@ fn main() {
|
||||
));
|
||||
}
|
||||
}
|
||||
WindowEvent::KeyboardInput { input, .. } => {
|
||||
if let Some(code) = input.virtual_keycode {
|
||||
// Handle key input events via `WindowEvent`, not via `DeviceEvent` (#32)
|
||||
if let Some(game_scene) = game.game_scene.as_mut() {
|
||||
game_scene.player.handle_key_event(&input, fixed_timestep);
|
||||
}
|
||||
WindowEvent::KeyboardInput { event: input, .. } => {
|
||||
// Handle key input events via `WindowEvent`, not via `DeviceEvent` (#32)
|
||||
if let Some(game_scene) = game.game_scene.as_mut() {
|
||||
game_scene.player.handle_key_event(&input, fixed_timestep);
|
||||
}
|
||||
|
||||
let settings = match code {
|
||||
VirtualKeyCode::Key1 => Some(QualitySettings::ultra()),
|
||||
VirtualKeyCode::Key2 => Some(QualitySettings::high()),
|
||||
VirtualKeyCode::Key3 => Some(QualitySettings::medium()),
|
||||
VirtualKeyCode::Key4 => Some(QualitySettings::low()),
|
||||
_ => None,
|
||||
};
|
||||
let settings = match input.physical_key {
|
||||
KeyCode::Digit1 => Some(QualitySettings::ultra()),
|
||||
KeyCode::Digit2 => Some(QualitySettings::high()),
|
||||
KeyCode::Digit3 => Some(QualitySettings::medium()),
|
||||
KeyCode::Digit4 => Some(QualitySettings::low()),
|
||||
_ => None,
|
||||
};
|
||||
|
||||
if let Some(settings) = settings {
|
||||
if let GraphicsContext::Initialized(ref mut ctx) =
|
||||
game.engine.graphics_context
|
||||
{
|
||||
ctx.renderer
|
||||
.set_quality_settings(&fix_shadows_distance(settings))
|
||||
.unwrap();
|
||||
}
|
||||
if let Some(settings) = settings {
|
||||
if let GraphicsContext::Initialized(ref mut ctx) =
|
||||
game.engine.graphics_context
|
||||
{
|
||||
ctx.renderer
|
||||
.set_quality_settings(&fix_shadows_distance(settings))
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+10
-12
@@ -17,7 +17,7 @@ use fyrox::{
|
||||
pool::Handle,
|
||||
},
|
||||
engine::{executor::Executor, GraphicsContext, GraphicsContextParams},
|
||||
event::{ElementState, Event, VirtualKeyCode, WindowEvent},
|
||||
event::{ElementState, Event, WindowEvent},
|
||||
event_loop::ControlFlow,
|
||||
gui::{
|
||||
grid::{Column, GridBuilder, Row},
|
||||
@@ -32,6 +32,7 @@ use fyrox::{
|
||||
window::WindowAttributes,
|
||||
};
|
||||
use std::sync::{Arc, Mutex};
|
||||
use winit::keyboard::KeyCode;
|
||||
|
||||
use crate::shared::create_camera;
|
||||
|
||||
@@ -327,21 +328,18 @@ impl Plugin for Game {
|
||||
_control_flow: &mut ControlFlow,
|
||||
) {
|
||||
if let Event::WindowEvent {
|
||||
event: WindowEvent::KeyboardInput { input, .. },
|
||||
event: WindowEvent::KeyboardInput { event: input, .. },
|
||||
..
|
||||
} = event
|
||||
{
|
||||
// Handle key input events via `WindowEvent`, not via `DeviceEvent` (#32)
|
||||
if let Some(key_code) = input.virtual_keycode {
|
||||
match key_code {
|
||||
VirtualKeyCode::A => {
|
||||
self.input_controller.rotate_left = input.state == ElementState::Pressed
|
||||
}
|
||||
VirtualKeyCode::D => {
|
||||
self.input_controller.rotate_right = input.state == ElementState::Pressed
|
||||
}
|
||||
_ => (),
|
||||
match input.physical_key {
|
||||
KeyCode::KeyA => {
|
||||
self.input_controller.rotate_left = input.state == ElementState::Pressed
|
||||
}
|
||||
KeyCode::KeyD => {
|
||||
self.input_controller.rotate_right = input.state == ElementState::Pressed
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+10
-11
@@ -11,7 +11,7 @@ use fyrox::{
|
||||
pool::Handle,
|
||||
},
|
||||
engine::{executor::Executor, GraphicsContext, GraphicsContextParams},
|
||||
event::{ElementState, Event, VirtualKeyCode, WindowEvent},
|
||||
event::{ElementState, Event, WindowEvent},
|
||||
event_loop::ControlFlow,
|
||||
gui::{
|
||||
grid::{Column, GridBuilder, Row},
|
||||
@@ -34,6 +34,7 @@ use fyrox::{
|
||||
window::WindowAttributes,
|
||||
};
|
||||
use std::collections::BTreeSet;
|
||||
use winit::keyboard::KeyCode;
|
||||
|
||||
struct GameSceneLoader {
|
||||
scene: Scene,
|
||||
@@ -224,20 +225,18 @@ impl Plugin for Game {
|
||||
_control_flow: &mut ControlFlow,
|
||||
) {
|
||||
if let Event::WindowEvent {
|
||||
event: WindowEvent::KeyboardInput { input, .. },
|
||||
event: WindowEvent::KeyboardInput { event: input, .. },
|
||||
..
|
||||
} = event
|
||||
{
|
||||
if let Some(key_code) = input.virtual_keycode {
|
||||
match key_code {
|
||||
VirtualKeyCode::A => {
|
||||
self.input_controller.rotate_left = input.state == ElementState::Pressed
|
||||
}
|
||||
VirtualKeyCode::D => {
|
||||
self.input_controller.rotate_right = input.state == ElementState::Pressed
|
||||
}
|
||||
_ => (),
|
||||
match input.physical_key {
|
||||
KeyCode::KeyA => {
|
||||
self.input_controller.rotate_left = input.state == ElementState::Pressed
|
||||
}
|
||||
KeyCode::KeyD => {
|
||||
self.input_controller.rotate_right = input.state == ElementState::Pressed
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+10
-11
@@ -14,7 +14,7 @@ use fyrox::{
|
||||
engine::{
|
||||
Engine, EngineInitParams, GraphicsContext, GraphicsContextParams, SerializationContext,
|
||||
},
|
||||
event::{ElementState, Event, VirtualKeyCode, WindowEvent},
|
||||
event::{ElementState, Event, WindowEvent},
|
||||
event_loop::{ControlFlow, EventLoop},
|
||||
gui::{
|
||||
inspector::{
|
||||
@@ -27,12 +27,13 @@ use fyrox::{
|
||||
window::{WindowBuilder, WindowTitle},
|
||||
UiNode,
|
||||
},
|
||||
keyboard::KeyCode,
|
||||
resource::model::{Model, ModelResourceExtension},
|
||||
scene::{node::Node, Scene},
|
||||
utils::translate_event,
|
||||
window::WindowAttributes,
|
||||
};
|
||||
use std::{rc::Rc, sync::Arc, time::Instant};
|
||||
use winit::window::WindowAttributes;
|
||||
|
||||
struct Interface {
|
||||
debug_text: Handle<UiNode>,
|
||||
@@ -248,26 +249,24 @@ fn main() {
|
||||
engine.render().unwrap();
|
||||
}
|
||||
Event::WindowEvent { event, .. } => {
|
||||
match event {
|
||||
match &event {
|
||||
WindowEvent::CloseRequested => *control_flow = ControlFlow::Exit,
|
||||
WindowEvent::Resized(size) => {
|
||||
// It is very important to handle Resized event from window, because
|
||||
// renderer knows nothing about window size - it must be notified
|
||||
// directly when window size has changed.
|
||||
if let Err(e) = engine.set_frame_size(size.into()) {
|
||||
if let Err(e) = engine.set_frame_size((*size).into()) {
|
||||
Log::writeln(
|
||||
MessageKind::Error,
|
||||
format!("Unable to set frame size: {:?}", e),
|
||||
);
|
||||
}
|
||||
}
|
||||
WindowEvent::KeyboardInput { input, .. } => {
|
||||
if let Some(key_code) = input.virtual_keycode {
|
||||
if input.state == ElementState::Pressed
|
||||
&& key_code == VirtualKeyCode::Escape
|
||||
{
|
||||
*control_flow = ControlFlow::Exit;
|
||||
}
|
||||
WindowEvent::KeyboardInput { event: input, .. } => {
|
||||
if input.state == ElementState::Pressed
|
||||
&& input.physical_key == KeyCode::Escape
|
||||
{
|
||||
*control_flow = ControlFlow::Exit;
|
||||
}
|
||||
}
|
||||
_ => (),
|
||||
|
||||
+10
-11
@@ -19,7 +19,7 @@ use fyrox::{
|
||||
sstorage::ImmutableString,
|
||||
},
|
||||
engine::{executor::Executor, GraphicsContext, GraphicsContextParams},
|
||||
event::{ElementState, Event, VirtualKeyCode, WindowEvent},
|
||||
event::{ElementState, Event, WindowEvent},
|
||||
event_loop::ControlFlow,
|
||||
gui::{
|
||||
message::MessageDirection,
|
||||
@@ -45,6 +45,7 @@ use fyrox::{
|
||||
},
|
||||
window::WindowAttributes,
|
||||
};
|
||||
use winit::keyboard::KeyCode;
|
||||
|
||||
struct SceneLoader {
|
||||
scene: Scene,
|
||||
@@ -237,20 +238,18 @@ impl Plugin for Game {
|
||||
_control_flow: &mut ControlFlow,
|
||||
) {
|
||||
if let Event::WindowEvent {
|
||||
event: WindowEvent::KeyboardInput { input, .. },
|
||||
event: WindowEvent::KeyboardInput { event: input, .. },
|
||||
..
|
||||
} = event
|
||||
{
|
||||
if let Some(key_code) = input.virtual_keycode {
|
||||
match key_code {
|
||||
VirtualKeyCode::A => {
|
||||
self.input_controller.rotate_left = input.state == ElementState::Pressed
|
||||
}
|
||||
VirtualKeyCode::D => {
|
||||
self.input_controller.rotate_right = input.state == ElementState::Pressed
|
||||
}
|
||||
_ => (),
|
||||
match input.physical_key {
|
||||
KeyCode::KeyA => {
|
||||
self.input_controller.rotate_left = input.state == ElementState::Pressed
|
||||
}
|
||||
KeyCode::KeyD => {
|
||||
self.input_controller.rotate_right = input.state == ElementState::Pressed
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+12
-18
@@ -21,7 +21,7 @@ use fyrox::{
|
||||
engine::{
|
||||
Engine, EngineInitParams, GraphicsContext, GraphicsContextParams, SerializationContext,
|
||||
},
|
||||
event::{ElementState, Event, VirtualKeyCode, WindowEvent},
|
||||
event::{ElementState, Event, WindowEvent},
|
||||
event_loop::{ControlFlow, EventLoop},
|
||||
gui::{
|
||||
button::{ButtonBuilder, ButtonMessage},
|
||||
@@ -47,6 +47,7 @@ use std::{
|
||||
sync::{Arc, Mutex},
|
||||
time::Instant,
|
||||
};
|
||||
use winit::keyboard::KeyCode;
|
||||
|
||||
const LIGHTMAP_SCENE_PATH: &str = "examples/data/lightmap_scene.rgs";
|
||||
|
||||
@@ -550,13 +551,13 @@ fn main() {
|
||||
engine.render().unwrap();
|
||||
}
|
||||
Event::WindowEvent { event, .. } => {
|
||||
match event {
|
||||
match &event {
|
||||
WindowEvent::CloseRequested => *control_flow = ControlFlow::Exit,
|
||||
WindowEvent::Resized(size) => {
|
||||
// It is very important to handle Resized event from window, because
|
||||
// renderer knows nothing about window size - it must be notified
|
||||
// directly when window size has changed.
|
||||
if let Err(e) = engine.set_frame_size(size.into()) {
|
||||
if let Err(e) = engine.set_frame_size((*size).into()) {
|
||||
Log::writeln(
|
||||
MessageKind::Error,
|
||||
format!("Unable to set frame size: {:?}", e),
|
||||
@@ -579,22 +580,15 @@ fn main() {
|
||||
));
|
||||
}
|
||||
}
|
||||
WindowEvent::KeyboardInput { input, .. } => {
|
||||
// Handle key input events via `WindowEvent`, not via `DeviceEvent` (#32)
|
||||
if let Some(key_code) = input.virtual_keycode {
|
||||
match key_code {
|
||||
VirtualKeyCode::A => {
|
||||
input_controller.rotate_left =
|
||||
input.state == ElementState::Pressed
|
||||
}
|
||||
VirtualKeyCode::D => {
|
||||
input_controller.rotate_right =
|
||||
input.state == ElementState::Pressed
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
WindowEvent::KeyboardInput { event: input, .. } => match input.physical_key {
|
||||
KeyCode::KeyA => {
|
||||
input_controller.rotate_left = input.state == ElementState::Pressed
|
||||
}
|
||||
}
|
||||
KeyCode::KeyD => {
|
||||
input_controller.rotate_right = input.state == ElementState::Pressed
|
||||
}
|
||||
_ => (),
|
||||
},
|
||||
_ => (),
|
||||
}
|
||||
|
||||
|
||||
+32
-30
@@ -20,7 +20,7 @@ use fyrox::{
|
||||
engine::{
|
||||
Engine, EngineInitParams, GraphicsContext, GraphicsContextParams, SerializationContext,
|
||||
},
|
||||
event::{ElementState, Event, VirtualKeyCode, WindowEvent},
|
||||
event::{ElementState, Event, WindowEvent},
|
||||
event_loop::{ControlFlow, EventLoop},
|
||||
gui::{
|
||||
message::MessageDirection,
|
||||
@@ -28,6 +28,7 @@ use fyrox::{
|
||||
widget::WidgetBuilder,
|
||||
BuildContext, UiNode,
|
||||
},
|
||||
keyboard::KeyCode,
|
||||
resource::model::{Model, ModelResourceExtension},
|
||||
scene::{
|
||||
base::{LevelOfDetail, LodControlledObject, LodGroup},
|
||||
@@ -35,9 +36,9 @@ use fyrox::{
|
||||
Scene,
|
||||
},
|
||||
utils::translate_event,
|
||||
window::WindowAttributes,
|
||||
};
|
||||
use std::time::Instant;
|
||||
use winit::window::WindowAttributes;
|
||||
|
||||
fn create_ui(ctx: &mut BuildContext) -> Handle<UiNode> {
|
||||
TextBuilder::new(WidgetBuilder::new()).build(ctx)
|
||||
@@ -207,8 +208,6 @@ fn main() {
|
||||
previous = Instant::now();
|
||||
lag += elapsed.as_secs_f32();
|
||||
while lag >= fixed_timestep {
|
||||
|
||||
|
||||
// ************************
|
||||
// Put your game logic here.
|
||||
// ************************
|
||||
@@ -232,16 +231,22 @@ fn main() {
|
||||
|
||||
scene.graph[model_handle]
|
||||
.local_transform_mut()
|
||||
.set_rotation(UnitQuaternion::from_axis_angle(&Vector3::y_axis(), model_angle));
|
||||
.set_rotation(UnitQuaternion::from_axis_angle(
|
||||
&Vector3::y_axis(),
|
||||
model_angle,
|
||||
));
|
||||
|
||||
scene.graph[camera]
|
||||
.local_transform_mut()
|
||||
.set_position(Vector3::new(0.0, 1.5, -distance));
|
||||
|
||||
if let GraphicsContext::Initialized(ref ctx) =engine.graphics_context {
|
||||
if let GraphicsContext::Initialized(ref ctx) = engine.graphics_context {
|
||||
let fps = ctx.renderer.get_statistics().frames_per_second;
|
||||
let text = format!(
|
||||
"Example 08 - Level of Detail\nUse [A][D] keys to rotate model, [W][S] to zoom in/out.\nFPS: {}\nTriangles rendered: {}",
|
||||
"Example 08 - Level of Detail\n\
|
||||
Use [A][D] keys to rotate model, \
|
||||
[W][S] to zoom in/out.\nFPS: {}\n\
|
||||
Triangles rendered: {}",
|
||||
fps,
|
||||
ctx.renderer.get_statistics().geometry.triangles_rendered
|
||||
);
|
||||
@@ -284,37 +289,34 @@ fn main() {
|
||||
engine.render().unwrap();
|
||||
}
|
||||
Event::WindowEvent { event, .. } => {
|
||||
match event {
|
||||
match &event {
|
||||
WindowEvent::CloseRequested => *control_flow = ControlFlow::Exit,
|
||||
WindowEvent::Resized(size) => {
|
||||
// It is very important to handle Resized event from window, because
|
||||
// renderer knows nothing about window size - it must be notified
|
||||
// directly when window size has changed.
|
||||
if let Err(e) = engine.set_frame_size(size.into()) {
|
||||
Log::writeln(MessageKind::Error, format!("Unable to set frame size: {:?}", e));
|
||||
if let Err(e) = engine.set_frame_size((*size).into()) {
|
||||
Log::writeln(
|
||||
MessageKind::Error,
|
||||
format!("Unable to set frame size: {:?}", e),
|
||||
);
|
||||
}
|
||||
}
|
||||
WindowEvent::KeyboardInput { input, .. } => {
|
||||
if let Some(key_code) = input.virtual_keycode {
|
||||
match key_code {
|
||||
VirtualKeyCode::A => {
|
||||
input_controller.rotate_left =
|
||||
input.state == ElementState::Pressed
|
||||
}
|
||||
VirtualKeyCode::D => {
|
||||
input_controller.rotate_right =
|
||||
input.state == ElementState::Pressed
|
||||
}
|
||||
VirtualKeyCode::W => {
|
||||
input_controller.forward = input.state == ElementState::Pressed
|
||||
}
|
||||
VirtualKeyCode::S => {
|
||||
input_controller.backward = input.state == ElementState::Pressed
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
WindowEvent::KeyboardInput { event: input, .. } => match input.physical_key {
|
||||
KeyCode::KeyA => {
|
||||
input_controller.rotate_left = input.state == ElementState::Pressed
|
||||
}
|
||||
}
|
||||
KeyCode::KeyD => {
|
||||
input_controller.rotate_right = input.state == ElementState::Pressed
|
||||
}
|
||||
KeyCode::KeyW => {
|
||||
input_controller.forward = input.state == ElementState::Pressed
|
||||
}
|
||||
KeyCode::KeyS => {
|
||||
input_controller.backward = input.state == ElementState::Pressed
|
||||
}
|
||||
_ => (),
|
||||
},
|
||||
_ => (),
|
||||
}
|
||||
|
||||
|
||||
+13
-21
@@ -7,7 +7,6 @@
|
||||
pub mod shared;
|
||||
|
||||
use crate::shared::create_camera;
|
||||
use fyrox::resource::model::{Model, ModelResourceExtension};
|
||||
use fyrox::{
|
||||
asset::manager::ResourceManager,
|
||||
core::{
|
||||
@@ -20,7 +19,7 @@ use fyrox::{
|
||||
},
|
||||
dpi::LogicalPosition,
|
||||
engine::{executor::Executor, GraphicsContext, GraphicsContextParams},
|
||||
event::{ElementState, Event, VirtualKeyCode, WindowEvent},
|
||||
event::{ElementState, Event, WindowEvent},
|
||||
event_loop::ControlFlow,
|
||||
gui::{
|
||||
message::MessageDirection,
|
||||
@@ -28,16 +27,16 @@ use fyrox::{
|
||||
widget::WidgetBuilder,
|
||||
BuildContext, UiNode,
|
||||
},
|
||||
material::SharedMaterial,
|
||||
material::{Material, PropertyValue},
|
||||
keyboard::KeyCode,
|
||||
material::{Material, PropertyValue, SharedMaterial},
|
||||
plugin::{Plugin, PluginConstructor, PluginContext},
|
||||
scene::mesh::surface::SurfaceSharedData,
|
||||
resource::model::{Model, ModelResourceExtension},
|
||||
scene::{
|
||||
base::BaseBuilder,
|
||||
debug::Line,
|
||||
graph::physics::{Intersection, RayCastOptions},
|
||||
mesh::{
|
||||
surface::{SurfaceBuilder, SurfaceData},
|
||||
surface::{SurfaceBuilder, SurfaceData, SurfaceSharedData},
|
||||
MeshBuilder,
|
||||
},
|
||||
node::Node,
|
||||
@@ -239,22 +238,15 @@ impl Plugin for Game {
|
||||
) {
|
||||
if let Event::WindowEvent { event, .. } = event {
|
||||
match event {
|
||||
WindowEvent::KeyboardInput { input, .. } => {
|
||||
// Handle key input events via `WindowEvent`, not via `DeviceEvent` (#32)
|
||||
if let Some(key_code) = input.virtual_keycode {
|
||||
match key_code {
|
||||
VirtualKeyCode::A => {
|
||||
self.input_controller.rotate_left =
|
||||
input.state == ElementState::Pressed
|
||||
}
|
||||
VirtualKeyCode::D => {
|
||||
self.input_controller.rotate_right =
|
||||
input.state == ElementState::Pressed
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
WindowEvent::KeyboardInput { event: input, .. } => match input.physical_key {
|
||||
KeyCode::KeyA => {
|
||||
self.input_controller.rotate_left = input.state == ElementState::Pressed
|
||||
}
|
||||
}
|
||||
KeyCode::KeyD => {
|
||||
self.input_controller.rotate_right = input.state == ElementState::Pressed
|
||||
}
|
||||
_ => (),
|
||||
},
|
||||
WindowEvent::CursorMoved { position, .. } => {
|
||||
if let GraphicsContext::Initialized(ref graphics_context) =
|
||||
context.graphics_context
|
||||
|
||||
+65
-55
@@ -26,18 +26,18 @@ use fyrox::{
|
||||
visitor::{Visit, VisitResult, Visitor},
|
||||
},
|
||||
engine::GraphicsContext,
|
||||
event::{Event, VirtualKeyCode, WindowEvent},
|
||||
event::{Event, WindowEvent},
|
||||
event_loop::ControlFlow,
|
||||
gui::{
|
||||
message::MessageDirection, progress_bar::ProgressBarMessage, text::TextMessage,
|
||||
widget::WidgetMessage,
|
||||
},
|
||||
keyboard::KeyCode,
|
||||
renderer::QualitySettings,
|
||||
scene::SceneLoader,
|
||||
utils::translate_event,
|
||||
};
|
||||
use std::path::Path;
|
||||
use std::time::Instant;
|
||||
use std::{path::Path, time::Instant};
|
||||
|
||||
// Start implementing Visit trait for simple types which are used by more complex.
|
||||
// At first implement trait for LocomotionMachine.
|
||||
@@ -171,7 +171,6 @@ fn main() {
|
||||
previous = Instant::now();
|
||||
lag += elapsed.as_secs_f32();
|
||||
while lag >= fixed_timestep {
|
||||
|
||||
// ************************
|
||||
// Put your game logic here.
|
||||
// ************************
|
||||
@@ -236,7 +235,9 @@ fn main() {
|
||||
if let GraphicsContext::Initialized(ref ctx) = game.engine.graphics_context {
|
||||
let fps = ctx.renderer.get_statistics().frames_per_second;
|
||||
let debug_text = format!(
|
||||
"Example 06 - Save/load\n[W][S][A][D] - walk, [SPACE] - jump.\nFPS: {}\nUse [1][2][3][4] to select graphics quality.\nUse F5 to save game, F9 to load.",
|
||||
"Example 06 - Save/load\n[W][S][A][D] - walk, \
|
||||
[SPACE] - jump.\nFPS: {}\nUse [1][2][3][4] to select \
|
||||
graphics quality.\nUse F5 to save game, F9 to load.",
|
||||
fps
|
||||
);
|
||||
game.engine.user_interface.send_message(TextMessage::text(
|
||||
@@ -257,7 +258,8 @@ fn main() {
|
||||
// ************************
|
||||
}
|
||||
|
||||
game.engine.update(fixed_timestep, control_flow, &mut lag, Default::default());
|
||||
game.engine
|
||||
.update(fixed_timestep, control_flow, &mut lag, Default::default());
|
||||
|
||||
lag -= fixed_timestep;
|
||||
}
|
||||
@@ -268,7 +270,9 @@ fn main() {
|
||||
}
|
||||
}
|
||||
Event::Resumed => {
|
||||
game.engine.initialize_graphics_context(window_target).unwrap();
|
||||
game.engine
|
||||
.initialize_graphics_context(window_target)
|
||||
.unwrap();
|
||||
}
|
||||
Event::Suspended => {
|
||||
game.engine.destroy_graphics_context().unwrap();
|
||||
@@ -281,67 +285,71 @@ fn main() {
|
||||
println!("{:?}", fyrox::core::profiler::print());
|
||||
}
|
||||
Event::WindowEvent { event, .. } => {
|
||||
match event {
|
||||
match &event {
|
||||
WindowEvent::CloseRequested => *control_flow = ControlFlow::Exit,
|
||||
WindowEvent::Resized(size) => {
|
||||
// It is very important to handle Resized event from window, because
|
||||
// renderer knows nothing about window size - it must be notified
|
||||
// directly when window size has changed.
|
||||
if let Err(e) = game.engine.set_frame_size(size.into()) {
|
||||
Log::writeln(MessageKind::Error, format!("Unable to set frame size: {:?}", e));
|
||||
if let Err(e) = game.engine.set_frame_size((*size).into()) {
|
||||
Log::writeln(
|
||||
MessageKind::Error,
|
||||
format!("Unable to set frame size: {:?}", e),
|
||||
);
|
||||
}
|
||||
|
||||
// Root UI node should be resized too, otherwise progress bar will stay
|
||||
// in wrong position after resize.
|
||||
if let GraphicsContext::Initialized(ref ctx) = game.engine.graphics_context {
|
||||
if let GraphicsContext::Initialized(ref ctx) = game.engine.graphics_context
|
||||
{
|
||||
let size = size.to_logical(ctx.window.scale_factor());
|
||||
game.engine.user_interface.send_message(WidgetMessage::width(
|
||||
interface.root,
|
||||
MessageDirection::ToWidget,
|
||||
size.width,
|
||||
));
|
||||
game.engine.user_interface.send_message(WidgetMessage::height(
|
||||
interface.root,
|
||||
MessageDirection::ToWidget,
|
||||
size.height,
|
||||
));
|
||||
game.engine
|
||||
.user_interface
|
||||
.send_message(WidgetMessage::width(
|
||||
interface.root,
|
||||
MessageDirection::ToWidget,
|
||||
size.width,
|
||||
));
|
||||
game.engine
|
||||
.user_interface
|
||||
.send_message(WidgetMessage::height(
|
||||
interface.root,
|
||||
MessageDirection::ToWidget,
|
||||
size.height,
|
||||
));
|
||||
}
|
||||
}
|
||||
WindowEvent::KeyboardInput { input, .. } => {
|
||||
if let Some(code) = input.virtual_keycode {
|
||||
// Handle key input events via `WindowEvent`, not via `DeviceEvent` (#32)
|
||||
if let Some(game_scene) = game.game_scene.as_mut() {
|
||||
game_scene.player.handle_key_event(&input, fixed_timestep);
|
||||
}
|
||||
WindowEvent::KeyboardInput { event: input, .. } => {
|
||||
if let Some(game_scene) = game.game_scene.as_mut() {
|
||||
game_scene.player.handle_key_event(&input, fixed_timestep);
|
||||
}
|
||||
|
||||
let settings = match code {
|
||||
VirtualKeyCode::Key1 => Some(QualitySettings::ultra()),
|
||||
VirtualKeyCode::Key2 => Some(QualitySettings::high()),
|
||||
VirtualKeyCode::Key3 => Some(QualitySettings::medium()),
|
||||
VirtualKeyCode::Key4 => Some(QualitySettings::low()),
|
||||
_ => None
|
||||
let settings = match input.physical_key {
|
||||
KeyCode::Digit1 => Some(QualitySettings::ultra()),
|
||||
KeyCode::Digit2 => Some(QualitySettings::high()),
|
||||
KeyCode::Digit3 => Some(QualitySettings::medium()),
|
||||
KeyCode::Digit4 => Some(QualitySettings::low()),
|
||||
_ => None,
|
||||
};
|
||||
|
||||
if let Some(settings) = settings {
|
||||
if let GraphicsContext::Initialized(ref mut ctx) =
|
||||
game.engine.graphics_context
|
||||
{
|
||||
ctx.renderer
|
||||
.set_quality_settings(&fix_shadows_distance(settings))
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
// Prevent saving/loading while example is starting.
|
||||
if game.game_scene.is_some() {
|
||||
// Save/load bound to classic F5 and F9 keys.
|
||||
match input.physical_key {
|
||||
KeyCode::F5 => save(&mut game),
|
||||
KeyCode::F9 => block_on(load(&mut game)),
|
||||
_ => (),
|
||||
};
|
||||
|
||||
if let Some(settings) = settings {
|
||||
if let GraphicsContext::Initialized(ref mut ctx) = game.engine.graphics_context {
|
||||
ctx
|
||||
.renderer
|
||||
.set_quality_settings(&fix_shadows_distance(settings))
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
// Prevent saving/loading while example is starting.
|
||||
if game.game_scene.is_some() {
|
||||
// Save/load bound to classic F5 and F9 keys.
|
||||
match code {
|
||||
VirtualKeyCode::F5 => save(&mut game),
|
||||
VirtualKeyCode::F9 =>
|
||||
block_on(load(&mut game))
|
||||
,
|
||||
_ => ()
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => (),
|
||||
@@ -356,7 +364,9 @@ fn main() {
|
||||
}
|
||||
Event::DeviceEvent { event, .. } => {
|
||||
if let Some(game_scene) = game.game_scene.as_mut() {
|
||||
game_scene.player.handle_device_event(&event, fixed_timestep);
|
||||
game_scene
|
||||
.player
|
||||
.handle_device_event(&event, fixed_timestep);
|
||||
}
|
||||
}
|
||||
_ => *control_flow = ControlFlow::Poll,
|
||||
|
||||
+13
-19
@@ -20,7 +20,7 @@ use fyrox::{
|
||||
engine::{
|
||||
Engine, EngineInitParams, GraphicsContext, GraphicsContextParams, SerializationContext,
|
||||
},
|
||||
event::{ElementState, Event, VirtualKeyCode, WindowEvent},
|
||||
event::{ElementState, Event, WindowEvent},
|
||||
event_loop::{ControlFlow, EventLoop},
|
||||
gui::{
|
||||
message::MessageDirection,
|
||||
@@ -28,12 +28,13 @@ use fyrox::{
|
||||
widget::WidgetBuilder,
|
||||
BuildContext, UiNode,
|
||||
},
|
||||
keyboard::KeyCode,
|
||||
resource::model::{Model, ModelResourceExtension},
|
||||
scene::{base::BaseBuilder, node::Node, pivot::PivotBuilder, Scene},
|
||||
utils::translate_event,
|
||||
window::WindowAttributes,
|
||||
};
|
||||
use std::{sync::Arc, time::Instant};
|
||||
use winit::window::WindowAttributes;
|
||||
|
||||
fn create_ui(ctx: &mut BuildContext) -> Handle<UiNode> {
|
||||
TextBuilder::new(WidgetBuilder::new()).build(ctx)
|
||||
@@ -202,35 +203,28 @@ fn main() {
|
||||
engine.render().unwrap();
|
||||
}
|
||||
Event::WindowEvent { event, .. } => {
|
||||
match event {
|
||||
match &event {
|
||||
WindowEvent::CloseRequested => *control_flow = ControlFlow::Exit,
|
||||
WindowEvent::Resized(size) => {
|
||||
// It is very important to handle Resized event from window, because
|
||||
// renderer knows nothing about window size - it must be notified
|
||||
// directly when window size has changed.
|
||||
if let Err(e) = engine.set_frame_size(size.into()) {
|
||||
if let Err(e) = engine.set_frame_size((*size).into()) {
|
||||
Log::writeln(
|
||||
MessageKind::Error,
|
||||
format!("Unable to set frame size: {:?}", e),
|
||||
);
|
||||
}
|
||||
}
|
||||
WindowEvent::KeyboardInput { input, .. } => {
|
||||
// Handle key input events via `WindowEvent`, not via `DeviceEvent` (#32)
|
||||
if let Some(key_code) = input.virtual_keycode {
|
||||
match key_code {
|
||||
VirtualKeyCode::A => {
|
||||
input_controller.rotate_left =
|
||||
input.state == ElementState::Pressed
|
||||
}
|
||||
VirtualKeyCode::D => {
|
||||
input_controller.rotate_right =
|
||||
input.state == ElementState::Pressed
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
WindowEvent::KeyboardInput { event: input, .. } => match input.physical_key {
|
||||
KeyCode::KeyA => {
|
||||
input_controller.rotate_left = input.state == ElementState::Pressed
|
||||
}
|
||||
}
|
||||
KeyCode::KeyD => {
|
||||
input_controller.rotate_right = input.state == ElementState::Pressed
|
||||
}
|
||||
_ => (),
|
||||
},
|
||||
_ => (),
|
||||
}
|
||||
|
||||
|
||||
+10
-17
@@ -21,7 +21,7 @@ use fyrox::{
|
||||
uuid::{uuid, Uuid},
|
||||
},
|
||||
engine::{Engine, EngineInitParams, SerializationContext},
|
||||
event::{DeviceEvent, ElementState, VirtualKeyCode},
|
||||
event::{DeviceEvent, ElementState},
|
||||
event_loop::EventLoop,
|
||||
gui::{
|
||||
formatted_text::WrapMode,
|
||||
@@ -32,6 +32,7 @@ use fyrox::{
|
||||
HorizontalAlignment, Thickness, VerticalAlignment,
|
||||
},
|
||||
gui::{BuildContext, UiNode},
|
||||
keyboard::KeyCode,
|
||||
renderer::QualitySettings,
|
||||
resource::texture::TextureWrapMode,
|
||||
scene::{
|
||||
@@ -758,22 +759,14 @@ impl Player {
|
||||
}
|
||||
}
|
||||
|
||||
pub fn handle_key_event(&mut self, key: &fyrox::event::KeyboardInput, _dt: f32) {
|
||||
if let Some(key_code) = key.virtual_keycode {
|
||||
match key_code {
|
||||
VirtualKeyCode::W => {
|
||||
self.controller.walk_forward = key.state == ElementState::Pressed
|
||||
}
|
||||
VirtualKeyCode::S => {
|
||||
self.controller.walk_backward = key.state == ElementState::Pressed
|
||||
}
|
||||
VirtualKeyCode::A => self.controller.walk_left = key.state == ElementState::Pressed,
|
||||
VirtualKeyCode::D => {
|
||||
self.controller.walk_right = key.state == ElementState::Pressed
|
||||
}
|
||||
VirtualKeyCode::Space => self.controller.jump = key.state == ElementState::Pressed,
|
||||
_ => (),
|
||||
}
|
||||
pub fn handle_key_event(&mut self, key: &fyrox::event::KeyEvent, _dt: f32) {
|
||||
match key.physical_key {
|
||||
KeyCode::KeyW => self.controller.walk_forward = key.state == ElementState::Pressed,
|
||||
KeyCode::KeyS => self.controller.walk_backward = key.state == ElementState::Pressed,
|
||||
KeyCode::KeyA => self.controller.walk_left = key.state == ElementState::Pressed,
|
||||
KeyCode::KeyD => self.controller.walk_right = key.state == ElementState::Pressed,
|
||||
KeyCode::Space => self.controller.jump = key.state == ElementState::Pressed,
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+10
-11
@@ -18,7 +18,7 @@ use fyrox::{
|
||||
sstorage::ImmutableString,
|
||||
},
|
||||
engine::{executor::Executor, GraphicsContext, GraphicsContextParams},
|
||||
event::{ElementState, Event, VirtualKeyCode, WindowEvent},
|
||||
event::{ElementState, Event, WindowEvent},
|
||||
event_loop::ControlFlow,
|
||||
gui::{
|
||||
message::MessageDirection,
|
||||
@@ -41,6 +41,7 @@ use fyrox::{
|
||||
},
|
||||
window::WindowAttributes,
|
||||
};
|
||||
use winit::keyboard::KeyCode;
|
||||
|
||||
struct GameSceneLoader {
|
||||
scene: Scene,
|
||||
@@ -193,20 +194,18 @@ impl Plugin for Game {
|
||||
_control_flow: &mut ControlFlow,
|
||||
) {
|
||||
if let Event::WindowEvent {
|
||||
event: WindowEvent::KeyboardInput { input, .. },
|
||||
event: WindowEvent::KeyboardInput { event: input, .. },
|
||||
..
|
||||
} = event
|
||||
{
|
||||
if let Some(key_code) = input.virtual_keycode {
|
||||
match key_code {
|
||||
VirtualKeyCode::A => {
|
||||
self.input_controller.rotate_left = input.state == ElementState::Pressed
|
||||
}
|
||||
VirtualKeyCode::D => {
|
||||
self.input_controller.rotate_right = input.state == ElementState::Pressed
|
||||
}
|
||||
_ => (),
|
||||
match input.physical_key {
|
||||
KeyCode::KeyA => {
|
||||
self.input_controller.rotate_left = input.state == ElementState::Pressed
|
||||
}
|
||||
KeyCode::KeyD => {
|
||||
self.input_controller.rotate_right = input.state == ElementState::Pressed
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+23
-24
@@ -17,7 +17,7 @@ use fyrox::{
|
||||
uuid::{uuid, Uuid},
|
||||
},
|
||||
engine::GraphicsContext,
|
||||
event::{Event, VirtualKeyCode, WindowEvent},
|
||||
event::{Event, WindowEvent},
|
||||
event_loop::ControlFlow,
|
||||
gui::{
|
||||
message::MessageDirection, progress_bar::ProgressBarMessage, text::TextMessage,
|
||||
@@ -36,6 +36,7 @@ use fyrox::{
|
||||
use fyrox_sound::buffer::SoundBuffer;
|
||||
use fyrox_sound::bus::AudioBusGraph;
|
||||
use std::time::Instant;
|
||||
use winit::keyboard::KeyCode;
|
||||
|
||||
const FOOTSTEP_SIGNAL: Uuid = uuid!("3e536261-9edf-4436-bba0-11173e61c8e9");
|
||||
|
||||
@@ -282,13 +283,13 @@ fn main() {
|
||||
println!("{:?}", fyrox::core::profiler::print());
|
||||
}
|
||||
Event::WindowEvent { event, .. } => {
|
||||
match event {
|
||||
match &event {
|
||||
WindowEvent::CloseRequested => *control_flow = ControlFlow::Exit,
|
||||
WindowEvent::Resized(size) => {
|
||||
// It is very important to handle Resized event from window, because
|
||||
// renderer knows nothing about window size - it must be notified
|
||||
// directly when window size has changed.
|
||||
if let Err(e) = game.engine.set_frame_size(size.into()) {
|
||||
if let Err(e) = game.engine.set_frame_size((*size).into()) {
|
||||
Log::writeln(
|
||||
MessageKind::Error,
|
||||
format!("Unable to set frame size: {:?}", e),
|
||||
@@ -316,29 +317,27 @@ fn main() {
|
||||
));
|
||||
}
|
||||
}
|
||||
WindowEvent::KeyboardInput { input, .. } => {
|
||||
if let Some(code) = input.virtual_keycode {
|
||||
// Handle key input events via `WindowEvent`, not via `DeviceEvent` (#32)
|
||||
if let Some(game_scene) = game.game_scene.as_mut() {
|
||||
game_scene.player.handle_key_event(&input, fixed_timestep);
|
||||
}
|
||||
WindowEvent::KeyboardInput { event: input, .. } => {
|
||||
// Handle key input events via `WindowEvent`, not via `DeviceEvent` (#32)
|
||||
if let Some(game_scene) = game.game_scene.as_mut() {
|
||||
game_scene.player.handle_key_event(&input, fixed_timestep);
|
||||
}
|
||||
|
||||
let settings = match code {
|
||||
VirtualKeyCode::Key1 => Some(QualitySettings::ultra()),
|
||||
VirtualKeyCode::Key2 => Some(QualitySettings::high()),
|
||||
VirtualKeyCode::Key3 => Some(QualitySettings::medium()),
|
||||
VirtualKeyCode::Key4 => Some(QualitySettings::low()),
|
||||
_ => None,
|
||||
};
|
||||
let settings = match input.physical_key {
|
||||
KeyCode::Digit1 => Some(QualitySettings::ultra()),
|
||||
KeyCode::Digit2 => Some(QualitySettings::high()),
|
||||
KeyCode::Digit3 => Some(QualitySettings::medium()),
|
||||
KeyCode::Digit4 => Some(QualitySettings::low()),
|
||||
_ => None,
|
||||
};
|
||||
|
||||
if let Some(settings) = settings {
|
||||
if let GraphicsContext::Initialized(ref mut ctx) =
|
||||
game.engine.graphics_context
|
||||
{
|
||||
ctx.renderer
|
||||
.set_quality_settings(&fix_shadows_distance(settings))
|
||||
.unwrap();
|
||||
}
|
||||
if let Some(settings) = settings {
|
||||
if let GraphicsContext::Initialized(ref mut ctx) =
|
||||
game.engine.graphics_context
|
||||
{
|
||||
ctx.renderer
|
||||
.set_quality_settings(&fix_shadows_distance(settings))
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+10
-11
@@ -16,7 +16,7 @@ use fyrox::{
|
||||
TypeUuidProvider,
|
||||
},
|
||||
engine::{executor::Executor, GraphicsContext, GraphicsContextParams},
|
||||
event::{ElementState, Event, VirtualKeyCode, WindowEvent},
|
||||
event::{ElementState, Event, WindowEvent},
|
||||
event_loop::ControlFlow,
|
||||
gui::{
|
||||
message::MessageDirection,
|
||||
@@ -37,6 +37,7 @@ use fyrox::{
|
||||
},
|
||||
window::WindowAttributes,
|
||||
};
|
||||
use winit::keyboard::KeyCode;
|
||||
|
||||
struct SceneLoader {
|
||||
scene: Scene,
|
||||
@@ -223,21 +224,19 @@ impl Plugin for Game {
|
||||
_control_flow: &mut ControlFlow,
|
||||
) {
|
||||
if let Event::WindowEvent {
|
||||
event: WindowEvent::KeyboardInput { input, .. },
|
||||
event: WindowEvent::KeyboardInput { event: input, .. },
|
||||
..
|
||||
} = event
|
||||
{
|
||||
// Handle key input events via `WindowEvent`, not via `DeviceEvent` (#32)
|
||||
if let Some(key_code) = input.virtual_keycode {
|
||||
match key_code {
|
||||
VirtualKeyCode::A => {
|
||||
self.input_controller.rotate_left = input.state == ElementState::Pressed
|
||||
}
|
||||
VirtualKeyCode::D => {
|
||||
self.input_controller.rotate_right = input.state == ElementState::Pressed
|
||||
}
|
||||
_ => (),
|
||||
match input.physical_key {
|
||||
KeyCode::KeyA => {
|
||||
self.input_controller.rotate_left = input.state == ElementState::Pressed
|
||||
}
|
||||
KeyCode::KeyD => {
|
||||
self.input_controller.rotate_right = input.state == ElementState::Pressed
|
||||
}
|
||||
_ => (),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+9
-13
@@ -20,7 +20,7 @@ use fyrox::{
|
||||
engine::{
|
||||
Engine, EngineInitParams, GraphicsContext, GraphicsContextParams, SerializationContext,
|
||||
},
|
||||
event::{ElementState, Event, VirtualKeyCode, WindowEvent},
|
||||
event::{ElementState, Event, WindowEvent},
|
||||
event_loop::{ControlFlow, EventLoop},
|
||||
gui::{
|
||||
border::BorderBuilder,
|
||||
@@ -44,6 +44,7 @@ use fyrox::{
|
||||
window::{Fullscreen, WindowAttributes},
|
||||
};
|
||||
use std::{sync::Arc, time::Instant};
|
||||
use winit::keyboard::KeyCode;
|
||||
|
||||
const DEFAULT_MODEL_ROTATION: f32 = 180.0;
|
||||
const DEFAULT_MODEL_SCALE: f32 = 0.05;
|
||||
@@ -481,26 +482,24 @@ fn main() {
|
||||
engine.render().unwrap();
|
||||
}
|
||||
Event::WindowEvent { event, .. } => {
|
||||
match event {
|
||||
match &event {
|
||||
WindowEvent::CloseRequested => *control_flow = ControlFlow::Exit,
|
||||
WindowEvent::Resized(size) => {
|
||||
// It is very important to handle Resized event from window, because
|
||||
// renderer knows nothing about window size - it must be notified
|
||||
// directly when window size has changed.
|
||||
if let Err(e) = engine.set_frame_size(size.into()) {
|
||||
if let Err(e) = engine.set_frame_size((*size).into()) {
|
||||
Log::writeln(
|
||||
MessageKind::Error,
|
||||
format!("Unable to set frame size: {:?}", e),
|
||||
);
|
||||
}
|
||||
}
|
||||
WindowEvent::KeyboardInput { input, .. } => {
|
||||
if let Some(key_code) = input.virtual_keycode {
|
||||
if input.state == ElementState::Pressed
|
||||
&& key_code == VirtualKeyCode::Escape
|
||||
{
|
||||
*control_flow = ControlFlow::Exit;
|
||||
}
|
||||
WindowEvent::KeyboardInput { event: input, .. } => {
|
||||
if input.state == ElementState::Pressed
|
||||
&& input.physical_key == KeyCode::Escape
|
||||
{
|
||||
*control_flow = ControlFlow::Exit;
|
||||
}
|
||||
}
|
||||
_ => (),
|
||||
@@ -513,9 +512,6 @@ fn main() {
|
||||
engine.user_interface.process_os_event(&os_event);
|
||||
}
|
||||
}
|
||||
Event::DeviceEvent { .. } => {
|
||||
// Handle key input events via `WindowEvent`, not via `DeviceEvent` (#32)
|
||||
}
|
||||
_ => *control_flow = ControlFlow::Poll,
|
||||
}
|
||||
});
|
||||
|
||||
+12
-2
@@ -2490,6 +2490,7 @@ fn transform_size(transform_space_bounds: Vector2<f32>, matrix: &Matrix3<f32>) -
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use crate::message::{ButtonState, KeyCode};
|
||||
use crate::{
|
||||
border::BorderBuilder,
|
||||
core::algebra::{Rotation2, UnitComplex, Vector2},
|
||||
@@ -2564,14 +2565,23 @@ mod test {
|
||||
);
|
||||
|
||||
// Do additional check - emulate key press of "A" and check if the focused text box has accepted it.
|
||||
ui.process_os_event(&OsEvent::Character('A'));
|
||||
ui.process_os_event(&OsEvent::KeyboardInput {
|
||||
button: KeyCode::KeyA,
|
||||
state: ButtonState::Pressed,
|
||||
text: "A".to_string(),
|
||||
});
|
||||
|
||||
let mut msg =
|
||||
WidgetMessage::key_down(text_box, MessageDirection::FromWidget, KeyCode::KeyA);
|
||||
msg.set_handled(true);
|
||||
assert_eq!(ui.poll_message(), Some(msg));
|
||||
|
||||
assert_eq!(
|
||||
ui.poll_message(),
|
||||
Some(WidgetMessage::text(
|
||||
text_box,
|
||||
MessageDirection::FromWidget,
|
||||
'A'
|
||||
'A'.to_string()
|
||||
))
|
||||
);
|
||||
assert_eq!(
|
||||
|
||||
Reference in New Issue
Block a user