From 37b1fe10358a3825c1a427156085c30ed6c6964f Mon Sep 17 00:00:00 2001 From: Bergmann89 Date: Fri, 15 Apr 2016 17:45:04 +0200 Subject: [PATCH] * [ugluVectorEx] added some helper methods --- ugluVectorEx.inc | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/ugluVectorEx.inc b/ugluVectorEx.inc index ec7abe7..4541b57 100644 --- a/ugluVectorEx.inc +++ b/ugluVectorEx.inc @@ -3,10 +3,13 @@ type __HELPER = type helper for __VEC public {$IF __SIZE = 2} + class function Create(const s: __IMPL.TBaseType): __IMPL.TVector2; static; inline; class function Create(const x, y: __IMPL.TBaseType): __IMPL.TVector2; static; inline; {$ELSEIF __SIZE = 3} + class function Create(const s: __IMPL.TBaseType): __IMPL.TVector3; static; inline; class function Create(const x, y, z: __IMPL.TBaseType): __IMPL.TVector3; static; inline; {$ELSEIF __SIZE = 4} + class function Create(const s: __IMPL.TBaseType): __IMPL.TVector4; static; inline; class function Create(const x, y, z, w: __IMPL.TBaseType): __IMPL.TVector4; static; inline; {$ELSE} {$ERROR only vectors of size 2, 3 or 4 are supported} @@ -451,25 +454,41 @@ function Angle2(const v: __VEC): Double; inline; {$ENDIF} end; - operator * (const v: __VEC; const s: __IMPL.TBaseType): __VEC; - operator * (const s: __IMPL.TBaseType; const v: __VEC): __VEC; - operator * (const v1, v2: __VEC): __IMPL.TBaseType; + operator * (const v: __VEC; const s: __IMPL.TBaseType): __VEC; inline; + operator * (const s: __IMPL.TBaseType; const v: __VEC): __VEC; inline; + operator * (const v1, v2: __VEC): __IMPL.TBaseType; inline; + operator / (const v: __VEC; const s: __IMPL.TBaseType): __VEC; inline; {$ENDIF} {$ENDIF} {$ENDIF} {$ELSEIF DEFINED (__VECTOR_HELPER_IMPL)} {$IFDEF __HELPER} {$IF __SIZE = 2} + class function __HELPER.Create(const s: __IMPL.TBaseType): __VEC; + begin + result := __IMPL.Vector2(s, s); + end; + class function __HELPER.Create(const x, y: __IMPL.TBaseType): __VEC; begin result := __IMPL.Vector2(x, y); end; {$ELSEIF __SIZE = 3} + class function __HELPER.Create(const s: __IMPL.TBaseType): __VEC; + begin + result := __IMPL.Vector3(s, s, s); + end; + class function __HELPER.Create(const x, y, z: __IMPL.TBaseType): __VEC; begin result := __IMPL.Vector3(x, y, z); end; {$ELSEIF __SIZE = 4} + class function __HELPER.Create(const s: __IMPL.TBaseType): __VEC; + begin + result := __IMPL.Vector4(s, s, s, s); + end; + class function __HELPER.Create(const x, y, z, w: __IMPL.TBaseType): __VEC; begin result := __IMPL.Vector4(x, y, z, w); @@ -994,17 +1013,22 @@ operator * (const v: __VEC; const s: __IMPL.TBaseType): __VEC; begin - result := __IMPl.Multiply(v, s); + result := __IMPL.Multiply(v, s); end; operator * (const s: __IMPL.TBaseType; const v: __VEC): __VEC; begin - result := __IMPl.Multiply(v, s); + result := __IMPL.Multiply(v, s); end; operator * (const v1, v2: __VEC): __IMPL.TBaseType; begin - result := __IMPl.Dot(v1, v2); + result := __IMPL.Dot(v1, v2); + end; + + operator / (const v: __VEC; const s: __IMPL.TBaseType): __VEC; + begin + result := __IMPL.Divide(v, s); end; {$ENDIF} {$ENDIF}