GitPedia
phisko

phisko/kengine

Game engine with an Entity-Component-System (ECS) architecture. Focus on ease-of-use, runtime extensibility and compile-time type safety.

11 Releases
Latest: 4y ago
Kengine 6.0v6.0Latest
phiskophisko·4y ago·November 30, 2021
GitHub

This release comes with a ZIP file containing the entire source code, including its submodules. This makes it easier for people not used to working with Git submodules to download the entire source code. There have been many additions and changes to the API, so writing a changelog for this would boil down to re-writing the entire documentation. Feel free to take a look at the new commits since v5.0 if you really need to check for individual changes.

Kengine 5.0v5.0
phiskophisko·6y ago·January 15, 2020
GitHub

📋 Major changes

  • Improved [reflection API](https://github.com/phisko/putils/blob/master/reflection.md)
  • Removed load/save functionality

📦 "System Entity' model

  • Systems are now represented by `Entities` with "function Components"
  • Datapackets have been replaced by "function Components"
  • This lets systems be queried and extended by users (by adding new "function Components" or any other type of components, e.g. for profiling)

📦 "Type Entities"

  • Replaced `ComponentFunctions` with "meta Components", attached to type Entities

📦 Architecture

  • [conan](https://github.com/conan-io/cmake-conan) for dependency management
  • [ViewportComponent](https://github.com/phisko/kengine/blob/master/components/data/ViewportComponent.md) and [WindowComponent](https://github.com/phisko/kengine/blob/master/components/data/WindowComponent.md)
  • Graphics-agnostic [InputSystem](https://github.com/phisko/kengine/blob/master/systems/InputSystem.md)
  • [KinematicSystem](https://github.com/phisko/kengine/blob/master/systems/KinematicSystem.md)

📦 Helpers

  • [CameraHelper](https://github.com/phisko/kengine/blob/master/helpers/CameraHelper.md)
  • [ImGuiHelper](https://github.com/phisko/kengine/blob/master/helpers/ImGuiHelper.md)
  • [PluginHelper](https://github.com/phisko/kengine/blob/master/helpers/PluginHelper.md)
  • [SortHelper](https://github.com/phisko/kengine/blob/master/helpers/SortHelper.md)
  • [TypeHelper](https://github.com/phisko/kengine/blob/master/helpers/TypeHelper.md)

📦 Tools

  • `kengine::no<T>` option for `EntityManager::getEntities` to filter out `Entities` with a given component
  • [ImGuiToolSystem](https://github.com/phisko/kengine/blob/master/systems/ImGuiToolSystem.md) and [ImGuiToolComponent](https://github.com/phisko/kengine/blob/master/components/data/ImGuiToolComponent.md)
  • Adjustable `enums` in ImGui tools
  • [termcolor](https://github.com/ikalnytskyi/termcolor)
  • Shader profiler for `OpenGL`
  • [putils::gl::Uniform](https://github.com/phisko/putils/blob/master/opengl/Uniform.hpp) for `OpenGL` shaders
  • [ForEachEntity and ForEachEntityWithout](https://github.com/phisko/kengine/blob/master/components/meta/ForEachEntity.md) meta functions

📦 OpenGL

  • Render to texture
  • Cascaded shadow maps

📦 Behaviors

  • OpenGL sprites and text are now drawn upright
  • `ComponentJSONLoader` now works with arrays
  • Optimized [MagicaVoxelSystem](https://github.com/phisko/kengine/blob/master/systems/polyvox/MagicaVoxelSystem.md) loading through binary serialization
  • Light shaders are now responsible for clearing their shadow maps
  • Optimized `OpenGL` "entity in pixel" queries

📦 ImGui tools

  • Improved [ImGuiAdjustableSystem](https://github.com/phisko/kengine/blob/master/systems/ImGuiAdjustableSystem.md) and [ImGuiEntityEditorSystem](https://github.com/phisko/kengine/blob/master/systems/ImGuiEntityEditorSystem.md) layout
  • .6f precision for ImGui `InputFloats`
  • ImGui inputs only apply changes after pressing Enter
  • Editor windows are named according to [NameComponent](https://github.com/phisko/kengine/blob/master/components/data/NameComponent.md)

📦 Components

  • Replaced `ModelLoaderComponent` with [ModelDataComponent](https://github.com/phisko/kengine/blob/master/components/data/ModelDataComponent.md)
  • Relative parameters in [InputComponent::onMouseMove](https://github.com/phisko/kengine/blob/master/components/data/InputComponent.md)
  • Grouped parameters in `InputComponent` callbacks
  • `loop` field in [AnimationComponent](https://github.com/phisko/kengine/blob/master/components/data/AnimationComponent.md)
  • Add `pitch`, `yaw` and `roll` to [PhysicsComponent](https://github.com/phisko/kengine/blob/master/components/data/PhysicsComponent.md)
  • Replace `PhysicsComponent::kinematic` with [KinematicComponent](https://github.com/phisko/kengine/blob/master/components/data/KinematicComponent.md)
  • Light constants are now set in [LightComponents](https://github.com/phisko/kengine/blob/master/components/data/LightComponent.md) instead of through global adjustables
  • [TextureModelComponent](https://github.com/phisko/kengine/blob/master/components/data/TextureModelComponent.md) now stores the file name, is not used in combination with [ModelComponent](https://github.com/phisko/kengine/blob/master/components/data/ModelComponent.md)
  • + 1 more

📦 Misc

  • Replaced `putils_for_each_type` macro with a function

📦 Optimizations

  • Added [LuaTableComponent](https://github.com/phisko/kengine/blob/master/components/data/LuaTableComponent.md) to separate responsibility from [LuaComponent](https://github.com/phisko/kengine/blob/master/components/data/LuaComponent.md) and have it not be tied to [sol](https://github.com/ThePhD/sol2)
  • Optimized for empty components (no memory allocation)

🐛 Fixes

  • Fixed `ImGuiAdjustableSystem` not loading colors properly
  • Fixed crash in `OpenGLSystem` when requesting the `Entity::ID` for pixel in `y == 0`
  • Fixed camera orientation in `OpenGLSystem`
Kengine 4.2v4.2
phiskophisko·6y ago·September 17, 2019
GitHub

Features

  • Added "component function" system, which lets users register function template specializations for specific components (such as a serializer, JSON parser, string matcher...)
  • Added an `ImGuiEditor` "component function" that displays a `Component` as a tree structure in ImGui
  • Added a `LoadFromJSON` "component function" that loads a `Component` from a `JSON` object
  • Added a `MatchString` "component function" that returns whether a `Component` (when serialized) contains a specific string
  • Added an `ImGuiEntityEditorSystem` that displays an ImGui editor for any `Entity` with a `SelectedComponent`
  • Added an `ImGuiEntitySelectorSystem` that displays an ImGui window letting users search for `Entities` and add a `SelectedComponent` to them
  • Added a Bullet Physics system and a `QueryPosition` datapacket
  • Added `OnClickComponent` and `OnClickSystem`

📋 Major changes

  • Moved to a "model entity" architecture for OpenGL rendering systems, where `Entities` with a `ModelComponent` hold flyweight-style information for all `GraphicsComponents` pointing to a same resource

📋 Minor changes

  • Added `GodRaysComponent`
  • Added `roll` to `TransformComponent` and `CameraComponent`
  • Added `color` and `alpha` to `GraphicsComponent::Layer`
  • Removed `GraphicsComponent::Layer` as it was mostly unused and only complicated code

📦 Optimizations

  • Made `BaseModule::receive` non-virtual
  • Made the engine thread-safe

🐛 Fixes

  • Various fixes in OpenGL rendering systems, both about functionality and architecture
  • I will be much more careful with my use of Git from now on, and will try to keep the repository size sane.
Kengine 4.1v4.1
phiskophisko·7y ago·May 21, 2019
GitHub

📋 Changes

  • Added serialization
  • Made it possible to add/update entities during iteration
  • Added `OpenGLSystem`
  • Added `PolyVoxSystem` (used to generate meshes from voxel volumes)
  • Added `MagicaVoxelSystem` (used to load .vox model files)
  • Added `AssImpSystem` (used to load any other model file and skeletal animations)
  • Added `SelectedComponent` and `HighlightComponent`
  • Added `ImGuiEntityEditorSystem` and `ImGuiEntitySelectorSystem`
  • + 10 more
Kengine 4.0v4.0
phiskophisko·7y ago·November 30, 2018
GitHub

📋 Changes

  • Entities no longer have names. If you really need to associate strings to your Entities you can create a `NameComponent` or something similar
  • Entities can no longer be serialized to ostream. I am currently working to re-implement this feature.
  • Because of the previous point, it is no longer possible to save and load the game state. I am currently working to re-implement this feature, in a manner that will be better optimized than the original (binary saving instead of JSON serialization)
  • Made it possible to get a collection of entities matching several component types
  • Added `AdjustableComponent` and `ImGuiAdjustableManager`
  • Added `DebugGraphicsComponent`
  • Added `GUIComponent`
  • Used an actual `ThreadPool` in `EntityManager` (i.e. in `Mediator)
  • + 14 more
Kengine 3.0v3.0
phiskophisko·8y ago·April 9, 2018
GitHub

📋 Changes

  • Added speed and pause/resume functionality
  • Added save/load feature
  • Added `EntityManager::disableEntity` suite
  • Added `PySystem`
  • Added `Box2DSystem`
  • Added `ImGui` support
  • Added `CollisionSystem`
  • Added `ScriptSystem` middle-class to simplify supporting more scripting languages
  • + 22 more
Fixes for buffering bugs in LuaSystemv2.2.2
phiskophisko·8y ago·January 17, 2018
GitHub

📋 Changes

  • `LuaSystem` clears its buffer at the end of each frame instead of the start (meaning events that were triggered before the start of the frame now get properly processed)
  • `LuaSystem` catches exceptions thrown by buffered commands to ensure proper execution of other commands
  • Optimized includes in `SfSystem`
Major fixes + Added LuaCollisionSystemv2.2.1
phiskophisko·8y ago·January 16, 2018
GitHub

📋 Changes

  • `PhysicsSystem` now properly removes deleted `GameObjects` from its quadtree (fixing memory corruption issues)
  • `LuaSystem` now buffers entity creations and removals until end of frame (fixing memory corruption issues)
  • `LuaCollisionSystem`: provides access to `Collision` datapackets from scripts. Serves as an example of how to provide access to any type of datapacket
SfSystem support for camerasv2.1.0
phiskophisko·8y ago·December 25, 2017
GitHub

📋 Changes

  • The `SfSystem` now supports rendering through multiple cameras and controlling the rendered area through `CameraComponents`
  • `MetaComponent` renamed to `GraphicsComponent` as it is its only use
v2.0.1
phiskophisko·8y ago·December 24, 2017
GitHub

📋 Changes

  • `RegisterGameObject` and `RemoveGameObject` are now datapackets, instead of members of the `ISystem` interface.
  • Added `pmeta_get_class_name` and other utility macros to make creating `Reflectible` classes much easier.
  • `SfSystem` had a major drawing issue which is now fixed
Stable releasev1.0
phiskophisko·8y ago·November 25, 2017
GitHub

As the engine is evolving rapidly and I have a few major API breaking changes in mind, it is time for our first stable release!