Actionsystem
This commit is contained in:
9
Cargo.lock
generated
9
Cargo.lock
generated
@@ -1902,6 +1902,7 @@ name = "l_system_plants"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bevy",
|
"bevy",
|
||||||
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@@ -2787,18 +2788,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.132"
|
version = "1.0.133"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8b9875c23cf305cd1fd7eb77234cbb705f21ea6a72c637a5c6db5fe4b8e7f008"
|
checksum = "97565067517b60e2d1ea8b268e59ce036de907ac523ad83a0475da04e818989a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.132"
|
version = "1.0.133"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ecc0db5cb2556c0e558887d9bbdcf6ac4471e83ff66cf696e5419024d1606276"
|
checksum = "ed201699328568d8d08208fdd080e3ff594e6c422e438b6705905da01005d537"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
|||||||
@@ -7,3 +7,4 @@ edition = "2018"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
bevy = "0.5"
|
bevy = "0.5"
|
||||||
|
serde = "1.0.133"
|
||||||
|
|||||||
78
src/main.rs
78
src/main.rs
@@ -1,25 +1,78 @@
|
|||||||
use bevy::input::mouse::MouseMotion;
|
use bevy::input::mouse::MouseMotion;
|
||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
|
use bevy::diagnostic::{FrameTimeDiagnosticsPlugin, LogDiagnosticsPlugin};
|
||||||
|
|
||||||
|
use std::collections::HashMap;
|
||||||
|
use std::collections::VecDeque;
|
||||||
|
|
||||||
mod bundles;
|
mod bundles;
|
||||||
use bundles::camera::*;
|
use bundles::camera::*;
|
||||||
|
|
||||||
|
struct ActionBindings
|
||||||
|
{
|
||||||
|
bindings: HashMap<KeyCode, Action>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Copy, Clone)]
|
||||||
|
enum Action
|
||||||
|
{
|
||||||
|
Forward,
|
||||||
|
Backward,
|
||||||
|
Left,
|
||||||
|
Right,
|
||||||
|
Up,
|
||||||
|
Down
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Actions {
|
||||||
|
actions: VecDeque<Action>,
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
|
let mut binds = ActionBindings {
|
||||||
|
bindings: HashMap::new(),
|
||||||
|
};
|
||||||
|
binds.bindings.insert(KeyCode::W, Action::Forward);
|
||||||
|
binds.bindings.insert(KeyCode::A, Action::Left);
|
||||||
|
binds.bindings.insert(KeyCode::S, Action::Backward);
|
||||||
|
binds.bindings.insert(KeyCode::D, Action::Right);
|
||||||
|
binds.bindings.insert(KeyCode::Space, Action::Up);
|
||||||
|
binds.bindings.insert(KeyCode::C, Action::Down);
|
||||||
|
|
||||||
App::build()
|
App::build()
|
||||||
.insert_resource(Msaa {samples: 4})
|
.insert_resource(Msaa {samples: 4})
|
||||||
|
.insert_resource(binds)
|
||||||
|
.insert_resource(Actions { actions: VecDeque::new() })
|
||||||
.add_plugins(DefaultPlugins)
|
.add_plugins(DefaultPlugins)
|
||||||
|
.add_plugin(LogDiagnosticsPlugin::default())
|
||||||
|
.add_plugin(FrameTimeDiagnosticsPlugin::default())
|
||||||
.add_startup_system(startup.system())
|
.add_startup_system(startup.system())
|
||||||
.add_startup_system(initial_grab_cursor.system())
|
.add_startup_system(initial_grab_cursor.system())
|
||||||
.add_system(camera_movement_system.system())
|
.add_system(camera_movement_system.system())
|
||||||
.add_system(camera_update_system.system())
|
.add_system(camera_update_system.system())
|
||||||
.add_system(cursor_grab.system())
|
.add_system(cursor_grab.system())
|
||||||
|
.add_system(binding_action_converter_system.system())
|
||||||
.run();
|
.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn binding_action_converter_system(
|
||||||
|
keyboard_input: Res<Input<KeyCode>>,
|
||||||
|
binding_input: Res<ActionBindings>,
|
||||||
|
mut actions: ResMut<Actions>,
|
||||||
|
)
|
||||||
|
{
|
||||||
|
for key in keyboard_input.get_pressed()
|
||||||
|
{
|
||||||
|
match binding_input.bindings.get(key) {
|
||||||
|
Some(action) => actions.actions.push_back(action.clone()),
|
||||||
|
None => (),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn camera_movement_system(
|
fn camera_movement_system(
|
||||||
time: Res<Time>,
|
time: Res<Time>,
|
||||||
keyboard_input: Res<Input<KeyCode>>,
|
mut action_input: ResMut<Actions>,
|
||||||
windows: Res<Windows>,
|
windows: Res<Windows>,
|
||||||
mut mouse_input: EventReader<MouseMotion>,
|
mut mouse_input: EventReader<MouseMotion>,
|
||||||
mut query: Query<(&mut Transform, &mut FPSCamera)>)
|
mut query: Query<(&mut Transform, &mut FPSCamera)>)
|
||||||
@@ -50,22 +103,21 @@ fn camera_movement_system(
|
|||||||
let forward = -Vec3::new(local_z.x, 0., local_z.z);
|
let forward = -Vec3::new(local_z.x, 0., local_z.z);
|
||||||
let right = Vec3::new(local_z.z, 0., -local_z.x);
|
let right = Vec3::new(local_z.z, 0., -local_z.x);
|
||||||
|
|
||||||
for key in keyboard_input.get_pressed()
|
action_input.actions.retain(|action| {
|
||||||
{
|
match action {
|
||||||
match key {
|
Action::Forward => transform.translation += forward * time.delta_seconds() * walking_speed,
|
||||||
KeyCode::W => transform.translation += forward * time.delta_seconds() * walking_speed,
|
Action::Backward => transform.translation += -forward * time.delta_seconds() * walking_speed,
|
||||||
KeyCode::A => transform.translation += -right * time.delta_seconds() * walking_speed,
|
Action::Left => transform.translation += -right * time.delta_seconds() * walking_speed,
|
||||||
KeyCode::S => transform.translation += -forward * time.delta_seconds() * walking_speed,
|
Action::Right => transform.translation += right * time.delta_seconds() * walking_speed,
|
||||||
KeyCode::D => transform.translation += right * time.delta_seconds() * walking_speed,
|
Action::Up => transform.translation += Vec3::Y * time.delta_seconds() * walking_speed,
|
||||||
KeyCode::Space => transform.translation += Vec3::Y * time.delta_seconds() * walking_speed,
|
Action::Down => transform.translation -= Vec3::Y * time.delta_seconds() * walking_speed,
|
||||||
KeyCode::C => transform.translation -= Vec3::Y * time.delta_seconds() * walking_speed,
|
_ => return true,
|
||||||
_ => (),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
false
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fn camera_update_system(
|
fn camera_update_system(
|
||||||
mut query: Query<(&mut Transform, &FPSCamera)>
|
mut query: Query<(&mut Transform, &FPSCamera)>
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user