public GameMenu() : base()
        {
            font  = Loader.Fonts["basic"];
            debug = false;

            floorTiles    = new Texture2D[6];
            floorTiles[0] = Loader.Images["grass"];
            floorTiles[1] = Loader.Images["grass2"];
            floorTiles[2] = Loader.Images["grass3"];
            floorTiles[3] = Loader.Images["flowers"];
            floorTiles[4] = Loader.Images["dirt"];
            floorTiles[5] = Loader.Images["woodTile"];

            DebugConsole.addLine("   -Debug Console-:");
            rectTex = Loader.Images["rect"];
            heart   = Loader.Images["heart"];
            water   = Loader.Images["water"];
            bread   = Loader.Images["bread"];

            player = new Player(new Vector2(256, 256), 100, "playerup");
            objets.Add(new Pancarte(new Vector2(14 * 16, 14 * 16), "panneau", 3, "Bienvenu sur Life In The Wild, il semblerait que vous ayez\n" +
                                    "atterit dans un terriroire inconnu. Avant de mourrir de faim,\nil est suggere de partir recuperer du bois et de la pierre\npour construire un abris et" +
                                    "de planter des graines pour\npouvoir subvenir a vos besoins." +
                                    " Les touches I et C de votre\nclavier devraient vous interesser...\nBonne Chance"));
            camera  = new Camera();
            chicken = new Chicken(new Vector2(256 + 16, 256 + 16), "chicken_left", 10);

            inventaire  = new Inventaire();
            crafting    = new Crafting(player);
            affPancarte = new AffichagePancarte();

            terrain = new Terrain(50, floorTiles);
            int mapSize = terrain.getMapSize();

            //fais apparaitre 70 arbres, buissons, cailloux...
            for (int i = 0; i <= 10000; i++)
            {
                objets.Add(new Arbre(new Vector2(rnd.Next(mapSize - 1) * 16, rnd.Next(mapSize - 1) * 16), "bush", 3));
                //objets.Add(new Rock(new Vector2(rnd.Next(mapSize-1) * 16, rnd.Next(mapSize-1) * 16), "rocks", 3));
                //objets.Add(new Arbre(new Vector2(rnd.Next(mapSize-1) * 16, rnd.Next(mapSize-1) * 16), "tree", 3));
                //objets.Add(new Arbre(new Vector2(rnd.Next(mapSize-1) * 16, rnd.Next(mapSize-1) * 16), "sapin", 3));
                //objets.Add(new Vegetable(new Vector2(rnd.Next(mapSize-1) * 16, rnd.Next(mapSize-1) * 16),"seed", "crop", 3));
            }

            //Géneration de barrieres autour du terrain

            /*for(int i = 0; i < 50; i++)
             * {
             *  objets.Add(new Arbre(new Vector2(i * 16, 0), "tree", 900));
             *  objets.Add(new Arbre(new Vector2(0, i * 16), "tree", 900));
             *  objets.Add(new Arbre(new Vector2(i * 16, 50 * 16), "tree", 900));
             *  objets.Add(new Arbre(new Vector2(50 * 16, i * 16), "tree", 900));
             * }*/

            //Vérifie qu'aucune entité n'est sur le joueur
            for (int i = 0; i < objets.Count; i++)
            {
                if (objets[i].getPosition() == player.getPosition())
                {
                    objets[i].Destroy(inventaire, objets, objets[i]);
                    DebugConsole.addLine("Destroying: " + objets[i]);
                }
            }
        }
        public virtual void Update(List <Entity> objets, int[,] map, Inventaire inventaire, Crafting crafting, AffichagePancarte affPancarte)
        {
            KeyboardState newState    = Keyboard.GetState();
            Vector2       newPosition = position;

            hunger -= .008f;
            thirst -= .008f;

            if (hunger >= 120)
            {
                hunger = 120;
            }
            if (thirst >= 120)
            {
                thirst = 120;
            }

            if (hunger <= 0 || thirst <= 0)
            {
                hp -= .05f;
            }
            else
            {
                hp = 100;
            }

            if (Keyboard.GetState().IsKeyDown(Keys.S))
            {
                this.texture        = up;
                this.direction.Y    = 1;
                this.dir            = new Vector2(0, 1);
                this.newPosition.Y += 1;
            }

            if (Keyboard.GetState().IsKeyDown(Keys.Z))
            {
                this.texture        = down;
                this.direction.Y    = -1;
                this.dir            = new Vector2(0, -1);
                this.newPosition.Y -= 1;
            }

            if (Keyboard.GetState().IsKeyDown(Keys.Q))
            {
                this.texture        = left;
                this.direction.X    = -1;
                this.dir            = new Vector2(-1, 0);
                this.newPosition.X -= 1;
            }

            if (Keyboard.GetState().IsKeyDown(Keys.D))
            {
                this.texture        = right;
                this.direction.X    = 1;
                this.dir            = new Vector2(1, 0);
                this.newPosition.X += 1;
            }

            if (newState.IsKeyDown(Keys.Escape) && oldState.IsKeyUp(Keys.Escape))
            {
                if (affPancarte.getActive())
                {
                    affPancarte.Activate();
                }
                if (inventaire.getActive())
                {
                    inventaire.Activate();
                }
                if (crafting.getActive())
                {
                    crafting.Activate();
                }
            }

            // Interaction
            if (newState.IsKeyDown(Keys.E) && oldState.IsKeyUp(Keys.E))
            {
                if (CollisionManager(objets, newPosition + dir) is Entity theEntity)
                {
                    theEntity.Interact(this, inventaire, objets);
                }
            }

            // Menu inventaire
            if (newState.IsKeyDown(Keys.I) && oldState.IsKeyUp(Keys.I))
            {
                DebugConsole.addLine("Ouverture Inventaire");
                inventaire.Activate();
            }

            // Menu craft
            if (newState.IsKeyDown(Keys.C) && oldState.IsKeyUp(Keys.C))
            {
                DebugConsole.addLine("Ouverture Crafting");
                crafting.Activate();
            }

            // Labourer
            if (newState.IsKeyDown(Keys.L) && oldState.IsKeyUp(Keys.L))
            {
                map[(int)((this.position.Y + 8) / 16), (int)((this.position.X + 8) / 16)] = 4;
                mow.Play();//son
            }

            if (newState.IsKeyDown(Keys.Space) && oldState.IsKeyUp(Keys.Space))
            {
                if (CollisionManager(objets, position + dir * 4) != null)
                {
                    CollisionManager(objets, position + dir * 4).Damage(1);
                    hit.Play();
                }
                else//si on collisionne avec rien
                {
                    mow.Play();//son
                    switch (outil)
                    {
                    case 1:    //mur en pierre
                        spawnObject(objets, new Wall(new Vector2(0, 0), "wallFace", "flatrock", 2));
                        inventaire.removeItem(new Item("pierre", 1));
                        break;

                    case 2:    //puis
                        spawnObject(objets, new Well(new Vector2(0, 0), "well", 2));
                        inventaire.removeItem(new Item("pierre", 1));
                        break;

                    case 3:    //feu de camp
                        spawnObject(objets, new Arbre(new Vector2(0, 0), "campfire", 2));
                        inventaire.removeItem(new Item("bois", 1));
                        break;

                    case 4:    //porte
                        spawnObject(objets, new Door(new Vector2(0, 0), "door", "door_open", 2));
                        inventaire.removeItem(new Item("bois", 1));
                        break;

                    case 5:    //planter
                        if (map[(int)Math.Round((this.position.Y + (this.dir.Y * 16)) / 16), (int)Math.Round((this.position.X + (this.dir.X * 16)) / 16)] == 4)
                        {
                            spawnObject(objets, new Vegetable(new Vector2(0, 0), "seed", "crop", 2));
                            inventaire.removeItem(new Item("graine", 1));
                        }
                        else
                        {
                            DebugConsole.addLine(map[(int)Math.Round((this.position.X + (this.dir.X * 16)) / 16), (int)Math.Round((this.position.Y + (this.dir.Y * 16)) / 16)].ToString());
                        }
                        break;

                    case 6:    //enclume
                        spawnObject(objets, new Arbre(new Vector2(0, 0), "anvil", 2));
                        inventaire.removeItem(new Item("pierre", 1));
                        break;

                    case 7:    //parquet
                        map[(int)((this.position.Y + 8) / 16), (int)((this.position.X + 8) / 16)] = 5;
                        break;
                    }
                }
            }
            oldState = newState;
            //collision avec une pancarte
            if (CollisionManager(objets, newPosition + dir) is Pancarte thePancarte && affPancarte.getActive() == false)
            {
                affPancarte.Activate(thePancarte.getText());
            }
            base.Update(objets);
        }