43 lines
1.0 KiB
D
43 lines
1.0 KiB
D
/// License: MIT
|
|
module sjplayer.util.MatrixFactory;
|
|
|
|
import std.typecons;
|
|
|
|
import gl4d;
|
|
|
|
///
|
|
struct MatrixFactory {
|
|
public:
|
|
///
|
|
mat3 Create() const {
|
|
auto m = mat3.identity;
|
|
m.scale(scale.x, scale.y, scale.z);
|
|
m.rotatex(rotation.x);
|
|
m.rotatey(rotation.y);
|
|
m.rotatez(rotation.z);
|
|
m.translate(translation.x, translation.y, 1);
|
|
return m;
|
|
}
|
|
|
|
///
|
|
Nullable!float GetValueByName(string name) const {
|
|
switch (name) {
|
|
case "scale_x": return Nullable!float(scale.x);
|
|
case "scale_y": return Nullable!float(scale.y);
|
|
case "rotation_x": return Nullable!float(rotation.x);
|
|
case "rotation_y": return Nullable!float(rotation.y);
|
|
case "rotation_z": return Nullable!float(rotation.z);
|
|
case "translation_x": return Nullable!float(translation.x);
|
|
case "translation_y": return Nullable!float(translation.y);
|
|
default: return Nullable!float.init;
|
|
}
|
|
}
|
|
|
|
///
|
|
vec3 scale = vec3(1, 1, 1);
|
|
///
|
|
vec3 rotation = vec3(0, 0, 0);
|
|
///
|
|
vec2 translation = vec2(0, 0);
|
|
}
|