24 bbField.
_name =
"Bounding Box";
29 _editorComponent.registerField(
MOV(bbField));
32 rbbField.
_name =
"Ref Bounding Box";
37 _editorComponent.registerField(
MOV(rbbField));
40 bsField.
_name =
"Bounding Sphere";
45 _editorComponent.registerField(
MOV(bsField));
48 obsField.
_name =
"Oriented Bouding Box";
53 _editorComponent.registerField(
MOV(obsField));
56 vbbField.
_name =
"Show AABB";
57 vbbField.
_dataGetter = [
this](
void* dataOut) { *
static_cast<bool*
>(dataOut) = _showAABB; };
58 vbbField.
_dataSetter = [
this](
const void* data) {
showAABB(*
static_cast<const bool*
>(data)); };
63 _editorComponent.registerField(
MOV(vbbField));
66 vobbField.
_name =
"Show OBB";
67 vobbField.
_dataGetter = [
this](
void* dataOut) { *
static_cast<bool*
>(dataOut) = _showOBB; };
68 vobbField.
_dataSetter = [
this](
const void* data) {
showOBB(*
static_cast<const bool*
>(data)); };
73 _editorComponent.registerField(
MOV(vobbField));
76 vbsField.
_name =
"Show Bounding Sphere";
77 vbsField.
_dataGetter = [
this](
void* dataOut) { *
static_cast<bool*
>(dataOut) = _showBS; };
78 vbsField.
_dataSetter = [
this](
const void* data) {
showBS(*
static_cast<const bool*
>(data)); };
82 _editorComponent.registerField(
MOV(vbsField));
85 recomputeBoundsField.
_name =
"Recompute Bounds";
86 recomputeBoundsField.
_range = {
to_F32(recomputeBoundsField.
_name.length()) * 10, 20.0f };
89 _editorComponent.registerField(
MOV(recomputeBoundsField));
91 _editorComponent.onChangedCbk([
this](
const std::string_view field) {
92 if (field ==
"Recompute Bounds") {
99 if (_showAABB != state) {
102 _parentSGN->SendEvent(
111 if (_showOBB != state) {
114 _parentSGN->SendEvent(
123 if (_showBS != state) {
126 _parentSGN->SendEvent(
163 _refBoundingBox.set(nodeBounds);
186 for (
U32 i = 0u; i < childCount; ++i) {
208 for (
U32 i = 0u; i < childCount; ++i) {
233 return lhs.parentSGN()->getGUID() != rhs.parentSGN()->getGUID() &&
234 lhs.getBoundingSphere().collision( rhs.getBoundingSphere() ) &&
235 lhs.getBoundingBox().collision( rhs.getBoundingBox() );
#define PROFILE_SCOPE_AUTO(CATEGORY)
void set(const BoundingBox &bb) noexcept
void add(const vec3< F32 > &v) noexcept
void transform(vec3< F32 > initialMin, vec3< F32 > initialMax, const mat4< F32 > &mat) noexcept
const vec3< F32 > & getMax() const noexcept
const vec3< F32 > & getMin() const noexcept
void translate(const vec3< F32 > &v) noexcept
void fromBoundingBox(const BoundingBox &bBox) noexcept
BoundingBox _refBoundingBox
void OnData(const ECS::CustomEvent &data) override
std::atomic_uint _transformUpdatedMask
void showAABB(bool state)
void flagBoundingBoxDirty(U32 transformMask, bool recursive)
BoundsComponent(SceneGraphNode *sgn, PlatformContext &context)
std::atomic_bool _obbDirty
void updateBoundingBoxTransform()
void setRefBoundingBox(const BoundingBox &nodeBounds) noexcept
BoundingSphere _boundingSphere
void fromBoundingBox(const BoundingBox &aabb) noexcept
BoundingSphere toEnclosingSphere() const noexcept
ProjectManager & parent() noexcept
virtual void OnData(const ECS::CustomEvent &data)
void set(const T *v) noexcept
set the 3 components of the vector manually using a source pointer to a (large enough) array
constexpr Optick::Category::Type Scene
Handle console commands that start with a forward slash.
bool Collision(const BoundsComponent &lhs, const BoundsComponent &rhs) noexcept
constexpr F32 to_F32(const T value)
std::shared_lock< mutex > SharedLock
SGNComponent::Registrar< T, C > BaseComponentType
constexpr auto to_base(const Type value) -> Type
DELEGATE_STD< void, void * > _dataGetter
DELEGATE_STD< void, const void * > _dataSetter
vec2< F32 > _range
Used by slider_type as a min / max range or dropdown as selected_index / count.
PushConstantType _basicType
EditorComponentFieldType _type
eastl::fixed_vector< SceneGraphNode *, 32, true > _data