#include "core/Box.h" #include "core/Generic.h" #include "core/ToString.h" void setBox(Box* box, const Vector3* size) { for(size_t i = 0; i < 3; i++) { if(size->data[i] < 0.0f) { box->min.data[i] = size->data[i]; box->max.data[i] = 0.0f; } else { box->min.data[i] = 0.0f; box->max.data[i] = size->data[i]; } } } void offsetBox(Box* box, const Vector3* offset) { addSet(&box->min, offset); addSet(&box->max, offset); } bool collidesWithBox(const Box* box, const Box* other) { return box->max.x > other->min.x && box->min.x < other->max.x && box->max.y > other->min.y && box->min.y < other->max.y && box->max.z > other->min.z && box->min.z < other->max.z; } void expandBox(Box* box, const Vector3* offset) { for(size_t i = 0; i < 3; i++) { box->v[offset->data[i] > 0.0f].data[i] += offset->data[i]; } } void growBox(Box* box, const Vector3* growth) { Vector3 half; mul(&half, growth, 0.5f); Vector3 nMin; sub(&nMin, &box->min, &half); Vector3 nMax; add(&nMax, &box->max, &half); for(size_t i = 0; i < 3; i++) { if(nMin.data[i] > nMax.data[i]) { nMin.data[i] = (box->min.data[i] + box->max.data[i]) * 0.5f; nMax.data[i] = nMin.data[i]; } } box->min = nMin; box->max = nMax; } size_t toStringBox(const Box* box, char* buffer, size_t n) { return toString( buffer, n, "Box([%.3f, %.3f, %.3f], [%.3f, %.3f, %.3f])", (double)box->min.x, (double)box->min.y, (double)box->min.z, (double)box->max.x, (double)box->max.y, (double)box->max.z); }