batch-engine 0.0.1

An educational 2D Game Engine ECS based.

To use this package, run the following command in your project's root directory:

Manual usage
Put the following dependency into your project's dependences section:

2D Game Engine written in D, I'm just uploading it so I will have access from everywhere.
I will update both this and GarageEngine when I will decide on the design.
I cannot promise backwards compatibility at this point and things will change, but the goals and ideas will stay the same.



  • Learn D. :D
  • Keep it simple.
  • Focus on 2D but keep the system 3D friendly (positions,rotations,scales are all 3d).
  • Simple but flexible Entity-Component-System, with option to highly customize Components and the design, the engine will come with default systems which can be removed/customized however you want.
  • Very high performance rendering with fallbacks to different gl versions.
  • Very high performance in general.
  • Some kind of collision/physics system, the collision system will probably be default and physics engine will come in different package as external system.
  • Sprite sheets/texture atlas, full and easy control.
  • Basic GUI.
  • Coroutines and Behavior Trees for the AI.
  • Cross-Platform as much as possible (I'm testing it everytime with dmd/ldc on mac/windows both 32/64).
  • Maybe somekind of transform parent-child hierarchy.
  • Similar to Unity3D but with much more control.

Features so far

  • Rendering and updating 100k Entities 60fps (ldc).
  • Font rendering.
  • Batching.
  • ECS. (WIP)
  • Coroutines.
  • Transform.
  • Sprite.


Basicly you can use both Systems and Components for your game functionality, systems are just processors for anything you want.

For now there are few systems:

  • AwakeSystem - calling "void Awake()" only once when added entity to game.
  • StartSystem - callind "void Start()" only once during game loop.
  • UpdateSystem - callind "void Update()" each game loop.
  • BatchSystem - the batching system (currently is not written as a system). There will be more systems but thats it for now.

You can create your own systems just look on the ones above.


Component can be struct/class but you must follow the guideline.
Here is the same component written in 3 different ways.

class Gravity : Component {
	override void Update() {
		transform.position += vec3(0,-9.8f,0) * Core.DeltaTime;

class Gravity {
	mixin ComponentBase;
	void Update() {
		transform.position += vec3(0,-9.8f,0) * Core.DeltaTime;

struct Gravity {
	mixin ComponentBase;
	void Update() {
		transform.position += vec3(0,-9.8f,0) * Core.DeltaTime;

auto entity = new Entity();
entity.AddComponent(new Gravity());


  • gl3n
  • derelict-fi
  • derelict-gl3
  • derelict-glfw3
  • derelict-ft
  • Vovchik
derelict-gl3, gl3n, derelict-fi, derelict-ft, derelict-glfw3
0.0.2 2014-Jan-07
0.0.1 2013-Dec-06
~master 2015-Feb-28
~gfm 2014-Feb-04
~bitsTypes 2014-Feb-09
Show all 5 versions
Download Stats:
  • 0 downloads today

  • 0 downloads this week

  • 0 downloads this month

  • 510 downloads total

Short URL: