diff --git a/assets/inventory.png b/assets/inventory.png new file mode 100644 index 0000000..f8373fa Binary files /dev/null and b/assets/inventory.png differ diff --git a/src/lib.rs b/src/lib.rs index be43844..dcf9d35 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,7 +1,7 @@ use bevy::{ app::{App, PluginGroup, Startup, Update}, diagnostic::FrameTimeDiagnosticsPlugin, - prelude::IntoSystemConfigs, + prelude::{ImagePlugin, IntoSystemConfigs, Resource}, utils::default, window::{Window, WindowPlugin, WindowTheme}, DefaultPlugins, @@ -9,12 +9,14 @@ use bevy::{ use camera::UserCamera; use market::Market; use player::Player; +use player_inventory::PlayerInventory; use ui::{FPSText, FishCounterText, KeybindingsText, MoneyText}; use water::Water; mod camera; mod market; mod player; +mod player_inventory; mod ui; mod water; @@ -23,17 +25,26 @@ pub const CAMERA_DECAY_RATE: f32 = 3.0; pub const INTERACTION_AREA_RADIUS: f32 = 100.0; pub const FISH_PRICE: usize = 15; +#[derive(Debug, Resource)] +pub struct PlayerGUIStatus { + looking_inventory: bool, +} + pub fn start_game() { App::new() - .add_plugins(DefaultPlugins.set(WindowPlugin { - primary_window: Some(Window { - title: "Fisher ~Tahinli".to_owned(), - // present_mode: PresentMode::Immediate, //Vsync off - window_theme: Some(WindowTheme::Dark), - ..default() - }), - ..default() - })) + .add_plugins( + DefaultPlugins + .set(WindowPlugin { + primary_window: Some(Window { + title: "Fisher ~Tahinli".to_owned(), + // present_mode: PresentMode::Immediate, //Vsync off + window_theme: Some(WindowTheme::Dark), + ..default() + }), + ..default() + }) + .set(ImagePlugin::default_nearest()), + ) .add_plugins(FrameTimeDiagnosticsPlugin) .add_systems( Startup, @@ -42,6 +53,7 @@ pub fn start_game() { UserCamera::setup, Water::setup, Market::setup, + PlayerInventory::setup, Player::setup, FishCounterText::setup, MoneyText::setup, @@ -53,6 +65,7 @@ pub fn start_game() { ( FPSText::update, UserCamera::update, + PlayerInventory::toggle, Player::r#move.before(FishCounterText::update), Water::fishing, Market::sell.chain().before(MoneyText::update), @@ -60,5 +73,8 @@ pub fn start_game() { MoneyText::update, ), ) + .insert_resource(PlayerGUIStatus { + looking_inventory: false, + }) .run(); } diff --git a/src/market.rs b/src/market.rs index b06948e..8cbf8f1 100644 --- a/src/market.rs +++ b/src/market.rs @@ -1,6 +1,8 @@ use bevy::prelude::*; -use crate::{player::Player, FISH_PRICE, INTERACTION_AREA_RADIUS}; +use crate::{ + player::Player, player_inventory::PlayerInventory, FISH_PRICE, INTERACTION_AREA_RADIUS, +}; #[derive(Debug, Component)] pub struct Market; @@ -18,12 +20,12 @@ impl Market { pub fn sell( player_transform_query: Query<&Transform, With>, - mut player_query: Query<&mut Player, With>, + mut player_inventory_query: Query<&mut PlayerInventory, With>, market_query: Query<&Transform, With>, keyboard: Res>, ) { let player_transform = player_transform_query.get_single().unwrap(); - let mut player = player_query.get_single_mut().unwrap(); + let mut player_inventory = player_inventory_query.get_single_mut().unwrap(); for market_query in &market_query { let distance = player_transform @@ -32,8 +34,8 @@ impl Market { if distance < INTERACTION_AREA_RADIUS { if keyboard.just_pressed(KeyCode::KeyE) { - player.money = player.fish_count * FISH_PRICE; - player.fish_count = 0; + player_inventory.money += player_inventory.fish * FISH_PRICE; + player_inventory.fish = 0; } } } diff --git a/src/player.rs b/src/player.rs index 7d0c500..7ec75cd 100644 --- a/src/player.rs +++ b/src/player.rs @@ -1,12 +1,9 @@ use bevy::prelude::*; -use crate::CHARACTER_SPEED; +use crate::{PlayerGUIStatus, CHARACTER_SPEED}; #[derive(Debug, Component)] -pub struct Player { - pub fish_count: usize, - pub money: usize, -} +pub struct Player; impl Player { pub fn setup(mut commands: Commands, asset_server: Res) { @@ -14,10 +11,7 @@ impl Player { commands.spawn(( Sprite::from_image(image), Transform::from_xyz(0.0, 0.0, 0.0), - Player { - fish_count: 0, - money: 0, - }, + Player, )); } @@ -25,21 +19,24 @@ impl Player { time: Res