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 market::Market;
use player::Player;
use player_inventory::PlayerInventory;
use player_inventory_gui::PlayerInventoryGUI;
use ui::{FPSText, FishCounterText, KeybindingsText, MoneyText};
use water::Water;
@ -17,6 +17,7 @@ mod camera;
mod market;
mod player;
mod player_inventory;
mod player_inventory_gui;
mod ui;
mod water;
@ -53,7 +54,7 @@ pub fn start_game() {
UserCamera::setup,
Water::setup,
Market::setup,
PlayerInventory::setup,
PlayerInventoryGUI::setup,
Player::setup,
FishCounterText::setup,
MoneyText::setup,
@ -65,7 +66,7 @@ pub fn start_game() {
(
FPSText::update,
UserCamera::update,
PlayerInventory::toggle,
PlayerInventoryGUI::toggle,
Player::r#move.before(FishCounterText::update),
Water::fishing,
Market::sell.chain().before(MoneyText::update),

View file

@ -1,8 +1,6 @@
use bevy::prelude::*;
use crate::{
player::Player, player_inventory::PlayerInventory, FISH_PRICE, INTERACTION_AREA_RADIUS,
};
use crate::{player::Player, FISH_PRICE, INTERACTION_AREA_RADIUS};
#[derive(Debug, Component)]
pub struct Market;
@ -20,12 +18,12 @@ impl Market {
pub fn sell(
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>>,
keyboard: Res<ButtonInput<KeyCode>>,
) {
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 {
let distance = player_transform

View file

@ -1,9 +1,11 @@
use bevy::prelude::*;
use crate::{PlayerGUIStatus, CHARACTER_SPEED};
use crate::{player_inventory::PlayerInventory, PlayerGUIStatus, CHARACTER_SPEED};
#[derive(Debug, Component)]
pub struct Player;
#[derive(Debug, Default, Component)]
pub struct Player {
pub inventory: PlayerInventory,
}
impl Player {
pub fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
@ -11,7 +13,7 @@ impl Player {
commands.spawn((
Sprite::from_image(image),
Transform::from_xyz(0.0, 0.0, 0.0),
Player,
Player::default(),
));
}

View file

@ -1,58 +1,7 @@
use bevy::prelude::*;
use crate::{player::Player, PlayerGUIStatus};
#[derive(Debug, Default, Component)]
pub struct PlayerInventory {
pub money: 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::*,
};
use crate::{player::Player, player_inventory::PlayerInventory};
use crate::player::Player;
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)));
@ -61,12 +61,12 @@ impl FishCounterText {
>,
mut fish_counter_text_query: Query<&mut Text2d, With<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 =
fish_counter_text_transform_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 mut new_fish_counter_text_position = player_position.translation.truncate().extend(0.0);
@ -112,10 +112,10 @@ impl MoneyText {
pub fn update(
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 player_inventory = player_inventory_query.get_single().unwrap();
let player_inventory = &player_query.get_single().unwrap().inventory;
if *MONEY.read().unwrap() != player_inventory.fish {
*MONEY.write().unwrap() = player_inventory.fish;

View file

@ -1,6 +1,6 @@
use bevy::prelude::*;
use crate::{player::Player, player_inventory::PlayerInventory, INTERACTION_AREA_RADIUS};
use crate::{player::Player, INTERACTION_AREA_RADIUS};
#[derive(Debug, Component)]
pub struct Water;
@ -15,12 +15,12 @@ impl Water {
pub fn fishing(
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>>,
keyboard: Res<ButtonInput<KeyCode>>,
) {
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 {
let distance = player_transform