From 9f49fb4acce9993c11b1242318929d7e01272e61 Mon Sep 17 00:00:00 2001 From: Johannes Hendrik Gerard van der Weide Date: Wed, 31 Jan 2024 14:58:25 +0100 Subject: [PATCH] Input visual moved to it's own lil file :3 --- src/main.rs | 101 ++------------------------ src/user_interface.rs | 1 + src/user_interface/input_visual.rs | 110 +++++++++++++++++++++++++++++ 3 files changed, 115 insertions(+), 97 deletions(-) create mode 100644 src/user_interface.rs create mode 100644 src/user_interface/input_visual.rs diff --git a/src/main.rs b/src/main.rs index e049502..005785c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,32 +1,14 @@ use bevy::prelude::*; -use serde::{Deserialize, Serialize}; -use std::path::Path; use crate::objects::player::Player; use crate::objects::player::PlayerPlugin; use crate::levelgen::LevelgenPlugin; use crate::setup::config_loader::load_yaml_folder; - -#[derive(Component, Serialize, Deserialize)] -pub struct Settings { - pub up: String, - pub down: String, - pub left: String, - pub right: String, - pub input_lower_sprite_path: String, - pub input_upper_sprite_path: String, - pub input_sprite_size: Vec2, - pub input_sprite_location: Vec2, -} - -#[derive(Component)] -pub struct InputVisual { - pub location: Vec2, - pub input_direction: Vec2, -} +use crate::user_interface::input_visual::InputVisualPlugin; pub mod objects; pub mod setup; mod levelgen; +mod user_interface; fn main() { App::new() @@ -45,79 +27,15 @@ fn main() { .build(), ) .add_plugins(PlayerPlugin) + .add_plugins(InputVisualPlugin) .add_plugins(LevelgenPlugin) .add_systems(Startup, setup) .add_systems(Update, get_input) - .add_systems(Update, draw_input) .run(); } -fn setup(mut commands: Commands, asset_server: Res) { +fn setup(mut commands: Commands) { commands.spawn(Camera2dBundle::default()); - - let settings_yaml_default: String = " - # Change these to whatever you want - up: W - down: S - left: A - right: D - input_lower_sprite_path: circle_empty.png - input_upper_sprite_path: circle_full.png - input_sprite_size: [ - 30.0, - 30.0 - ] - input_sprite_location: [ - -200.0, - -200.0 - ] - " - .to_string(); - - let settings_yaml = load_yaml_folder(settings_yaml_default, Path::new("./data/settings")); - - let settings_data = - serde_yaml::from_str::(&settings_yaml[0]).expect("Error serializing to YAML"); - commands.spawn( - SpriteBundle { - sprite: Sprite { - custom_size: Some(Vec2::new( - settings_data.input_sprite_size.x, - settings_data.input_sprite_size.y, - )), - anchor: - bevy::sprite::Anchor::Custom(Vec2::new( - 6.658, - 6.658, - )), - - ..default() - }, - texture: asset_server.load(settings_data.input_lower_sprite_path), - ..default() - - } - ); - commands.spawn(( - SpriteBundle { - sprite: Sprite { - custom_size: Some(Vec2::new( - settings_data.input_sprite_size.x, - settings_data.input_sprite_size.y, - )), - ..default() - }, - texture: asset_server.load(settings_data.input_upper_sprite_path), - ..default() - }, - InputVisual { - location: Vec2::new( - settings_data.input_sprite_location.x, - settings_data.input_sprite_location.y, - ), - input_direction: Vec2::new(0.0, 0.0), - }, - )); } //TODO: make it so keycodes can be changed (maby through JSON at first and later make a UI menu to edit said JSON) @@ -159,14 +77,3 @@ fn get_input(mut input_recievers: Query<&mut Player>, input: Res> } } } - -fn draw_input(mut visuals: Query<(&mut Transform, &mut InputVisual)>, input: Query<&mut Player>) { - for player in &input { - for (mut transform, mut visual) in &mut visuals { - visual.input_direction.x = player.direction.x; - visual.input_direction.y = player.direction.y; - transform.translation.x = visual.location.x + (visual.input_direction.x * 10.0); - transform.translation.y = visual.location.y + (visual.input_direction.y * 10.0); - } - } -} diff --git a/src/user_interface.rs b/src/user_interface.rs new file mode 100644 index 0000000..b899e31 --- /dev/null +++ b/src/user_interface.rs @@ -0,0 +1 @@ +pub mod input_visual; diff --git a/src/user_interface/input_visual.rs b/src/user_interface/input_visual.rs new file mode 100644 index 0000000..14a9ae8 --- /dev/null +++ b/src/user_interface/input_visual.rs @@ -0,0 +1,110 @@ +use bevy::prelude::*; +use serde::{Deserialize, Serialize}; +use crate::setup::config_loader::load_yaml_folder; +use std::path::Path; +use crate::Player; + +pub struct InputVisualPlugin; + +#[derive(Component, Serialize, Deserialize)] +pub struct Settings { + pub up: String, + pub down: String, + pub left: String, + pub right: String, + pub input_lower_sprite_path: String, + pub input_upper_sprite_path: String, + pub input_sprite_size: Vec2, + pub input_sprite_location: Vec2, +} + +#[derive(Component)] +pub struct InputVisual { + pub location: Vec2, + pub input_direction: Vec2, +} + +impl Plugin for InputVisualPlugin { + fn build(&self, app: &mut App) { + app.add_systems(Startup, setup_visual) + .add_systems(Update, draw_input); + } +} + +fn setup_visual(mut commands: Commands, asset_server: Res) { + let settings_yaml_default: String = " + # Change these to whatever you want + up: W + down: S + left: A + right: D + input_lower_sprite_path: circle_empty.png + input_upper_sprite_path: circle_full.png + input_sprite_size: [ + 30.0, + 30.0 + ] + input_sprite_location: [ + -200.0, + -200.0 + ] + " + .to_string(); + + let settings_yaml = load_yaml_folder(settings_yaml_default, Path::new("./data/settings")); + + let settings_data = + serde_yaml::from_str::(&settings_yaml[0]).expect("Error serializing to YAML"); + + commands.spawn( + SpriteBundle { + sprite: Sprite { + custom_size: Some(Vec2::new( + settings_data.input_sprite_size.x, + settings_data.input_sprite_size.y, + )), + anchor: + bevy::sprite::Anchor::Custom(Vec2::new( + 6.658, + 6.658, + )), + + ..default() + }, + texture: asset_server.load(settings_data.input_lower_sprite_path), + ..default() + + } + ); + commands.spawn(( + SpriteBundle { + sprite: Sprite { + custom_size: Some(Vec2::new( + settings_data.input_sprite_size.x, + settings_data.input_sprite_size.y, + )), + ..default() + }, + texture: asset_server.load(settings_data.input_upper_sprite_path), + ..default() + }, + InputVisual { + location: Vec2::new( + settings_data.input_sprite_location.x, + settings_data.input_sprite_location.y, + ), + input_direction: Vec2::new(0.0, 0.0), + }, + )); +} + +fn draw_input(mut visuals: Query<(&mut Transform, &mut InputVisual)>, input: Query<&mut Player>){ + for player in &input { + for (mut transform, mut visual) in &mut visuals { + visual.input_direction.x = player.direction.x; + visual.input_direction.y = player.direction.y; + transform.translation.x = visual.location.x + (visual.input_direction.x * 10.0); + transform.translation.y = visual.location.y + (visual.input_direction.y * 10.0); + } + } +}