refactor: ♻️ player inventory
This commit is contained in:
parent
59489021ba
commit
6ee570cfa3
7 changed files with 77 additions and 71 deletions
|
@ -9,7 +9,7 @@ use bevy::{
|
||||||
use camera::UserCamera;
|
use camera::UserCamera;
|
||||||
use market::Market;
|
use market::Market;
|
||||||
use player::Player;
|
use player::Player;
|
||||||
use player_inventory::PlayerInventory;
|
use player_inventory_gui::PlayerInventoryGUI;
|
||||||
use ui::{FPSText, FishCounterText, KeybindingsText, MoneyText};
|
use ui::{FPSText, FishCounterText, KeybindingsText, MoneyText};
|
||||||
use water::Water;
|
use water::Water;
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@ mod camera;
|
||||||
mod market;
|
mod market;
|
||||||
mod player;
|
mod player;
|
||||||
mod player_inventory;
|
mod player_inventory;
|
||||||
|
mod player_inventory_gui;
|
||||||
mod ui;
|
mod ui;
|
||||||
mod water;
|
mod water;
|
||||||
|
|
||||||
|
@ -53,7 +54,7 @@ pub fn start_game() {
|
||||||
UserCamera::setup,
|
UserCamera::setup,
|
||||||
Water::setup,
|
Water::setup,
|
||||||
Market::setup,
|
Market::setup,
|
||||||
PlayerInventory::setup,
|
PlayerInventoryGUI::setup,
|
||||||
Player::setup,
|
Player::setup,
|
||||||
FishCounterText::setup,
|
FishCounterText::setup,
|
||||||
MoneyText::setup,
|
MoneyText::setup,
|
||||||
|
@ -65,7 +66,7 @@ pub fn start_game() {
|
||||||
(
|
(
|
||||||
FPSText::update,
|
FPSText::update,
|
||||||
UserCamera::update,
|
UserCamera::update,
|
||||||
PlayerInventory::toggle,
|
PlayerInventoryGUI::toggle,
|
||||||
Player::r#move.before(FishCounterText::update),
|
Player::r#move.before(FishCounterText::update),
|
||||||
Water::fishing,
|
Water::fishing,
|
||||||
Market::sell.chain().before(MoneyText::update),
|
Market::sell.chain().before(MoneyText::update),
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
|
|
||||||
use crate::{
|
use crate::{player::Player, FISH_PRICE, INTERACTION_AREA_RADIUS};
|
||||||
player::Player, player_inventory::PlayerInventory, FISH_PRICE, INTERACTION_AREA_RADIUS,
|
|
||||||
};
|
|
||||||
|
|
||||||
#[derive(Debug, Component)]
|
#[derive(Debug, Component)]
|
||||||
pub struct Market;
|
pub struct Market;
|
||||||
|
@ -20,12 +18,12 @@ impl Market {
|
||||||
|
|
||||||
pub fn sell(
|
pub fn sell(
|
||||||
player_transform_query: Query<&Transform, With<Player>>,
|
player_transform_query: Query<&Transform, With<Player>>,
|
||||||
mut player_inventory_query: Query<&mut PlayerInventory, With<PlayerInventory>>,
|
mut player_query: Query<&mut Player, With<Player>>,
|
||||||
market_query: Query<&Transform, With<Market>>,
|
market_query: Query<&Transform, With<Market>>,
|
||||||
keyboard: Res<ButtonInput<KeyCode>>,
|
keyboard: Res<ButtonInput<KeyCode>>,
|
||||||
) {
|
) {
|
||||||
let player_transform = player_transform_query.get_single().unwrap();
|
let player_transform = player_transform_query.get_single().unwrap();
|
||||||
let mut player_inventory = player_inventory_query.get_single_mut().unwrap();
|
let player_inventory = &mut player_query.get_single_mut().unwrap().inventory;
|
||||||
|
|
||||||
for market_query in &market_query {
|
for market_query in &market_query {
|
||||||
let distance = player_transform
|
let distance = player_transform
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
|
|
||||||
use crate::{PlayerGUIStatus, CHARACTER_SPEED};
|
use crate::{player_inventory::PlayerInventory, PlayerGUIStatus, CHARACTER_SPEED};
|
||||||
|
|
||||||
#[derive(Debug, Component)]
|
#[derive(Debug, Default, Component)]
|
||||||
pub struct Player;
|
pub struct Player {
|
||||||
|
pub inventory: PlayerInventory,
|
||||||
|
}
|
||||||
|
|
||||||
impl Player {
|
impl Player {
|
||||||
pub fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
|
pub fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
|
||||||
|
@ -11,7 +13,7 @@ impl Player {
|
||||||
commands.spawn((
|
commands.spawn((
|
||||||
Sprite::from_image(image),
|
Sprite::from_image(image),
|
||||||
Transform::from_xyz(0.0, 0.0, 0.0),
|
Transform::from_xyz(0.0, 0.0, 0.0),
|
||||||
Player,
|
Player::default(),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,58 +1,7 @@
|
||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
|
|
||||||
use crate::{player::Player, PlayerGUIStatus};
|
|
||||||
|
|
||||||
#[derive(Debug, Default, Component)]
|
#[derive(Debug, Default, Component)]
|
||||||
pub struct PlayerInventory {
|
pub struct PlayerInventory {
|
||||||
pub money: usize,
|
pub money: usize,
|
||||||
pub fish: usize,
|
pub fish: usize,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PlayerInventory {
|
|
||||||
pub fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
|
|
||||||
let image = asset_server.load::<Image>("inventory.png");
|
|
||||||
let sprite = Sprite::from_image(image);
|
|
||||||
commands.spawn((
|
|
||||||
sprite.clone(),
|
|
||||||
Transform::from_scale(Vec3 {
|
|
||||||
x: 20.0,
|
|
||||||
y: 20.0,
|
|
||||||
z: 0.0,
|
|
||||||
}),
|
|
||||||
Visibility::Hidden,
|
|
||||||
PlayerInventory::default(),
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn toggle(
|
|
||||||
mut player_inventory_transform_query: Query<
|
|
||||||
&mut Transform,
|
|
||||||
(With<PlayerInventory>, Without<Player>),
|
|
||||||
>,
|
|
||||||
mut player_inventory_query: Query<&mut PlayerInventory, With<PlayerInventory>>,
|
|
||||||
player_transform_query: Query<&Transform, With<Player>>,
|
|
||||||
mut player_inventory_visibility_query: Query<&mut Visibility, With<PlayerInventory>>,
|
|
||||||
keyboard: Res<ButtonInput<KeyCode>>,
|
|
||||||
mut player_gui_status: ResMut<PlayerGUIStatus>,
|
|
||||||
) {
|
|
||||||
let mut player_inventory_visibility =
|
|
||||||
player_inventory_visibility_query.get_single_mut().unwrap();
|
|
||||||
|
|
||||||
if keyboard.just_pressed(KeyCode::Tab) && player_gui_status.looking_inventory == false {
|
|
||||||
let mut player_inventory_transform =
|
|
||||||
player_inventory_transform_query.get_single_mut().unwrap();
|
|
||||||
let player_inventory = player_inventory_query.get_single_mut().unwrap();
|
|
||||||
let player_position = player_transform_query.get_single().unwrap();
|
|
||||||
|
|
||||||
let new_inventory_position = player_position.translation.truncate().extend(2.0);
|
|
||||||
player_inventory_transform.translation = new_inventory_position;
|
|
||||||
player_gui_status.looking_inventory = true;
|
|
||||||
player_inventory_visibility.toggle_visible_hidden();
|
|
||||||
println!("{:#?}", player_inventory);
|
|
||||||
} else if keyboard.just_pressed(KeyCode::Tab) && player_gui_status.looking_inventory == true
|
|
||||||
{
|
|
||||||
player_gui_status.looking_inventory = false;
|
|
||||||
player_inventory_visibility.toggle_visible_hidden();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
56
src/player_inventory_gui.rs
Normal file
56
src/player_inventory_gui.rs
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
use bevy::prelude::*;
|
||||||
|
|
||||||
|
use crate::{player::Player, PlayerGUIStatus};
|
||||||
|
|
||||||
|
#[derive(Debug, Default, Component)]
|
||||||
|
pub struct PlayerInventoryGUI {}
|
||||||
|
|
||||||
|
impl PlayerInventoryGUI {
|
||||||
|
pub fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
|
||||||
|
let image = asset_server.load::<Image>("inventory.png");
|
||||||
|
let sprite = Sprite::from_image(image);
|
||||||
|
commands.spawn((
|
||||||
|
sprite.clone(),
|
||||||
|
Transform::from_scale(Vec3 {
|
||||||
|
x: 20.0,
|
||||||
|
y: 20.0,
|
||||||
|
z: 0.0,
|
||||||
|
}),
|
||||||
|
Visibility::Hidden,
|
||||||
|
PlayerInventoryGUI::default(),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn toggle(
|
||||||
|
mut player_inventory_gui_transform_query: Query<
|
||||||
|
&mut Transform,
|
||||||
|
(With<PlayerInventoryGUI>, Without<Player>),
|
||||||
|
>,
|
||||||
|
mut player_query: Query<&mut Player, With<Player>>,
|
||||||
|
player_transform_query: Query<&Transform, With<Player>>,
|
||||||
|
mut player_inventory_visibility_query: Query<&mut Visibility, With<PlayerInventoryGUI>>,
|
||||||
|
keyboard: Res<ButtonInput<KeyCode>>,
|
||||||
|
mut player_gui_status: ResMut<PlayerGUIStatus>,
|
||||||
|
) {
|
||||||
|
let mut player_inventory_visibility =
|
||||||
|
player_inventory_visibility_query.get_single_mut().unwrap();
|
||||||
|
|
||||||
|
if keyboard.just_pressed(KeyCode::Tab) && player_gui_status.looking_inventory == false {
|
||||||
|
let mut player_inventory_gui_transform = player_inventory_gui_transform_query
|
||||||
|
.get_single_mut()
|
||||||
|
.unwrap();
|
||||||
|
let player_inventory = &player_query.get_single_mut().unwrap().inventory;
|
||||||
|
let player_position = player_transform_query.get_single().unwrap();
|
||||||
|
|
||||||
|
let new_inventory_position = player_position.translation.truncate().extend(2.0);
|
||||||
|
player_inventory_gui_transform.translation = new_inventory_position;
|
||||||
|
player_gui_status.looking_inventory = true;
|
||||||
|
player_inventory_visibility.toggle_visible_hidden();
|
||||||
|
println!("{:#?}", player_inventory);
|
||||||
|
} else if keyboard.just_pressed(KeyCode::Tab) && player_gui_status.looking_inventory == true
|
||||||
|
{
|
||||||
|
player_gui_status.looking_inventory = false;
|
||||||
|
player_inventory_visibility.toggle_visible_hidden();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
10
src/ui.rs
10
src/ui.rs
|
@ -5,7 +5,7 @@ use bevy::{
|
||||||
prelude::*,
|
prelude::*,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{player::Player, player_inventory::PlayerInventory};
|
use crate::player::Player;
|
||||||
|
|
||||||
const FISH_COUNTER_OFFSET: Vec3 = Vec3::new(50.0, 50.0, 1.0);
|
const FISH_COUNTER_OFFSET: Vec3 = Vec3::new(50.0, 50.0, 1.0);
|
||||||
static FISH_COUNT: LazyLock<Arc<RwLock<usize>>> = LazyLock::new(|| Arc::new(RwLock::new(0)));
|
static FISH_COUNT: LazyLock<Arc<RwLock<usize>>> = LazyLock::new(|| Arc::new(RwLock::new(0)));
|
||||||
|
@ -61,12 +61,12 @@ impl FishCounterText {
|
||||||
>,
|
>,
|
||||||
mut fish_counter_text_query: Query<&mut Text2d, With<FishCounterText>>,
|
mut fish_counter_text_query: Query<&mut Text2d, With<FishCounterText>>,
|
||||||
player_transform_query: Query<&Transform, (With<Player>, Without<FishCounterText>)>,
|
player_transform_query: Query<&Transform, (With<Player>, Without<FishCounterText>)>,
|
||||||
player_inventory_query: Query<&PlayerInventory, With<PlayerInventory>>,
|
player_query: Query<&Player, With<Player>>,
|
||||||
) {
|
) {
|
||||||
let mut fish_counter_text_transform =
|
let mut fish_counter_text_transform =
|
||||||
fish_counter_text_transform_query.get_single_mut().unwrap();
|
fish_counter_text_transform_query.get_single_mut().unwrap();
|
||||||
let mut fish_counter_text = fish_counter_text_query.get_single_mut().unwrap();
|
let mut fish_counter_text = fish_counter_text_query.get_single_mut().unwrap();
|
||||||
let player_inventory = player_inventory_query.get_single().unwrap();
|
let player_inventory = &player_query.get_single().unwrap().inventory;
|
||||||
|
|
||||||
let player_position = player_transform_query.get_single().unwrap();
|
let player_position = player_transform_query.get_single().unwrap();
|
||||||
let mut new_fish_counter_text_position = player_position.translation.truncate().extend(0.0);
|
let mut new_fish_counter_text_position = player_position.translation.truncate().extend(0.0);
|
||||||
|
@ -112,10 +112,10 @@ impl MoneyText {
|
||||||
|
|
||||||
pub fn update(
|
pub fn update(
|
||||||
mut money_text_query: Query<&mut Text, With<MoneyText>>,
|
mut money_text_query: Query<&mut Text, With<MoneyText>>,
|
||||||
player_inventory_query: Query<&PlayerInventory, With<PlayerInventory>>,
|
player_query: Query<&Player, With<Player>>,
|
||||||
) {
|
) {
|
||||||
let mut fish_counter_text = money_text_query.get_single_mut().unwrap();
|
let mut fish_counter_text = money_text_query.get_single_mut().unwrap();
|
||||||
let player_inventory = player_inventory_query.get_single().unwrap();
|
let player_inventory = &player_query.get_single().unwrap().inventory;
|
||||||
|
|
||||||
if *MONEY.read().unwrap() != player_inventory.fish {
|
if *MONEY.read().unwrap() != player_inventory.fish {
|
||||||
*MONEY.write().unwrap() = player_inventory.fish;
|
*MONEY.write().unwrap() = player_inventory.fish;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
use bevy::prelude::*;
|
use bevy::prelude::*;
|
||||||
|
|
||||||
use crate::{player::Player, player_inventory::PlayerInventory, INTERACTION_AREA_RADIUS};
|
use crate::{player::Player, INTERACTION_AREA_RADIUS};
|
||||||
|
|
||||||
#[derive(Debug, Component)]
|
#[derive(Debug, Component)]
|
||||||
pub struct Water;
|
pub struct Water;
|
||||||
|
@ -15,12 +15,12 @@ impl Water {
|
||||||
|
|
||||||
pub fn fishing(
|
pub fn fishing(
|
||||||
player_transform_query: Query<&Transform, With<Player>>,
|
player_transform_query: Query<&Transform, With<Player>>,
|
||||||
mut player_inventory_query: Query<&mut PlayerInventory, With<PlayerInventory>>,
|
mut player_query: Query<&mut Player, With<Player>>,
|
||||||
water_query: Query<&Transform, With<Water>>,
|
water_query: Query<&Transform, With<Water>>,
|
||||||
keyboard: Res<ButtonInput<KeyCode>>,
|
keyboard: Res<ButtonInput<KeyCode>>,
|
||||||
) {
|
) {
|
||||||
let player_transform = player_transform_query.get_single().unwrap();
|
let player_transform = player_transform_query.get_single().unwrap();
|
||||||
let mut player_inventory = player_inventory_query.get_single_mut().unwrap();
|
let player_inventory = &mut player_query.get_single_mut().unwrap().inventory;
|
||||||
|
|
||||||
for water_query in &water_query {
|
for water_query in &water_query {
|
||||||
let distance = player_transform
|
let distance = player_transform
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue