You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

88 lines
2.1 KiB
C++

#ifndef RAYLIB_CPP_INCLUDE_BOUNDINGBOX_HPP_
#define RAYLIB_CPP_INCLUDE_BOUNDINGBOX_HPP_
#include "./raylib.hpp"
#include "./raylib-cpp-utils.hpp"
namespace raylib {
/**
* Bounding box type
*/
class BoundingBox : public ::BoundingBox {
public:
/*
* Copy a bounding box from another bounding box.
*/
BoundingBox(const ::BoundingBox& box) : ::BoundingBox{box.min, box.max} {
// Nothing.
}
/**
* Compute mesh bounding box limits
*/
BoundingBox(const ::Mesh& mesh) {
set(::GetMeshBoundingBox(mesh));
}
BoundingBox(::Vector3 minMax = ::Vector3{0.0f, 0.0f, 0.0f}) : ::BoundingBox{minMax, minMax} {}
BoundingBox(::Vector3 min, ::Vector3 max) : ::BoundingBox{min, max} {}
GETTERSETTER(::Vector3, Min, min)
GETTERSETTER(::Vector3, Max, max)
BoundingBox& operator=(const ::BoundingBox& box) {
set(box);
return *this;
}
/**
* Draw a bounding box with wires
*/
inline void Draw(::Color color = {255, 255, 255, 255}) const {
::DrawBoundingBox(*this, color);
}
/**
* Detect collision between two boxes
*/
inline bool CheckCollision(const ::BoundingBox& box2) const {
return CheckCollisionBoxes(*this, box2);
}
/**
* Detect collision between box and sphere
*/
inline bool CheckCollision(::Vector3 center, float radius) const {
return CheckCollisionBoxSphere(*this, center, radius);
}
/**
* Detect collision between ray and bounding box
*/
inline bool CheckCollision(const ::Ray& ray) const {
return GetRayCollisionBox(ray, *this).hit;
}
/**
* Get collision information between ray and bounding box
*/
inline RayCollision GetCollision(const ::Ray& ray) const {
return GetRayCollisionBox(ray, *this);
}
protected:
void set(const ::BoundingBox& box) {
min = box.min;
max = box.max;
}
void set(const ::Vector3& _min, const ::Vector3& _max) {
min = _min;
max = _max;
}
};
} // namespace raylib
using RBoundingBox = raylib::BoundingBox;
#endif // RAYLIB_CPP_INCLUDE_BOUNDINGBOX_HPP_