diff --git a/game/assets/FiraSans-Bold.ttf b/game/assets/FiraSans-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e3593fb0f3bd412542237820f34fbe74308bfada Binary files /dev/null and b/game/assets/FiraSans-Bold.ttf differ diff --git a/game/src/fight.rs b/game/src/fight.rs new file mode 100644 index 0000000000000000000000000000000000000000..93b9e4fd62144d8ae6716ed83a7068be136c5d50 --- /dev/null +++ b/game/src/fight.rs @@ -0,0 +1,4 @@ +use bevy::prelude::*; + +use super::{despawn_screen, GameState, }; + diff --git a/game/src/game.rs b/game/src/game.rs index 882f9a3fd4e8e047c93f1cf2715ca6debe9b83a4..b448ebeef1ca3eb63e15010ab8559abb4fe879cb 100644 --- a/game/src/game.rs +++ b/game/src/game.rs @@ -1,10 +1,11 @@ -use std::collections::btree_map::Keys; - +//use std::collections::btree_map::Keys; +use bevy::window::PrimaryWindow; use bevy::prelude::*; use rand::Rng; +const ENTITY_SIZE: f32 = 50.0; -use super::{despawn_screen, DisplayQuality, GameState, Volume, TEXT_COLOR}; +use super::{despawn_screen, GameState, }; // This plugin will contain the game. In this case, it's just be a screen that will // display the current settings for 5 seconds before returning to the menu @@ -12,12 +13,17 @@ use super::{despawn_screen, DisplayQuality, GameState, Volume, TEXT_COLOR}; impl Plugin for GamePlugin { fn build(&self, app: &mut App) { - app.add_systems(OnEnter(GameState::Game), (game_setup ,spawn_enemies)) - .add_systems(Update, game.run_if(in_state(GameState::Game))) + app + .add_systems(OnEnter(GameState::Game), (game_setup ,spawn_enemies)) + .add_systems(Update, + (attack_system.run_if(in_state(GameState::Game)), + restrain_movement.run_if(in_state(GameState::Game)) + ,game.run_if(in_state(GameState::Game)))) + //.add_system(Update, restrain_movement) .add_systems(OnExit(GameState::Game), ( - despawn_game::<Player>, - despawn_game::<Enemy>, - despawn_game::<OnGameScreen>, + despawn_screen::<Player>, + despawn_screen::<Enemy>, + despawn_screen::<OnGameScreen>, )); } } @@ -30,9 +36,6 @@ use super::{despawn_screen, DisplayQuality, GameState, Volume, TEXT_COLOR}; #[derive(Resource, Deref, DerefMut)] struct GameTimer(Timer); - #[derive(Component)] - struct Player; - #[derive(Component)] struct Enemy; @@ -43,13 +46,19 @@ use super::{despawn_screen, DisplayQuality, GameState, Volume, TEXT_COLOR}; height: f32, } + + #[derive(Component)] + pub struct Player{ + collision_box: CollisionBox, + speed: f32, + } + #[derive(Component)] struct CombatText; - - - fn game_setup(mut commands: Commands, + + fn game_setup( + mut commands: Commands, asset_server: Res<AssetServer>, - mut map_query: Query<&Transform, With<Player>> ){ let map_texture = asset_server.load("mapdebut.png"); @@ -81,10 +90,16 @@ use super::{despawn_screen, DisplayQuality, GameState, Volume, TEXT_COLOR}; texture: texture, ..default() }) - .insert(Player); + .insert(Player { + collision_box: CollisionBox{ width: ENTITY_SIZE, height: ENTITY_SIZE}, + speed: 100.0, + }); } - fn spawn_enemies(mut commands: Commands, asset_server: Res<AssetServer>, mut materials: ResMut<Assets<ColorMaterial>>) { + fn spawn_enemies( + mut commands: Commands, + asset_server: Res<AssetServer>, + ) { let enemy_texture = asset_server.load("enemy.png"); // Définir le nombre maximum d'ennemis @@ -147,13 +162,15 @@ use super::{despawn_screen, DisplayQuality, GameState, Volume, TEXT_COLOR}; mut player_query: Query<&Transform, With<Player>>, mut enemy_query: Query<&Transform, With<Enemy>>, combat_text_query: Query<Entity, With<CombatText>>, // Query to handle existing combat texts + mut game_state: ResMut<NextState<GameState>>, ) { // Check if the player is near an enemy to show the combat text - for (player_transform) in player_query.iter_mut() { + for player_transform in player_query.iter_mut() { let mut in_combat = false; - for (enemy_transform) in enemy_query.iter_mut() { + for enemy_transform in enemy_query.iter_mut() { if player_transform.translation.distance(enemy_transform.translation) < 60.0 { // Adjust this value based on the size of your collision box in_combat = true; + game_state.set(GameState::Fight); break; } } @@ -185,8 +202,32 @@ use super::{despawn_screen, DisplayQuality, GameState, Volume, TEXT_COLOR}; } } - fn despawn_game<T: Component>(to_despawn: Query<Entity, With<T>>, mut commands: Commands) { - for entity in &to_despawn { - commands.entity(entity).despawn_recursive(); + pub fn restrain_movement( + mut characters: Query<(&mut Transform, &Player)>, + window_query: Query<&mut Window, With<PrimaryWindow>>, + ) { + for (mut transform, player) in &mut characters { + //let window = window_query.get_single().unwrap(); + let half_size = player.collision_box.width / 2.0; + let x_min: f32 = -600.0 / 2.0 + half_size; + let x_max: f32 = 600.0 / 2.0 - half_size; + let y_min: f32 = -600.0 / 2.0 + half_size; + let y_max = 600.0 / 2.0 - half_size; + + let mut translation: Vec3 = transform.translation; + if translation.x < x_min { + translation.x = x_min; + } else if translation.x > x_max { + translation.x = x_max; + } + + if translation.y < y_min { + translation.y = y_min; + } else if translation.y > y_max { + translation.y = y_max; + } + + transform.translation = translation; } } + diff --git a/game/src/main.rs b/game/src/main.rs index 5572ac7154bab77109ead089ece7c756993e4991..53f0138b5db869a58831e23e4e768c8ebb70a898 100644 --- a/game/src/main.rs +++ b/game/src/main.rs @@ -18,6 +18,7 @@ enum GameState { Menu, Game, Fight, + GameOver, } // One of the two settings that can be set through the menu. It will be a resource in the app diff --git a/game/src/menu.rs b/game/src/menu.rs index f0349fcf99d6a69454949f73b6688b3ca7562515..5930e7102f5a5119be036041441847b06e20e645 100644 --- a/game/src/menu.rs +++ b/game/src/menu.rs @@ -1,5 +1,5 @@ use bevy::{app::AppExit, prelude::*}; -use bevy::{prelude::*, window::WindowResized}; +//use bevy::{prelude::*, window::WindowResized}; use bevy::{window::PrimaryWindow}; use super::{despawn_screen, DisplayQuality, GameState, Volume, TEXT_COLOR}; @@ -206,7 +206,7 @@ use bevy::{window::PrimaryWindow}; // Display the game name parent.spawn( TextBundle::from_section( - "Poke Profs\nMenu", + "Poke Profs\n", TextStyle { font_size: 80.0, color: TEXT_COLOR,