Yes absolutely! I'm gonna work on a more comprehensive list that I'll put on the page and github readme, but here's a summary:
The whole thing is written in C++ with GLSL shaders using several third party libraries:
- OpenGL with GLFW as a rendering backend - https://www.glfw.org/
- Emscripten to port it for the browser - https://emscripten.org/
- I used glm for my math/linear algebra library - https://github.com/g-truc/glm
- Assimp for loading models - https://www.assimp.org/
- Blender for creating models - https://www.blender.org/
- glText for text rendering - https://github.com/vallentin/glText
If I remember correctly there are a total of four models that the project uses, a floor tile, a wall tile, the robot player model, and a second robot model for the menu screen (a bit redundant, but it was quicker at the time).
The maps are loaded from simple text files with different characters representing different tile types, and that information is put into an array. For rendering I loop through that array and offset the tile model by each position and render it. I'm not sure if that's the most optimal way of doing it, but it works.
For the orbit camera I adapted a remarkably simple algorithm that takes the player's and camera's position and direction, and the distance between them to find a target position for the camera, and uses the player's direction as the target direction for the camera. Then it's a simple matter of linearly interpolating the camera's current pos/rot to the target pos/rot. The GLM library handles all the vector and matrix math. Here's where I got that algorithm:
https://www.gamedev.net/forums/topic/659459-glmopengl-orbital-camera-c/5171247/
For the collision detection/resolution I used Javidx9's algorithm from his Circle vs Rectangle Collisisons video, which works beautifully because the player and map only need to interact in two dimensions, so I didn't even need to alter it to care about the up/down dimension.
https://github.com/OneLoneCoder/Javidx9/blob/master/PixelGameEngine/SmallerProje...