From f5f9616a63dddbde49af724f457650df350ae48c Mon Sep 17 00:00:00 2001 From: Julian Date: Mon, 3 Jan 2022 22:24:08 +0100 Subject: [PATCH] serialize keycode --- Cargo.lock | 2 ++ Cargo.toml | 1 + src/main.rs | 26 ++++++++++++++++++++++++-- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e7cd3b3..a571f45 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -396,6 +396,7 @@ dependencies = [ "bevy_ecs", "bevy_math", "bevy_utils", + "serde", ] [[package]] @@ -1902,6 +1903,7 @@ name = "l_system_plants" version = "0.1.0" dependencies = [ "bevy", + "bevy_input", "serde", ] diff --git a/Cargo.toml b/Cargo.toml index ccba9db..e67c572 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,4 +7,5 @@ edition = "2018" [dependencies] bevy = "0.5" +bevy_input = { version="0.5", features=["serialize"]} serde = "1.0.133" diff --git a/src/main.rs b/src/main.rs index 8d50aa9..bbec710 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,9 +1,13 @@ use bevy::input::mouse::MouseMotion; use bevy::prelude::*; use bevy::diagnostic::{FrameTimeDiagnosticsPlugin, LogDiagnosticsPlugin}; +use serde::ser::SerializeMap; use std::collections::HashMap; use std::collections::VecDeque; +use std::fmt; + +use serde::{ Serialize, Deserialize }; mod bundles; use bundles::camera::*; @@ -13,7 +17,23 @@ struct ActionBindings bindings: HashMap, } -#[derive(Copy, Clone)] +impl Serialize for ActionBindings +{ + fn serialize(&self, serializer: S) -> Result + where + S: serde::Serializer + { + let mut map = serializer.serialize_map(Some(self.bindings.len()))?; + for (k, v) in &self.bindings + { + map.serialize_entry(&k, &v)?; + } + map.end() + } +} + + +#[derive(Copy, Clone, Serialize)] enum Action { Forward, @@ -21,7 +41,8 @@ enum Action Left, Right, Up, - Down + Down, + Accelerate } struct Actions { @@ -38,6 +59,7 @@ fn main() { binds.bindings.insert(KeyCode::D, Action::Right); binds.bindings.insert(KeyCode::Space, Action::Up); binds.bindings.insert(KeyCode::C, Action::Down); + binds.bindings.insert(KeyCode::LShift, Action::Accelerate); App::build() .insert_resource(Msaa {samples: 4})