diff --git a/src/entities/fish.rs b/src/entities/fish.rs index ed1d153..ccaeca0 100644 --- a/src/entities/fish.rs +++ b/src/entities/fish.rs @@ -1,10 +1,7 @@ use rand::{prelude::ThreadRng, Rng}; use raylib::prelude::*; -use crate::{ - player::Player, - resources::GlobalResources, -}; +use crate::{player::Player, resources::GlobalResources}; const FISH_VISION: f32 = 25.0; const FISH_MAX_SPEED: f32 = 2.0; @@ -55,7 +52,12 @@ impl FishEntity { return output; } - pub fn handle_follow_player(&mut self, player: &Player, _dt: f64, other_fish: &Vec) { + pub fn handle_follow_player( + &mut self, + player: &Player, + _dt: f64, + other_fish: &Vec, + ) { let mut acceleration: Vector2 = Vector2::zero(); let mut steer: Vector2 = Vector2::zero(); @@ -133,7 +135,6 @@ impl FishEntity { } pub fn handle_free_movement(&mut self, player: &mut Player, _dt: f64) { - // Handle player picking up fish if player.position.distance_to(self.position).abs() <= player.size.y * 2.2 { self.following_player = true; diff --git a/src/logic/gameend.rs b/src/logic/gameend.rs index c20064e..845c025 100644 --- a/src/logic/gameend.rs +++ b/src/logic/gameend.rs @@ -22,7 +22,7 @@ impl Screen for GameEndScreen { &mut self, draw_handle: &mut RaylibDrawHandle, _thread: &RaylibThread, - audio_system: &mut AudioPlayer, + _audio_system: &mut AudioPlayer, game_core: &mut GameCore, ) -> Option { draw_handle.clear_background(Color::GRAY); @@ -75,7 +75,7 @@ impl Screen for GameEndScreen { String::from("Return to shop"), Rectangle { x: (((win_width / 2) - ((SCREEN_PANEL_SIZE.x as i32 + 6) / 2) + 5) - + (0.15 * SCREEN_PANEL_SIZE.x) as i32) as f32, + + (0.15 * SCREEN_PANEL_SIZE.x) as i32) as f32, y: (((win_height / 2) - (SCREEN_PANEL_SIZE.y as i32 / 2) + 90) as f32) + 100.0, width: 210.0, height: 50.0, @@ -87,78 +87,15 @@ impl Screen for GameEndScreen { true, ); - // render button + // render button go_to_menu_button.render(draw_handle); - // If the player clicks on the button send them to shop - if go_to_menu_button.is_hovered(draw_handle) && draw_handle.is_mouse_button_pressed(MouseButton::MOUSE_LEFT_BUTTON){ - - game_core.switch_state(GameState::InShop, Some(draw_handle)); - - } - - // TODO: Save game progress - - // // Close and quit buttons - // let bottom_left_button_dimensions = Rectangle { - // x: (win_width as f32 / 2.0) - (SCREEN_PANEL_SIZE.x / 2.0) + 5.0, - // y: (win_height as f32 / 2.0) + (SCREEN_PANEL_SIZE.y / 2.0) - 50.0, - // width: (SCREEN_PANEL_SIZE.x / 2.0) - 15.0, - // height: 40.0, - // }; - // let bottom_right_button_dimensions = Rectangle { - // x: (win_width as f32 / 2.0) + 5.0, - // y: bottom_left_button_dimensions.y, - // width: bottom_left_button_dimensions.width, - // height: bottom_left_button_dimensions.height, - // }; - - // // Check if the mouse is over either button - // let mouse_over_bottom_left_button = - // bottom_left_button_dimensions.check_collision_point_rec(mouse_position); - // let mouse_over_bottom_right_button = - // bottom_right_button_dimensions.check_collision_point_rec(mouse_position); - - // // Render buttons - // draw_handle.draw_rectangle_lines_ex( - // bottom_left_button_dimensions, - // 3, - // match mouse_over_bottom_left_button { - // true => Color::GRAY, - // false => Color::BLACK, - // }, - // ); - // draw_handle.draw_text( - // "Quit", - // bottom_left_button_dimensions.x as i32 + 15, - // bottom_left_button_dimensions.y as i32 + 5, - // 30, - // Color::BLACK, - // ); - // draw_handle.draw_rectangle_lines_ex( - // bottom_right_button_dimensions, - // 3, - // match mouse_over_bottom_right_button { - // true => Color::GRAY, - // false => Color::BLACK, - // }, - // ); - // draw_handle.draw_text( - // "Close", - // bottom_right_button_dimensions.x as i32 + 15, - // bottom_right_button_dimensions.y as i32 + 5, - // 30, - // Color::BLACK, - // ); - - // // Handle click actions on the buttons - // if draw_handle.is_mouse_button_pressed(MouseButton::MOUSE_LEFT_BUTTON) { - // if mouse_over_bottom_left_button { - // return Some(GameState::GameQuit); - // } else if mouse_over_bottom_right_button { - // return Some(game_core.last_state); - // } - // } + // If the player clicks on the button send them to shop + if go_to_menu_button.is_hovered(draw_handle) + && draw_handle.is_mouse_button_pressed(MouseButton::MOUSE_LEFT_BUTTON) + { + return Some(GameState::InShop); + } return None; } diff --git a/src/logic/ingame/mod.rs b/src/logic/ingame/mod.rs index 12681f8..d989183 100644 --- a/src/logic/ingame/mod.rs +++ b/src/logic/ingame/mod.rs @@ -11,7 +11,6 @@ use crate::{ use super::screen::Screen; - pub struct InGameScreen { shader_time_var_location: i32, } diff --git a/src/logic/ingame/playerlogic.rs b/src/logic/ingame/playerlogic.rs index 91e2cef..3988da3 100644 --- a/src/logic/ingame/playerlogic.rs +++ b/src/logic/ingame/playerlogic.rs @@ -1,13 +1,9 @@ use raylib::prelude::*; -use crate::{ - gamecore::GameCore, - pallette::{TRANSLUCENT_WHITE_128, TRANSLUCENT_WHITE_64, TRANSLUCENT_WHITE_96}, -}; +use crate::gamecore::GameCore; const NORMAL_PLAYER_SPEED: i32 = 1; const BOOST_PLAYER_SPEED: i32 = NORMAL_PLAYER_SPEED * 2; -const CAMERA_FOLLOW_SPEED: f32 = 0.7; const TURN_SPEED: f32 = 0.15; const BOOST_DECREASE_PER_SECOND: f32 = 0.65; const BOOST_REGEN_PER_SECOND: f32 = 0.25; @@ -79,7 +75,9 @@ pub fn update_player_movement( let user_request_action = draw_handle.is_mouse_button_pressed(MouseButton::MOUSE_RIGHT_BUTTON); if user_request_action { - game_core.player.begin_attack(&mut game_core.world, draw_handle.get_time()); + game_core + .player + .begin_attack(&mut game_core.world, draw_handle.get_time()); } // Move the player in their direction @@ -150,7 +148,13 @@ pub fn update_player_movement( // Handle the player wearing flippers if game_core.player.inventory.flippers.is_some() { - player_real_movement *= game_core.player.inventory.flippers.as_ref().unwrap().speed_increase; + player_real_movement *= game_core + .player + .inventory + .flippers + .as_ref() + .unwrap() + .speed_increase; } // Handle movement and collisions @@ -190,8 +194,6 @@ pub fn update_player_movement( } // Move the camera to follow the player - let direction_from_cam_to_player = - (game_core.player.position - window_center) - game_core.master_camera.target; let player_screen_position = draw_handle.get_world_to_screen2D(game_core.player.position, game_core.master_camera); diff --git a/src/logic/loadingscreen.rs b/src/logic/loadingscreen.rs index aa13ef2..ba13c53 100644 --- a/src/logic/loadingscreen.rs +++ b/src/logic/loadingscreen.rs @@ -1,11 +1,13 @@ use raylib::prelude::*; -use crate::{gamecore::{GameCore, GameState}, lib::{utils::calculate_linear_slide, wrappers::audio::player::AudioPlayer}}; +use crate::{ + gamecore::{GameCore, GameState}, + lib::{utils::calculate_linear_slide, wrappers::audio::player::AudioPlayer}, +}; use super::screen::Screen; const SECONDS_PER_LOGO: f64 = 4.0; -const RUST_ORANGE: Color = Color::new(222, 165, 132, 255); #[derive(Debug, PartialEq)] enum LoadingScreenState { @@ -138,7 +140,7 @@ impl Screen for LoadingScreen { fn render( &mut self, draw_handle: &mut RaylibDrawHandle, - thread: &RaylibThread, + _thread: &RaylibThread, _audio_system: &mut AudioPlayer, game_core: &mut GameCore, ) -> Option { diff --git a/src/logic/shop/item.rs b/src/logic/shop/item.rs index dc7d8bd..2952784 100644 --- a/src/logic/shop/item.rs +++ b/src/logic/shop/item.rs @@ -1,10 +1,6 @@ -use std::marker::PhantomData; - -use raylib::prelude::*; - -use crate::{items::ItemBase, player::Player, world::World}; - use super::itemui::ShopItemUi; +use crate::{items::ItemBase, player::Player}; +use raylib::prelude::*; pub struct ShopItemWrapper { bounds: Rectangle, @@ -17,7 +13,7 @@ impl ShopItemWrapper { item: T, from_inventory: &Option, first_item_bounds: Rectangle, - index: u8 + index: u8, ) -> Self { // Build new bounds for the UI row let new_bounds = Rectangle { @@ -47,7 +43,9 @@ impl ShopItemWrapper { } pub fn can_player_afford(&self, player: &Player, players_item: &Option) -> bool { - return player.coins >= self.item.get_cost() && ((players_item.is_some() && players_item.as_ref().unwrap().get_level() < 3) || players_item.is_none()); + return player.coins >= self.item.get_cost() + && ((players_item.is_some() && players_item.as_ref().unwrap().get_level() < 3) + || players_item.is_none()); } pub fn purchase(&self, player: &mut Player) -> T { @@ -59,14 +57,26 @@ impl ShopItemWrapper { } pub fn user_clicked_buy(&self, draw_handle: &mut RaylibDrawHandle) -> bool { - return self.ui.buy_button_hovered && draw_handle.is_mouse_button_pressed(MouseButton::MOUSE_LEFT_BUTTON); + return self.ui.buy_button_hovered + && draw_handle.is_mouse_button_pressed(MouseButton::MOUSE_LEFT_BUTTON); } pub fn user_hovering_row(&self, draw_handle: &mut RaylibDrawHandle) -> bool { - return self.bounds.check_collision_point_rec(draw_handle.get_mouse_position()); + return self + .bounds + .check_collision_point_rec(draw_handle.get_mouse_position()); } - pub fn render(&mut self, draw_handle: &mut RaylibDrawHandle, player: &Player, players_item: &Option) { - self.ui.render(draw_handle, self.bounds, self.can_player_afford(player, players_item)); + pub fn render( + &mut self, + draw_handle: &mut RaylibDrawHandle, + player: &Player, + players_item: &Option, + ) { + self.ui.render( + draw_handle, + self.bounds, + self.can_player_afford(player, players_item), + ); } } diff --git a/src/logic/shop/mainui.rs b/src/logic/shop/mainui.rs index d33da9c..bcba9e5 100644 --- a/src/logic/shop/mainui.rs +++ b/src/logic/shop/mainui.rs @@ -1,17 +1,15 @@ -use raylib::prelude::*; - +use super::item::ShopItemWrapper; use crate::{ gamecore::{GameCore, GameState}, items::{AirBag, Flashlight, Flippers, ItemBase, StunGun}, lib::{utils::button::OnScreenButton, wrappers::audio::player::AudioPlayer}, }; - -use super::{item::ShopItemWrapper, itemui::ShopItemUi}; +use raylib::prelude::*; pub fn render_shop( draw_handle: &mut RaylibDrawHandle, _thread: &RaylibThread, - audio_system: &mut AudioPlayer, + _audio_system: &mut AudioPlayer, game_core: &mut GameCore, bounds: Rectangle, ) -> Option { @@ -87,10 +85,26 @@ pub fn render_shop( ); // Render items - stun_gun_buy_ui.render(draw_handle, &game_core.player, &game_core.player.inventory.stun_gun); - air_bag_buy_ui.render(draw_handle, &game_core.player, &game_core.player.inventory.air_bag); - flashlight_buy_ui.render(draw_handle, &game_core.player, &game_core.player.inventory.flashlight); - flippers_buy_ui.render(draw_handle, &game_core.player, &game_core.player.inventory.flippers); + stun_gun_buy_ui.render( + draw_handle, + &game_core.player, + &game_core.player.inventory.stun_gun, + ); + air_bag_buy_ui.render( + draw_handle, + &game_core.player, + &game_core.player.inventory.air_bag, + ); + flashlight_buy_ui.render( + draw_handle, + &game_core.player, + &game_core.player.inventory.flashlight, + ); + flippers_buy_ui.render( + draw_handle, + &game_core.player, + &game_core.player.inventory.flippers, + ); // Handle buying items if stun_gun_buy_ui.can_player_afford(&game_core.player, &game_core.player.inventory.stun_gun) @@ -105,7 +119,8 @@ pub fn render_shop( let item = air_bag_buy_ui.purchase(&mut game_core.player); game_core.player.inventory.air_bag = Some(item); } - if flashlight_buy_ui.can_player_afford(&game_core.player, &game_core.player.inventory.flashlight) + if flashlight_buy_ui + .can_player_afford(&game_core.player, &game_core.player.inventory.flashlight) && flashlight_buy_ui.user_clicked_buy(draw_handle) { let item = flashlight_buy_ui.purchase(&mut game_core.player); @@ -151,8 +166,7 @@ pub fn render_shop( draw_handle.draw_rectangle_rec(box_bounds, Color::WHITE); draw_handle.draw_rectangle_lines_ex(box_bounds, 3, Color::BLACK); - - hovered_item.get_texture( + hovered_item.get_texture( draw_handle, &game_core.resources, Rectangle { @@ -160,9 +174,8 @@ pub fn render_shop( y: box_bounds.y + 10.0, width: (80.0), height: (80.0), - } + }, ); - // Render item description draw_handle.draw_text( diff --git a/src/logic/shop/mod.rs b/src/logic/shop/mod.rs index 9885e04..dcc1aa3 100644 --- a/src/logic/shop/mod.rs +++ b/src/logic/shop/mod.rs @@ -2,22 +2,16 @@ mod item; mod itemui; mod mainui; -use raylib::prelude::*; - +use self::mainui::{render_shop, render_stats}; +use super::screen::Screen; use crate::{ gamecore::{GameCore, GameState}, lib::wrappers::audio::player::AudioPlayer, }; - -use self::mainui::{render_shop, render_stats}; - -use super::screen::Screen; - -const SCREEN_PANEL_SIZE: Vector2 = Vector2 { x: 300.0, y: 380.0 }; +use raylib::prelude::*; #[derive(Debug, Default)] pub struct ShopScreen { - // shop_items: Vec, } impl ShopScreen { @@ -36,8 +30,6 @@ impl Screen for ShopScreen { audio_system: &mut AudioPlayer, game_core: &mut GameCore, ) -> Option { - let mouse_position = draw_handle.get_mouse_position(); - // Render the background draw_handle.draw_texture(&game_core.resources.shop_background, 0, 0, Color::WHITE);