1 /** Module for including all D2DGame components.
2  * Examples:
3  * ---
4  * import D2D;
5  *
6  * void main()
7  * {
8  *     Window window = new Window();
9  *
10  *     Event event; // Or WindowEvent
11  *     while(window.open)
12  *     {
13  *         while (window.pollEvent(event))
14  *         {
15  *             if(event.type == Event.Type.Quit)
16  *                 window.close();
17  *         }
18  *         window.clear();
19  *
20  *         // Update & Render here
21  *
22  *         window.display();
23  *     }
24  * }
25  * ---
26  */
27 module d2d;
28 
29 public
30 {
31 	import bindbc.sdl;
32 	import bindbc.sdl.image;
33 	import bindbc.sdl.mixer;
34 	import bindbc.sdl.ttf;
35 
36 	import bindbc.opengl;
37 
38 	import soloader = bindbc.loader.sharedlib;
39 
40 	import gl3n.aabb;
41 	import gl3n.ext.matrixstack;
42 	import gl3n.frustum;
43 	import gl3n.interpolate;
44 	import gl3n.linalg;
45 	import gl3n.plane;
46 	import gl3n.util;
47 
48 	import std.math;
49 
50 	import d2d.core.bytestream;
51 	import d2d.core.color3;
52 	import d2d.core.fpslimiter;
53 	import d2d.core.idisposable;
54 	import d2d.core.iverifiable;
55 	import d2d.core.quadtree;
56 	import d2d.core.transformable;
57 	import d2d.core.utils;
58 
59 	import d2d.window.window;
60 	import d2d.window.windowevent;
61 	import d2d.window.windowflags;
62 
63 	import d2d.rendering.bitmap;
64 	import d2d.rendering.color;
65 	import d2d.rendering.idrawable;
66 	import d2d.rendering.irendertarget;
67 	import d2d.rendering.mesh;
68 	import d2d.rendering.rectangleshape;
69 	import d2d.rendering.shader;
70 	import d2d.rendering.shaderprogram;
71 	import d2d.rendering.shape;
72 	import d2d.rendering.spritebatch;
73 	import d2d.rendering.spritesheet;
74 	import d2d.rendering.texture;
75 
76 	import d2d.audio.music;
77 	import d2d.audio.sound;
78 
79 	import d2d.font.bmfont;
80 	import d2d.font.bmtext;
81 	import d2d.font.ifont;
82 	import d2d.font.itext;
83 	import d2d.font.ttffont;
84 	import d2d.font.ttftext;
85 
86 	import d2d.toolkit.game;
87 	import d2d.toolkit.input.keyboard;
88 	import d2d.toolkit.input.mouse;
89 
90 	import std.string;
91 	import std.meta : AliasSeq;
92 }
93 
94 /// 2D rotation on a mat4.
95 pure mat4 rotate2d(mat4 mat, float alpha)
96 {
97 	mat = mat.rotatez(alpha);
98 	return mat;
99 }
100 
101 /// 2D scale on a mat4.
102 pure mat4 scale2d(mat4 mat, float x, float y)
103 {
104 	mat = mat.scale(x, y, 1);
105 	return mat;
106 }
107 
108 /// 2D translation on a mat4.
109 pure mat4 translate2d(mat4 mat, float x, float y)
110 {
111 	mat = mat.translate(x, y, 0);
112 	return mat;
113 }
114 
115 /// Matrix stack for modelview (like glPopMatrix, glPushMatrix).
116 MatrixStack!mat4 matrixStack = gl3n.ext.matrixstack.matrixStack!mat4();
117 /// Matrix stack for projection.
118 MatrixStack!mat4 projectionStack = gl3n.ext.matrixstack.matrixStack!mat4();
119 
120 /// Initializes matrix stacks
121 static this()
122 {
123 	matrixStack.set(mat4.identity);
124 	projectionStack.set(mat4.orthographic(0, 1, 1, 0, -1, 1));
125 }