Files
botw/lib/sead/include/math/seadBoundBox.h
T
Léo Lam 18c60323a9 Switch to subrepos
git subrepo clone https://github.com/open-ead/sead lib/sead

subrepo:
  subdir:   "lib/sead"
  merged:   "1b66e825d"
upstream:
  origin:   "https://github.com/open-ead/sead"
  branch:   "master"
  commit:   "1b66e825d"
git-subrepo:
  version:  "0.4.3"
  origin:   "https://github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

git subrepo clone (merge) https://github.com/open-ead/nnheaders lib/NintendoSDK

subrepo:
  subdir:   "lib/NintendoSDK"
  merged:   "9ee21399f"
upstream:
  origin:   "https://github.com/open-ead/nnheaders"
  branch:   "master"
  commit:   "9ee21399f"
git-subrepo:
  version:  "0.4.3"
  origin:   "ssh://git@github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

git subrepo clone https://github.com/open-ead/agl lib/agl

subrepo:
  subdir:   "lib/agl"
  merged:   "7c063271b"
upstream:
  origin:   "https://github.com/open-ead/agl"
  branch:   "master"
  commit:   "7c063271b"
git-subrepo:
  version:  "0.4.3"
  origin:   "ssh://git@github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

git subrepo clone https://github.com/open-ead/EventFlow lib/EventFlow

subrepo:
  subdir:   "lib/EventFlow"
  merged:   "c35d21b34"
upstream:
  origin:   "https://github.com/open-ead/EventFlow"
  branch:   "master"
  commit:   "c35d21b34"
git-subrepo:
  version:  "0.4.3"
  origin:   "ssh://git@github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"
2022-03-21 21:31:42 +01:00

110 lines
3.1 KiB
C++

#pragma once
#include <math/seadVector.h>
namespace sead
{
template <typename T>
struct BoundBox2
{
using Vector2 = sead::Vector2<T>;
BoundBox2() { setUndef(); }
BoundBox2(T x0, T y0, T x1, T y1) { set(x0, y0, x1, y1); }
BoundBox2(const Vector2& min, const Vector2& max) : mMin(min), mMax(max) {}
T getSizeX() const { return mMax.x - mMin.x; }
T getSizeY() const { return mMax.y - mMin.y; }
T getHalfSizeX() const { return (mMax.x - mMin.x) / 2.0f; }
T getHalfSizeY() const { return (mMax.y - mMin.y) / 2.0f; }
const Vector2& getMin() const { return mMin; }
const Vector2& getMax() const { return mMax; }
Vector2 getTL() const { return mMin; }
Vector2 getTR() const { return Vector2(mMax.x, mMin.y); }
Vector2 getBL() const { return Vector2(mMin.x, mMax.y); }
Vector2 getBR() const { return mMax; }
Vector2 getCenter() const;
void getCenter(Vector2* p) const;
bool isUndef() const;
bool isInside(const Vector2& p) const;
void setUndef();
void set(T x0, T y0, T x1, T y1);
void set(const Vector2& min, const Vector2& max);
void setMin(const Vector2& min);
void setMax(const Vector2& max);
void setFromCenterAndXY(T centerX, T centerY, T sizeX, T sizeY);
void setFromCornerAndXY(T cornerX, T cornerY, T sizeX, T sizeY);
void setFromCenterAndXY(const Vector2& center, T sizeX, T sizeY)
{
setFromCenterAndXY(center.x, center.y, sizeX, sizeY);
}
void setFromCornerAndXY(const Vector2& corner, T sizeX, T sizeY);
void offset(T dx, T dy);
void offset(const Vector2& dv);
void scaleX(T sx);
void scaleY(T sy);
private:
Vector2 mMin;
Vector2 mMax;
static const BoundBox2<T> cUndefined;
};
template <typename T>
struct BoundBox3
{
using Vector3 = sead::Vector3<T>;
BoundBox3() { setUndef(); }
BoundBox3(T x0, T y0, T z0, T x1, T y1, T z1) { set(x0, y0, z0, x1, y1, z1); }
BoundBox3(const Vector3& min, const Vector3& max) { set(min, max); }
T getSizeX() const { return mMax.x - mMin.x; }
T getSizeY() const { return mMax.y - mMin.y; }
T getSizeZ() const { return mMax.z - mMin.z; }
T getHalfSizeX() const { return (mMax.x - mMin.x) / 2.0f; }
T getHalfSizeY() const { return (mMax.y - mMin.y) / 2.0f; }
T getHalfSizeZ() const { return (mMax.z - mMin.z) / 2.0f; }
const Vector3& getMin() const { return mMin; }
const Vector3& getMax() const { return mMax; }
Vector3 getCenter() const;
void getCenter(Vector3* p) const;
bool isUndef() const;
bool isInside(const Vector3& p) const;
void setUndef();
void set(T x0, T y0, T z0, T x1, T y1, T z1);
void set(const Vector3& min, const Vector3& max);
void setMin(const Vector3& min);
void setMax(const Vector3& max);
void offset(T dx, T dy, T dz);
void offset(const Vector3& dv);
void scaleX(T sx);
void scaleY(T sy);
void scaleZ(T sz);
private:
Vector3 mMin;
Vector3 mMax;
static const BoundBox3<T> cUndefined;
};
typedef BoundBox2<f32> BoundBox2f;
typedef BoundBox3<f32> BoundBox3f;
} // namespace sead
#define SEAD_MATH_BOUND_BOX_H_
#include <math/seadBoundBox.hpp>
#undef SEAD_MATH_BOUND_BOX_H_