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