|
@@ -76,7 +76,7 @@ mixin template Linear()
|
|
|
return mixin("T(" ~ fragment ~ ")");
|
|
|
}
|
|
|
|
|
|
- T opOpAssign(string op)(inout T rhs) if (["+", "-", "*", "/"].canFind(op))
|
|
|
+ ref T opOpAssign(string op)(inout T rhs) if (["+", "-"].canFind(op))
|
|
|
{
|
|
|
static foreach (field; [FieldNameTuple!T])
|
|
|
mixin(field ~ op ~ "= rhs." ~ field ~ ";");
|
|
@@ -96,7 +96,7 @@ mixin template Linear()
|
|
|
return mixin("T(" ~ fragment ~ ")");
|
|
|
}
|
|
|
|
|
|
- T opOpAssign(string op)(inout float rhs) if (["+", "-", "*", "/"].canFind(op))
|
|
|
+ ref T opOpAssign(string op)(inout float rhs) if (["+", "-", "*", "/"].canFind(op))
|
|
|
{
|
|
|
static foreach (field; [FieldNameTuple!T])
|
|
|
mixin(field ~ op ~ "= rhs;");
|
|
@@ -115,6 +115,12 @@ unittest
|
|
|
Assert.equal(c, Vector3(4, 6, 18));
|
|
|
Assert.equal(4.0f - Vector2.zero, Vector2(4, 4));
|
|
|
Assert.equal(Vector2.one - 3.0f, Vector2(-2, -2));
|
|
|
+ a += 5;
|
|
|
+ Assert.equal(a, Vector3(6, 7, 14));
|
|
|
+ a *= 0.5;
|
|
|
+ Assert.equal(a, Vector3(3, 3.5, 7));
|
|
|
+ a += Vector3(3, 2.5, -1);
|
|
|
+ Assert.equal(a, Vector3(6, 6, 6));
|
|
|
}
|
|
|
|
|
|
import std.traits : FieldNameTuple;
|