I’ve been working on my game engine for about three years now. I’ve mostly been planning on making iPhone games with it, but it runs on windows and mac too, where I also have a user friendly editor to make the scenes and levels.
I can register classes in the code to expose them as game objects that I can place in the scene. Then I can add parameters to be able to modify values on individual objects in the editor. The parameters can be anything from a number to a reference to another object in the scene. When I’ve placed some objects and models, I can start the game directly from the editor.
I use OpenGL for graphics, OpenAL for audio, Xinput for xbox controllers, and some file loading libraries. Other than that, I don’t use that many libraries. I try to make most things from the ground up, including the UI which is rendered as textured quads in OpenGL, and alot of the design is generated from code (buttons, list backgrounds, top bars). The interface is customizable and all windows can be docked.
To make the scenes look as good as possible while maintaining a good framerate, I made a lightmapper that calculates global illumination throughout the scene and bakes it to textures. For dynamic lighting I generate a cubemap of the scene, make one version for diffuse lighting, and one for reflection where I keep different bluriness in the mipmaps to be able to change the sharpness based on a roughnessmap. I also have a node based material system that generates shaders from your node connections.
I’ve started making a third person shooter with it. It’s running at 60 fps on an iPhone 6+. So far you can walk, run, shoot, jump and dodge. The enemies walks around and shoots at you when they see you. I think it’s turning out quite fun.