batch-engine 0.0.2

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 built in 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 batch rendering system.

There will be more systems but thats it for now, you can create your own systems pretty easily just look on the ones above.


Component can be struct/class, Here is the same component written in 3 different ways.

class Gravity {
    mixin ComponentBase;
	override 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());

You can also add component that does not use mixing, but you wont be able to access to entity easily.

struct Gravity {
	Transform transform;
	this(Entity entity) {
		this.transform = entity.transform;
	void Update() {
		transform.position += vec3(0,-9.8f,0) * Core.DeltaTime;
auto entity = new Entity();
entity.AddComponent(new Gravity(entity));


  • 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: