From 96e26a2bd54d44535841a090ef30726bdf9b4ed2 Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Wed, 27 Mar 2013 16:35:07 +0000 Subject: [PATCH] math: rename Box2D to "box2" and add an integer version, "ibox2". --- src/lol/math/geometry.h | 74 +++++++++++++++++++---------- test/unit/box.cpp | 14 +++--- tools/vimlol/vimlol.vim | 6 +++ tools/vslol/CppKeywordClassifier.cs | 1 + 4 files changed, 63 insertions(+), 32 deletions(-) diff --git a/src/lol/math/geometry.h b/src/lol/math/geometry.h index 28820419..1b410ba0 100644 --- a/src/lol/math/geometry.h +++ b/src/lol/math/geometry.h @@ -28,77 +28,101 @@ namespace lol { -struct Box2D +#define LOL_BOX_TYPEDEFS(tname, suffix) \ + template struct tname; \ + typedef tname suffix; \ + typedef tname d##suffix; \ + typedef tname i##suffix; \ + typedef tname u##suffix; + +LOL_BOX_TYPEDEFS(Box2, box2) +LOL_BOX_TYPEDEFS(Box3, box3) + +#undef LOL_BOX_TYPEDEFS + +/* + * 2D boxes + */ + +template struct Box2 { - inline Box2D() - : A(0.f, 0.f), - B(0.f, 0.f) + inline Box2() + : A(T(0)), + B(T(0)) {} - inline Box2D(vec2 a, vec2 b) + inline Box2(Vec2 a, Vec2 b) : A(a), B(b) {} - Box2D operator +(vec2 v) + Box2 operator +(Vec2 v) { - return Box2D(A + v, B + v); + return Box2(A + v, B + v); } - Box2D &operator +=(vec2 v) + Box2 &operator +=(Vec2 v) { return *this = *this + v; } - Box2D operator -(vec2 v) + Box2 operator -(Vec2 v) { - return Box2D(A - v, B - v); + return Box2(A - v, B - v); } - Box2D &operator -=(vec2 v) + Box2 &operator -=(Vec2 v) { return *this = *this - v; } - vec2 A, B; + Vec2 A, B; }; -struct Box3D +/* + * 3D boxes + */ + +template struct Box3 { - inline Box3D() - : A(0.f, 0.f, 0.f), - B(0.f, 0.f, 0.f) + inline Box3() + : A(T(0)), + B(T(0)) {} - inline Box3D(vec3 a, vec3 b) + inline Box3(Vec3 a, Vec3 b) : A(a), B(b) {} - Box3D operator +(vec3 v) + Box3 operator +(Vec3 v) { - return Box3D(A + v, B + v); + return Box3(A + v, B + v); } - Box3D &operator +=(vec3 v) + Box3 &operator +=(Vec3 v) { return *this = *this + v; } - Box3D operator -(vec3 v) + Box3 operator -(Vec3 v) { - return Box3D(A - v, B - v); + return Box3(A - v, B - v); } - Box3D &operator -=(vec3 v) + Box3 &operator -=(Vec3 v) { return *this = *this - v; } - vec3 A, B; + Vec3 A, B; }; -static inline bool BoxIsectBox(Box2D const &b1, Box2D const &b2) +/* + * Helper geometry functions + */ + +static inline bool BoxIsectBox(box2 const &b1, box2 const &b2) { vec2 dist = 0.5f * (b1.A - b2.A + b1.B - b2.B); vec2 e1 = 0.5f * (b1.B - b1.A); diff --git a/test/unit/box.cpp b/test/unit/box.cpp index e2758080..6f6e816c 100644 --- a/test/unit/box.cpp +++ b/test/unit/box.cpp @@ -26,23 +26,23 @@ LOLUNIT_FIXTURE(BoxTest) LOLUNIT_TEST(Box2DIsect) { - Box2D b1(vec2(0.f, 0.f), vec2(10.f, 10.f)); - Box2D b2(vec2(5.f, 8.f), vec2(8.f, 12.f)); - Box2D b3(vec2(5.f, 11.f), vec2(8.f, 13.f)); + box2 b1(vec2(0.f, 0.f), vec2(10.f, 10.f)); + box2 b2(vec2(5.f, 8.f), vec2(8.f, 12.f)); + box2 b3(vec2(5.f, 11.f), vec2(8.f, 13.f)); LOLUNIT_ASSERT_EQUAL(true, BoxIsectBox(b1, b2)); LOLUNIT_ASSERT_EQUAL(false, BoxIsectBox(b1, b3)); - Box2D b4(vec2(96.f, 33.f), vec2(144.f, 129.f)); - Box2D b5(vec2(264.f, 91.f), vec2(244.f, 71.f)); + box2 b4(vec2(96.f, 33.f), vec2(144.f, 129.f)); + box2 b5(vec2(264.f, 91.f), vec2(244.f, 71.f)); LOLUNIT_ASSERT_EQUAL(false, BoxIsectBox(b4, b5)); } LOLUNIT_TEST(Box2DMove) { - Box2D b1(vec2(0.f, 0.f), vec2(1.f, 1.f)); - Box2D b2(vec2(2.f, 2.f), vec2(3.f, 3.f)); + box2 b1(vec2(0.f, 0.f), vec2(1.f, 1.f)); + box2 b2(vec2(2.f, 2.f), vec2(3.f, 3.f)); b1 += vec2(0.6f, 0.6f); LOLUNIT_ASSERT_EQUAL(false, BoxIsectBox(b1, b2)); diff --git a/tools/vimlol/vimlol.vim b/tools/vimlol/vimlol.vim index 06263615..dd4242c2 100644 --- a/tools/vimlol/vimlol.vim +++ b/tools/vimlol/vimlol.vim @@ -39,6 +39,12 @@ au Syntax cpp \ int2 int3 int4 int2x2 int3x3 int4x4 \ float2 float3 float4 float2x2 float3x3 float4x4 +" More GLSL-like types from the Lol Engine +au Syntax cpp + \ syn keyword cType + \ box2 dbox2 ivec2 uvec2 + \ box3 dbox3 ivec3 uvec3 + " Ensure we know about nullptr au Syntax cpp \ syn keyword cConstant diff --git a/tools/vslol/CppKeywordClassifier.cs b/tools/vslol/CppKeywordClassifier.cs index b7d47383..318e5fbf 100644 --- a/tools/vslol/CppKeywordClassifier.cs +++ b/tools/vslol/CppKeywordClassifier.cs @@ -110,6 +110,7 @@ class CppKeywordClassifier : IClassifier "ldouble|real|half", "(float|int)([234]|2x2|3x3|4x4)", "(f(16|128)||d|[ui](8|16||64)|r)(vec[234]|mat[234]|quat|cmplx)", + "(|[dui])box[23]", }; private static string[] m_csharp_types =