Input visual moved to it's own lil file :3

Development
Johannes Hendrik Gerard van der Weide 2024-01-31 14:58:25 +01:00
parent 3eae9f5896
commit 9f49fb4acc
3 changed files with 115 additions and 97 deletions

View File

@ -1,32 +1,14 @@
use bevy::prelude::*; use bevy::prelude::*;
use serde::{Deserialize, Serialize};
use std::path::Path;
use crate::objects::player::Player; use crate::objects::player::Player;
use crate::objects::player::PlayerPlugin; use crate::objects::player::PlayerPlugin;
use crate::levelgen::LevelgenPlugin; use crate::levelgen::LevelgenPlugin;
use crate::setup::config_loader::load_yaml_folder; use crate::setup::config_loader::load_yaml_folder;
use crate::user_interface::input_visual::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,
}
pub mod objects; pub mod objects;
pub mod setup; pub mod setup;
mod levelgen; mod levelgen;
mod user_interface;
fn main() { fn main() {
App::new() App::new()
@ -45,79 +27,15 @@ fn main() {
.build(), .build(),
) )
.add_plugins(PlayerPlugin) .add_plugins(PlayerPlugin)
.add_plugins(InputVisualPlugin)
.add_plugins(LevelgenPlugin) .add_plugins(LevelgenPlugin)
.add_systems(Startup, setup) .add_systems(Startup, setup)
.add_systems(Update, get_input) .add_systems(Update, get_input)
.add_systems(Update, draw_input)
.run(); .run();
} }
fn setup(mut commands: Commands, asset_server: Res<AssetServer>) { fn setup(mut commands: Commands) {
commands.spawn(Camera2dBundle::default()); 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>(&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) //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<Input<KeyCode>>
} }
} }
} }
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);
}
}
}

1
src/user_interface.rs Normal file
View File

@ -0,0 +1 @@
pub mod input_visual;

View File

@ -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<AssetServer>) {
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>(&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);
}
}
}