Skip to content

Dudeman85/UnEngine

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

78 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UnEngine

UnEngine is a primarily 2D game engine made from scratch. It is built on a custom implementation of Entity Component System (ECS).

Features:

Building

After cloning the repo update the submodules:

git submodule update --init

Then 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.

Linux specific

For Debian & pals you need to install a few libraries:

sudo apt install libwayland-dev libxkbcommon-dev xorg-dev

TODO

Required

Improvements

  • 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
  • Redo window and context system
  • Fix GetGlobalTransform

New Features

  • Implement UPnP for automatic port forwarding
  • Implement enet (was already implemented)
  • Component serialization support

High Priority

Improvements

  • Improve resource loading and management
    • Add async loading
    • Improve sprite loading
    • Improve model loading
    • Improve tilemap loading
    • Improve font loading
  • Fix tilemap collision
  • Update the vector library
  • Expand and improve the timing system
  • 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

New features

  • Add debug tools
    • Freecam
    • Frame advance
    • Better Logging
    • Primitive Drawing
    • GUI
      • Hierarchy
      • Entity inspector
      • Transform tools
      • Resource inspector
      • Inspectors for all engine components
      • Debug toggles
  • Add Hexagonal tilemap support
  • Add animation support to tilemap
  • Add TOML or similar config support
  • Add multi camera support

Low Priority

Improvements

  • Improve model 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

New Features

  • 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

Idea for new UI system

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.

Idea for new debugging camera

A camera for code debugging, which works by holding down a key and can be moved in any direction with the mouse; the key used at the moment is at the choice of the programmer in charge of making the tool

Idea for better resource mangement

Current problems:

  1. Resources are always loaded in main thread
  2. It is very easy to accidentally load duplicate resources
  3. Resources have to be managed individually

To fix 1 we implement asynchronous resource loading. This requires refactoring all resource loading to be be split between loading from disk and generating opengl resources.
To fix 2 we handle loading and storing resources on the engine side and hand out pointers to user, if the resource isnt loaded when user requests it, we load it according to user policy.
To fix 3 we can add definable resource packs which can be a vector of resource paths, these can then be loaded and unloaded easily by user.

About

A primarily 2D game engine build on ECS

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •