UnEngine is a primarily 2D game engine made from scratch. It is built on a custom implementation of Entity Component System (ECS).
- ECS
- Transform
- Sprite Rendering
- Model Rendering
- Text Rendering
- Tilemap Rendering
- Physics & Collision
- Spritesheet Animator
- Audio
After cloning the repo update the submodules:
git submodule update --initThen generate the CMake project for your preferred build tool. Works with CMake > 3.20 and < 4. Tested with GCC, Clang and MSVC, requires C++17 or higher.
To build the example projects, set the UNENGINE_BUILD_EXAMPLES=ON CMake option.
For Debian & pals you need to install a few libraries:
sudo apt install libwayland-dev libxkbcommon-dev xorg-dev- Move to new repo
- Add linux build compatibility
- Update all dependencies
- Refactor to h + cpp
- Unify model, sprite, text, tilemap, and primitive renderers
- Improve tilemap rendering
- Fix sprite scaling
- Redo camera for ecs
- Redo UI system
- How do we handle scaling?
- Redo window and context system
- Implement UPnP for automatic port forwarding
- Add Hexagonal tilemap support
- Implement enet (was already implemented)
- Component serialization support
- Fix tilemap collision
- Update the vector library
- Expand and improve the timing system
- Improve resource loading and management
- Add an option to change the transform pivot
- Improve animation system
- Rethink the transform hierarchy
- Fix text resolution scaling
- Fix sound bugs
- Better integrate sounds with ecs
- Fix tilemaps with multiple tilesets
- Add debug tools
- Camera
- Frame advance
- Better Logging
- Info
- Add animation support to tilemap
- Add TOML or similar config support
- Add multi camera support
- Improve model loading and rendering
- Add transparency to model rendering
- Redo lighting system
- Fix physics fps bugs
- Fix primitive rendering
- Update documentation
- Fix shader and renderer destructors
- Serialization of all engine components
- Investigate compatibility modes for older hardware
- Create a particle system
- Add 3D animation support
- Add multithreading support
- Copy entity function
- Add angular momentum
- Add restraints
- Add joints
- Add raycasting
- Add quaternion support
- Add anti-aliasing
- Add extrapolation functions
Rip off unity again, we have a ui component and ui canvas:
struct UIComponent
{
UICanvas*
...
}
struct UICanvas // not a component
{
enabled
size //relative to viewport
offset //relative to viewport
rotation
}
All ui elements will be transformed using a canvas instead of the camera's view, still have to figure out what to do about projection, probably just use ortho. This means the UI elements will use standard coordinates relative to the canvas instead of ndc like it was. Makes it easier to position things, make menus, simplify code, and hide/show things, also unifies ui element implementation instead of it being renderer specific.