refactor: ♻️ player inventory

This commit is contained in:
Ahmet Kaan Gümüş 2025-02-20 22:14:52 +03:00
parent 59489021ba
commit 6ee570cfa3
7 changed files with 77 additions and 71 deletions

View file

@ -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),

View file

@ -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

View file

@ -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(),
)); ));
} }

View file

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

View 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();
}
}
}

View file

@ -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;

View file

@ -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