From d5fd1384da3c5bca0a5a020bdc8431b8dff0903a Mon Sep 17 00:00:00 2001
From: Ho <william.ho@etu.hesge.ch>
Date: Tue, 24 Oct 2023 13:42:00 +0200
Subject: [PATCH] Je suis trop fort ^^

---
 game/Cargo.lock          |  97 +++++++--------
 game/Cargo.toml          |   1 +
 game/assets/eleve.png    | Bin 0 -> 243 bytes
 game/assets/enemy.png    | Bin 0 -> 214 bytes
 game/assets/mapdebut.png | Bin 0 -> 5557 bytes
 game/src/game.rs         | 252 +++++++++++++++++++++++++--------------
 game/src/main.rs         |  16 ++-
 game/src/menu.rs         |  35 +++++-
 game/src/player.rs       |  43 +++++++
 9 files changed, 298 insertions(+), 146 deletions(-)
 create mode 100644 game/assets/eleve.png
 create mode 100644 game/assets/enemy.png
 create mode 100644 game/assets/mapdebut.png
 create mode 100644 game/src/player.rs

diff --git a/game/Cargo.lock b/game/Cargo.lock
index 1ee3696..b06f418 100644
--- a/game/Cargo.lock
+++ b/game/Cargo.lock
@@ -354,7 +354,7 @@ dependencies = [
  "fastrand 1.9.0",
  "js-sys",
  "notify",
- "parking_lot 0.12.1",
+ "parking_lot",
  "serde",
  "thiserror",
  "wasm-bindgen",
@@ -378,7 +378,7 @@ dependencies = [
  "bevy_transform",
  "bevy_utils",
  "oboe",
- "parking_lot 0.12.1",
+ "parking_lot",
  "rodio",
 ]
 
@@ -712,7 +712,7 @@ dependencies = [
  "erased-serde",
  "glam",
  "once_cell",
- "parking_lot 0.12.1",
+ "parking_lot",
  "serde",
  "smallvec",
  "smol_str",
@@ -770,7 +770,7 @@ dependencies = [
  "ktx2",
  "naga",
  "naga_oil",
- "parking_lot 0.12.1",
+ "parking_lot",
  "regex",
  "ruzstd",
  "serde",
@@ -1321,7 +1321,7 @@ dependencies = [
  "ndk-context",
  "oboe",
  "once_cell",
- "parking_lot 0.12.1",
+ "parking_lot",
  "wasm-bindgen",
  "wasm-bindgen-futures",
  "web-sys",
@@ -1485,7 +1485,7 @@ checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
 dependencies = [
  "cfg-if",
  "libc",
- "redox_syscall 0.3.5",
+ "redox_syscall",
  "windows-sys 0.48.0",
 ]
 
@@ -1567,6 +1567,7 @@ name = "game"
 version = "0.1.0"
 dependencies = [
  "bevy",
+ "rand",
 ]
 
 [[package]]
@@ -2462,7 +2463,7 @@ version = "0.3.46"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "8378ac0dfbd4e7895f2d2c1f1345cab3836910baf3a300b000d04250f0c8428f"
 dependencies = [
- "redox_syscall 0.3.5",
+ "redox_syscall",
 ]
 
 [[package]]
@@ -2486,17 +2487,6 @@ version = "2.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e52c774a4c39359c1d1c52e43f73dd91a75a614652c825408eec30c95a9b2067"
 
-[[package]]
-name = "parking_lot"
-version = "0.11.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
-dependencies = [
- "instant",
- "lock_api",
- "parking_lot_core 0.8.6",
-]
-
 [[package]]
 name = "parking_lot"
 version = "0.12.1"
@@ -2504,21 +2494,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
 dependencies = [
  "lock_api",
- "parking_lot_core 0.9.8",
-]
-
-[[package]]
-name = "parking_lot_core"
-version = "0.8.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc"
-dependencies = [
- "cfg-if",
- "instant",
- "libc",
- "redox_syscall 0.2.16",
- "smallvec",
- "winapi",
+ "parking_lot_core",
 ]
 
 [[package]]
@@ -2529,7 +2505,7 @@ checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
 dependencies = [
  "cfg-if",
  "libc",
- "redox_syscall 0.3.5",
+ "redox_syscall",
  "smallvec",
  "windows-targets 0.48.5",
 ]
@@ -2596,6 +2572,12 @@ dependencies = [
  "unicode-xid",
 ]
 
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
 [[package]]
 name = "proc-macro-crate"
 version = "1.3.1"
@@ -2636,6 +2618,36 @@ version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "17fd96390ed3feda12e1dfe2645ed587e0bea749e319333f104a33ff62f77a0b"
 
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "libc",
+ "rand_chacha",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
 [[package]]
 name = "range-alloc"
 version = "0.1.3"
@@ -2654,15 +2666,6 @@ version = "0.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a0d463f2884048e7153449a55166f91028d5b0ea53c79377099ce4e8cf0cf9bb"
 
-[[package]]
-name = "redox_syscall"
-version = "0.2.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
-dependencies = [
- "bitflags 1.3.2",
-]
-
 [[package]]
 name = "redox_syscall"
 version = "0.3.5"
@@ -3292,7 +3295,7 @@ dependencies = [
  "js-sys",
  "log",
  "naga",
- "parking_lot 0.11.2",
+ "parking_lot",
  "profiling",
  "raw-window-handle",
  "smallvec",
@@ -3317,7 +3320,7 @@ dependencies = [
  "codespan-reporting",
  "log",
  "naga",
- "parking_lot 0.11.2",
+ "parking_lot",
  "profiling",
  "raw-window-handle",
  "rustc-hash",
@@ -3356,7 +3359,7 @@ dependencies = [
  "metal",
  "naga",
  "objc",
- "parking_lot 0.11.2",
+ "parking_lot",
  "profiling",
  "range-alloc",
  "raw-window-handle",
@@ -3642,7 +3645,7 @@ dependencies = [
  "orbclient",
  "percent-encoding",
  "raw-window-handle",
- "redox_syscall 0.3.5",
+ "redox_syscall",
  "wasm-bindgen",
  "wayland-scanner",
  "web-sys",
diff --git a/game/Cargo.toml b/game/Cargo.toml
index cf168c6..ef923c5 100644
--- a/game/Cargo.toml
+++ b/game/Cargo.toml
@@ -7,6 +7,7 @@ edition = "2021"
 
 [dependencies]
 bevy = "0.11.3"
+rand = "0.8.5"
 
 # Enable a small amount of optimization in debug mode
 [profile.dev]
diff --git a/game/assets/eleve.png b/game/assets/eleve.png
new file mode 100644
index 0000000000000000000000000000000000000000..7f0a0676c2003810983da014392052b492860b08
GIT binary patch
literal 243
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z_8ZS
z#WBRfKRIQAfWf0n_Ufme*>8$DwMjYRYLckSbsl4m*@_Zu4JOrWHxf&4eB*7GxWIex
zRnzj-tNwX^o@Qk8_YSWa$FXUA*@pxAFEix$Dcoduxxs9MrGI#+V~mrzxI?aMr(4dp
z<|~Q3&D)K%G-f3}RQ&UVudvbL16#u-M)!+aQ)c|RDDGCH(@>gM-!H{Cuj$Bh)-K*3
w^&R{<){n2ZCv5&#e7ZT)ZMVO~ItGS!RX&10#Bc0oU|?YIboFyt=akR{09GnqDF6Tf

literal 0
HcmV?d00001

diff --git a/game/assets/enemy.png b/game/assets/enemy.png
new file mode 100644
index 0000000000000000000000000000000000000000..263c034500842964567f63c10ac5c96ba9f18812
GIT binary patch
literal 214
zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s77>k44ofy`glX=O&z%aqn
z#WBRfKRIQAfI-lT`HY7fbfdTZIi9|vzn{NLZVj76opsyQp3gC1JTB4-ve%A%C<zt4
zp&&6^gV{l9-nvzXUh%%%V8$b!%zNbj|NqUr2`Mce&N~(CGT9cevs`3L_{?VZyg9a0
z`BZ_cYGE8hrF8qj5+eqY-UU0{*%p{MmY6u1E~;kEu6TIb=ZUm~mlG3%@KQU$qqgn;
R85kHCJYD@<);T3K0RY4>N;m)j

literal 0
HcmV?d00001

diff --git a/game/assets/mapdebut.png b/game/assets/mapdebut.png
new file mode 100644
index 0000000000000000000000000000000000000000..b79ba97a84ead7173fe31219fcdaa5a637e20897
GIT binary patch
literal 5557
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

literal 0
HcmV?d00001

diff --git a/game/src/game.rs b/game/src/game.rs
index de6a741..882f9a3 100644
--- a/game/src/game.rs
+++ b/game/src/game.rs
@@ -1,6 +1,10 @@
+use std::collections::btree_map::Keys;
+
 use bevy::prelude::*;
+use rand::Rng;
+
 
-    use super::{despawn_screen, DisplayQuality, GameState, Volume, TEXT_COLOR};
+use super::{despawn_screen, DisplayQuality, GameState, Volume, TEXT_COLOR};
 
     // 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
@@ -8,117 +12,181 @@ use bevy::prelude::*;
 
     impl Plugin for GamePlugin {
         fn build(&self, app: &mut App) {
-            app.add_systems(OnEnter(GameState::Game), game_setup)
+            app.add_systems(OnEnter(GameState::Game), (game_setup ,spawn_enemies))
                 .add_systems(Update, game.run_if(in_state(GameState::Game)))
-                .add_systems(OnExit(GameState::Game), despawn_screen::<OnGameScreen>);
+                .add_systems(OnExit(GameState::Game), (
+                    despawn_game::<Player>,
+                    despawn_game::<Enemy>,
+                    despawn_game::<OnGameScreen>,
+                ));
         }
     }
 
     // Tag component used to tag entities added on the game screen
+
     #[derive(Component)]
     struct OnGameScreen;
 
     #[derive(Resource, Deref, DerefMut)]
     struct GameTimer(Timer);
 
-    fn game_setup(
-        mut commands: Commands,
-        display_quality: Res<DisplayQuality>,
-        volume: Res<Volume>,
-    ) {
+    #[derive(Component)]
+    struct Player;
+
+    #[derive(Component)]
+    struct Enemy;
+
+
+    #[derive(Component)]
+    struct CollisionBox {
+        width: f32,
+        height: f32,
+    }
+
+    #[derive(Component)]
+    struct CombatText;
+    
+    
+    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");
         commands
-            .spawn((
-                NodeBundle {
-                    style: Style {
-                        width: Val::Percent(100.0),
-                        height: Val::Percent(100.0),
-                        // center children
-                        align_items: AlignItems::Center,
-                        justify_content: JustifyContent::Center,
-                        ..default()
-                    },
+            .spawn(
+                SpriteBundle {
+                sprite: Sprite {
+                    custom_size: Some(Vec2::new(600.0, 600.0)),
+                    ..default()
+                }, // Assurez-vous d'ajuster la taille selon votre image
+                texture: map_texture,
+                ..default()
+            },
+            //OnGameScreen,
+        )
+        .insert(OnGameScreen);
+
+        let texture = asset_server.load("eleve.png");
+        commands
+            .spawn(
+                SpriteBundle {
+                sprite: Sprite {
+                custom_size: Some(Vec2::new(50.0, 50.0)),
+                color: Color::WHITE,
+                flip_x: false,
+                flip_y: false,
+                ..default()
+            },
+            texture: texture,
+            ..default()
+        })
+        .insert(Player);
+    }
+
+    fn spawn_enemies(mut commands: Commands, asset_server: Res<AssetServer>, mut materials: ResMut<Assets<ColorMaterial>>) {
+        let enemy_texture = asset_server.load("enemy.png");
+    
+        // Définir le nombre maximum d'ennemis
+        let max_enemies = 5;
+    
+        // Générer une position aléatoire pour chaque ennemi
+        let mut rng = rand::thread_rng();
+        for _ in 0..max_enemies {
+            let x_position = rng.gen_range(-300.0..300.0); // Assurez-vous d'ajuster ces valeurs en fonction de la taille de votre carte
+            let y_position = rng.gen_range(-300.0..300.0);
+    
+            commands.spawn(SpriteBundle {
+                sprite: Sprite {
+                    custom_size: Some(Vec2::new(50.0, 50.0)),
+                    ..default()
+                },
+                transform: Transform {
+                    translation: Vec3::new(x_position, y_position, 0.0),
                     ..default()
                 },
-                OnGameScreen,
-            ))
-            .with_children(|parent| {
-                // First create a `NodeBundle` for centering what we want to display
-                parent
-                    .spawn(NodeBundle {
-                        style: Style {
-                            // This will display its children in a column, from top to bottom
-                            flex_direction: FlexDirection::Column,
-                            // `align_items` will align children on the cross axis. Here the main axis is
-                            // vertical (column), so the cross axis is horizontal. This will center the
-                            // children
-                            align_items: AlignItems::Center,
-                            ..default()
-                        },
-                        background_color: Color::BLACK.into(),
-                        ..default()
-                    })
-                    .with_children(|parent| {
-                        // Display two lines of text, the second one with the current settings
-                        parent.spawn(
-                            TextBundle::from_section(
-                                "Will be back to the menu shortly...",
-                                TextStyle {
-                                    font_size: 80.0,
-                                    color: TEXT_COLOR,
-                                    ..default()
-                                },
-                            )
-                            .with_style(Style {
-                                margin: UiRect::all(Val::Px(50.0)),
-                                ..default()
-                            }),
-                        );
-                        parent.spawn(
-                            TextBundle::from_sections([
-                                TextSection::new(
-                                    format!("quality: {:?}", *display_quality),
-                                    TextStyle {
-                                        font_size: 60.0,
-                                        color: Color::BLUE,
-                                        ..default()
-                                    },
-                                ),
-                                TextSection::new(
-                                    " - ",
-                                    TextStyle {
-                                        font_size: 60.0,
-                                        color: TEXT_COLOR,
-                                        ..default()
-                                    },
-                                ),
-                                TextSection::new(
-                                    format!("volume: {:?}", *volume),
-                                    TextStyle {
-                                        font_size: 60.0,
-                                        color: Color::GREEN,
-                                        ..default()
-                                    },
-                                ),
-                            ])
-                            .with_style(Style {
-                                margin: UiRect::all(Val::Px(50.0)),
-                                ..default()
-                            }),
-                        );
-                    });
-            });
-        // Spawn a 5 seconds timer to trigger going back to the menu
-        commands.insert_resource(GameTimer(Timer::from_seconds(5.0, TimerMode::Once)));
+                texture: enemy_texture.clone(),
+                ..default()
+            })
+            .insert(Enemy)
+            //.insert(Health { current: 100, max: 100 })
+            //.insert(Attack { damage: 10 })
+            .insert(CollisionBox { width: 75.0, height: 75.0 });
+        }
     }
+    
 
-    // Tick the timer, and change state when finished
     fn game(
+        mut characters: Query<(&mut Transform, &Sprite), With<Player>>,
+        input: Res<Input<KeyCode>>,
         time: Res<Time>,
         mut game_state: ResMut<NextState<GameState>>,
-        mut timer: ResMut<GameTimer>,
     ) {
-        if timer.tick(time.delta()).finished() {
-            game_state.set(GameState::Menu);
+        for (mut transform, _) in &mut characters {
+            if input.pressed(KeyCode::W) {
+                transform.translation.y += 100.0 * time.delta_seconds();
+            }
+            if input.pressed(KeyCode::S) {
+                transform.translation.y -= 100.0 * time.delta_seconds();
+            }
+            if input.pressed(KeyCode::D) {
+                transform.translation.x += 100.0 * time.delta_seconds();
+            }
+            if input.pressed(KeyCode::A) {
+                transform.translation.x -= 100.0 * time.delta_seconds();
+            }
+            if input.pressed(KeyCode::Escape) {
+                game_state.set(GameState::Menu);
+            }
         }
     }
 
+    fn attack_system(
+        mut commands: Commands,
+        asset_server: Res<AssetServer>,
+        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
+    ) {
+        // Check if the player is near an enemy to show the combat text
+        for (player_transform) in player_query.iter_mut() {
+            let mut in_combat = false;
+            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;
+                    break;
+                }
+            }
+            let has_combat_text = combat_text_query.iter().next().is_some();
+    
+            if in_combat && !has_combat_text {
+                // Display the combat text
+                commands.spawn(TextBundle {
+                    text: Text {
+                        sections: vec![TextSection {
+                            value: "Combat".to_string(),
+                            style: TextStyle {
+                                font: asset_server.load("FiraSans-Bold.ttf"), // Adjust this font path
+                                font_size: 40.0,
+                                color: Color::WHITE,
+                            },
+                        }],
+                        ..Default::default()
+                    },
+                    ..Default::default()
+                })
+                .insert(CombatText);
+            } else if !in_combat && has_combat_text {
+                // Remove the combat text
+                for entity in combat_text_query.iter() {
+                    commands.entity(entity).despawn();
+                }
+            }
+        }
+    }
+    
+    fn despawn_game<T: Component>(to_despawn: Query<Entity, With<T>>, mut commands: Commands) {
+        for entity in &to_despawn {
+            commands.entity(entity).despawn_recursive();
+        }
+    }
diff --git a/game/src/main.rs b/game/src/main.rs
index 83417e8..5572ac7 100644
--- a/game/src/main.rs
+++ b/game/src/main.rs
@@ -17,6 +17,7 @@ enum GameState {
     Splash,
     Menu,
     Game,
+    Fight,
 }
 
 // One of the two settings that can be set through the menu. It will be a resource in the app
@@ -27,17 +28,25 @@ enum DisplayQuality {
     High,
 }
 
+// Stores the various windows-resolution we can select between.
+#[derive(Resource)]
+struct ResolutionSettings {
+    large: Vec2,
+    medium: Vec2,
+    small: Vec2,
+}
+
 // One of the two settings that can be set through the menu. It will be a resource in the app
 #[derive(Resource, Debug, Component, PartialEq, Eq, Clone, Copy)]
 struct Volume(u32);
 
 fn main() {
-    App::new()/*
+    App::new()
         .insert_resource(ResolutionSettings {
             large: Vec2::new(1920.0, 1080.0),
-            medium: Vec2::new(800.0, 600.0),
+            medium: Vec2::new(1200.0, 720.0),
             small: Vec2::new(640.0, 360.0),
-        })*/
+        })
         .add_plugins(DefaultPlugins)
         // Insert as resource the initial value for the settings resources
         .insert_resource(DisplayQuality::Medium)
@@ -55,7 +64,6 @@ fn setup(mut commands: Commands) {
     commands.spawn(Camera2dBundle::default());
 }
 
-
 mod game; 
 
 mod menu;
diff --git a/game/src/menu.rs b/game/src/menu.rs
index a3f023e..f0349fc 100644
--- a/game/src/menu.rs
+++ b/game/src/menu.rs
@@ -1,7 +1,9 @@
 use bevy::{app::AppExit, prelude::*};
+use bevy::{prelude::*, window::WindowResized};
+use bevy::{window::PrimaryWindow};
 
     use super::{despawn_screen, DisplayQuality, GameState, Volume, TEXT_COLOR};
-
+    use crate::ResolutionSettings;
     // This plugin manages the menu, with 5 different screens:
     // - a main menu with "New Game", "Settings", "Quit"
     // - a settings menu with two submenus and a back button
@@ -55,7 +57,8 @@ use bevy::{app::AppExit, prelude::*};
                 .add_systems(
                     Update,
                     (menu_action, button_system).run_if(in_state(GameState::Menu)),
-                );
+                )
+                .add_systems(Update, toggle_resolution);
         }
     }
 
@@ -147,7 +150,7 @@ use bevy::{app::AppExit, prelude::*};
         menu_state.set(MenuState::Main);
     }
 
-    fn main_menu_setup(mut commands: Commands, asset_server: Res<AssetServer>) {
+    fn main_menu_setup(mut commands: Commands, asset_server: Res<AssetServer>, window_query: Query<&mut Window, With<PrimaryWindow>>) {
         // Common style for all buttons on the screen
         let button_style = Style {
             width: Val::Px(250.0),
@@ -172,6 +175,8 @@ use bevy::{app::AppExit, prelude::*};
             ..default()
         };
 
+        let window = window_query.get_single().unwrap();
+
         commands
             .spawn((
                 NodeBundle {
@@ -189,6 +194,7 @@ use bevy::{app::AppExit, prelude::*};
                 parent
                     .spawn(NodeBundle {
                         style: Style {
+                            width: Val::Px(5000.0),
                             flex_direction: FlexDirection::Column,
                             align_items: AlignItems::Center,
                             ..default()
@@ -533,6 +539,29 @@ use bevy::{app::AppExit, prelude::*};
             });
     }
 
+    /// This system shows how to request the window to a new resolution
+fn toggle_resolution(
+    keys: Res<Input<KeyCode>>,
+    mut windows: Query<&mut Window>,
+    resolution: Res<ResolutionSettings>,
+) {
+    let mut window = windows.single_mut();
+
+    if keys.just_pressed(KeyCode::Key1) {
+        let res = resolution.small;
+        window.resolution.set(res.x, res.y);
+    }
+    if keys.just_pressed(KeyCode::Key2) {
+        let res = resolution.medium;
+        window.resolution.set(res.x, res.y);
+    }
+    if keys.just_pressed(KeyCode::Key3) {
+        let res = resolution.large;
+        window.resolution.set(res.x, res.y);
+    }
+}
+
+
     fn menu_action(
         interaction_query: Query<
             (&Interaction, &MenuButtonAction),
diff --git a/game/src/player.rs b/game/src/player.rs
new file mode 100644
index 0000000..db1fdf6
--- /dev/null
+++ b/game/src/player.rs
@@ -0,0 +1,43 @@
+use bevy::prelude::*;
+
+pub struct PlayerHistory {
+    pub target_position: Vec2,
+    pub new_position: Vec2,
+    pub timer: Timer,
+}
+
+impl PlayerHistory {
+    pub fn update_position(&mut self, new_position: Vec3) {
+        self.target_position = self.new_position;
+        self.new_position = new_position;
+    }
+}
+
+#[derive(Component)]
+struct Enemy;
+
+
+#[derive(Component)]
+struct CollisionBox {
+    width: f32,
+    height: f32,
+}
+
+
+pub struct PlayerPlugin;
+
+impl Plugin for PlayerPlugin {
+    fn build(&self, app: &mut App) {
+        app.insert_resource(PlayerHistory{
+            trarget_position: Vec2::ZERO,
+            new_position: Vec2::ZERO,
+            timer: Timer::new(Duration::from_secs_f32(0.2)),
+            })
+            .
+            .add_systems(Update, character_movement)
+            .add_systems(Startup,spawn_enemies)
+            .add_systems(Update,attack_system)
+
+    }
+
+}
-- 
GitLab