Browse Source

math: rename Box2D to "box2" and add an integer version, "ibox2".

legacy
Sam Hocevar sam 12 years ago
parent
commit
96e26a2bd5
4 changed files with 63 additions and 32 deletions
  1. +49
    -25
      src/lol/math/geometry.h
  2. +7
    -7
      test/unit/box.cpp
  3. +6
    -0
      tools/vimlol/vimlol.vim
  4. +1
    -0
      tools/vslol/CppKeywordClassifier.cs

+ 49
- 25
src/lol/math/geometry.h View File

@@ -28,77 +28,101 @@
namespace lol
{

struct Box2D
#define LOL_BOX_TYPEDEFS(tname, suffix) \
template <typename T> struct tname; \
typedef tname<float> suffix; \
typedef tname<double> d##suffix; \
typedef tname<int32_t> i##suffix; \
typedef tname<uint32_t> u##suffix;

LOL_BOX_TYPEDEFS(Box2, box2)
LOL_BOX_TYPEDEFS(Box3, box3)

#undef LOL_BOX_TYPEDEFS

/*
* 2D boxes
*/

template <typename T> 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<T> a, Vec2<T> b)
: A(a),
B(b)
{}

Box2D operator +(vec2 v)
Box2<T> operator +(Vec2<T> v)
{
return Box2D(A + v, B + v);
return Box2<T>(A + v, B + v);
}

Box2D &operator +=(vec2 v)
Box2<T> &operator +=(Vec2<T> v)
{
return *this = *this + v;
}

Box2D operator -(vec2 v)
Box2<T> operator -(Vec2<T> v)
{
return Box2D(A - v, B - v);
return Box2<T>(A - v, B - v);
}

Box2D &operator -=(vec2 v)
Box2<T> &operator -=(Vec2<T> v)
{
return *this = *this - v;
}

vec2 A, B;
Vec2<T> A, B;
};

struct Box3D
/*
* 3D boxes
*/

template <typename T> 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<T> a, Vec3<T> b)
: A(a),
B(b)
{}

Box3D operator +(vec3 v)
Box3<T> operator +(Vec3<T> v)
{
return Box3D(A + v, B + v);
return Box3<T>(A + v, B + v);
}

Box3D &operator +=(vec3 v)
Box3<T> &operator +=(Vec3<T> v)
{
return *this = *this + v;
}

Box3D operator -(vec3 v)
Box3<T> operator -(Vec3<T> v)
{
return Box3D(A - v, B - v);
return Box3<T>(A - v, B - v);
}

Box3D &operator -=(vec3 v)
Box3<T> &operator -=(Vec3<T> v)
{
return *this = *this - v;
}

vec3 A, B;
Vec3<T> 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);


+ 7
- 7
test/unit/box.cpp View File

@@ -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));


+ 6
- 0
tools/vimlol/vimlol.vim View File

@@ -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


+ 1
- 0
tools/vslol/CppKeywordClassifier.cs View File

@@ -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 =


Loading…
Cancel
Save