A general-purpose, ECS-driven (Entity Component System), 2d game engine created by a single individual with no particular goal. The engine is flexible and can be powerful if used correctly however is not reccomended for use of actual development over engines such as Unity and Godot. The engine was created for learning purposes.
This project is currently in development and is not useable whatsoever. Until the project reaches its alpha stages (a point where its even somewhat useable), please do not submit pull requests. Currently, Skaia compiles on Windows and Linux with slight hitches, documented in the Building From Source section. While it should compile on Mac as well, I have no way to test whether it works or not, as I do not have a MacBook or a virtual machine of one in possession.
This project adheres to the Pitchfork File Structure guide lines described here
Most of these features are not implemented yet but we are planning to add them.
- A rendering engine (SDL) ✓
- Math utilities [in progress?]
- Physics Engine (Box2d) ✓
- Game loop (update, render, that kinda thing) ✓
- Input System ✓
- Debug System ✓
- Game Mechanisms (Entities, Systems, Components) ✓
- Audio System ✓
- Level System
- Event System ✓
- Camera System
- Animation
- File System
- Camera
- UI (Text, fonts, and colors are done) IN PROGRESS
- Basic Meshes (Squares, cubes)
- Textures ✓
- Collisions
- Timers ✓
- Network
- Localization
- Memory Management
- Cinematics
- OpenGL Shaders
The project uses cmake (because its more or less the standard build system generator) for building. The project builds just like any other cmake project.
$ git clone https://github.com/rsa16/Skaia
$ cd Skaia
$ git submodule update --init --recursive # to clone our submodules
$ mkdir build
$ cd build
$ cmake ..
Then we build. You may need to run cmake --build .
twice in case of an error about SDL_image-static, not sure how to fix this yet.
$ cmake --build . --config Release
## OR ##
$ cmake --build . --config Debug
The output will be in the bin folder at the root of the project.
├───build
├───bin
├───cmake
├───docs
├───examples
├───external
│ ├───sdl
│ └───sdl_image
└───libs
├───editor
│ ├───docs
│ └───src
├───engine
│ ├───docs
│ ├───src
└───ght
└───docs
build
is for build filesdocs
is for documentation, which we don't have yet.examples
is for examples on how to use the engine correctly, which we have not implmentedbin
is where all executable files will be placedexternal
is the location of all our third party submoduleslibs
our subprojects, editor, engine, and the game header tool
- SkaiaCore header is seperate from everthing else and is included all in a single namespace.
- Modules must be categorized, large, and with varieties that fall under the same category is namespaced (
SkaiaUI
has many things which is why its a namespace,SkaiaTimer
only has timers so no namespace) - Components are data only
- constant global variables are capitalized
- namespaces start with
Skaia
- classes, structs, enums and all objects are in pascal case, if they are not namespaced they also start with S_ (i.e.
S_Texture
,S_PhysicsSystem
, orSkaiaUI::FontStyle
)