Recently, I started a new project, in which I am creating a new game engine tool on the browser from scratch using Javascript.
This project was in the first place a personal learning experience, and the idea behind it was to try to make powerful tools on the browser like game engines that would have to deal with performance challenges and limitations related to Javascript engines, which would expose me to as many interesting problems as possible.
The design behind this engine was inspired by what is done in Unity for Entity Component System architecture, as well as scripting graphs used in Unreal Engine Blueprints.
Through the scripting feature, you can develop the game faster by using the built-in functions of the engine or creating your own. Furthermore, it allows non-technical users to develop their games without the need to understand programming language since it uses natural language and visual representations of the instructions.
I integrated the tilemap system, which allows users to design game levels and rapidly prototype the world when creating 2D games by storing and handling tile assets inside the engine, and by providing required components such as Grid Components and Collisions Components.
Another feature that is necessary to build games is Animation; in this version of the engine, keyframes can be used to create animations, which can be applied to all entities attached to it, for example, moving the player, changing collision properties, changing meshes, script variables, and all other component properties. With the scripting feature, you can also define transitions between animations, use variables, and triggers, and use them to control how entities are animated.
Once you have created an entity with all components and configuration, you can create an instance of the entity that can be used directly in the editor when designing the level, or programmatically by using built-in functions in the script.
Different physics engines can be supported in this version of the game engine, and through the use of built-in functions, the game engine can delegate controls of entities to the physics engine, such as moving the body or detecting collisions.
One of the important features of this version is the User Interface, which includes the use of texts, images, and buttons for many applications, including game menus, health bars, and titles.
The engine also supports lighting, so you can use different types of lights, global light and point light, and you can use the editor to customize the light using the different properties provided by the engine, for example, the size of the light, the color, the intensity, and the inner radius. You can also specify which entities will be affected by the lighting.
Different actions can be used to customize the camera and how it reacts when following an attached entity. Additionally, you can parent the camera to an entity, such as a background, to fix it when moving.
As soon as you finish the game, you can export it using the export game feature, which can then be deployed and run right in the browser.
If you want to see the progress of the project over time, I have logged all my work done starting on day 1 as commits.
The source code is open for contributions on GitHub, there are many things that still need to be improved, as well as other interesting features to be implemented.