From 7cb0381ac2042a3c54c4288600ef31002682dc05 Mon Sep 17 00:00:00 2001 From: Arthur Cormerais Date: Fri, 1 Aug 2025 18:26:18 +0200 Subject: [PATCH] engine : quads now auto-fit collider to model size --- core/quad.c | 18 ++++++++++++------ core/quad.h | 1 + core/transform.c | 2 ++ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/core/quad.c b/core/quad.c index c03aa98f5..8e9888265 100644 --- a/core/quad.c +++ b/core/quad.c @@ -212,9 +212,8 @@ void quad_check_and_clear_drawmodes(Quad *q) { void quad_set_width(Quad *q, float value) { q->width = value; - if (float_isZero(q->anchorX, EPSILON_ZERO) == false) { - transform_set_physics_dirty(q->transform); - } + quad_fit_collider_to_bounding_box(q); + transform_set_physics_dirty(q->transform); } float quad_get_width(const Quad *q) { @@ -223,9 +222,8 @@ float quad_get_width(const Quad *q) { void quad_set_height(Quad *q, float value) { q->height = value; - if (float_isZero(q->anchorY, EPSILON_ZERO) == false) { - transform_set_physics_dirty(q->transform); - } + quad_fit_collider_to_bounding_box(q); + transform_set_physics_dirty(q->transform); } float quad_get_height(const Quad *q) { @@ -463,6 +461,14 @@ float quad_get_9slice_corner_width(const Quad *q) { return _quad_get_flag(q, QUAD_FLAG_9SLICE) ? q->offsetV : QUAD_DEFAULT_9SLICE_CORNER_WIDTH; } +void quad_fit_collider_to_bounding_box(const Quad *q) { + RigidBody *rb = transform_get_rigidbody(q->transform); + if (rb == NULL || rigidbody_is_collider_custom_set(rb)) + return; + Box bb = { { 0.0f, 0.0f, 0.0f }, { q->width, q->height, EPSILON_COLLISION } }; + rigidbody_set_collider(rb, &bb, false); +} + // MARK: - Draw modes - void quad_drawmode_set_billboard(Quad *q, BillboardMode mode) { diff --git a/core/quad.h b/core/quad.h index d0660fd61..972e213e1 100644 --- a/core/quad.h +++ b/core/quad.h @@ -93,6 +93,7 @@ void quad_set_9slice_scale(Quad *q, float value); float quad_get_9slice_scale(const Quad *q); void quad_set_9slice_corner_width(Quad *q, float value); float quad_get_9slice_corner_width(const Quad *q); +void quad_fit_collider_to_bounding_box(const Quad *q); // MARK: - Draw modes - diff --git a/core/transform.c b/core/transform.c index d0b61ea85..ae523b37d 100644 --- a/core/transform.c +++ b/core/transform.c @@ -428,6 +428,8 @@ bool transform_ensure_rigidbody(Transform *t, mesh_fit_collider_to_bounding_box((Mesh*)t->ptr); } else if (t->type == ShapeTransform) { shape_fit_collider_to_bounding_box((Shape*)t->ptr); + } else if (t->type == QuadTransform) { + quad_fit_collider_to_bounding_box((Quad*)t->ptr); } } return isNew;