Box objects (AABB) now have the long awaited extent() and center() methods. Corners are now called “aa” and “bb” for convenience. The WorldEntity class uses a box3 for its AABB instead of two vec3s. This allows us to simplify a lot of verbose code.undefined
@@ -75,8 +75,8 @@ public: | |||||
//This considers the box usage A to B as top-left to bottom-right | //This considers the box usage A to B as top-left to bottom-right | ||||
void AddTarget(box3 new_target) | void AddTarget(box3 new_target) | ||||
{ | { | ||||
vec3 base_off = .5f * (new_target.B - new_target.A); | |||||
vec3 base_pos = new_target.A + base_off; | |||||
vec3 base_off = .5f * new_target.extent(); | |||||
vec3 base_pos = new_target.center(); | |||||
int pass = 0; | int pass = 0; | ||||
while (pass < 3) | while (pass < 3) | ||||
{ | { | ||||
@@ -120,8 +120,8 @@ public: | |||||
#endif | #endif | ||||
m_position = vec3::zero; | m_position = vec3::zero; | ||||
m_bbox[0] = m_position; | |||||
m_bbox[1] = vec3((vec2)m_window_size, 0); | |||||
m_aabb.aa = m_position; | |||||
m_aabb.bb = vec3((vec2)m_window_size, 0); | |||||
//Input::TrackMouse(this); | //Input::TrackMouse(this); | ||||
#if LOL_FEATURE_THREADS | #if LOL_FEATURE_THREADS | ||||
@@ -212,20 +212,20 @@ void Debug::DrawArrow(vec2 a, vec2 b, vec3 s, vec4 color, float az, float bz) | |||||
} | } | ||||
//-- BOX: 3D -2D - 3D_to_2D --------------------------------------------------- | //-- BOX: 3D -2D - 3D_to_2D --------------------------------------------------- | ||||
void Debug::DrawBox(box3 a) { Debug::DrawBox(a.A, a.B, Scene::GetLineColor()); } | |||||
void Debug::DrawBox(box2 a) { Debug::DrawBox(a.A, a.B, Scene::GetLineColor()); } | |||||
void Debug::DrawBox(box3 a, vec4 color) { Debug::DrawBox(a.A, a.B, color); } | |||||
void Debug::DrawBox(box2 a, vec4 color) { Debug::DrawBox(a.A, a.B, color); } | |||||
void Debug::DrawBox(box3 a) { Debug::DrawBox(a.aa, a.bb, Scene::GetLineColor()); } | |||||
void Debug::DrawBox(box2 a) { Debug::DrawBox(a.aa, a.bb, Scene::GetLineColor()); } | |||||
void Debug::DrawBox(box3 a, vec4 color) { Debug::DrawBox(a.aa, a.bb, color); } | |||||
void Debug::DrawBox(box2 a, vec4 color) { Debug::DrawBox(a.aa, a.bb, color); } | |||||
void Debug::DrawBox(vec3 a, vec3 b) { Debug::DrawBox(a, b, Scene::GetLineColor()); } | void Debug::DrawBox(vec3 a, vec3 b) { Debug::DrawBox(a, b, Scene::GetLineColor()); } | ||||
void Debug::DrawBox(vec2 a, vec2 b) { Debug::DrawBox(a, b, Scene::GetLineColor()); } | void Debug::DrawBox(vec2 a, vec2 b) { Debug::DrawBox(a, b, Scene::GetLineColor()); } | ||||
void Debug::DrawBox(vec2 a, float s) { Debug::DrawBox(a, s, Scene::GetLineColor()); } | void Debug::DrawBox(vec2 a, float s) { Debug::DrawBox(a, s, Scene::GetLineColor()); } | ||||
void Debug::DrawBox(vec3 a, vec3 b, vec4 color) { Debug::DrawBox(a, b, mat4::identity, color); } | void Debug::DrawBox(vec3 a, vec3 b, vec4 color) { Debug::DrawBox(a, b, mat4::identity, color); } | ||||
void Debug::DrawBox(vec2 a, vec2 b, vec4 color) { Debug::DrawBox(a, b, mat2::identity, color); } | void Debug::DrawBox(vec2 a, vec2 b, vec4 color) { Debug::DrawBox(a, b, mat2::identity, color); } | ||||
void Debug::DrawBox(vec2 a, float s, vec4 color) { Debug::DrawBox(a, s, mat2::identity, color); } | void Debug::DrawBox(vec2 a, float s, vec4 color) { Debug::DrawBox(a, s, mat2::identity, color); } | ||||
void Debug::DrawBox(box3 a, mat4 transform) { Debug::DrawBox(a.A, a.B, transform, Scene::GetLineColor()); } | |||||
void Debug::DrawBox(box2 a, mat2 transform) { Debug::DrawBox(a.A, a.B, transform, Scene::GetLineColor()); } | |||||
void Debug::DrawBox(box3 a, mat4 transform, vec4 color) { Debug::DrawBox(a.A, a.B, transform, color); } | |||||
void Debug::DrawBox(box2 a, mat2 transform, vec4 color) { Debug::DrawBox(a.A, a.B, transform, color); } | |||||
void Debug::DrawBox(box3 a, mat4 transform) { Debug::DrawBox(a.aa, a.bb, transform, Scene::GetLineColor()); } | |||||
void Debug::DrawBox(box2 a, mat2 transform) { Debug::DrawBox(a.aa, a.bb, transform, Scene::GetLineColor()); } | |||||
void Debug::DrawBox(box3 a, mat4 transform, vec4 color) { Debug::DrawBox(a.aa, a.bb, transform, color); } | |||||
void Debug::DrawBox(box2 a, mat2 transform, vec4 color) { Debug::DrawBox(a.aa, a.bb, transform, color); } | |||||
void Debug::DrawBox(vec3 a, vec3 b, mat4 transform) { Debug::DrawBox(a, b, transform, Scene::GetLineColor()); } | void Debug::DrawBox(vec3 a, vec3 b, mat4 transform) { Debug::DrawBox(a, b, transform, Scene::GetLineColor()); } | ||||
void Debug::DrawBox(vec2 a, vec2 b, mat2 transform) { Debug::DrawBox(a, b, transform, Scene::GetLineColor()); } | void Debug::DrawBox(vec2 a, vec2 b, mat2 transform) { Debug::DrawBox(a, b, transform, Scene::GetLineColor()); } | ||||
void Debug::DrawBox(vec2 a, float s, mat2 transform) { Debug::DrawBox(a, s, transform, Scene::GetLineColor()); } | void Debug::DrawBox(vec2 a, float s, mat2 transform) { Debug::DrawBox(a, s, transform, Scene::GetLineColor()); } | ||||
@@ -235,12 +235,12 @@ void Renderer::SetViewport(ibox2 viewport) | |||||
return; | return; | ||||
#if defined USE_D3D9 || defined _XBOX | #if defined USE_D3D9 || defined _XBOX | ||||
D3DVIEWPORT9 vp = { viewport.A.x, viewport.A.y, | |||||
viewport.B.x, viewport.B.y, | |||||
D3DVIEWPORT9 vp = { viewport.aa.x, viewport.aa.y, | |||||
viewport.bb.x, viewport.bb.y, | |||||
0.0f, 1.0f }; | 0.0f, 1.0f }; | ||||
m_data->m_d3d_dev->SetViewport(&vp); | m_data->m_d3d_dev->SetViewport(&vp); | ||||
#else | #else | ||||
glViewport(viewport.A.x, viewport.A.y, viewport.B.x, viewport.B.y); | |||||
glViewport(viewport.aa.x, viewport.aa.y, viewport.bb.x, viewport.bb.y); | |||||
#endif | #endif | ||||
m_data->m_viewport = viewport; | m_data->m_viewport = viewport; | ||||
@@ -253,17 +253,13 @@ ibox2 Renderer::GetViewport() const | |||||
float Renderer::GetXYRatio() const | float Renderer::GetXYRatio() const | ||||
{ | { | ||||
ibox2 a = GetViewport(); | |||||
ibox2 b(a.A, a.B); | |||||
ivec2 s = b.B - b.A; | |||||
ivec2 s = GetViewport().extent(); | |||||
return (float)s.x / s.y; | return (float)s.x / s.y; | ||||
} | } | ||||
float Renderer::GetYXRatio() const | float Renderer::GetYXRatio() const | ||||
{ | { | ||||
ibox2 a = GetViewport(); | |||||
ibox2 b(a.A, a.B); | |||||
ivec2 s = b.B - b.A; | |||||
ivec2 s = GetViewport().extent(); | |||||
return (float)s.y / s.x; | return (float)s.y / s.x; | ||||
} | } | ||||
@@ -38,8 +38,8 @@ Gradient::Gradient(vec3 aa, vec3 bb) | |||||
{ | { | ||||
/* FIXME: this should not be hardcoded */ | /* FIXME: this should not be hardcoded */ | ||||
m_position = aa; | m_position = aa; | ||||
m_bbox[0] = aa; | |||||
m_bbox[1] = bb; | |||||
m_aabb.aa = aa; | |||||
m_aabb.bb = bb; | |||||
data->shader = nullptr; | data->shader = nullptr; | ||||
} | } | ||||
@@ -53,12 +53,12 @@ void Gradient::TickDraw(float seconds, Scene &scene) | |||||
{ | { | ||||
Entity::TickDraw(seconds, scene); | Entity::TickDraw(seconds, scene); | ||||
float const vertex[] = { m_bbox[0].x, m_bbox[0].y, 0.0f, | |||||
m_bbox[1].x, m_bbox[0].y, 0.0f, | |||||
m_bbox[0].x, m_bbox[1].y, 0.0f, | |||||
m_bbox[1].x, m_bbox[1].y, 0.0f, | |||||
m_bbox[0].x, m_bbox[1].y, 0.0f, | |||||
m_bbox[1].x, m_bbox[0].y, 0.0f, }; | |||||
float const vertex[] = { m_aabb.aa.x, m_aabb.aa.y, 0.0f, | |||||
m_aabb.bb.x, m_aabb.aa.y, 0.0f, | |||||
m_aabb.aa.x, m_aabb.bb.y, 0.0f, | |||||
m_aabb.bb.x, m_aabb.bb.y, 0.0f, | |||||
m_aabb.aa.x, m_aabb.bb.y, 0.0f, | |||||
m_aabb.bb.x, m_aabb.aa.y, 0.0f, }; | |||||
float const color[] = { 0.73f, 0.85f, 0.85f, 1.0f, | float const color[] = { 0.73f, 0.85f, 0.85f, 1.0f, | ||||
0.73f, 0.85f, 0.85f, 1.0f, | 0.73f, 0.85f, 0.85f, 1.0f, | ||||
@@ -22,7 +22,7 @@ namespace lol | |||||
Image Image::Crop(ibox2 box) const | Image Image::Crop(ibox2 box) const | ||||
{ | { | ||||
ivec2 const srcsize = GetSize(); | ivec2 const srcsize = GetSize(); | ||||
ivec2 const dstsize = box.B - box.A; | |||||
ivec2 const dstsize = box.extent(); | |||||
Image dst(dstsize); | Image dst(dstsize); | ||||
PixelFormat format = GetFormat(); | PixelFormat format = GetFormat(); | ||||
@@ -36,24 +36,24 @@ Image Image::Crop(ibox2 box) const | |||||
int len = dstsize.x; | int len = dstsize.x; | ||||
if (box.A.x < 0) | |||||
if (box.aa.x < 0) | |||||
{ | { | ||||
len += box.A.x; | |||||
box.A.x = 0; | |||||
len += box.aa.x; | |||||
box.aa.x = 0; | |||||
} | } | ||||
if (box.A.x + len > srcsize.x) | |||||
len = srcsize.x - box.A.x; | |||||
if (box.aa.x + len > srcsize.x) | |||||
len = srcsize.x - box.aa.x; | |||||
if (len > 0) | if (len > 0) | ||||
{ | { | ||||
for (int y = 0; y < dstsize.y; y++) | for (int y = 0; y < dstsize.y; y++) | ||||
{ | { | ||||
if (y + box.A.y < 0 || y + box.A.y >= srcsize.y) | |||||
if (y + box.aa.y < 0 || y + box.aa.y >= srcsize.y) | |||||
continue; | continue; | ||||
memcpy(dstp + y * dstsize.x * bpp, | memcpy(dstp + y * dstsize.x * bpp, | ||||
srcp + ((y + box.A.y) * srcsize.x + box.A.x) * bpp, | |||||
srcp + ((y + box.aa.y) * srcsize.x + box.aa.x) * bpp, | |||||
len * bpp); | len * bpp); | ||||
} | } | ||||
} | } | ||||
@@ -81,8 +81,8 @@ void Draw(Quadtree<TE>* tree, vec4 color) | |||||
//vec3 add = vec3(0.0f, 0.1f, 0.0f); | //vec3 add = vec3(0.0f, 0.1f, 0.0f); | ||||
while (boxes.Count() > 0) | while (boxes.Count() > 0) | ||||
{ | { | ||||
Debug::DrawBox(vec3(boxes[0].m1.A.x, tree->m_debug_y_offset, boxes[0].m1.A.y), | |||||
vec3(boxes[0].m1.B.x, tree->m_debug_y_offset, boxes[0].m1.B.y), | |||||
Debug::DrawBox(vec3(boxes[0].m1.aa.x, tree->m_debug_y_offset, boxes[0].m1.aa.y), | |||||
vec3(boxes[0].m1.bb.x, tree->m_debug_y_offset, boxes[0].m1.bb.y), | |||||
boxes[0].m2); | boxes[0].m2); | ||||
boxes.Remove(0); | boxes.Remove(0); | ||||
} | } | ||||
@@ -90,8 +90,8 @@ void Draw(Quadtree<TE>* tree, vec4 color) | |||||
{ | { | ||||
while (elements[0].m2 > 0) | while (elements[0].m2 > 0) | ||||
{ | { | ||||
Debug::DrawBox(vec3(elements[0].m1->GetAABB().A.x, tree->m_debug_y_offset, elements[0].m1->GetAABB().A.y) + off * (float)elements[0].m2, | |||||
vec3(elements[0].m1->GetAABB().B.x, tree->m_debug_y_offset, elements[0].m1->GetAABB().B.y) + off * (float)elements[0].m2, | |||||
Debug::DrawBox(vec3(elements[0].m1->GetAABB().aa.x, tree->m_debug_y_offset, elements[0].m1->GetAABB().aa.y) + off * (float)elements[0].m2, | |||||
vec3(elements[0].m1->GetAABB().bb.x, tree->m_debug_y_offset, elements[0].m1->GetAABB().bb.y) + off * (float)elements[0].m2, | |||||
elements[0].m3); | elements[0].m3); | ||||
elements[0].m2--; | elements[0].m2--; | ||||
} | } | ||||
@@ -112,9 +112,9 @@ void Draw(Octree<TE>* tree, vec4 color) | |||||
//vec3 add = vec3(0.0f, 0.1f, 0.0f); | //vec3 add = vec3(0.0f, 0.1f, 0.0f); | ||||
while (boxes.Count() > 0) | while (boxes.Count() > 0) | ||||
{ | { | ||||
//float size = boxes[0].m1.B.x - boxes[0].m1.A.x; | |||||
Debug::DrawBox(vec3(boxes[0].m1.A.x, boxes[0].m1.A.y, boxes[0].m1.A.z) /* + off * (m_size.x / size) */, | |||||
vec3(boxes[0].m1.B.x, boxes[0].m1.B.y, boxes[0].m1.B.z) /* + off * (m_size.x / size) */, | |||||
//float size = boxes[0].m1.bb.x - boxes[0].m1.aa.x; | |||||
Debug::DrawBox(vec3(boxes[0].m1.aa.x, boxes[0].m1.aa.y, boxes[0].m1.aa.z) /* + off * (m_size.x / size) */, | |||||
vec3(boxes[0].m1.bb.x, boxes[0].m1.bb.y, boxes[0].m1.bb.z) /* + off * (m_size.x / size) */, | |||||
boxes[0].m2); | boxes[0].m2); | ||||
//off += add; | //off += add; | ||||
boxes.Remove(0); | boxes.Remove(0); | ||||
@@ -123,8 +123,8 @@ void Draw(Octree<TE>* tree, vec4 color) | |||||
{ | { | ||||
while (elements[0].m2 > 0) | while (elements[0].m2 > 0) | ||||
{ | { | ||||
Debug::DrawBox(vec3(elements[0].m1->GetAABB().A.x, elements[0].m1->GetAABB().A.y, elements[0].m1->GetAABB().A.z) + off * (float)elements[0].m2, | |||||
vec3(elements[0].m1->GetAABB().B.x, elements[0].m1->GetAABB().B.y, elements[0].m1->GetAABB().B.z) + off * (float)elements[0].m2, | |||||
Debug::DrawBox(vec3(elements[0].m1->GetAABB().aa.x, elements[0].m1->GetAABB().aa.y, elements[0].m1->GetAABB().aa.z) + off * (float)elements[0].m2, | |||||
vec3(elements[0].m1->GetAABB().bb.x, elements[0].m1->GetAABB().bb.y, elements[0].m1->GetAABB().bb.z) + off * (float)elements[0].m2, | |||||
elements[0].m3); | elements[0].m3); | ||||
elements[0].m2--; | elements[0].m2--; | ||||
} | } | ||||
@@ -341,9 +341,9 @@ public: | |||||
virtual TB GetSubAABB(const TB& bbox, int sub) | virtual TB GetSubAABB(const TB& bbox, int sub) | ||||
{ | { | ||||
TV v(GetSubOffset(sub)); | TV v(GetSubOffset(sub)); | ||||
TV half_vec = (bbox.B - bbox.A) * .5f; | |||||
return TB(bbox.A + half_vec * v, | |||||
bbox.A + half_vec * (v + TV(1.f))); | |||||
TV half_vec = bbox.extent() * .5f; | |||||
return TB(bbox.aa + half_vec * v, | |||||
bbox.aa + half_vec * (v + TV(1.f))); | |||||
} | } | ||||
//-- | //-- | ||||
@@ -87,23 +87,23 @@ LOL_BOX_TYPEDEFS(Box3, box3) | |||||
template <typename T> struct Box2 | template <typename T> struct Box2 | ||||
{ | { | ||||
inline Box2() | inline Box2() | ||||
: A(T(0)), | |||||
B(T(0)) | |||||
: aa(T(0)), | |||||
bb(T(0)) | |||||
{} | {} | ||||
inline Box2(vec_t<T,2> const &a, vec_t<T,2> const &b) | inline Box2(vec_t<T,2> const &a, vec_t<T,2> const &b) | ||||
: A(a), | |||||
B(b) | |||||
: aa(a), | |||||
bb(b) | |||||
{} | {} | ||||
inline Box2(T const &ax, T const &ay, T const &bx, T const &by) | inline Box2(T const &ax, T const &ay, T const &bx, T const &by) | ||||
: A(ax, ay), | |||||
B(bx, by) | |||||
: aa(ax, ay), | |||||
bb(bx, by) | |||||
{} | {} | ||||
Box2<T> operator +(vec_t<T,2> const &v) const | Box2<T> operator +(vec_t<T,2> const &v) const | ||||
{ | { | ||||
return Box2<T>(A + v, B + v); | |||||
return Box2<T>(aa + v, bb + v); | |||||
} | } | ||||
Box2<T> &operator +=(vec_t<T,2> const &v) | Box2<T> &operator +=(vec_t<T,2> const &v) | ||||
@@ -113,7 +113,7 @@ template <typename T> struct Box2 | |||||
Box2<T> operator -(vec_t<T,2> const &v) const | Box2<T> operator -(vec_t<T,2> const &v) const | ||||
{ | { | ||||
return Box2<T>(A - v, B - v); | |||||
return Box2<T>(aa - v, bb - v); | |||||
} | } | ||||
Box2<T> &operator -=(vec_t<T,2> const &v) | Box2<T> &operator -=(vec_t<T,2> const &v) | ||||
@@ -123,7 +123,7 @@ template <typename T> struct Box2 | |||||
Box2<T> operator *(vec_t<T,2> const &v) const | Box2<T> operator *(vec_t<T,2> const &v) const | ||||
{ | { | ||||
return Box2<T>(A * v, B * v); | |||||
return Box2<T>(aa * v, bb * v); | |||||
} | } | ||||
Box2<T> &operator *=(vec_t<T,2> const &v) | Box2<T> &operator *=(vec_t<T,2> const &v) | ||||
@@ -131,17 +131,31 @@ template <typename T> struct Box2 | |||||
return *this = *this * v; | return *this = *this * v; | ||||
} | } | ||||
bool operator ==(Box2<T> const &box) | |||||
Box2<T> operator *(T const &s) const | |||||
{ | { | ||||
return A == box.A && B == box.B; | |||||
return Box2<T>(aa * s, bb * s); | |||||
} | } | ||||
bool operator !=(Box2<T> const &box) | |||||
Box2<T> &operator *=(T const &s) | |||||
{ | { | ||||
return A != box.A || B != box.B; | |||||
return *this = *this * s; | |||||
} | } | ||||
vec_t<T,2> A, B; | |||||
bool operator ==(Box2<T> const &box) const | |||||
{ | |||||
return aa == box.aa && bb == box.bb; | |||||
} | |||||
bool operator !=(Box2<T> const &box) const | |||||
{ | |||||
return aa != box.aa || bb != box.bb; | |||||
} | |||||
inline vec_t<T,2> center() const { return (bb + aa) / 2; } | |||||
inline vec_t<T,2> extent() const { return bb - aa; } | |||||
vec_t<T,2> aa, bb; | |||||
}; | }; | ||||
/* | /* | ||||
@@ -151,24 +165,24 @@ template <typename T> struct Box2 | |||||
template <typename T> struct Box3 | template <typename T> struct Box3 | ||||
{ | { | ||||
inline Box3() | inline Box3() | ||||
: A(T(0)), | |||||
B(T(0)) | |||||
: aa(T(0)), | |||||
bb(T(0)) | |||||
{} | {} | ||||
inline Box3(vec_t<T,3> const &a, vec_t<T,3> const &b) | inline Box3(vec_t<T,3> const &a, vec_t<T,3> const &b) | ||||
: A(a), | |||||
B(b) | |||||
: aa(a), | |||||
bb(b) | |||||
{} | {} | ||||
inline Box3(T const &ax, T const &ay, T const &az, | inline Box3(T const &ax, T const &ay, T const &az, | ||||
T const &bx, T const &by, T const &bz) | T const &bx, T const &by, T const &bz) | ||||
: A(ax, ay, az), | |||||
B(bx, by, bz) | |||||
: aa(ax, ay, az), | |||||
bb(bx, by, bz) | |||||
{} | {} | ||||
Box3<T> operator +(vec_t<T,3> const &v) const | Box3<T> operator +(vec_t<T,3> const &v) const | ||||
{ | { | ||||
return Box3<T>(A + v, B + v); | |||||
return Box3<T>(aa + v, bb + v); | |||||
} | } | ||||
Box3<T> &operator +=(vec_t<T,3> const &v) | Box3<T> &operator +=(vec_t<T,3> const &v) | ||||
@@ -178,7 +192,7 @@ template <typename T> struct Box3 | |||||
Box3<T> operator -(vec_t<T,3> const &v) const | Box3<T> operator -(vec_t<T,3> const &v) const | ||||
{ | { | ||||
return Box3<T>(A - v, B - v); | |||||
return Box3<T>(aa - v, bb - v); | |||||
} | } | ||||
Box3<T> &operator -=(vec_t<T,3> const &v) | Box3<T> &operator -=(vec_t<T,3> const &v) | ||||
@@ -188,7 +202,7 @@ template <typename T> struct Box3 | |||||
Box3<T> operator *(vec_t<T,3> const &v) const | Box3<T> operator *(vec_t<T,3> const &v) const | ||||
{ | { | ||||
return Box3<T>(A * v, B * v); | |||||
return Box3<T>(aa * v, bb * v); | |||||
} | } | ||||
Box3<T> &operator *=(vec_t<T,3> const &v) | Box3<T> &operator *=(vec_t<T,3> const &v) | ||||
@@ -196,17 +210,31 @@ template <typename T> struct Box3 | |||||
return *this = *this * v; | return *this = *this * v; | ||||
} | } | ||||
bool operator ==(Box3<T> const &box) | |||||
Box3<T> operator *(T const &s) const | |||||
{ | { | ||||
return A == box.A && B == box.B; | |||||
return Box3<T>(aa * s, bb * s); | |||||
} | } | ||||
bool operator !=(Box3<T> const &box) | |||||
Box3<T> &operator *=(T const &s) | |||||
{ | { | ||||
return A != box.A || B != box.B; | |||||
return *this = *this * s; | |||||
} | } | ||||
vec_t<T,3> A, B; | |||||
bool operator ==(Box3<T> const &box) const | |||||
{ | |||||
return aa == box.aa && bb == box.bb; | |||||
} | |||||
bool operator !=(Box3<T> const &box) const | |||||
{ | |||||
return aa != box.aa || bb != box.bb; | |||||
} | |||||
inline vec_t<T,3> center() const { return (bb + aa) / 2; } | |||||
inline vec_t<T,3> extent() const { return bb - aa; } | |||||
vec_t<T,3> aa, bb; | |||||
}; | }; | ||||
/* | /* | ||||
@@ -243,9 +271,9 @@ bool operator>=(float value, const TestEpsilon& epsilon); | |||||
//-- | //-- | ||||
static inline bool TestAABBVsAABB(box2 const &b1, box2 const &b2) | static inline bool TestAABBVsAABB(box2 const &b1, box2 const &b2) | ||||
{ | { | ||||
vec2 c = 0.5f * ((b1.A + b1.B) - (b2.A + b2.B)); | |||||
vec2 e1 = 0.5f * (b1.B - b1.A); | |||||
vec2 e2 = 0.5f * (b2.B - b2.A); | |||||
vec2 c = b1.center() - b2.center(); | |||||
vec2 e1 = 0.5f * b1.extent(); | |||||
vec2 e2 = 0.5f * b2.extent(); | |||||
return abs(c.x) <= e1.x + e2.x | return abs(c.x) <= e1.x + e2.x | ||||
&& abs(c.y) <= e1.y + e2.y; | && abs(c.y) <= e1.y + e2.y; | ||||
@@ -257,9 +285,9 @@ static inline bool TestAABBVsPoint(box2 const &b1, vec2 const &p) | |||||
static inline bool TestAABBVsAABB(box3 const &b1, box3 const &b2) | static inline bool TestAABBVsAABB(box3 const &b1, box3 const &b2) | ||||
{ | { | ||||
vec3 c = 0.5f * ((b1.A + b1.B) - (b2.A + b2.B)); | |||||
vec3 e1 = 0.5f * (b1.B - b1.A); | |||||
vec3 e2 = 0.5f * (b2.B - b2.A); | |||||
vec3 c = b1.center() - b2.center(); | |||||
vec3 e1 = 0.5f * b1.extent(); | |||||
vec3 e2 = 0.5f * b2.extent(); | |||||
return abs(c.x) <= e1.x + e2.x | return abs(c.x) <= e1.x + e2.x | ||||
&& abs(c.y) <= e1.y + e2.y | && abs(c.y) <= e1.y + e2.y | ||||
@@ -137,8 +137,8 @@ char const *TileSet::GetName() | |||||
ptrdiff_t TileSet::AddTile(ibox2 rect) | ptrdiff_t TileSet::AddTile(ibox2 rect) | ||||
{ | { | ||||
m_tileset_data->m_tiles.Push(rect, | m_tileset_data->m_tiles.Push(rect, | ||||
box2((vec2)rect.A / (vec2)m_data->m_texture_size, | |||||
(vec2)rect.B / (vec2)m_data->m_texture_size)); | |||||
box2((vec2)rect.aa / (vec2)m_data->m_texture_size, | |||||
(vec2)rect.bb / (vec2)m_data->m_texture_size)); | |||||
return m_tileset_data->m_tiles.Count() - 1; | return m_tileset_data->m_tiles.Count() - 1; | ||||
} | } | ||||
@@ -161,8 +161,7 @@ ptrdiff_t TileSet::GetTileCount() const | |||||
ivec2 TileSet::GetTileSize(ptrdiff_t tileid) const | ivec2 TileSet::GetTileSize(ptrdiff_t tileid) const | ||||
{ | { | ||||
ibox2 const &box = m_tileset_data->m_tiles[tileid].m1; | |||||
return box.B - box.A; | |||||
return m_tileset_data->m_tiles[tileid].m1.extent(); | |||||
} | } | ||||
//Palette --------------------------------------------------------------------- | //Palette --------------------------------------------------------------------- | ||||
@@ -186,14 +185,14 @@ void TileSet::BlitTile(uint32_t id, vec3 pos, int o, vec2 scale, float angle, | |||||
{ | { | ||||
ibox2 pixels = m_tileset_data->m_tiles[id].m1; | ibox2 pixels = m_tileset_data->m_tiles[id].m1; | ||||
box2 texels = m_tileset_data->m_tiles[id].m2; | box2 texels = m_tileset_data->m_tiles[id].m2; | ||||
float dtx = texels.B.x - texels.A.x; | |||||
float dty = texels.B.y - texels.A.y; | |||||
float tx = texels.A.x; | |||||
float ty = texels.A.y; | |||||
int dx = (int)((float)(pixels.B.x - pixels.A.x) * scale.x); | |||||
int dy = o ? 0 : (int)((float)(pixels.B.y - pixels.A.y) * scale.y); | |||||
int dz = o ? (int)((float)(pixels.B.y - pixels.A.y) * scale.y) : 0; | |||||
float dtx = texels.extent().x; | |||||
float dty = texels.extent().y; | |||||
float tx = texels.aa.x; | |||||
float ty = texels.aa.y; | |||||
int dx = (int)(pixels.extent().x * scale.x); | |||||
int dy = o ? 0 : (int)(pixels.extent().y * scale.y); | |||||
int dz = o ? (int)(pixels.extent().y * scale.y) : 0; | |||||
/* If scaling is negative, switch triangle winding */ | /* If scaling is negative, switch triangle winding */ | ||||
if (scale.x * scale.y < 0.0f) | if (scale.x * scale.y < 0.0f) | ||||
@@ -132,9 +132,7 @@ void Video::Capture(uint32_t *buffer) | |||||
ivec2 Video::GetSize() | ivec2 Video::GetSize() | ||||
{ | { | ||||
ibox2 viewport = g_renderer->GetViewport(); | |||||
return viewport.B - viewport.A; | |||||
return g_renderer->GetViewport().extent(); | |||||
} | } | ||||
} /* namespace lol */ | } /* namespace lol */ | ||||
@@ -20,8 +20,12 @@ namespace lol | |||||
*/ | */ | ||||
WorldEntity::WorldEntity() | WorldEntity::WorldEntity() | ||||
: m_aabb(vec3(0.f), vec3(0.f)), | |||||
m_position(0.f), | |||||
m_velocity(0.f), | |||||
m_rotation(1.f), | |||||
m_rotation_velocity(0.f) | |||||
{ | { | ||||
m_bbox[0] = m_bbox[1] = vec3::zero; | |||||
} | } | ||||
WorldEntity::~WorldEntity() | WorldEntity::~WorldEntity() | ||||
@@ -28,11 +28,11 @@ public: | |||||
virtual char const *GetName(); | virtual char const *GetName(); | ||||
public: | public: | ||||
box3 m_aabb; | |||||
vec3 m_position = vec3::zero; | vec3 m_position = vec3::zero; | ||||
vec3 m_velocity = vec3::zero; | vec3 m_velocity = vec3::zero; | ||||
quat m_rotation = quat(1); | quat m_rotation = quat(1); | ||||
vec3 m_rotation_velocity = vec3::zero; | vec3 m_rotation_velocity = vec3::zero; | ||||
vec3 m_bbox[2]; | |||||
protected: | protected: | ||||
WorldEntity(); | WorldEntity(); | ||||