Collision detection

Defines

binocle_spatial_hash_func(key)
binocle_spatial_hash_equal(a, b)

Typedefs

typedef enum binocle_collider_type binocle_collider_type
typedef enum binocle_point_sectors binocle_point_sectors
typedef struct binocle_collider_circle binocle_collider_circle
typedef struct binocle_collider_hitbox binocle_collider_hitbox
typedef uint64_t binocle_spatial_hash_grid_key_t
typedef struct binocle_collider binocle_collider
typedef struct binocle_spatial_hash_cell binocle_spatial_hash_cell
typedef struct binocle_spatial_hash binocle_spatial_hash

Enums

enum binocle_collider_type

Values:

enumerator BINOCLE_COLLIDER_CIRCLE
enumerator BINOCLE_COLLIDER_HITBOX
enum binocle_point_sectors

Values:

enumerator BINOCLE_POINT_SECTOR_CENTER
enumerator BINOCLE_POINT_SECTOR_TOP
enumerator BINOCLE_POINT_SECTOR_BOTTOM
enumerator BINOCLE_POINT_SECTOR_TOP_LEFT
enumerator BINOCLE_POINT_SECTOR_TOP_RIGHT
enumerator BINOCLE_POINT_SECTOR_LEFT
enumerator BINOCLE_POINT_SECTOR_RIGHT
enumerator BINOCLE_POINT_SECTOR_BOTTOM_LEFT
enumerator BINOCLE_POINT_SECTOR_BOTTOM_RIGHT

Functions

binocle_collider_circle binocle_collider_circle_new(float radius, kmVec2 center)
kmVec2 binocle_collider_circle_get_absolute_position(binocle_collider_circle *circle)
float binocle_collider_circle_get_absolute_left(binocle_collider_circle *circle)
float binocle_collider_circle_get_absolute_top(binocle_collider_circle *circle)
float binocle_collider_circle_get_absolute_right(binocle_collider_circle *circle)
float binocle_collider_circle_get_absolute_bottom(binocle_collider_circle *circle)
binocle_collider_hitbox binocle_collider_hitbox_new(kmAABB2 aabb)
float binocle_collider_hitbox_get_absolute_left(binocle_collider_hitbox *hitbox)
float binocle_collider_hitbox_get_absolute_top(binocle_collider_hitbox *hitbox)
float binocle_collider_hitbox_get_absolute_right(binocle_collider_hitbox *hitbox)
float binocle_collider_hitbox_get_absolute_bottom(binocle_collider_hitbox *hitbox)
float binocle_collider_hitbox_get_width(binocle_collider_hitbox *hitbox)
float binocle_collider_hitbox_get_height(binocle_collider_hitbox *hitbox)
bool binocle_collider_hitbox_intersects_hitbox(binocle_collider_hitbox *hitbox_a, binocle_collider_hitbox *hitbox_b)
binocle_point_sectors binocle_collide_get_sector_rect_point(kmAABB2 rect, kmVec2 point)
binocle_point_sectors binocle_collide_get_sector_parts_point(float r_x, float r_y, float r_w, float r_h, kmVec2 point)
kmVec2 binocle_collide_closest_point_on_line(kmVec2 lineA, kmVec2 lineB, kmVec2 closestTo)
bool binocle_collide_rect_to_circle(float rect_x, float rect_y, float rect_width, float rect_height, kmVec2 c_position, float c_radius)
bool binocle_collide_circle_to_point(kmVec2 circle_position, float circle_radius, kmVec2 point)
bool binocle_collide_circle_to_line(kmVec2 cPosiition, float cRadius, kmVec2 lineFrom, kmVec2 lineTo)
bool binocle_collide_circle_to_circle(binocle_collider_circle *circle_a, binocle_collider_circle *circle_b)
bool binocle_collide_circle_to_hitbox(binocle_collider_circle *circle, binocle_collider_hitbox *hitbox)
bool binocle_collide_hitbox_to_hitbox(binocle_collider_hitbox *hitbox_a, binocle_collider_hitbox *hitbox_b)
binocle_collider binocle_collider_new()
binocle_spatial_hash binocle_spatial_hash_new(float width, float height, uint32_t cell_size)
void binocle_spatial_hash_destroy(binocle_spatial_hash *spatial_hash)
binocle_spatial_hash_cell binocle_spatial_hash_cell_new()
kmVec2 binocle_spatial_hash_get_cell_coords(binocle_spatial_hash *spatial_hash, float x, float y)
binocle_spatial_hash_cell *binocle_spatial_hash_cell_at_position(binocle_spatial_hash *spatial_hash, int x, int y, bool createCellIfEmpty)
void binocle_spatial_hash_add_body(binocle_spatial_hash *spatial_hash, binocle_collider *collider)
void binocle_spatial_hash_remove_body(binocle_spatial_hash *spatial_hash, binocle_collider *collider)
void binocle_spatial_hash_update_body(binocle_spatial_hash *spatial_hash, binocle_collider *collider)
void binocle_spatial_hash_add_index(binocle_spatial_hash *spatial_hash, binocle_collider *collider, binocle_spatial_hash_grid_key_t cell_pos)
void binocle_collider_add_grid_index(binocle_collider *collider, binocle_spatial_hash_grid_key_t cell_pos)
void binocle_spatial_hash_cell_add_collider(binocle_spatial_hash_cell *cell, binocle_collider *collider)
void binocle_spatial_hash_remove_indexes(binocle_spatial_hash *spatial_hash, binocle_collider *collider)
void binocle_spatial_hash_update_indexes(binocle_spatial_hash *spatial_hash, binocle_collider *collider, binocle_grid_key_array_t *ar)
binocle_grid_key_array_t *binocle_spatial_hash_aabb_to_grid(binocle_spatial_hash *spatial_hash, kmVec2 min, kmVec2 max)
uint64_t binocle_spatial_hash_get_key(int x, int y)
void binocle_spatial_hash_get_all_bodies_sharing_cells_with_body(binocle_spatial_hash *spatial_hash, binocle_collider *collider, binocle_collider_ptr_array_t *colliding_colliders, int layer_mask)
bool binocle_spatial_hash_is_body_sharing_any_cell(binocle_spatial_hash *spatial_hash, binocle_collider *collider)
bool binocle_collision_ray_cast_obb(kmVec3 ray_origin, kmVec3 ray_direction, kmVec3 aabb_min, kmVec3 aabb_max, kmMat4 model_matrix, float *intersection_distance)
Parameters
  • ray_origin – the ray origin in world space

  • ray_direction – the ray direction in world space. This must be normalized

  • aabb_min – minimum X,Y,Z coordinates of the mesh when not transformed at all

  • aabb_max – maximum X,Y,Z coordinates of the mesh when not transformed at all

  • model_matrix – the transformation applied to the mesh. It will be applied to the bounding box, too

  • intersection_distance – the distance between ray_origin and the intersection with the OBB

Returns

struct binocle_collider_circle

Public Members

float radius
kmVec2 center
struct binocle_collider_hitbox

Public Members

kmAABB2 aabb
struct binocle_collider

Public Members

binocle_collider_circle *circle
binocle_collider_hitbox *hitbox
binocle_grid_key_array_t grid_index
struct binocle_spatial_hash_cell

Public Members

binocle_collider_ptr_array_t colliders
struct binocle_spatial_hash

Public Functions

khash_t (spatial_hash_cell_map_t) *grid

Public Members

uint32_t cell_size
uint32_t grid_width
uint32_t grid_height
uint32_t grid_length
int32_t grid_x
int32_t grid_y
float inv_cell_size
binocle_grid_key_array_t temp_arr