Make a me 3D video game. The video game is a first person shooter. The controls should use keyboard and mouse. The game should be written in the C++ programming language. Use libSDL for input, output, and sound effects. For 3D Graphics you must use WebGPU, specifically use the Dawn library developed for Chrome. Make sure the output code includes a complete and full usage of the Dawn library to draw 3d graphics. There should be no unimplemented functions. To open the window for showing 3D graphics use the GLFW library. Make sure the output does include the source for any shaders needed to run the video game. The 3D graphics implementation should be a simple implementation that does not implement things like dynamic lighting, shadows, or ray tracing. Use the ENTT entity component system for the mechanics of the video game. The player should traverse levels shooting at zombies to kill them. The levels should include a diverse set of elements like stairs, hallways, tunnels, fields, open areas and rooms with doors. The levels should be complex and have a maze like design. The zombies should move slowly but have powerful attacks that can damage the players. There should be 3 types of zombies each with their own unique mechanic that makes them a challenge to kill. The zombies come in waves that get larger as time goes on. When each wave is killed the player should get rewards. The rewards should include ammunition, health packs, and power ups. The video game should have three different types of guns. There should be a pistol, a shotgun, and a machine gun. Each gun should have a unique kind of ammo and unique game mechanics. Use the Bullet Physics engine for all physics simulation including collision detection of projectiles with zombies. Be sure and properly integrate ENTT with Bullet Physics. This video game should be complete, functional and ready to play after being compiled. To avoid generating large amounts of output, prefer to use well tested libraries for functionality when possible. There should not be any skeletons, pseudo code, or incomplete code. Be sure and create a video game that is ready to play. When it is necessary to use assets for sound, geometry, textures and other resources avoid generating large amounts of output. Instead provide hyperlinks to locations where these assets can be downloaded by me. Make sure the hyperlinks actually work. In order to avoid generating large amounts of output do not generate a build system. I will determine the best method to compile this software on my own. You may organize the output into any number of files as needed. For 3d geometry assets make sure to load them from GLTF format files using a library to do so. Make sure the player can move using the keyboard controls. Make sure the player can look and aim the gun using the mouse control. Make sure the player can use the mouse button to shoot the gun. When the player's ammunition for the current gun reaches zero the gun should not be able to fired until more ammunition is obtained. Make sure that when a projectile fired by the player collides with a zombie it damages the zombie. Make sure the player can use keys 1,2, and 3 to select different guns. Make sure the player has health and a health meter is shown somewhere on the screen. When the player's health meter reaches zero the player should die. Make sure the zombies have hit points so they be can damaged when the player shoots them. Make sure the zombies die when their hit points reach zero. Make sure the screen displays the current amount of ammo the player has selected for their current weapon. Make sure the player cannot run off the edge off the map. Make sure all in game entities have at least one asset associated with them so they render in the in-game camera and the player can see them. Make sure all in game events have at least one sound associated with them.