From 448a71f432c6fe8f5da2bd8db1251c046d75cc69 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 2 Jul 2026 12:27:03 +0100 Subject: [PATCH 1/6] Support `q.xyz` on `quaternion*` --- src/llvm_backend_utility.cpp | 26 ++++++++++++++++++++++---- src/types.cpp | 21 +++++++++++++++++++++ 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/src/llvm_backend_utility.cpp b/src/llvm_backend_utility.cpp index a92e8610e..c3b2cabfd 100644 --- a/src/llvm_backend_utility.cpp +++ b/src/llvm_backend_utility.cpp @@ -1206,18 +1206,19 @@ gb_internal lbValue lb_emit_struct_ep_internal(lbProcedure *p, lbValue s, i32 in i32 original_index = index; index = lb_convert_struct_index(p->module, t, index); + lbModule *m = p->module; if (lb_is_const(s)) { // NOTE(bill): this cannot be replaced with lb_emit_epi - lbModule *m = p->module; lbValue res = {}; LLVMValueRef indices[2] = {llvm_zero(m), LLVMConstInt(lb_type(m, t_i32), index, false)}; - res.value = LLVMConstGEP2(lb_type(m, type_deref(s.type)), s.value, indices, gb_count_of(indices)); res.type = alloc_type_pointer(result_type); + res.value = LLVMConstGEP2(lb_type(m, type_deref(s.type)), s.value, indices, gb_count_of(indices)); + res.value = LLVMConstPointerCast(res.value, lb_type(m, res.type)); return res; } else { lbValue res = {}; - LLVMTypeRef st = lb_type(p->module, type_deref(s.type)); + LLVMTypeRef st = lb_type(m, type_deref(s.type)); // gb_printf_err("%s\n", type_to_string(s.type)); // gb_printf_err("%s\n", LLVMPrintTypeToString(LLVMTypeOf(s.value))); // gb_printf_err("%d\n", index); @@ -1225,8 +1226,9 @@ gb_internal lbValue lb_emit_struct_ep_internal(lbProcedure *p, lbValue s, i32 in unsigned count = LLVMCountStructElementTypes(st); GB_ASSERT_MSG(count >= cast(unsigned)index, "%u %d %d", count, index, original_index); - res.value = LLVMBuildStructGEP2(p->builder, st, s.value, cast(unsigned)index, ""); res.type = alloc_type_pointer(result_type); + res.value = LLVMBuildStructGEP2(p->builder, st, s.value, cast(unsigned)index, ""); + res.value = LLVMBuildPointerCast(p->builder, res.value, lb_type(m, res.type), ""); return res; } } @@ -1274,6 +1276,17 @@ gb_internal lbValue lb_emit_struct_ep(lbProcedure *p, lbValue s, i32 index) { case 1: result_type = ft; break; case 2: result_type = ft; break; case 3: result_type = ft; break; + case -1: + { + lbValue res = {}; + res.type = alloc_type_pointer(alloc_type_array(ft, 3)); + if (lb_is_const(s)) { + res.value = LLVMConstPointerCast(s.value, lb_type(p->module, res.type)); + } else { + res.value = LLVMBuildPointerCast(p->builder, s.value, lb_type(p->module, res.type), ""); + } + return res; + } } } else if (is_type_slice(t)) { switch (index) { @@ -1443,6 +1456,11 @@ gb_internal lbValue lb_emit_struct_ev(lbProcedure *p, lbValue s, i32 index) { case 1: result_type = ft; break; case 2: result_type = ft; break; case 3: result_type = ft; break; + case -1: { + lbValue ptr_q = lb_address_from_load_or_generate_local(p, s); + lbValue ptr_xyz = lb_emit_struct_ep(p, ptr_q, -1); + return lb_emit_load(p, ptr_xyz); + } } break; } diff --git a/src/types.cpp b/src/types.cpp index 67d757508..a71e22f9f 100644 --- a/src/types.cpp +++ b/src/types.cpp @@ -3981,6 +3981,9 @@ gb_internal Selection lookup_field_with_selection(Type *type_, InternedString fi gb_local_persist Entity *entity__y = alloc_entity_field(nullptr, make_token_ident(y), t_f16, false, 1); gb_local_persist Entity *entity__z = alloc_entity_field(nullptr, make_token_ident(z), t_f16, false, 2); + gb_local_persist String xyz = str_lit("xyz"); + gb_local_persist Entity *entity__xyz = alloc_entity_field(nullptr, make_token_ident(xyz), alloc_type_array(t_f16, 3), false, -1); + String n = field_name.string(); if (n == w) { selection_add_index(&sel, 3); @@ -3998,6 +4001,10 @@ gb_internal Selection lookup_field_with_selection(Type *type_, InternedString fi selection_add_index(&sel, 2); sel.entity = entity__z; return sel; + } else if (n == xyz) { + selection_add_index(&sel, -1); + sel.entity = entity__xyz; + return sel; } } break; @@ -4012,6 +4019,9 @@ gb_internal Selection lookup_field_with_selection(Type *type_, InternedString fi gb_local_persist Entity *entity__y = alloc_entity_field(nullptr, make_token_ident(y), t_f32, false, 1); gb_local_persist Entity *entity__z = alloc_entity_field(nullptr, make_token_ident(z), t_f32, false, 2); + gb_local_persist String xyz = str_lit("xyz"); + gb_local_persist Entity *entity__xyz = alloc_entity_field(nullptr, make_token_ident(xyz), alloc_type_array(t_f32, 3), false, -1); + String n = field_name.string(); if (n == w) { selection_add_index(&sel, 3); @@ -4029,6 +4039,10 @@ gb_internal Selection lookup_field_with_selection(Type *type_, InternedString fi selection_add_index(&sel, 2); sel.entity = entity__z; return sel; + } else if (n == xyz) { + selection_add_index(&sel, -1); + sel.entity = entity__xyz; + return sel; } } break; @@ -4043,6 +4057,9 @@ gb_internal Selection lookup_field_with_selection(Type *type_, InternedString fi gb_local_persist Entity *entity__y = alloc_entity_field(nullptr, make_token_ident(y), t_f64, false, 1); gb_local_persist Entity *entity__z = alloc_entity_field(nullptr, make_token_ident(z), t_f64, false, 2); + gb_local_persist String xyz = str_lit("xyz"); + gb_local_persist Entity *entity__xyz = alloc_entity_field(nullptr, make_token_ident(xyz), alloc_type_array(t_f64, 3), false, -1); + String n = field_name.string(); if (n == w) { selection_add_index(&sel, 3); @@ -4060,6 +4077,10 @@ gb_internal Selection lookup_field_with_selection(Type *type_, InternedString fi selection_add_index(&sel, 2); sel.entity = entity__z; return sel; + } else if (n == xyz) { + selection_add_index(&sel, -1); + sel.entity = entity__xyz; + return sel; } } break; From 27c055719ea4e58e63f2557b88b9d00936342290 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 2 Jul 2026 13:33:35 +0100 Subject: [PATCH 2/6] Add `vendor:box3d` bindings --- vendor/box3d/box3d.odin | 1820 ++++++++++++++++++ vendor/box3d/box3d_collision.odin | 615 ++++++ vendor/box3d/box3d_constants.odin | 140 ++ vendor/box3d/box3d_id.odin | 129 ++ vendor/box3d/box3d_math.odin | 747 ++++++++ vendor/box3d/box3d_types.odin | 2923 +++++++++++++++++++++++++++++ 6 files changed, 6374 insertions(+) create mode 100644 vendor/box3d/box3d.odin create mode 100644 vendor/box3d/box3d_collision.odin create mode 100644 vendor/box3d/box3d_constants.odin create mode 100644 vendor/box3d/box3d_id.odin create mode 100644 vendor/box3d/box3d_math.odin create mode 100644 vendor/box3d/box3d_types.odin diff --git a/vendor/box3d/box3d.odin b/vendor/box3d/box3d.odin new file mode 100644 index 000000000..fe9f591af --- /dev/null +++ b/vendor/box3d/box3d.odin @@ -0,0 +1,1820 @@ +// Bindings for Box3D +package vendor_box3d + +import "base:intrinsics" +import "base:runtime" +import "core:c" + +ENABLE_VALIDATION :: false + +@(export) +foreign import lib { + "box3d.lib", +} + +// This is used to indicate null for interfaces that work with indices instead of pointers +NULL_INDEX :: -1 + +// Prototype for user allocation function. +// @param size the allocation size in bytes +// @param alignment the required alignment, guaranteed to be a power of 2 +AllocFcn :: proc "c" (size, alignment: i32) -> rawptr + +// Prototype for user free function. +// @param mem the memory previously allocated through `AllocFcn` +FreeFcn :: proc "c" (mem: rawptr) + +// Prototype for the user assert callback. Return 0 to skip the debugger break. +AssertFcn :: proc "c" (condition: cstring, fileName: cstring, lineNumber: c.int) -> c.int + +// Prototype for user log callback. Used to log warnings. +LogFcn :: proc "c" (message: rawptr) + + +BREAKPOINT :: intrinsics.debug_trap + +@(link_prefix="b3", default_calling_convention="c", require_results) +foreign lib { + // This allows the user to override the allocation functions. These should be + // set during application startup. + SetAllocator :: proc(allocFcn: AllocFcn, freeFcn: FreeFcn) --- + + // Total bytes allocated by Box3D + GetByteCount :: proc() -> i32 --- + + // Override the default assert callback. + // @param assertFcn a non-null assert callback + SetAssertFcn :: proc(assertFcn: AssertFcn) --- + + // Internal assertion handler. Allows for host intervention. + InternalAssert :: proc(condition: cstring, fileName: cstring, lineNumber: c.int) -> c.int --- + + // Override the default logging callback. + SetLogFcn :: proc(logFcn: LogFcn) --- +} + +// Version numbering scheme. +// See https://semver.org/ +Version :: struct { + // Significant changes + major: c.int, + + // Incremental changes + minor: c.int, + + // Bug fixes + revision: c.int, +} + +HASH_INIT :: 5381 + +@(link_prefix="b3", default_calling_convention="c", require_results) +foreign lib { + // Get the current version of Box3D + GetVersion :: proc() -> Version --- + + // @return true if the library was built with BOX3D_DOUBLE_PRECISION (large world mode) + IsDoublePrecision :: proc() -> bool --- + + // Get the absolute number of system ticks. The value is platform specific. + GetTicks :: proc() -> u64 --- + + // Get the milliseconds passed from an initial tick value. + GetMilliseconds :: proc(ticks: u64) -> f32 --- + + // Get the milliseconds passed from an initial tick value. + GetMillisecondsAndReset :: proc(ticks: ^u64) -> f32 --- + + // Yield to be used in a busy loop. + Yield :: proc() --- + + // Sleep the current thread for a number of milliseconds. + Sleep :: proc(milliseconds: c.int) --- + + // Simple djb2 hash function for determinism testing + Hash :: proc(hash: u32, data: [^]u8, count: c.int) -> u32 --- + + // Dump file support functions + WriteBinaryFile :: proc(data: rawptr, size: c.int, fileName: cstring) --- + ReadBinaryFile :: proc(prefix: cstring, fileName: cstring, memSize: ^c.int) -> rawptr --- +} + + +@(disabled=ODIN_DISABLE_ASSERT) +ASSERT :: proc "c" (condition: bool, message := #caller_expression(condition), loc := #caller_location) { + if !condition { + @(cold) + internal :: proc "c" (message: string, loc: runtime.Source_Code_Location) { + _ = InternalAssert(cstring(raw_data(message)), cstring(raw_data(loc.file_path)), loc.line) + } + internal(message, loc) + } +} + +@(disabled=!ENABLE_VALIDATION) +VALIDATE :: proc "c" (condition: bool, message := #caller_expression(condition), loc := #caller_location) { + ASSERT(condition, message, loc) +} + + + +/** + * @defgroup world World + * These functions allow you to create a simulation world. + * + * You can add rigid bodies and joint constraints to the world and run the simulation. You can get contact + * information to get contact points and normals as well as events. You can query the world, checking for overlaps and casting + * rays or shapes. There is also debugging information such as debug draw, timing information, and counters. You can find + * documentation here: https://box2d.org/ + * @{ + */ + + // Opaque recording handle. Create with CreateRecording, destroy with DestroyRecording. +Recording :: struct{} + + +// Opaque incremental replay player with a keyframe ring for O(interval) backward seek. +RecPlayer :: struct{} + +// Summary of a recording, read once at open so a viewer can frame and label it. +RecPlayerInfo :: struct { + frameCount: c.int, // total recorded steps + workerCount: c.int, // worker count requested for the replay world + timeStep: f32, // dt of the recorded steps + subStepCount: c.int, // recorded sub-steps + lengthScale: f32, // length units per meter in effect when recorded + bounds: AABB, // accumulated world bounds over the recording, zero-extent if unavailable +} + +// The kind of a recorded spatial query, matching the public query and cast functions. +RecQueryType :: enum c.int { + OverlapAABB, + OverlapShape, + CastRay, + CastShape, + CastRayClosest, + CastMover, + CollideMover, +} + +// A spatial query recorded during a replayed frame, exposed for inspection. +RecQueryInfo :: struct { + type: RecQueryType, + filter: QueryFilter, + aabb: AABB, // world-space bounds of the query, swept for casts + origin: Pos, // query origin (zero for overlap AABB) + translation: Vec3, // ray and cast translation + hitCount: c.int, // number of recorded results + key: u64, // identity key, the hash of (id, name), 0 if untagged + id: u64, // query id, 0 if none + name: cstring, // query label, NULL if none +} + +// One result of a recorded spatial query. +RecQueryHit :: struct { + shape: ShapeId, + point: Pos, + normal: Vec3, + fraction: f32, +} + + +@(link_prefix="b3", default_calling_convention="c", require_results) +foreign lib { + // Create a world for rigid body simulation. A world contains bodies, shapes, and constraints. You may create + // up to 128 worlds. Each world is completely independent and may be simulated in parallel. + // @return the world id. + CreateWorld :: proc(#by_ptr def: WorldDef) -> WorldId --- + + // Destroy a world + DestroyWorld :: proc(worldId: WorldId) --- + + // Get the current number of worlds + GetWorldCount :: proc() -> c.int --- + + // Get the maximum number of simultaneous worlds that have been created + GetMaxWorldCount :: proc() -> c.int --- + + // World id validation. Provides validation for up to 64K allocations. + World_IsValid :: proc(id: WorldId) -> bool --- + + // Simulate a world for one time step. This performs collision detection, integration, and constraint solution. + // @param worldId The world to simulate + // @param timeStep The amount of time to simulate, this should be a fixed number. Usually 1/60. + // @param subStepCount The number of sub-steps, increasing the sub-step count can increase accuracy. Usually 4. + World_Step :: proc(worldId: WorldId, timeStep: f32, subStepCount: c.int) --- + + // Call this to draw shapes and other debug draw data + World_Draw :: proc(worldId: WorldId, draw: ^DebugDraw, maskBits: u64) --- + + // Get the world's bounds. This is the bounding box that covers the current simulation. May have a small + // amount of padding. + World_GetBounds :: proc(worldId: WorldId) -> AABB --- + + // Get the body events for the current time step. The event data is transient. Do not store a reference to this data. + World_GetBodyEvents :: proc(worldId: WorldId) -> BodyEvents --- + + // Get sensor events for the current time step. The event data is transient. Do not store a reference to this data. + World_GetSensorEvents :: proc(worldId: WorldId) -> SensorEvents --- + + // Get contact events for this current time step. The event data is transient. Do not store a reference to this data. + World_GetContactEvents :: proc(worldId: WorldId) -> ContactEvents --- + + // Get the joint events for the current time step. The event data is transient. Do not store a reference to this data. + World_GetJointEvents :: proc(worldId: WorldId) -> JointEvents --- + + // Overlap test for all shapes that *potentially* overlap the provided AABB + World_OverlapAABB :: proc(worldId: WorldId, aabb: AABB, filter: QueryFilter, fcn: OverlapResultFcn, ctx: rawptr) -> TreeStats --- + + // Overlap test for all shapes that overlap the provided shape proxy. The proxy points are relative + // to the world origin, which lets the query stay precise far from the world origin. + World_OverlapShape :: proc(worldId: WorldId, origin: Pos, #by_ptr proxy: ShapeProxy, filter: QueryFilter, fcn: OverlapResultFcn, ctx: rawptr) -> TreeStats --- + + // Cast a ray into the world to collect shapes in the path of the ray. + // Your callback function controls whether you get the closest point, any point, or n-points. + // @note The callback function may receive shapes in any order + // @param worldId The world to cast the ray against + // @param origin The start point of the ray + // @param translation The translation of the ray from the start point to the end point + // @param filter Contains bit flags to filter unwanted shapes from the results + // @param fcn A user implemented callback function + // @param context A user context that is passed along to the callback function + // @return traversal performance counters + World_CastRay :: proc(worldId: WorldId, origin: Pos, translation: Vec3, filter: QueryFilter, fcn: CastResultFcn, ctx: rawptr) -> TreeStats --- + + // Cast a ray into the world to collect the closest hit. This is a convenience function. Ignores initial overlap. + // This is less general than World_CastRay() and does not allow for custom filtering. + World_CastRayClosest :: proc(worldId: WorldId, origin: Pos, translation: Vec3, filter: QueryFilter) -> RayResult --- + + // Cast a shape through the world. Similar to a cast ray except that a shape is cast instead of a point. + // The proxy points are relative to the origin and the hit points come back as world positions, so the + // cast stays precise far from the world origin. + // @see World_CastRay + World_CastShape :: proc(worldId: WorldId, origin: Pos, #by_ptr proxy: ShapeProxy, translation: Vec3, filter: QueryFilter, fcn: CastResultFcn, ctx: rawptr) -> TreeStats --- + + // Cast a capsule mover through the world. This is a special shape cast that handles sliding along other shapes while reducing + // clipping. This is not a good source of information about what the mover is touching. Instead use the planes returned by + // World_CollideMover. + // @param worldId World to cast the mover against + // @param origin World position the mover capsule is relative to + // @param mover Capsule mover, relative to the origin + // @param translation Desired mover translation + // @param filter Contains bit flags to filter unwanted shapes from the results + // @param fcn Optional callback for custom shape filtering + // @param context A user context that is passed along to the callback function + // @return the translation fraction + World_CastMover :: proc(worldId: WorldId, origin: Pos, #by_ptr mover: Capsule, translation: Vec3, filter: QueryFilter, fcn: MoverFilterFcn, ctx: rawptr) -> f32 --- + + // Collide a capsule mover with the world, gathering collision planes that can be fed to SolvePlanes. Useful for + // kinematic character movement. The mover and the returned planes are relative to the origin. + World_CollideMover :: proc(worldId: WorldId, origin: Pos, #by_ptr mover: Capsule, filter: QueryFilter, fcn: PlaneResultFcn, ctx: rawptr) --- + + // Enable/disable sleep. If your application does not need sleeping, you can gain some performance + // by disabling sleep completely at the world level. + // @see WorldDef + World_EnableSleeping :: proc(worldId: WorldId, flag: bool) --- + + // Is body sleeping enabled? + World_IsSleepingEnabled :: proc(worldId: WorldId) -> bool --- + + // Enable/disable continuous collision between dynamic and static bodies. Generally you should keep continuous + // collision enabled to prevent fast moving objects from going through static objects. The performance gain from + // disabling continuous collision is minor. + // @see WorldDef + World_EnableContinuous :: proc(worldId: WorldId, flag: bool) --- + + // Is continuous collision enabled? + World_IsContinuousEnabled :: proc(worldId: WorldId) -> bool --- + + // Adjust the restitution threshold. It is recommended not to make this value very small + // because it will prevent bodies from sleeping. Usually in meters per second. + // @see WorldDef + World_SetRestitutionThreshold :: proc(worldId: WorldId, value: f32) --- + + // Get the restitution speed threshold. Usually in meters per second. + World_GetRestitutionThreshold :: proc(worldId: WorldId) -> f32 --- + + // Adjust the hit event threshold. This controls the collision speed needed to generate a ContactHitEvent. + // Usually in meters per second. + // @see WorldDef::hitEventThreshold + World_SetHitEventThreshold :: proc(worldId: WorldId, value: f32) --- + + // Get the hit event speed threshold. Usually in meters per second. + World_GetHitEventThreshold :: proc(worldId: WorldId) -> f32 --- + + // Register the custom filter callback. This is optional. + World_SetCustomFilterCallback :: proc(worldId: WorldId, fcn: CustomFilterFcn, ctx: rawptr) --- + + // Register the pre-solve callback. This is optional. + World_SetPreSolveCallback :: proc(worldId: WorldId, fcn: PreSolveFcn, ctx: rawptr) --- + + // Set the gravity vector for the entire world. Box3D has no concept of an up direction and this + // is left as a decision for the application. Usually in m/s^2. + // @see WorldDef + World_SetGravity :: proc(worldId: WorldId, gravity: Vec3) --- + + // Get the gravity vector + World_GetGravity :: proc(worldId: WorldId) -> Vec3 --- + + // Apply a radial explosion + // @param worldId The world id + // @param explosionDef The explosion definition + World_Explode :: proc(worldId: WorldId, #by_ptr explosionDef: ExplosionDef) --- + + // Adjust contact tuning parameters + // @param worldId The world id + // @param hertz The contact stiffness (cycles per second) + // @param dampingRatio The contact bounciness with 1 being critical damping (non-dimensional) + // @param contactSpeed The maximum contact constraint push out speed (meters per second) + // @note Advanced feature + World_SetContactTuning :: proc(worldId: WorldId, hertz: f32, dampingRatio: f32, contactSpeed: f32) --- + + // Set the contact point recycling distance. Setting this to zero disables contact point recycling. + // Usually in meters. + World_SetContactRecycleDistance :: proc(worldId: WorldId, recycleDistance: f32) --- + + // Get the contact point recycling distance. Usually in meters. + World_GetContactRecycleDistance :: proc(worldId: WorldId) -> f32 --- + + // Set the maximum linear speed. Usually in m/s. + World_SetMaximumLinearSpeed :: proc(worldId: WorldId, maximumLinearSpeed: f32) --- + + // Get the maximum linear speed. Usually in m/s. + World_GetMaximumLinearSpeed :: proc(worldId: WorldId) -> f32 --- + + // Enable/disable constraint warm starting. Advanced feature for testing. Disabling + // warm starting greatly reduces stability and provides no performance gain. + World_EnableWarmStarting :: proc(worldId: WorldId, flag: bool) --- + + // Is constraint warm starting enabled? + World_IsWarmStartingEnabled :: proc(worldId: WorldId) -> bool --- + + // Get the number of awake bodies + World_GetAwakeBodyCount :: proc(worldId: WorldId) -> c.int --- + + // Get the current world performance profile + World_GetProfile :: proc(worldId: WorldId) -> Profile --- + + // Get world counters and sizes + World_GetCounters :: proc(worldId: WorldId) -> Counters --- + + // Get max capacity. This can be used with WorldDef to avoid run-time allocations and copies + World_GetMaxCapacity :: proc(worldId: WorldId) -> Capacity --- + + // Set the user data pointer. + World_SetUserData :: proc(worldId: WorldId, userData: rawptr) --- + + // Get the user data pointer. + World_GetUserData :: proc(worldId: WorldId) --- + + // Set the friction callback. Passing NULL resets to default. + World_SetFrictionCallback :: proc(worldId: WorldId, callback: FrictionCallback) --- + + // Set the restitution callback. Passing NULL resets to default. + World_SetRestitutionCallback :: proc(worldId: WorldId, callback: RestitutionCallback) --- + + // Set the worker count. Must be in the range [1, B3_MAX_WORKERS] + World_SetWorkerCount :: proc(worldId: WorldId, count: c.int) --- + + // Get the worker count. + World_GetWorkerCount :: proc(worldId: WorldId) -> c.int --- + + // Dump memory stats to log. + World_DumpMemoryStats :: proc(worldId: WorldId) --- + + // Dump shape bounds to box3d_bounds.txt + World_DumpShapeBounds :: proc(worldId: WorldId, type: BodyType) --- + + // This is for internal testing + World_RebuildStaticTree :: proc(worldId: WorldId) --- + + // This is for internal testing + World_EnableSpeculative :: proc(worldId: WorldId, flag: bool) --- + + // Dump world to a text file. Saves only awake bodies and associated static bodies. + // Meshes are saved to binary m files. + World_DumpAwake :: proc(worldId: WorldId) --- + + // Dump world to a text file. Meshes are saved to binary m files. + World_Dump :: proc(worldId: WorldId) --- + + /** + * @defgroup recording Recording + * @brief Record and replay world state for debugging. + * @{ + */ + + // Create a recording buffer with an optional initial byte capacity. + // Pass 0 to use the default (64 KiB). The buffer grows on demand. + // @return a new recording, owned by the caller + CreateRecording :: proc(byteCapacity: c.int) -> Recording --- + + // Destroy a recording and free its buffer. + // @param recording may be NULL + DestroyRecording :: proc(recording: ^Recording) --- + + // Get a pointer to the raw recording bytes. + // Valid until the recording buffer is modified or destroyed. + // @param recording the recording handle + // @return pointer to the byte buffer, or NULL if no bytes have been written + Recording_GetData :: proc(#by_ptr recording: Recording) -> [^]u8 --- + + // Get the number of bytes currently in the recording buffer. + // @param recording the recording handle + Recording_GetSize :: proc(#by_ptr recording: Recording) -> c.int --- + + // Begin recording world mutations into the provided buffer. + // The buffer is reset on each call so a single Recording can be reused for multiple sessions. + // @param worldId the world to record + // @param recording the recording handle to write into + World_StartRecording :: proc(worldId: WorldId, recording: ^Recording) --- + + // End the current recording session. Writes the trailing geometry registry and + // backpatches the header. The buffer remains valid until the recording is destroyed. + // @param worldId the world currently being recorded + World_StopRecording :: proc(worldId: WorldId) --- + + // Save the recording buffer to a file. Returns true on success. + // @param recording the recording to save + // @param path file path to write + SaveRecordingToFile :: proc(#by_ptr recording: Recording, path: cstring) -> bool --- + + // Load a recording from a file. Returns NULL on failure (file not found, wrong magic). + // The caller owns the returned recording and must destroy it with DestroyRecording. + // @param path file path to read + LoadRecordingFromFile :: proc(path: cstring) -> Recording --- + + // Replay a recording from memory and verify it reproduces the same world-state hashes. + // Stands up a fresh world, restores the seed snapshot, replays every op, and checks each embedded + // StateHash record. Returns true if replay completed without id mismatches or hash divergences. + // @param data pointer to recording bytes + // @param size byte count of the recording + // @param workerCount reserved for future multithreaded replay; pass 1 for now + ValidateReplay :: proc(data: rawptr, size: c.int, workerCount: c.int) -> bool --- + + + // Create a player over a recording. Owns a private copy of the bytes. + // @param data pointer to recording bytes + // @param size byte count of the recording + // @param workerCount worker count for the replay world; pass 1 to match a serial recording. + // Replaying at a different count re-partitions the constraint graph, so the StateHash check + // becomes a cross-thread determinism test. Adjustable later with RecPlayer_SetWorkerCount. + // @return a new player, or NULL on bad header or deserialization failure + RecPlayer_Create :: proc(data: rawptr, size: c.int, workerCount: c.int) -> RecPlayer --- + + // Destroy the player and free all memory. Restores the previous global length scale. + RecPlayer_Destroy :: proc(player: ^RecPlayer) --- + + // Advance one frame: dispatch ops until the next Step completes. + // @return true when a frame was stepped, false at end-of-recording + RecPlayer_StepFrame :: proc(player: ^RecPlayer) -> bool --- + + // Rewind to frame 0 (in-place restore so the world id stays stable). + RecPlayer_Restart :: proc(player: ^RecPlayer) --- + + // Seek to a specific frame. Forward seek steps op-by-op; backward seek restores + // the nearest keyframe then re-steps the remaining gap. + RecPlayer_SeekFrame :: proc(player: ^RecPlayer, targetFrame: c.int) --- + + // @return the world currently driven by this player + RecPlayer_GetWorldId :: proc(#by_ptr player: RecPlayer) -> WorldId --- + + // @return the last fully-stepped frame index (0 before any step) + RecPlayer_GetFrame :: proc(#by_ptr player: RecPlayer) -> c.int --- + + // @return total number of recorded frames + RecPlayer_GetFrameCount :: proc(#by_ptr player: RecPlayer) -> c.int --- + + // @return true when the op stream is exhausted + RecPlayer_IsAtEnd :: proc(#by_ptr player: RecPlayer) -> bool --- + + // @return true when any StateHash mismatch has been detected + RecPlayer_HasDiverged :: proc(#by_ptr player: RecPlayer) -> bool --- + + // @return a summary of the recording read at open: frame count, recorded tuning, and bounds + RecPlayer_GetInfo :: proc(#by_ptr player: RecPlayer) -> RecPlayerInfo --- + + // @return the first frame at which replay diverged, or -1 if it has not diverged + RecPlayer_GetDivergeFrame :: proc(#by_ptr player: RecPlayer) -> c.int --- + + // Set the worker count of the replay world. Clamped to [1, B3_MAX_WORKERS]. Applied to the live + // world at once and reused whenever the player rebuilds its world on Restart or a backward seek. + // Replaying at a different count than recorded re-partitions the constraint graph, so the StateHash + // check becomes a cross-thread determinism test. + RecPlayer_SetWorkerCount :: proc(player: ^RecPlayer, count: c.int) --- + + // Tune the keyframe ring used to speed up backward seeking. A keyframe is a periodic snapshot the + // player restores from instead of replaying from the start, trading memory for seek speed. + // @param player the recording player + // @param budgetBytes memory cap for the kept snapshots; the spacing widens to stay under it + // @param minIntervalFrames finest spacing between keyframes, in frames + // A zero budget or a non-positive interval keeps that value. Clears the existing ring, so call + // RecPlayer_Restart afterward to repopulate it under the new policy. + RecPlayer_SetKeyframePolicy :: proc(player: ^RecPlayer, budgetBytes: uint, minIntervalFrames: c.int) --- + + // @return the keyframe memory budget in bytes + RecPlayer_GetKeyframeBudget :: proc(#by_ptr player: RecPlayer) -> uint --- + + // @return the finest keyframe spacing in frames + RecPlayer_GetKeyframeMinInterval :: proc(#by_ptr player: RecPlayer) -> c.int --- + + // @return the current keyframe spacing in frames; starts at the min interval and doubles as the + // ring evicts to stay under budget, so it reflects the effective backward-seek granularity now + RecPlayer_GetKeyframeInterval :: proc(#by_ptr player: RecPlayer) -> c.int --- + + // @return the memory currently held by keyframe snapshots, in bytes + RecPlayer_GetKeyframeBytes :: proc(#by_ptr player: RecPlayer) -> uint --- + + // @return the number of bodies tracked in creation order (including holes for destroyed bodies) + RecPlayer_GetBodyCount :: proc(#by_ptr player: RecPlayer) -> c.int --- + + // Resolve a creation ordinal to the live body id at the current frame. + // @return the body id, or a null id if that ordinal is out of range or its body is destroyed + RecPlayer_GetBodyId :: proc(#by_ptr player: RecPlayer, index: c.int) -> BodyId --- + + // Wire host debug-shape callbacks into the player's replay world so a renderer can build + // per-shape draw resources (the 3D sample needs this or the replay world draws nothing). + // Rebuilds the current world under the new callbacks and rewinds to frame 0, so call it + // once right after RecPlayer_Create and re-read the world id afterward. The callbacks + // persist across Restart and backward seeks, which recreate the world internally. + // @param player the player to configure + // @param createDebugShape called when a replayed shape is added; returns a user draw handle + // @param destroyDebugShape called when a replayed shape is removed; may be NULL + // @param context user context passed to both callbacks + RecPlayer_SetDebugShapeCallbacks :: proc(player: ^RecPlayer, createDebugShape: CreateDebugShapeCallback, destroyDebugShape: DestroyDebugShapeCallback, ctx: rawptr) --- + + // Draw the spatial queries recorded during the most recently replayed frame, layered on top of the + // world. Call after World_Draw. NULL draw function pointers are skipped. + // @param player a valid player handle + // @param draw debug draw callbacks + // @param queryIndex index of the frame query to draw, or -1 to draw all of them + // @param selectedIndex index of the query to emphasize (reserved color plus a label), or -1 for none + RecPlayer_DrawFrameQueries :: proc(player: ^RecPlayer, draw: ^DebugDraw, queryIndex: c.int, selectedIndex: c.int) --- + + + // @return the number of spatial queries recorded for the most recently replayed frame + RecPlayer_GetFrameQueryCount :: proc(#by_ptr player: RecPlayer) -> c.int --- + + // Get a recorded query from the most recently replayed frame by index. + RecPlayer_GetFrameQuery :: proc(#by_ptr player: RecPlayer, index: c.int) -> RecQueryInfo --- + + // Get one result of a recorded query from the most recently replayed frame. + RecPlayer_GetFrameQueryHit :: proc(#by_ptr player: RecPlayer, queryIndex: c.int, hitIndex: c.int) -> RecQueryHit --- + + /**@}*/ // recording + + /** @} */ // world + + /** + * @defgroup body Body + * This is the body API. + * @{ + */ + + // Create a rigid body given a definition. No reference to the definition is retained. So you can create the definition + // on the stack and pass it as a pointer. + // @code{.c} + // BodyDef bodyDef = DefaultBodyDef(); + // BodyId myBodyId = CreateBody(myWorldId, &bodyDef); + // @endcode + // @warning This function is locked during callbacks. + CreateBody :: proc(worldId: WorldId, #by_ptr def: BodyDef) -> BodyId --- + + // Destroy a rigid body given an id. This destroys all shapes and joints attached to the body. + // Do not keep references to the associated shapes and joints. + DestroyBody :: proc(bodyId: BodyId) --- + + // Body identifier validation. A valid body exists in a world and is non-null. + // This can be used to detect orphaned ids. Provides validation for up to 64K allocations. + Body_IsValid :: proc(id: BodyId) -> bool --- + + // Get the body type: static, kinematic, or dynamic + Body_GetType :: proc(bodyId: BodyId) -> BodyType --- + + // Change the body type. This is an expensive operation. This automatically updates the mass + // properties regardless of the automatic mass setting. + Body_SetType :: proc(bodyId: BodyId, type: BodyType) --- + + // Set the body name. Up to B3_BODY_NAME_LENGTH characters including null termination. + Body_SetName :: proc(bodyId: BodyId, name: cstring) --- + + // Get the body name. + Body_GetName :: proc(bodyId: BodyId) -> cstring --- + + // Set the user data for a body + Body_SetUserData :: proc(bodyId: BodyId, userData: rawptr) --- + + // Get the user data stored in a body + Body_GetUserData :: proc(bodyId: BodyId) --- + + // Get the world position of a body. This is the location of the body origin. + Body_GetPosition :: proc(bodyId: BodyId) -> Pos --- + + // Get the world rotation of a body as a quaternion + Body_GetRotation :: proc(bodyId: BodyId) -> Quat --- + + // Get the world transform of a body. + Body_GetTransform :: proc(bodyId: BodyId) -> WorldTransform --- + + // Set the world transform of a body. This acts as a teleport and is fairly expensive. + // @note Generally you should create a body with the intended transform. + // @see BodyDef::position and BodyDef::rotation + Body_SetTransform :: proc(bodyId: BodyId, position: Pos, rotation: Quat) --- + + // Get a local point on a body given a world point + Body_GetLocalPoint :: proc(bodyId: BodyId, worldPoint: Pos) -> Vec3 --- + + // Get a world point on a body given a local point + Body_GetWorldPoint :: proc(bodyId: BodyId, localPoint: Vec3) -> Pos --- + + // Get a local vector on a body given a world vector + Body_GetLocalVector :: proc(bodyId: BodyId, worldVector: Vec3) -> Vec3 --- + + // Get a world vector on a body given a local vector + Body_GetWorldVector :: proc(bodyId: BodyId, localVector: Vec3) -> Vec3 --- + + // Get the linear velocity of a body's center of mass. Usually in meters per second. + Body_GetLinearVelocity :: proc(bodyId: BodyId) -> Vec3 --- + + // Get the angular velocity of a body in radians per second + Body_GetAngularVelocity :: proc(bodyId: BodyId) -> Vec3 --- + + // Set the linear velocity of a body. Usually in meters per second. + Body_SetLinearVelocity :: proc(bodyId: BodyId, linearVelocity: Vec3) --- + + // Set the angular velocity of a body in radians per second + Body_SetAngularVelocity :: proc(bodyId: BodyId, angularVelocity: Vec3) --- + + // Set the velocity to reach the given transform after a given time step. + // The result will be close but maybe not exact. This is meant for kinematic bodies. + // The target is not applied if the velocity would be below the sleep threshold. + // This will optionally wake the body if asleep, but only if the movement is significant. + Body_SetTargetTransform :: proc(bodyId: BodyId, target: WorldTransform, timeStep: f32, wake: bool) --- + + // Get the linear velocity of a local point attached to a body. Usually in meters per second. + Body_GetLocalPointVelocity :: proc(bodyId: BodyId, localPoint: Vec3) -> Vec3 --- + + // Get the linear velocity of a world point attached to a body. Usually in meters per second. + Body_GetWorldPointVelocity :: proc(bodyId: BodyId, worldPoint: Pos) -> Vec3 --- + + // Apply a force at a world point. If the force is not applied at the center of mass, + // it will generate a torque and affect the angular velocity. This optionally wakes up the body. + // The force is ignored if the body is not awake. + // @param bodyId The body id + // @param force The world force vector, usually in newtons (N) + // @param point The world position of the point of application + // @param wake Option to wake up the body + Body_ApplyForce :: proc(bodyId: BodyId, force: Vec3, point: Pos, wake: bool) --- + + // Apply a force to the center of mass. This optionally wakes up the body. + // The force is ignored if the body is not awake. + // @param bodyId The body id + // @param force the world force vector, usually in newtons (N). + // @param wake also wake up the body + Body_ApplyForceToCenter :: proc(bodyId: BodyId, force: Vec3, wake: bool) --- + + // Apply a torque. This affects the angular velocity without affecting the linear velocity. + // This optionally wakes the body. The torque is ignored if the body is not awake. + // @param bodyId The body id + // @param torque the world torque vector, usually in N*m. + // @param wake also wake up the body + Body_ApplyTorque :: proc(bodyId: BodyId, torque: Vec3, wake: bool) --- + + // Apply an impulse at a point. This immediately modifies the velocity. + // It also modifies the angular velocity if the point of application + // is not at the center of mass. This optionally wakes the body. + // The impulse is ignored if the body is not awake. + // @param bodyId The body id + // @param impulse the world impulse vector, usually in N*s or kg*m/s. + // @param point the world position of the point of application. + // @param wake also wake up the body + // @warning This should be used for one-shot impulses. If you need a steady force, + // use a force instead, which will work better with the sub-stepping solver. + Body_ApplyLinearImpulse :: proc(bodyId: BodyId, impulse: Vec3, point: Pos, wake: bool) --- + + // Apply an impulse to the center of mass. This immediately modifies the velocity. + // The impulse is ignored if the body is not awake. This optionally wakes the body. + // @param bodyId The body id + // @param impulse the world impulse vector, usually in N*s or kg*m/s. + // @param wake also wake up the body + // @warning This should be used for one-shot impulses. If you need a steady force, + // use a force instead, which will work better with the sub-stepping solver. + Body_ApplyLinearImpulseToCenter :: proc(bodyId: BodyId, impulse: Vec3, wake: bool) --- + + // Apply an angular impulse in world space. The impulse is ignored if the body is not awake. + // This optionally wakes the body. + // @param bodyId The body id + // @param impulse the world angular impulse vector, usually in units of kg*m*m/s + // @param wake also wake up the body + // @warning This should be used for one-shot impulses. If you need a steady torque, + // use a torque instead, which will work better with the sub-stepping solver. + Body_ApplyAngularImpulse :: proc(bodyId: BodyId, impulse: Vec3, wake: bool) --- + + // Get the mass of the body, usually in kilograms + Body_GetMass :: proc(bodyId: BodyId) -> f32 --- + + // Get the rotational inertia of the body in local space, usually in kg*m^2 + Body_GetLocalRotationalInertia :: proc(bodyId: BodyId) -> Matrix3 --- + + // Get the inverse mass of the body, usually in 1/kilograms + Body_GetInverseMass :: proc(bodyId: BodyId) -> f32 --- + + // Get the inverse rotational inertia of the body in world space, usually in 1/kg*m^2 + Body_GetWorldInverseRotationalInertia :: proc(bodyId: BodyId) -> Matrix3 --- + + // Get the center of mass position of the body in local space + Body_GetLocalCenterOfMass :: proc(bodyId: BodyId) -> Vec3 --- + + // Get the center of mass position of the body in world space + Body_GetWorldCenterOfMass :: proc(bodyId: BodyId) -> Pos --- + + // Override the body's mass properties. Normally this is computed automatically using the + // shape geometry and density. This information is lost if a shape is added or removed or if the + // body type changes. + Body_SetMassData :: proc(bodyId: BodyId, massData: MassData) --- + + // Get the mass data for a body + Body_GetMassData :: proc(bodyId: BodyId) -> MassData --- + + // This updates the mass properties to the sum of the mass properties of the shapes. + // This normally does not need to be called unless you called SetMassData to override + // the mass and you later want to reset the mass. + // You may also use this when automatic mass computation has been disabled. + // You should call this regardless of body type. + Body_ApplyMassFromShapes :: proc(bodyId: BodyId) --- + + // Adjust the linear damping. Normally this is set in BodyDef before creation. + Body_SetLinearDamping :: proc(bodyId: BodyId, linearDamping: f32) --- + + // Get the current linear damping. + Body_GetLinearDamping :: proc(bodyId: BodyId) -> f32 --- + + // Adjust the angular damping. Normally this is set in BodyDef before creation. + Body_SetAngularDamping :: proc(bodyId: BodyId, angularDamping: f32) --- + + // Get the current angular damping. + Body_GetAngularDamping :: proc(bodyId: BodyId) -> f32 --- + + // Adjust the gravity scale. Normally this is set in BodyDef before creation. + // @see BodyDef::gravityScale + Body_SetGravityScale :: proc(bodyId: BodyId, gravityScale: f32) --- + + // Get the current gravity scale + Body_GetGravityScale :: proc(bodyId: BodyId) -> f32 --- + + // @return true if this body is awake + Body_IsAwake :: proc(bodyId: BodyId) -> bool --- + + // Wake a body from sleep. This wakes the entire island the body is touching. + // @warning Putting a body to sleep will put the entire island of bodies touching this body to sleep, + // which can be expensive and possibly unintuitive. + Body_SetAwake :: proc(bodyId: BodyId, awake: bool) --- + + // Enable or disable sleeping for this body. If sleeping is disabled the body will wake. + Body_EnableSleep :: proc(bodyId: BodyId, enableSleep: bool) --- + + // Returns true if sleeping is enabled for this body + Body_IsSleepEnabled :: proc(bodyId: BodyId) -> bool --- + + // Set the sleep threshold, usually in meters per second + Body_SetSleepThreshold :: proc(bodyId: BodyId, sleepThreshold: f32) --- + + // Get the sleep threshold, usually in meters per second. + Body_GetSleepThreshold :: proc(bodyId: BodyId) -> f32 --- + + // Returns true if this body is enabled + Body_IsEnabled :: proc(bodyId: BodyId) -> bool --- + + // Disable a body by removing it completely from the simulation. This is expensive. + Body_Disable :: proc(bodyId: BodyId) --- + + // Enable a body by adding it to the simulation. This is expensive. + Body_Enable :: proc(bodyId: BodyId) --- + + // Set the motion locks on this body. + Body_SetMotionLocks :: proc(bodyId: BodyId, locks: MotionLocks) --- + + // Get the motion locks for this body. + Body_GetMotionLocks :: proc(bodyId: BodyId) -> MotionLocks --- + + // Set this body to be a bullet. A bullet does continuous collision detection + // against dynamic bodies (but not other bullets). + Body_SetBullet :: proc(bodyId: BodyId, flag: bool) --- + + // Is this body a bullet? + Body_IsBullet :: proc(bodyId: BodyId) -> bool --- + + // Enable or disable contact recycling for this body. Contact recycling is a performance optimization + // that reuses contact manifolds when bodies move slightly. Disabling it can avoid ghost collisions + // on characters at the cost of higher per-step work. Existing contacts retain their prior setting; + // only contacts created after this call see the new value. + // @see BodyDef::enableContactRecycling + Body_EnableContactRecycling :: proc(bodyId: BodyId, flag: bool) --- + + // Is contact recycling enabled on this body? + Body_IsContactRecyclingEnabled :: proc(bodyId: BodyId) -> bool --- + + // Enable/disable hit events on all shapes + // @see ShapeDef::enableHitEvents + Body_EnableHitEvents :: proc(bodyId: BodyId, enableHitEvents: bool) --- + + // Get the world that owns this body + Body_GetWorld :: proc(bodyId: BodyId) -> WorldId --- + + // Get the number of shapes on this body + Body_GetShapeCount :: proc(bodyId: BodyId) -> c.int --- + + // Get the shape ids for all shapes on this body, up to the provided capacity. + // @returns the number of shape ids stored in the user array + Body_GetShapes :: proc(bodyId: BodyId, shapeArray: [^]ShapeId, capacity: c.int) -> c.int --- + + // Get the number of joints on this body + Body_GetJointCount :: proc(bodyId: BodyId) -> c.int --- + + // Get the joint ids for all joints on this body, up to the provided capacity + // @returns the number of joint ids stored in the user array + Body_GetJoints :: proc(bodyId: BodyId, jointArray: [^]JointId, capacity: c.int) -> c.int --- + + // Get the maximum capacity required for retrieving all the touching contacts on a body + Body_GetContactCapacity :: proc(bodyId: BodyId) -> c.int --- + + // Get the touching contact data for a body + Body_GetContactData :: proc(bodyId: BodyId, contactData: [^]ContactData, capacity: c.int) -> c.int --- + + // Get the current world AABB that contains all the attached shapes. Note that this may not encompass the body origin. + // If there are no shapes attached then the returned AABB is empty and centered on the body origin. + Body_ComputeAABB :: proc(bodyId: BodyId) -> AABB --- + + // Get the closest point on a body to a world target. + Body_GetClosestPoint :: proc(bodyId: BodyId, result: ^Vec3, target: Vec3) -> f32 --- + + // Cast a ray at a specific body using a specified body transform. + Body_CastRay :: proc(bodyId: BodyId, origin: Pos, translation: Vec3, filter: QueryFilter, maxFraction: f32, bodyTransform: WorldTransform) -> BodyCastResult --- + + // Cast a shape at a specific body using a specified body transform. + Body_CastShape :: proc(bodyId: BodyId, origin: Pos, #by_ptr proxy: ShapeProxy, translation: Vec3, filter: QueryFilter, maxFraction: f32, canEncroach: b32, bodyTransform: WorldTransform) -> BodyCastResult --- + + // Overlap a shape with a specific body using a specified body transform. + Body_OverlapShape :: proc(bodyId: BodyId, origin: Pos, #by_ptr proxy: ShapeProxy, filter: QueryFilter, bodyTransform: WorldTransform) -> bool --- + + // Collide a character mover with a specific body using a specified body transform. + Body_CollideMover :: proc(bodyId: BodyId, bodyPlanes: [^]BodyPlaneResult, planeCapacity: c.int, origin: Pos, #by_ptr mover: Capsule, filter: QueryFilter, bodyTransform: WorldTransform) -> c.int --- + + /** @} */ // body + + /** + * @defgroup shape Shape + * Functions to create, destroy, and access. + * Shapes bind raw geometry to bodies and hold material properties including friction and restitution. + * @{ + */ + + // Create a circle shape and attach it to a body. The shape definition and geometry are fully cloned. + // Contacts are not created until the next time step. + // @return the shape id for accessing the shape + CreateSphereShape :: proc(bodyId: BodyId, #by_ptr def: ShapeDef, #by_ptr sphere: Sphere) -> ShapeId --- + + // Create a capsule shape and attach it to a body. The shape definition and geometry are fully cloned. + // Contacts are not created until the next time step. + // @return the shape id for accessing the shape + CreateCapsuleShape :: proc(bodyId: BodyId, #by_ptr def: ShapeDef, #by_ptr capsule: Capsule) -> ShapeId --- + + // Create a convex hull shape and attach it to a body. The shape definition is fully cloned. Contacts are not created + // until the next time step. + // @return the shape id for accessing the shape + CreateHullShape :: proc(bodyId: BodyId, #by_ptr def: ShapeDef, #by_ptr hull: HullData) -> ShapeId --- + + // Create a convex hull shape and attach it to a body. The hull is cloned then transformed with scale applied first. + // Use this for non-uniform or mirrored scale or a baked local transform. The baked result is shared through the + // world hull database. The shape definition and geometry are fully cloned. Contacts are not created until the next time step. + // @return the shape id for accessing the shape + CreateTransformedHullShape :: proc(bodyId: BodyId, #by_ptr def: ShapeDef, #by_ptr hull: HullData, transform: Transform, scale: Vec3) -> ShapeId --- + + // Create a mesh hull shape and attach it to a body. The shape definition is fully cloned but the mesh is not. + // Contacts are not created until the next time step. + // Mesh collision only creates contacts on static bodies. + // @warning this holds reference to the input mesh data which must remain valid for the lifetime of this shape + // @return the shape id for accessing the shape + CreateMeshShape :: proc(bodyId: BodyId, #by_ptr def: ShapeDef, #by_ptr mesh: MeshData, scale: Vec3) -> ShapeId --- + + // Create a height-field shape and attach it to a body. The shape definition is fully cloned but the height field is not. + // Contacts are not created until the next time step. + // Height field is only allowed on static bodies. + // @warning this holds reference to the input height field which must remain valid for the lifetime of this shape + // @return the shape id for accessing the shape + CreateHeightFieldShape :: proc(bodyId: BodyId, #by_ptr def: ShapeDef, #by_ptr heightField: HeightFieldData) -> ShapeId --- + + // Compound shapes are only allowed on static bodies. + CreateCompoundShape :: proc(bodyId: BodyId, def: ^ShapeDef, #by_ptr compound: CompoundData) -> ShapeId --- + + // Destroy a shape. You may defer the body mass update which can improve performance if several shapes on a + // body are destroyed at once. + // @see Body_ApplyMassFromShapes + DestroyShape :: proc(shapeId: ShapeId, updateBodyMass: bool) --- + + // Shape identifier validation. Provides validation for up to 64K allocations. + Shape_IsValid :: proc(id: ShapeId) -> bool --- + + // Get the type of a shape + Shape_GetType :: proc(shapeId: ShapeId) -> ShapeType --- + + // Get the id of the body that a shape is attached to + Shape_GetBody :: proc(shapeId: ShapeId) -> BodyId --- + + // Get the world that owns this shape + Shape_GetWorld :: proc(shapeId: ShapeId) -> WorldId --- + + // Returns true if the shape is a sensor + Shape_IsSensor :: proc(shapeId: ShapeId) -> bool --- + + // Set the user data for a shape + Shape_SetUserData :: proc(shapeId: ShapeId, userData: rawptr) --- + + // Get the user data for a shape. This is useful when you get a shape id + // from an event or query. + Shape_GetUserData :: proc(shapeId: ShapeId) --- + + // Set the mass density of a shape, usually in kg/m^3. + // This will optionally update the mass properties on the parent body. + // @see ShapeDef::density, Body_ApplyMassFromShapes + Shape_SetDensity :: proc(shapeId: ShapeId, density: f32, updateBodyMass: bool) --- + + // Get the density of a shape, usually in kg/m^3 + Shape_GetDensity :: proc(shapeId: ShapeId) -> f32 --- + + // Set the friction on a shape + Shape_SetFriction :: proc(shapeId: ShapeId, friction: f32) --- + + // Get the friction of a shape + Shape_GetFriction :: proc(shapeId: ShapeId) -> f32 --- + + // Set the shape restitution (bounciness) + Shape_SetRestitution :: proc(shapeId: ShapeId, restitution: f32) --- + + // Get the shape restitution + Shape_GetRestitution :: proc(shapeId: ShapeId) -> f32 --- + + // Set the shape base surface material. Does not change per triangle materials. + Shape_SetSurfaceMaterial :: proc(shapeId: ShapeId, surfaceMaterial: SurfaceMaterial) --- + + // Get the base shape surface material. + Shape_GetSurfaceMaterial :: proc(shapeId: ShapeId) -> SurfaceMaterial --- + + // Get the number of mesh surface materials. + Shape_GetMeshMaterialCount :: proc(shapeId: ShapeId) -> c.int --- + + // Set a surface material for a mesh shape. + Shape_SetMeshMaterial :: proc(shapeId: ShapeId, surfaceMaterial: SurfaceMaterial, index: c.int) --- + + // Get a surface material for a mesh shape + Shape_GetMeshSurfaceMaterial :: proc(shapeId: ShapeId, index: c.int) -> SurfaceMaterial --- + + // Get the shape filter + Shape_GetFilter :: proc(shapeId: ShapeId) -> Filter --- + + // Set the current filter. This is almost as expensive as recreating the shape. + // @see ShapeDef::filter + // @param shapeId the shape + // @param filter the new filter + // @param invokeContacts if true then the shape will have all contacts recomputed the next time step (expensive) + Shape_SetFilter :: proc(shapeId: ShapeId, filter: Filter, invokeContacts: bool) --- + + // Enable sensor events for this shape. Only applies to kinematic and dynamic bodies. Ignored for sensors. + // @see ShapeDef::isSensor + Shape_EnableSensorEvents :: proc(shapeId: ShapeId, flag: bool) --- + + // Returns true if sensor events are enabled + Shape_AreSensorEventsEnabled :: proc(shapeId: ShapeId) -> bool --- + + // Enable contact events for this shape. Only applies to kinematic and dynamic bodies. Ignored for sensors. + // @see ShapeDef::enableContactEvents + Shape_EnableContactEvents :: proc(shapeId: ShapeId, flag: bool) --- + + // Returns true if contact events are enabled + Shape_AreContactEventsEnabled :: proc(shapeId: ShapeId) -> bool --- + + // Enable pre-solve contact events for this shape. Only applies to dynamic bodies. These are expensive + // and must be carefully handled due to multithreading. Ignored for sensors. + // @see PreSolveFcn + Shape_EnablePreSolveEvents :: proc(shapeId: ShapeId, flag: bool) --- + + // Returns true if pre-solve events are enabled + Shape_ArePreSolveEventsEnabled :: proc(shapeId: ShapeId) -> bool --- + + // Enable contact hit events for this shape. Ignored for sensors. + // @see WorldDef.hitEventThreshold + Shape_EnableHitEvents :: proc(shapeId: ShapeId, flag: bool) --- + + // Returns true if hit events are enabled + Shape_AreHitEventsEnabled :: proc(shapeId: ShapeId) -> bool --- + + // Ray cast a shape directly. The ray runs from origin to origin + translation and the hit point + // comes back as a world position, so the cast stays precise far from the world origin. + Shape_RayCast :: proc(shapeId: ShapeId, origin: Pos, translation: Vec3) -> WorldCastOutput --- + + // Get a copy of the shape's sphere. Asserts the type is correct. + Shape_GetSphere :: proc(shapeId: ShapeId) -> Sphere --- + + // Get a copy of the shape's capsule. Asserts the type is correct. + Shape_GetCapsule :: proc(shapeId: ShapeId) -> Capsule --- + + // Get the shape's convex hull. Asserts the type is correct. + Shape_GetHull :: proc(shapeId: ShapeId) -> ^HullData --- + + // Get the shape's mesh. Asserts the type is correct. + Shape_GetMesh :: proc(shapeId: ShapeId) -> Mesh --- + + // Get the shape's height field. Asserts the type is correct. + Shape_GetHeightField :: proc(shapeId: ShapeId) -> ^HeightFieldData --- + + // Allows you to change a shape to be a sphere or update the current sphere. + // This does not modify the mass properties. + // @see Body_ApplyMassFromShapes + Shape_SetSphere :: proc(shapeId: ShapeId, #by_ptr sphere: Sphere) --- + + // Allows you to change a shape to be a capsule or update the current capsule. + // This does not modify the mass properties. + // @see Body_ApplyMassFromShapes + Shape_SetCapsule :: proc(shapeId: ShapeId, #by_ptr capsule: Capsule) --- + + // Allows you to change a shape to be a hull or update the current hull. + // This does not modify the mass properties. + // @see Body_ApplyMassFromShapes + Shape_SetHull :: proc(shapeId: ShapeId, #by_ptr hull: HullData) --- + + // Allows you to change a shape to be a mesh or update the current mesh. + // This does not modify the mass properties. + // @see Body_ApplyMassFromShapes + Shape_SetMesh :: proc(shapeId: ShapeId, #by_ptr meshData: MeshData, scale: Vec3) --- + + // Get the maximum capacity required for retrieving all the touching contacts on a shape + Shape_GetContactCapacity :: proc(shapeId: ShapeId) -> c.int --- + + // Get the touching contact data for a shape. The provided shapeId will be either shapeIdA or shapeIdB on the contact data. + // @note Box3D uses speculative collision so some contact points may be separated. + // @returns the number of elements filled in the provided array + // @warning do not ignore the return value, it specifies the valid number of elements + Shape_GetContactData :: proc(shapeId: ShapeId, contactData: [^]ContactData, capacity: c.int) -> c.int --- + + // Get the maximum capacity required for retrieving all the overlapped shapes on a sensor shape. + // This returns 0 if the provided shape is not a sensor. + // @param shapeId the id of a sensor shape + // @returns the required capacity to get all the overlaps in Shape_GetSensorOverlaps + Shape_GetSensorCapacity :: proc(shapeId: ShapeId) -> c.int --- + + // Get the overlap data for a sensor shape. + // @param shapeId the id of a sensor shape + // @param visitorIds a user allocated array that is filled with the overlapping shapes (visitors) + // @param capacity the capacity of overlappedShapes + // @returns the number of elements filled in the provided array + // @warning do not ignore the return value, it specifies the valid number of elements + // @warning overlaps may contain destroyed shapes so use Shape_IsValid to confirm each overlap + Shape_GetSensorData :: proc(shapeId: ShapeId, visitorIds: [^]ShapeId, capacity: c.int) -> c.int --- + + // Get the current world AABB + Shape_GetAABB :: proc(shapeId: ShapeId) -> AABB --- + + // Compute the mass data for a shape + Shape_ComputeMassData :: proc(shapeId: ShapeId) -> MassData --- + + // Get the closest point on a shape to a target point. Target and result are in world space. + Shape_GetClosestPoint :: proc(shapeId: ShapeId, target: Vec3) -> Vec3 --- + + // Apply a wind force to the body for this shape using the density of air. This considers + // the projected area of the shape in the wind direction. This also considers + // the relative velocity of the shape. + // @param shapeId the shape id + // @param wind the wind velocity in world space + // @param drag the drag coefficient, the force that opposes the relative velocity + // @param lift the lift coefficient, the force that is perpendicular to the relative velocity + // @param maxSpeed the maximum relative speed. Speed cap is necessary for stability. Typically 10m/s or less. + // @param wake should this wake the body + Shape_ApplyWind :: proc(shapeId: ShapeId, wind: Vec3 , drag, lift: f32, maxSpeed: f32, wake: bool) --- + + /** @} */ // shape + + /** + * @defgroup joint Joint + * @brief Joints allow you to connect rigid bodies together while allowing various forms of relative motions. + * @{ + */ + + // Destroy a joint + DestroyJoint :: proc(jointId: JointId, wakeAttached: bool) --- + + // Joint identifier validation. Provides validation for up to 64K allocations. + Joint_IsValid :: proc(id: JointId) -> bool --- + + // Get the joint type + Joint_GetType :: proc(jointId: JointId) -> JointType --- + + // Get body A id on a joint + Joint_GetBodyA :: proc(jointId: JointId) -> BodyId --- + + // Get body B id on a joint + Joint_GetBodyB :: proc(jointId: JointId) -> BodyId --- + + // Get the world that owns this joint + Joint_GetWorld :: proc(jointId: JointId) -> WorldId --- + + // Set the local frame on bodyA + Joint_SetLocalFrameA :: proc(jointId: JointId, localFrame: Transform) --- + + // Get the local frame on bodyA + Joint_GetLocalFrameA :: proc(jointId: JointId) -> Transform --- + + // Set the local frame on bodyB + Joint_SetLocalFrameB :: proc(jointId: JointId, localFrame: Transform) --- + + // Get the local frame on bodyB + Joint_GetLocalFrameB :: proc(jointId: JointId) -> Transform --- + + // Toggle collision between connected bodies + Joint_SetCollideConnected :: proc(jointId: JointId, shouldCollide: bool) --- + + // Is collision allowed between connected bodies? + Joint_GetCollideConnected :: proc(jointId: JointId) -> bool --- + + // Set the user data on a joint + Joint_SetUserData :: proc(jointId: JointId, userData: rawptr) --- + + // Get the user data on a joint + Joint_GetUserData :: proc(jointId: JointId) --- + + // Wake the bodies connect to this joint + Joint_WakeBodies :: proc(jointId: JointId) --- + + // Get the current constraint force for this joint + Joint_GetConstraintForce :: proc(jointId: JointId) -> Vec3 --- + + // Get the current constraint torque for this joint + Joint_GetConstraintTorque :: proc(jointId: JointId) -> Vec3 --- + + // Get the current linear separation error for this joint. Does not consider admissible movement. Usually in meters. + Joint_GetLinearSeparation :: proc(jointId: JointId) -> f32 --- + + // Get the current angular separation error for this joint. Does not consider admissible movement. Usually in radians. + Joint_GetAngularSeparation :: proc(jointId: JointId) -> f32 --- + + // Set the joint constraint tuning. Advanced feature. + // @param jointId the joint + // @param hertz the stiffness in Hertz (cycles per second) + // @param dampingRatio the non-dimensional damping ratio (one for critical damping) + Joint_SetConstraintTuning :: proc(jointId: JointId, hertz: f32, dampingRatio: f32) --- + + // Get the joint constraint tuning. Advanced feature. + Joint_GetConstraintTuning :: proc(jointId: JointId, hertz: ^f32, dampingRatio: ^f32) --- + + // Set the force threshold for joint events (Newtons) + Joint_SetForceThreshold :: proc(jointId: JointId, threshold: f32) --- + + // Get the force threshold for joint events (Newtons) + Joint_GetForceThreshold :: proc(jointId: JointId) -> f32 --- + + // Set the torque threshold for joint events (N-m) + Joint_SetTorqueThreshold :: proc(jointId: JointId, threshold: f32) --- + + // Get the torque threshold for joint events (N-m) + Joint_GetTorqueThreshold :: proc(jointId: JointId) -> f32 --- + + /** + * @defgroup parallel_joint Parallel Joint + * @brief Functions for the parallel joint. + * @{ + */ + + // Create a parallel joint + // @see ParallelJointDef for details + CreateParallelJoint :: proc(worldId: WorldId, #by_ptr def: ParallelJointDef) -> JointId --- + + // Set the spring stiffness in Hertz + ParallelJoint_SetSpringHertz :: proc(jointId: JointId, hertz: f32) --- + + // Set the spring damping ratio, non-dimensional + ParallelJoint_SetSpringDampingRatio :: proc(jointId: JointId, dampingRatio: f32) --- + + // Get the spring Hertz + ParallelJoint_GetSpringHertz :: proc(jointId: JointId) -> f32 --- + + // Get the spring damping ratio + ParallelJoint_GetSpringDampingRatio :: proc(jointId: JointId) -> f32 --- + + // Set the maximum spring torque, usually in newton-meters + ParallelJoint_SetMaxTorque :: proc(jointId: JointId, force: f32) --- + + // Get the maximum spring torque, usually in newton-meters + ParallelJoint_GetMaxTorque :: proc(jointId: JointId) -> f32 --- + + /** @} */ // parallel_joint + + /** + * @defgroup distance_joint Distance Joint + * @brief Functions for the distance joint. + * @{ + */ + + // Create a distance joint + // @see DistanceJointDef for details + CreateDistanceJoint :: proc(worldId: WorldId, #by_ptr def: DistanceJointDef) -> JointId --- + + // Set the rest length of a distance joint + // @param jointId The id for a distance joint + // @param length The new distance joint length + DistanceJoint_SetLength :: proc(jointId: JointId, length: f32) --- + + // Get the rest length of a distance joint + DistanceJoint_GetLength :: proc(jointId: JointId) -> f32 --- + + // Enable/disable the distance joint spring. When disabled the distance joint is rigid. + DistanceJoint_EnableSpring :: proc(jointId: JointId, enableSpring: bool) --- + + // Is the distance joint spring enabled? + DistanceJoint_IsSpringEnabled :: proc(jointId: JointId) -> bool --- + + // Set the force range for the spring. + DistanceJoint_SetSpringForceRange :: proc(jointId: JointId, lowerForce, upperForce: f32) --- + + // Get the force range for the spring. + DistanceJoint_GetSpringForceRange :: proc(jointId: JointId, lowerForce, upperForce: ^f32) --- + + // Set the spring stiffness in Hertz + DistanceJoint_SetSpringHertz :: proc(jointId: JointId, hertz: f32) --- + + // Set the spring damping ratio, non-dimensional + DistanceJoint_SetSpringDampingRatio :: proc(jointId: JointId, dampingRatio: f32) --- + + // Get the spring Hertz + DistanceJoint_GetSpringHertz :: proc(jointId: JointId) -> f32 --- + + // Get the spring damping ratio + DistanceJoint_GetSpringDampingRatio :: proc(jointId: JointId) -> f32 --- + + // Enable joint limit. The limit only works if the joint spring is enabled. Otherwise the joint is rigid + // and the limit has no effect. + DistanceJoint_EnableLimit :: proc(jointId: JointId, enableLimit: bool) --- + + // Is the distance joint limit enabled? + DistanceJoint_IsLimitEnabled :: proc(jointId: JointId) -> bool --- + + // Set the minimum and maximum length parameters of a distance joint + DistanceJoint_SetLengthRange :: proc(jointId: JointId, minLength, maxLength: f32) --- + + // Get the distance joint minimum length + DistanceJoint_GetMinLength :: proc(jointId: JointId) -> f32 --- + + // Get the distance joint maximum length + DistanceJoint_GetMaxLength :: proc(jointId: JointId) -> f32 --- + + // Get the current length of a distance joint + DistanceJoint_GetCurrentLength :: proc(jointId: JointId) -> f32 --- + + // Enable/disable the distance joint motor + DistanceJoint_EnableMotor :: proc(jointId: JointId, enableMotor: bool) --- + + // Is the distance joint motor enabled? + DistanceJoint_IsMotorEnabled :: proc(jointId: JointId) -> bool --- + + // Set the distance joint motor speed, usually in meters per second + DistanceJoint_SetMotorSpeed :: proc(jointId: JointId, motorSpeed: f32) --- + + // Get the distance joint motor speed, usually in meters per second + DistanceJoint_GetMotorSpeed :: proc(jointId: JointId) -> f32 --- + + // Set the distance joint maximum motor force, usually in newtons + DistanceJoint_SetMaxMotorForce :: proc(jointId: JointId, force: f32) --- + + // Get the distance joint maximum motor force, usually in newtons + DistanceJoint_GetMaxMotorForce :: proc(jointId: JointId) -> f32 --- + + // Get the distance joint current motor force, usually in newtons + DistanceJoint_GetMotorForce :: proc(jointId: JointId) -> f32 --- + + /** @} */ // distance_joint + + /** + * @defgroup motor_joint Motor Joint + * @brief Functions for the motor joint. + * + * The motor joint is designed to control the movement of a body while still being + * responsive to collisions. A spring controls the position and rotation. A velocity motor + * can be used to control velocity and allows for friction in top-down games. Both types + * of control can be combined. For example, you can have a spring with friction. + * Position and velocity control have force and torque limits. + * @{ + */ + + // Create a motor joint + // @see MotorJointDef for details + CreateMotorJoint :: proc(worldId: WorldId, #by_ptr def: MotorJointDef) -> JointId --- + + // Set the desired relative linear velocity in meters per second + MotorJoint_SetLinearVelocity :: proc(jointId: JointId, velocity: Vec3) --- + + // Get the desired relative linear velocity in meters per second + MotorJoint_GetLinearVelocity :: proc(jointId: JointId) -> Vec3 --- + + // Set the desired relative angular velocity in radians per second + MotorJoint_SetAngularVelocity :: proc(jointId: JointId, velocity: Vec3) --- + + // Get the desired relative angular velocity in radians per second + MotorJoint_GetAngularVelocity :: proc(jointId: JointId) -> Vec3 --- + + // Set the motor joint maximum force, usually in newtons + MotorJoint_SetMaxVelocityForce :: proc(jointId: JointId, maxForce: f32) --- + + // Get the motor joint maximum force, usually in newtons + MotorJoint_GetMaxVelocityForce :: proc(jointId: JointId) -> f32 --- + + // Set the motor joint maximum torque, usually in newton-meters + MotorJoint_SetMaxVelocityTorque :: proc(jointId: JointId, maxTorque: f32) --- + + // Get the motor joint maximum torque, usually in newton-meters + MotorJoint_GetMaxVelocityTorque :: proc(jointId: JointId) -> f32 --- + + // Set the spring linear hertz stiffness + MotorJoint_SetLinearHertz :: proc(jointId: JointId, hertz: f32) --- + + // Get the spring linear hertz stiffness + MotorJoint_GetLinearHertz :: proc(jointId: JointId) -> f32 --- + + // Set the spring linear damping ratio. Use 1.0 for critical damping. + MotorJoint_SetLinearDampingRatio :: proc(jointId: JointId, damping: f32) --- + + // Get the spring linear damping ratio. + MotorJoint_GetLinearDampingRatio :: proc(jointId: JointId) -> f32 --- + + // Set the spring angular hertz stiffness + MotorJoint_SetAngularHertz :: proc(jointId: JointId, hertz: f32) --- + + // Get the spring angular hertz stiffness + MotorJoint_GetAngularHertz :: proc(jointId: JointId) -> f32 --- + + // Set the spring angular damping ratio. Use 1.0 for critical damping. + MotorJoint_SetAngularDampingRatio :: proc(jointId: JointId, damping: f32) --- + + // Get the spring angular damping ratio. + MotorJoint_GetAngularDampingRatio :: proc(jointId: JointId) -> f32 --- + + // Set the maximum spring force in newtons. + MotorJoint_SetMaxSpringForce :: proc(jointId: JointId, maxForce: f32) --- + + // Get the maximum spring force in newtons. + MotorJoint_GetMaxSpringForce :: proc(jointId: JointId) -> f32 --- + + // Set the maximum spring torque in newtons * meters + MotorJoint_SetMaxSpringTorque :: proc(jointId: JointId, maxTorque: f32) --- + + // Get the maximum spring torque in newtons * meters + MotorJoint_GetMaxSpringTorque :: proc(jointId: JointId) -> f32 --- + + /**@}*/ // motor_joint + + /** + * @defgroup filter_joint Filter Joint + * @brief Functions for the filter joint. + * + * The filter joint is used to disable collision between two bodies. As a side effect of being a joint, it also + * keeps the two bodies in the same simulation island. + * @{ + */ + + // Create a filter joint. + // @see FilterJointDef for details + CreateFilterJoint :: proc(worldId: WorldId, #by_ptr def: FilterJointDef) -> JointId --- + + /**@}*/ // filter_joint + + /** + * @defgroup prismatic_joint Prismatic Joint + * @brief A prismatic joint allows for translation along a single axis with no rotation. + * + * The prismatic joint is useful for things like pistons and moving platforms, where you want a body to translate + * along an axis and have no rotation. Also called a *slider* joint. + * @{ + */ + + // Create a prismatic (slider) joint. + // @see PrismaticJointDef for details + CreatePrismaticJoint :: proc(worldId: WorldId, #by_ptr def: PrismaticJointDef) -> JointId --- + + // Enable/disable the joint spring. + PrismaticJoint_EnableSpring :: proc(jointId: JointId, enableSpring: bool) --- + + // Is the prismatic joint spring enabled or not? + PrismaticJoint_IsSpringEnabled :: proc(jointId: JointId) -> bool --- + + // Set the prismatic joint stiffness in Hertz. + // This should usually be less than a quarter of the simulation rate. For example, if the simulation + // runs at 60Hz then the joint stiffness should be 15Hz or less. + PrismaticJoint_SetSpringHertz :: proc(jointId: JointId, hertz: f32) --- + + // Get the prismatic joint stiffness in Hertz + PrismaticJoint_GetSpringHertz :: proc(jointId: JointId) -> f32 --- + + // Set the prismatic joint damping ratio (non-dimensional) + PrismaticJoint_SetSpringDampingRatio :: proc(jointId: JointId, dampingRatio: f32) --- + + // Get the prismatic spring damping ratio (non-dimensional) + PrismaticJoint_GetSpringDampingRatio :: proc(jointId: JointId) -> f32 --- + + // Set the prismatic joint target translation. Usually in meters. + PrismaticJoint_SetTargetTranslation :: proc(jointId: JointId, targetTranslation: f32) --- + + // Get the prismatic joint target translation. Usually in meters. + PrismaticJoint_GetTargetTranslation :: proc(jointId: JointId) -> f32 --- + + // Enable/disable a prismatic joint limit + PrismaticJoint_EnableLimit :: proc(jointId: JointId, enableLimit: bool) --- + + // Is the prismatic joint limit enabled? + PrismaticJoint_IsLimitEnabled :: proc(jointId: JointId) -> bool --- + + // Get the prismatic joint lower limit + PrismaticJoint_GetLowerLimit :: proc(jointId: JointId) -> f32 --- + + // Get the prismatic joint upper limit + PrismaticJoint_GetUpperLimit :: proc(jointId: JointId) -> f32 --- + + // Set the prismatic joint limits + PrismaticJoint_SetLimits :: proc(jointId: JointId, lower, upper: f32) --- + + // Enable/disable a prismatic joint motor + PrismaticJoint_EnableMotor :: proc(jointId: JointId, enableMotor: bool) --- + + // Is the prismatic joint motor enabled? + PrismaticJoint_IsMotorEnabled :: proc(jointId: JointId) -> bool --- + + // Set the prismatic joint motor speed, usually in meters per second + PrismaticJoint_SetMotorSpeed :: proc(jointId: JointId, motorSpeed: f32) --- + + // Get the prismatic joint motor speed, usually in meters per second + PrismaticJoint_GetMotorSpeed :: proc(jointId: JointId) -> f32 --- + + // Set the prismatic joint maximum motor force, usually in newtons + PrismaticJoint_SetMaxMotorForce :: proc(jointId: JointId, force: f32) --- + + // Get the prismatic joint maximum motor force, usually in newtons + PrismaticJoint_GetMaxMotorForce :: proc(jointId: JointId) -> f32 --- + + // Get the prismatic joint current motor force, usually in newtons + PrismaticJoint_GetMotorForce :: proc(jointId: JointId) -> f32 --- + + // Get the current joint translation, usually in meters. + PrismaticJoint_GetTranslation :: proc(jointId: JointId) -> f32 --- + + // Get the current joint translation speed, usually in meters per second. + PrismaticJoint_GetSpeed :: proc(jointId: JointId) -> f32 --- + + /**@}*/ // prismatic_joint + + /** + * @defgroup revolute_joint Revolute Joint + * @brief A revolute joint allows for relative rotation about a single axis with no relative translation. + * + * Also called a *hinge* or *pin* joint. + * @{ + */ + + // Create a revolute joint + // @see RevoluteJointDef for details + CreateRevoluteJoint :: proc(worldId: WorldId, #by_ptr def: RevoluteJointDef) -> JointId --- + + // Enable/disable the revolute joint spring + RevoluteJoint_EnableSpring :: proc(jointId: JointId, enableSpring: bool) --- + + // Is the revolute angular spring enabled? + RevoluteJoint_IsSpringEnabled :: proc(jointId: JointId) -> bool --- + + // Set the revolute joint spring stiffness in Hertz + RevoluteJoint_SetSpringHertz :: proc(jointId: JointId, hertz: f32) --- + + // Get the revolute joint spring stiffness in Hertz + RevoluteJoint_GetSpringHertz :: proc(jointId: JointId) -> f32 --- + + // Set the revolute joint spring damping ratio, non-dimensional + RevoluteJoint_SetSpringDampingRatio :: proc(jointId: JointId, dampingRatio: f32) --- + + // Get the revolute joint spring damping ratio, non-dimensional + RevoluteJoint_GetSpringDampingRatio :: proc(jointId: JointId) -> f32 --- + + // Set the revolute joint target angle in radians + RevoluteJoint_SetTargetAngle :: proc(jointId: JointId, targetRadians: f32) --- + + // Get the revolute joint target angle in radians + RevoluteJoint_GetTargetAngle :: proc(jointId: JointId) -> f32 --- + + // Get the revolute joint current angle in radians relative to the reference angle + // @see RevoluteJointDef::referenceAngle + RevoluteJoint_GetAngle :: proc(jointId: JointId) -> f32 --- + + // Enable/disable the revolute joint limit + RevoluteJoint_EnableLimit :: proc(jointId: JointId, enableLimit: bool) --- + + // Is the revolute joint limit enabled? + RevoluteJoint_IsLimitEnabled :: proc(jointId: JointId) -> bool --- + + // Get the revolute joint lower limit in radians + RevoluteJoint_GetLowerLimit :: proc(jointId: JointId) -> f32 --- + + // Get the revolute joint upper limit in radians + RevoluteJoint_GetUpperLimit :: proc(jointId: JointId) -> f32 --- + + // Set the revolute joint limits in radians + RevoluteJoint_SetLimits :: proc(jointId: JointId, lowerLimitRadians, upperLimitRadians: f32) --- + + // Enable/disable a revolute joint motor + RevoluteJoint_EnableMotor :: proc(jointId: JointId, enableMotor: bool) --- + + // Is the revolute joint motor enabled? + RevoluteJoint_IsMotorEnabled :: proc(jointId: JointId) -> bool --- + + // Set the revolute joint motor speed in radians per second + RevoluteJoint_SetMotorSpeed :: proc(jointId: JointId, motorSpeed: f32) --- + + // Get the revolute joint motor speed in radians per second + RevoluteJoint_GetMotorSpeed :: proc(jointId: JointId) -> f32 --- + + // Get the revolute joint current motor torque, usually in newton-meters + RevoluteJoint_GetMotorTorque :: proc(jointId: JointId) -> f32 --- + + // Set the revolute joint maximum motor torque, usually in newton-meters + RevoluteJoint_SetMaxMotorTorque :: proc(jointId: JointId, torque: f32) --- + + // Get the revolute joint maximum motor torque, usually in newton-meters + RevoluteJoint_GetMaxMotorTorque :: proc(jointId: JointId) -> f32 --- + + /**@}*/ // revolute_joint + + /** + * @defgroup spherical_joint Spherical Joint + * @brief A spherical joint allows for relative rotation in the 3D space with no relative translation. + * + * Also called a *ball-in-socket* or *point-to-point* joint. + * @{ + */ + + // Create a spherical joint + // @see SphericalJointDef for details + CreateSphericalJoint :: proc(worldId: WorldId, #by_ptr def: SphericalJointDef) -> JointId --- + + // Enable/disable the spherical joint cone limit + SphericalJoint_EnableConeLimit :: proc(jointId: JointId, enableLimit: bool) --- + + // Is the spherical joint cone limit enabled? + SphericalJoint_IsConeLimitEnabled :: proc(jointId: JointId) -> bool --- + + // Get the spherical joint cone limit in radians + SphericalJoint_GetConeLimit :: proc(jointId: JointId) -> f32 --- + + // Set the spherical joint limits in radians + SphericalJoint_SetConeLimit :: proc(jointId: JointId, angleRadians: f32) --- + + // Get the spherical joint current cone angle in radians. + SphericalJoint_GetConeAngle :: proc(jointId: JointId) -> f32 --- + + // Enable/disable the spherical joint limit + SphericalJoint_EnableTwistLimit :: proc(jointId: JointId, enableLimit: bool) --- + + // Is the spherical joint limit enabled? + SphericalJoint_IsTwistLimitEnabled :: proc(jointId: JointId) -> bool --- + + // Get the spherical joint lower limit in radians + SphericalJoint_GetLowerTwistLimit :: proc(jointId: JointId) -> f32 --- + + // Get the spherical joint upper limit in radians + SphericalJoint_GetUpperTwistLimit :: proc(jointId: JointId) -> f32 --- + + // Set the spherical joint limits in radians + SphericalJoint_SetTwistLimits :: proc(jointId: JointId, lowerLimitRadians, upperLimitRadians: f32) --- + + // Get the spherical joint current twist angle in radians. + SphericalJoint_GetTwistAngle :: proc(jointId: JointId) -> f32 --- + + // Enable/disable the spherical joint spring + SphericalJoint_EnableSpring :: proc(jointId: JointId, enableSpring: bool) --- + + // Is the spherical angular spring enabled? + SphericalJoint_IsSpringEnabled :: proc(jointId: JointId) -> bool --- + + // Set the spherical joint spring stiffness in Hertz + SphericalJoint_SetSpringHertz :: proc(jointId: JointId, hertz: f32) --- + + // Get the spherical joint spring stiffness in Hertz + SphericalJoint_GetSpringHertz :: proc(jointId: JointId) -> f32 --- + + // Set the spherical joint spring damping ratio, non-dimensional + SphericalJoint_SetSpringDampingRatio :: proc(jointId: JointId, dampingRatio: f32) --- + + // Get the spherical joint spring damping ratio, non-dimensional + SphericalJoint_GetSpringDampingRatio :: proc(jointId: JointId) -> f32 --- + + // Set the spherical joint spring target rotation + SphericalJoint_SetTargetRotation :: proc(jointId: JointId, targetRotation: Quat) --- + + // Get the spherical joint spring target rotation + SphericalJoint_GetTargetRotation :: proc(jointId: JointId) -> Quat --- + + // Enable/disable a spherical joint motor + SphericalJoint_EnableMotor :: proc(jointId: JointId, enableMotor: bool) --- + + // Is the spherical joint motor enabled? + SphericalJoint_IsMotorEnabled :: proc(jointId: JointId) -> bool --- + + // Set the spherical joint motor velocity in radians per second + SphericalJoint_SetMotorVelocity :: proc(jointId: JointId, motorVelocity: Vec3) --- + + // Get the spherical joint motor velocity in radians per second + SphericalJoint_GetMotorVelocity :: proc(jointId: JointId) -> Vec3 --- + + // Get the spherical joint current motor torque, usually in newton-meters + SphericalJoint_GetMotorTorque :: proc(jointId: JointId) -> Vec3 --- + + // Set the spherical joint maximum motor torque, usually in newton-meters + SphericalJoint_SetMaxMotorTorque :: proc(jointId: JointId, torque: f32) --- + + // Get the spherical joint maximum motor torque, usually in newton-meters + SphericalJoint_GetMaxMotorTorque :: proc(jointId: JointId) -> f32 --- + + /**@}*/ // spherical_joint + + /** + * @defgroup weld_joint Weld Joint + * @brief A weld joint fully constrains the relative transform between two bodies while allowing for springiness + * + * A weld joint constrains the relative rotation and translation between two bodies. Both rotation and translation + * can have damped springs. + * + * @note The accuracy of weld joint is limited by the accuracy of the solver. Long chains of weld joints may flex. + * @{ + */ + + // Create a weld joint + // @see WeldJointDef for details + CreateWeldJoint :: proc(worldId: WorldId, #by_ptr def: WeldJointDef) -> JointId --- + + // Set the weld joint linear stiffness in Hertz. 0 is rigid. + WeldJoint_SetLinearHertz :: proc(jointId: JointId, hertz: f32) --- + + // Get the weld joint linear stiffness in Hertz + WeldJoint_GetLinearHertz :: proc(jointId: JointId) -> f32 --- + + // Set the weld joint linear damping ratio (non-dimensional) + WeldJoint_SetLinearDampingRatio :: proc(jointId: JointId, dampingRatio: f32) --- + + // Get the weld joint linear damping ratio (non-dimensional) + WeldJoint_GetLinearDampingRatio :: proc(jointId: JointId) -> f32 --- + + // Set the weld joint angular stiffness in Hertz. 0 is rigid. + WeldJoint_SetAngularHertz :: proc(jointId: JointId, hertz: f32) --- + + // Get the weld joint angular stiffness in Hertz + WeldJoint_GetAngularHertz :: proc(jointId: JointId) -> f32 --- + + // Set weld joint angular damping ratio, non-dimensional + WeldJoint_SetAngularDampingRatio :: proc(jointId: JointId, dampingRatio: f32) --- + + // Get the weld joint angular damping ratio, non-dimensional + WeldJoint_GetAngularDampingRatio :: proc(jointId: JointId) -> f32 --- + + /**@}*/ // weld_joint + + /** + * @defgroup wheel_joint Wheel Joint + * The wheel joint can be used to simulate wheels on vehicles. + * + * The wheel joint restricts body B to move along a local axis in body A. Body B is free to + * rotate. Supports a linear spring, linear limits, and a rotational motor. + * + * @{ + */ + + // Create a wheel joint. + // @see WheelJointDef for details. + CreateWheelJoint :: proc(worldId: WorldId, #by_ptr def: WheelJointDef) -> JointId --- + + // Enable/disable the wheel joint spring. + WheelJoint_EnableSuspension :: proc(jointId: JointId, flag: bool) --- + + // Is the wheel joint spring enabled? + WheelJoint_IsSuspensionEnabled :: proc(jointId: JointId) -> bool --- + + // Set the wheel joint stiffness in Hertz. + WheelJoint_SetSuspensionHertz :: proc(jointId: JointId, hertz: f32) --- + + // Get the wheel joint stiffness in Hertz. + WheelJoint_GetSuspensionHertz :: proc(jointId: JointId) -> f32 --- + + // Set the wheel joint damping ratio, non-dimensional. + WheelJoint_SetSuspensionDampingRatio :: proc(jointId: JointId, dampingRatio: f32) --- + + // Get the wheel joint damping ratio, non-dimensional. + WheelJoint_GetSuspensionDampingRatio :: proc(jointId: JointId) -> f32 --- + + // Enable/disable the wheel joint limit. + WheelJoint_EnableSuspensionLimit :: proc(jointId: JointId, flag: bool) --- + + // Is the wheel joint limit enabled? + WheelJoint_IsSuspensionLimitEnabled :: proc(jointId: JointId) -> bool --- + + // Get the wheel joint lower limit. + WheelJoint_GetLowerSuspensionLimit :: proc(jointId: JointId) -> f32 --- + + // Get the wheel joint upper limit. + WheelJoint_GetUpperSuspensionLimit :: proc(jointId: JointId) -> f32 --- + + // Set the wheel joint limits. + WheelJoint_SetSuspensionLimits :: proc(jointId: JointId, lower, upper: f32) --- + + // Enable/disable the wheel joint motor. + WheelJoint_EnableSpinMotor :: proc(jointId: JointId, flag: bool) --- + + // Is the wheel joint motor enabled? + WheelJoint_IsSpinMotorEnabled :: proc(jointId: JointId) -> bool --- + + // Set the wheel joint motor speed in radians per second. + WheelJoint_SetSpinMotorSpeed :: proc(jointId: JointId, speed: f32) --- + + // Get the wheel joint motor speed in radians per second. + WheelJoint_GetSpinMotorSpeed :: proc(jointId: JointId) -> f32 --- + + // Set the wheel joint maximum motor torque, usually in newton-meters. + WheelJoint_SetMaxSpinTorque :: proc(jointId: JointId, torque: f32) --- + + // Get the wheel joint maximum motor torque, usually in newton-meters. + WheelJoint_GetMaxSpinTorque :: proc(jointId: JointId) -> f32 --- + + // Get the current spin speed in radians per second. + WheelJoint_GetSpinSpeed :: proc(jointId: JointId) -> f32 --- + + // Get the wheel joint current motor torque, usually in newton-meters. + WheelJoint_GetSpinTorque :: proc(jointId: JointId) -> f32 --- + + // Enable/disable wheel steering. Steering allows the wheel to rotate about the suspension axis. + WheelJoint_EnableSteering :: proc(jointId: JointId, flag: bool) --- + + // Can the wheel steer? + WheelJoint_IsSteeringEnabled :: proc(jointId: JointId) -> bool --- + + // Set the wheel joint steering stiffness in Hertz. + WheelJoint_SetSteeringHertz :: proc(jointId: JointId, hertz: f32) --- + + // Get the wheel joint steering stiffness in Hertz. + WheelJoint_GetSteeringHertz :: proc(jointId: JointId) -> f32 --- + + // Set the wheel joint steering damping ratio, non-dimensional. + WheelJoint_SetSteeringDampingRatio :: proc(jointId: JointId, dampingRatio: f32) --- + + // Get the wheel joint steering damping ratio, non-dimensional. + WheelJoint_GetSteeringDampingRatio :: proc(jointId: JointId) -> f32 --- + + // Set the wheel joint maximum steering torque in N*m. + WheelJoint_SetMaxSteeringTorque :: proc(jointId: JointId, torque: f32) --- + + // Get the wheel joint maximum steering torque in N*m. + WheelJoint_GetMaxSteeringTorque :: proc(jointId: JointId) -> f32 --- + + // Enable/disable the wheel joint steering limit. + WheelJoint_EnableSteeringLimit :: proc(jointId: JointId, flag: bool) --- + + // Is the wheel joint steering limit enabled? + WheelJoint_IsSteeringLimitEnabled :: proc(jointId: JointId) -> bool --- + + // Get the wheel joint lower steering limit in radians. + WheelJoint_GetLowerSteeringLimit :: proc(jointId: JointId) -> f32 --- + + // Get the wheel joint upper steering limit in radians. + WheelJoint_GetUpperSteeringLimit :: proc(jointId: JointId) -> f32 --- + + // Set the wheel joint steering limits in radians. + WheelJoint_SetSteeringLimits :: proc(jointId: JointId, lowerRadians, upperRadians: f32) --- + + // Set the wheel joint target steering angle in radians. + WheelJoint_SetTargetSteeringAngle :: proc(jointId: JointId, radians: f32) --- + + // Get the wheel joint target steering angle in radians. + WheelJoint_GetTargetSteeringAngle :: proc(jointId: JointId) -> f32 --- + + // Get the current steering angle in radians. + WheelJoint_GetSteeringAngle :: proc(jointId: JointId) -> f32 --- + + // Get the current steering torque in N*m. + WheelJoint_GetSteeringTorque :: proc(jointId: JointId) -> f32 --- + + /**@}*/ // wheel_joint + + /**@}*/ // joint + + /** + * @defgroup contact Contact + * Access to contacts + * @{ + */ + + // Contact identifier validation. Provides validation for up to 2^32 allocations. + Contact_IsValid :: proc(id: ContactId) -> bool --- + + // Get the manifolds for a contact. The manifold may have no points if the contact is not touching. + Contact_GetData :: proc(contactId: ContactId) -> ContactData --- + + /**@}*/ // contact +} \ No newline at end of file diff --git a/vendor/box3d/box3d_collision.odin b/vendor/box3d/box3d_collision.odin new file mode 100644 index 000000000..26435fe6f --- /dev/null +++ b/vendor/box3d/box3d_collision.odin @@ -0,0 +1,615 @@ +package vendor_box3d + +import "core:c" + +// Query callback. +MeshQueryFcn :: proc "c" (x, y, z: Vec3, triangleIndex: c.int, ctx: rawptr) -> bool + + +@(link_prefix="b3", default_calling_convention="c", require_results) +foreign lib { + /** + * @addtogroup tree + * @{ + */ + + // Constructing the tree initializes the node pool. + DynamicTree_Create :: proc(proxyCapacity: c.int) -> DynamicTree --- + + // Destroy the tree, freeing the node pool. + DynamicTree_Destroy :: proc(tree: ^DynamicTree) --- + + // Create a proxy. Provide an AABB and a userData value. + DynamicTree_CreateProxy :: proc(tree: ^DynamicTree, aabb: AABB, categoryBits: u64, userData: u64) -> c.int --- + + // Destroy a proxy. This asserts if the id is invalid. + DynamicTree_DestroyProxy :: proc(tree: ^DynamicTree, proxyId: c.int) --- + + // Move a proxy to a new AABB by removing and reinserting into the tree. + DynamicTree_MoveProxy :: proc(tree: ^DynamicTree, proxyId: c.int, aabb: AABB) --- + + // Enlarge a proxy and enlarge ancestors as necessary. + DynamicTree_EnlargeProxy :: proc(tree: ^DynamicTree, proxyId: c.int, aabb: AABB) --- + + // Modify the category bits on a proxy. This is an expensive operation. + DynamicTree_SetCategoryBits :: proc(tree: ^DynamicTree, proxyId: c.int, categoryBits: u64) --- + + // Get the category bits on a proxy. + DynamicTree_GetCategoryBits :: proc(tree: ^DynamicTree, proxyId: c.int) -> u64 --- + + // Query an AABB for overlapping proxies. The callback function is called for each proxy that overlaps the supplied AABB. + // @return performance data + DynamicTree_Query :: proc(#by_ptr tree: DynamicTree, aabb: AABB, maskBits: u64, requireAllBits: bool, callback: TreeQueryCallbackFcn, ctx: rawptr) -> TreeStats --- + + // Query an AABB for the closest object. The callback function is called for each proxy that might be closest to the supplied point. + // @param tree the dynamic tree to query + // @param point the query point + // @param maskBits nodes are skipped if the bit-wise AND with the node category bits is zero + // @param requireAllBits nodes are skipped if the bit-wise AND with the node category bits does not equal the maskBits + // @param callback a user provided instance of TreeQueryClosestCallbackFcn + // @param context a user context object that is provided to the callback + // @param minDistanceSqr the initial and final minimum squared distance. Provide a small initial to restrict the search and + // improve performance. If the value is large this query has performance that scales linearly with the number of proxies and + // would be slower than a brute force search. + // @return performance data + DynamicTree_QueryClosest :: proc(#by_ptr tree: DynamicTree, point: Vec3, maskBits: u64, requireAllBits: bool, callback: TreeQueryClosestCallbackFcn, ctx: rawptr, minDistanceSqr: ^f32) -> TreeStats --- + + // Ray cast against the proxies in the tree. This relies on the callback + // to perform an exact ray cast in the case where the proxy contains a shape. + // The callback also performs any collision filtering. This has performance + // roughly equal to k * log(n), where k is the number of collisions and n is the + // number of proxies in the tree. + // Bit-wise filtering using mask bits can greatly improve performance in some scenarios. + // However, this filtering may be approximate, so the user should still apply filtering to results. + // @param tree the dynamic tree to ray cast + // @param input the ray cast input data. The ray extends from p1 to p1 + maxFraction * (p2 - p1) + // @param maskBits bit mask test: `bool accept = (maskBits & node->categoryBits) != 0;` + // @param requireAllBits modifies bit mask test: `bool accept = (maskBits & node->categoryBits) == maskBits;` + // @param callback a callback function that is called for each proxy that is hit by the ray + // @param context user context that is passed to the callback + // @return performance data + DynamicTree_RayCast :: proc(#by_ptr tree: DynamicTree, #by_ptr input: RayCastInput, maskBits: u64, requireAllBits: bool, callback: TreeRayCastCallbackFcn, ctx: rawptr) -> TreeStats --- + + // Sweep an AABB through the tree. The box is in the tree's world float frame and the callback + // re-differences each shape at full precision against the query origin. Used by the large world + // spatial queries so the tree traversal stays float while the narrow phase stays precise. + DynamicTree_BoxCast :: proc(#by_ptr tree: DynamicTree, #by_ptr input: BoxCastInput, maskBits: u64, requireAllBits: bool, callback: TreeBoxCastCallbackFcn, ctx: rawptr) -> TreeStats --- + + // Validate this tree. For testing. + DynamicTree_Validate :: proc(#by_ptr tree: DynamicTree) --- + + // Get the height of the binary tree. + DynamicTree_GetHeight :: proc(#by_ptr tree: DynamicTree) -> c.int --- + + // Get the ratio of the sum of the node areas to the root area. + DynamicTree_GetAreaRatio :: proc(#by_ptr tree: DynamicTree) -> f32 --- + + // Get the bounding box that contains the entire tree + DynamicTree_GetRootBounds :: proc(#by_ptr tree: DynamicTree) -> AABB --- + + // Get the number of proxies created + DynamicTree_GetProxyCount :: proc(#by_ptr tree: DynamicTree) -> c.int --- + + // Rebuild the tree while retaining subtrees that haven't changed. Returns the number of boxes sorted. + DynamicTree_Rebuild :: proc(tree: ^DynamicTree, fullBuild: bool) -> c.int --- + + // Get the number of bytes used by this tree + DynamicTree_GetByteCount :: proc(#by_ptr tree: DynamicTree) -> c.int --- + + // Validate this tree has no enlarged AABBs. For testing. + DynamicTree_ValidateNoEnlarged :: proc(#by_ptr tree: DynamicTree) --- + + // Save this tree to a file for debugging + DynamicTree_Save :: proc(#by_ptr tree: DynamicTree, fileName: cstring) --- + + // Load a file for debugging + DynamicTree_Load :: proc(fileName: cstring, scale: f32) -> DynamicTree --- + + + /**@}*/ // tree + + /** + * @addtogroup hull + * @{ + */ + + // Create a tessellated cylinder as a hull. + CreateCylinder :: proc(height: f32, radius: f32, yOffset: f32, sides: c.int) -> ^HullData --- + + // Create a tessellated cone as a hull. + CreateCone :: proc(height: f32, radius1: f32, radius2: f32, slices: c.int) -> ^HullData --- + + // Create a rock shaped hull. + CreateRock :: proc(radius: f32) -> ^HullData --- + + // Create a generic convex hull. + CreateHull :: proc(points: [^]Vec3, pointCount: c.int, maxVertexCount: c.int) -> ^HullData --- + + // Deep clone a hull. + CloneHull :: proc(#by_ptr hull: HullData) -> ^HullData --- + + // Clone and transform a hull. Supports non-uniform and mirroring scale. + CloneAndTransformHull :: proc(#by_ptr original: HullData, transform: Transform, scale: Vec3) -> ^HullData --- + + // Destroy a hull. + DestroyHull :: proc(hull: ^HullData) --- + + // Make a cube as a hull. Do not call DestroyHull on this. + MakeCubeHull :: proc(halfWidth: f32) -> BoxHull --- + + // Make a box as a hull. Do not call DestroyHull on this. + MakeBoxHull :: proc(hx, hy, hz: f32) -> BoxHull --- + + // Make an offset box as a hull. Do not call DestroyHull on this. + MakeOffsetBoxHull :: proc(hx, hy, hz: f32, offset: Vec3) -> BoxHull --- + + // Make a transformed box as a hull. Do not call DestroyHull on this. + // @param hx, hy, hz positive half widths + // @param transform local transform of box + MakeTransformedBoxHull :: proc(hx, hy, hz: f32, transform: Transform) -> BoxHull --- + + // This makes a transformed box hull with post scaling. This is useful for boxes that are scaled in + // a level editor. Such scaling can have reflection and shear. In the case of shear the result + // may be approximate. If you need to support shear consider using CreateHull. + // Do not call DestroyHull on this. + // @param halfWidths positive half widths + // @param transform local transform of box + // @param postScale scale applied after the transform, may be negative + MakeScaledBoxHull :: proc(halfWidths: Vec3, transform: Transform, postScale: Vec3) -> BoxHull --- + + // This takes a box with a transform and post scale and converts it into a box with the post scale + // resolved with new half-widths and transform. This accepts non-uniform and negative scale. + // This is approximate if there is shear. + // @param halfWidths [in/out] the box half widths + // @param transform [in/out] the box transform with rotation and translation + // @param postScale the post scale being applied to the box after the transform + // @param minHalfWidth the minimum half width after scale is applied + ScaleBox :: proc(halfWidths: ^Vec3, transform: ^Transform, postScale: Vec3, minHalfWidth: f32) --- + + /**@}*/ // hull + + /** + * @addtogroup mesh + * @{ + */ + + + // Create a grid mesh along the x and z axes. + // @param xCount the number of rows in the x direction + // @param zCount the number of rows in the z direction + // @param cellWidth the width of each cell + // @param materialCount the number of materials to generate + // @param identifyEdges compute adjacency information + CreateGridMesh :: proc(xCount: c.int, zCount: c.int, cellWidth: f32, materialCount: c.int, identifyEdges: bool) -> ^MeshData --- + + // Create a wave mesh along the x and z axes. + CreateWaveMesh :: proc(xCount: c.int, zCount: c.int, cellWidth: f32, amplitude: f32, rowFrequency: f32, columnFrequency: f32) -> ^MeshData --- + + // Create a torus mesh. + CreateTorusMesh :: proc(radialResolution: c.int, tubularResolution: c.int, radius: f32, thickness: f32) -> ^MeshData --- + + // Create a box mesh. + CreateBoxMesh :: proc(center: Vec3, extent: Vec3, identifyEdges: bool) -> ^MeshData --- + + // Create a hollow box mesh. + CreateHollowBoxMesh :: proc(center: Vec3, extent: Vec3) -> ^MeshData --- + + // Create a platform mesh. A truncated pyramid. + CreatePlatformMesh :: proc(center: Vec3, height, topWidth, bottomWidth: f32) -> ^MeshData --- + + // Create a generic mesh. + CreateMesh :: proc(#by_ptr def: MeshDef, degenerateTriangleIndices: [^]c.int, degenerateCapacity: c.int) -> ^MeshData --- + + // Destroy a mesh. + DestroyMesh :: proc(mesh: ^MeshData) --- + + // Get the height of the mesh BVH. + GetHeight :: proc(#by_ptr mesh: MeshData) -> c.int --- + + /**@}*/ // mesh + + /** + * @addtogroup height_field + * @{ + */ + + // Create a generic height field. + CreateHeightField :: proc(#by_ptr data: HeightFieldDef) -> ^HeightFieldData --- + + // Create a grid as a height field. + CreateGrid :: proc(rowCount, columnCount: c.int, scale: Vec3, makeHoles: bool) -> ^HeightFieldData --- + + // Create a wave grid as a height field. + CreateWave :: proc(rowCount, columnCount: c.int, scale: Vec3, rowFrequency: f32, columnFrequency: f32, makeHoles: bool) -> ^HeightFieldData --- + + // Destroy a height field. + DestroyHeightField :: proc(heightField: ^HeightFieldData) --- + + // Save input height data to a file + DumpHeightData :: proc(#by_ptr data: HeightFieldDef, fileName: cstring) --- + + // Create a height field by loading a previously saved height data + LoadHeightField :: proc(fileName: cstring) -> ^HeightFieldData --- + + /**@}*/ // height_field + + /** + * @addtogroup compound + * @{ + */ + + // Get a child shape of a compound. + GetCompoundChild :: proc(#by_ptr compound: CompoundData, childIndex: c.int) -> ChildShape --- + + // Query a compound shape for children that overlap an AABB. + QueryCompound :: proc(#by_ptr compound: CompoundData, aabb: AABB, fcn: CompoundQueryFcn, ctx: rawptr) --- + + // Access a child capsule by index. + GetCompoundCapsule :: proc(#by_ptr compound: CompoundData, index: c.int) -> CompoundCapsule --- + + // Access a child hull by index. + GetCompoundHull :: proc(#by_ptr compound: CompoundData, index: c.int) -> CompoundHull --- + + // Access a child mesh by index. + GetCompoundMesh :: proc(#by_ptr compound: CompoundData, index: c.int) -> CompoundMesh --- + + // Access a child sphere by index. + GetCompoundSphere :: proc(#by_ptr compound: CompoundData, index: c.int) -> CompoundSphere --- + + // Access the compound material array. + GetCompoundMaterials :: proc(#by_ptr compound: CompoundData) -> ^SurfaceMaterial --- + + // Create a compound shape. All input data in the definition is cloned into the resulting compound. + CreateCompound :: proc(#by_ptr def: CompoundDef) -> ^CompoundData --- + + // Destroy a compound shape. + DestroyCompound :: proc(compound: ^CompoundData) --- + + // If bytes is null then this returns the number of required bytes. This clones all the + // data into the bytes buffer. This is expected to run offline or asynchronously. + // This mutates the compound to nullify pointers, leaving the compound in an unusable state. + ConvertCompoundToBytes :: proc(compound: ^CompoundData) -> [^]u8 --- + + // Convert bytes to compound. This does not clone. The bytes must remain in scope while the + // compound is used. This is done to improve run-time performance and allow for instancing. + // The bytes are mutated to fixup pointers. + ConvertBytesToCompound :: proc(bytes: [^]u8, byteCount: c.int) -> ^CompoundData --- + + /**@}*/ // compound + + /** + * @addtogroup geometry + * @{ + */ + + // Compute mass properties of a sphere + ComputeSphereMass :: proc(#by_ptr shape: Sphere, density: f32) -> MassData --- + + // Compute mass properties of a capsule + ComputeCapsuleMass :: proc(#by_ptr shape: Capsule, density: f32) -> MassData --- + + // Compute mass properties of a hull + ComputeHullMass :: proc(#by_ptr shape: HullData, density: f32) -> MassData --- + + // Compute the bounding box of a transformed sphere + ComputeSphereAABB :: proc(#by_ptr shape: Sphere, transform: Transform) -> AABB --- + + // Compute the bounding box of a transformed capsule + ComputeCapsuleAABB :: proc(#by_ptr shape: Capsule, transform: Transform) -> AABB --- + + // Compute the bounding box of a transformed hull + ComputeHullAABB :: proc(#by_ptr shape: HullData, transform: Transform) -> AABB --- + + // Compute the bounding box of a transformed mesh. Scale may be non-uniform and have negative components. + ComputeMeshAABB :: proc(#by_ptr shape: MeshData, transform: Transform, scale: Vec3) -> AABB --- + + // Compute the bounding box of a transformed height-field + ComputeHeightFieldAABB :: proc(#by_ptr shape: HeightFieldData, transform: Transform) -> AABB --- + + // Compute the bounding box of a compound + ComputeCompoundAABB :: proc(#by_ptr shape: CompoundData, transform: Transform) -> AABB --- + + /**@}*/ // geometry + + /** + * @addtogroup query + * @{ + */ + + // Use this to ensure your ray cast input is valid and avoid internal assertions. + IsValidRay :: proc(#by_ptr input: RayCastInput) -> bool --- + + // Overlap shape versus capsule + OverlapCapsule :: proc(#by_ptr shape: Capsule, shapeTransform: Transform, #by_ptr proxy: ShapeProxy) -> bool --- + + // Overlap shape versus compound + OverlapCompound :: proc(#by_ptr shape: CompoundData, shapeTransform: Transform, #by_ptr proxy: ShapeProxy) -> bool --- + + // Overlap shape versus height field + OverlapHeightField :: proc(#by_ptr shape: HeightFieldData, shapeTransform: Transform, #by_ptr proxy: ShapeProxy) -> bool --- + + // Overlap shape versus hull + OverlapHull :: proc(#by_ptr shape: HullData, shapeTransform: Transform, #by_ptr proxy: ShapeProxy) -> bool --- + + // Overlap shape versus mesh + OverlapMesh :: proc(#by_ptr shape: Mesh, shapeTransform: Transform, #by_ptr proxy: ShapeProxy) -> bool --- + + // Overlap shape versus sphere + OverlapSphere :: proc(#by_ptr shape: Sphere, shapeTransform: Transform, #by_ptr proxy: ShapeProxy) -> bool --- + + // Ray cast versus sphere in local space. A zero length ray is a point query. Initial overlap + // reports a hit at the ray origin with zero fraction and zero normal. + RayCastSphere :: proc(#by_ptr shape: Sphere, #by_ptr input: RayCastInput) -> CastOutput --- + + // Ray cast versus a hollow sphere shell in local space. Unlike the solid sphere a ray starting + // inside is not an overlap: it passes through and hits the far wall. + RayCastHollowSphere :: proc(#by_ptr shape: Sphere, #by_ptr input: RayCastInput) -> CastOutput --- + + // Ray cast versus capsule in local space. A zero length ray is a point query. Initial overlap + // reports a hit at the ray origin with zero fraction and zero normal. + RayCastCapsule :: proc(#by_ptr shape: Capsule, #by_ptr input: RayCastInput) -> CastOutput --- + + // Ray cast versus compound in local space. A zero length ray is a point query. Initial overlap + // with a child reports a hit at the ray origin with zero fraction and zero normal. + RayCastCompound :: proc(#by_ptr shape: CompoundData, #by_ptr input: RayCastInput) -> CastOutput --- + + // Ray cast versus hull shape in local space. A zero length ray is a point query. Initial overlap + // reports a hit at the ray origin with zero fraction and zero normal. + RayCastHull :: proc(#by_ptr shape: HullData, #by_ptr input: RayCastInput) -> CastOutput --- + + // Ray cast versus mesh in local space. A thin surface with no interior, so there is no overlap case. + RayCastMesh :: proc(#by_ptr shape: Mesh, #by_ptr input: RayCastInput) -> CastOutput --- + + // Ray cast versus height field in local space. A thin surface with no interior, so there is no overlap case. + RayCastHeightField :: proc(#by_ptr shape: HeightFieldData, #by_ptr input: RayCastInput) -> CastOutput --- + + // Shape cast versus a sphere. Initial overlap is treated as a miss. + ShapeCastSphere :: proc(#by_ptr shape: Sphere, #by_ptr input: ShapeCastInput) -> CastOutput --- + + // Shape cast versus a capsule. Initial overlap is treated as a miss. + ShapeCastCapsule :: proc(#by_ptr shape: Capsule, #by_ptr input: ShapeCastInput) -> CastOutput --- + + // Shape cast versus compound. Initial overlap is treated as a miss. + ShapeCastCompound :: proc(#by_ptr shape: CompoundData, #by_ptr input: ShapeCastInput) -> CastOutput --- + + // Shape cast versus a hull. Initial overlap is treated as a miss. + ShapeCastHull :: proc(#by_ptr shape: HullData, #by_ptr input: ShapeCastInput) -> CastOutput --- + + // Shape cast versus a mesh. Initial overlap is treated as a miss. + ShapeCastMesh :: proc(#by_ptr shape: Mesh, #by_ptr input: ShapeCastInput) -> CastOutput --- + + // Shape cast versus a height field. Initial overlap is treated as a miss. + ShapeCastHeightField :: proc(#by_ptr shape: HeightFieldData, #by_ptr input: ShapeCastInput) -> CastOutput --- + + + // Query a mesh for triangles overlapping a bounding box in local space. May have false positives. Useful for debug draw. + // @param mesh the mesh to query, includes scale + // @param bounds the bounding box in local space + // @param fcn a user function to collect triangles + // @param context the context sent to the user function. + QueryMesh :: proc(#by_ptr mesh: Mesh, bounds: AABB, fcn: MeshQueryFcn, ctx: rawptr) --- + + // Query a height field for triangles overlapping a bounding box in local space. May have false positives. Useful for debug draw. + // @param heightField the height field to query + // @param bounds the bounding box in local space + // @param fcn a user function to collect triangles + // @param context the context sent to the user function. + QueryHeightField :: proc(#by_ptr heightField: HeightFieldData, bounds: AABB, fcn: MeshQueryFcn, ctx: rawptr) --- + + // Compute the closest points between two shapes represented as point clouds. + // SimplexCache cache is input/output. On the first call set SimplexCache.count to zero. + // The query runs in frame A, so the witness points and normal are returned in frame A. + // The underlying GJK algorithm may be debugged by passing in debug simplexes and capacity. You may pass in NULL and 0 for these. + ShapeDistance :: proc(#by_ptr input: DistanceInput, cache: ^SimplexCache, simplexes: [^]Simplex, simplexCapacity: c.int) -> DistanceOutput --- + + // Perform a linear shape cast of shape B moving and shape A fixed. Determines the hit point, normal, and translation fraction. + // The query runs in frame A, so the hit point and normal are returned in frame A. Initially touching shapes are a miss. + ShapeCast :: proc(#by_ptr input: ShapeCastPairInput) -> CastOutput --- + + // Evaluate the transform sweep at a specific time. + GetSweepTransform :: proc(#by_ptr sweep: Sweep, time: f32) -> Transform --- + + // Compute the upper bound on time before two shapes penetrate. Time is represented as + // a fraction between [0,tMax]. This uses a swept separating axis and may miss some intermediate, + // non-tunneling collisions. If you change the time interval, you should call this function + // again. + TimeOfImpact :: proc(#by_ptr input: TOIInput) -> TOIOutput --- + + /**@}*/ // query + + /** + * @addtogroup collision + * @{ + */ + + // Collide two spheres. + CollideSpheres :: proc(manifold: ^LocalManifold, capacity: c.int, #by_ptr sphereA, sphereB: Sphere, transformBtoA: Transform) --- + + // Collide a capsule and a sphere. + CollideCapsuleAndSphere :: proc(manifold: ^LocalManifold, capacity: c.int, #by_ptr capsuleA: Capsule, #by_ptr sphereB: Sphere, transformBtoA: Transform) --- + + // Collide a hull and a sphere. + CollideHullAndSphere :: proc(manifold: ^LocalManifold, capacity: c.int, #by_ptr hullA: HullData, #by_ptr sphereB: Sphere, transformBtoA: Transform, cache: ^SimplexCache) --- + + // Collide two capsules. + CollideCapsules :: proc(manifold: ^LocalManifold, capacity: c.int, #by_ptr capsuleA, capsuleB: Capsule, transformBtoA: Transform) --- + + // Collide a hull and a capsule. + CollideHullAndCapsule :: proc(manifold: ^LocalManifold, capacity: c.int, #by_ptr hullA: HullData, #by_ptr capsuleB: Capsule, transformBtoA: Transform, cache: ^SimplexCache) --- + + // Collide two hulls. + CollideHulls :: proc(manifold: ^LocalManifold, capacity: c.int, #by_ptr hullA: HullData, #by_ptr hullB: HullData, transformBtoA: Transform, cache: ^SATCache) --- + + // Collide a capsule and a triangle. + CollideCapsuleAndTriangle :: proc(manifold: ^LocalManifold, capacity: c.int, #by_ptr capsuleA: Capsule, #by_ptr triangleB: [3]Vec3, cache: ^SimplexCache) --- + + // Collide a hull and a triangle. + CollideHullAndTriangle :: proc(manifold: ^LocalManifold, capacity: c.int, #by_ptr hullA: HullData, v1, v2, v3: Vec3, triangleFlags: c.int, cache: ^SATCache) --- + + // Collide a sphere and a triangle. + CollideSphereAndTriangle :: proc(manifold: ^LocalManifold, capacity: c.int, #by_ptr sphereA: Sphere, #by_ptr triangleB: [3]Vec3) --- + + /**@}*/ // collision + + /** + * @addtogroup character + * @{ + */ + + // Solves the position of a mover that satisfies the given collision planes. + // @param targetDelta the desired translation from the position used to generate the collision planes + // @param planes the collision planes + // @param count the number of collision planes + SolvePlanes :: proc(targetDelta: Vec3, planes: [^]CollisionPlane, count: c.int) -> PlaneSolverResult --- + + // Clips the velocity against the given collision planes. Planes with zero push or clipVelocity + // set to false are skipped. + ClipVector :: proc(vector: Vec3, planes: [^]CollisionPlane, count: c.int) -> Vec3 --- + + /**@}*/ // character +} + +// Get proxy user data +@(require_results) +DynamicTree_GetUserData :: proc "c" (#by_ptr tree: DynamicTree, proxyId: c.int) -> u64 { + return tree.nodes[proxyId].userData +} + +// Get the AABB of a proxy +@(require_results) +DynamicTree_GetAABB :: proc "c" (#by_ptr tree: DynamicTree, proxyId: c.int) -> AABB { + return tree.nodes[proxyId].aabb +} + + +// Get read only hull vertices. +@(require_results) +GetHullVertices :: proc "c" (hull: ^HullData) -> Maybe(^HullVertex) { + if hull.vertexOffset == 0 { + return nil + } + + return (^HullVertex)(uintptr(hull) + uintptr(hull.vertexOffset)) +} + +// Get read only hull points. +@(require_results) +GetHullPoints :: proc "c" (hull: ^HullData) -> Maybe(^Vec3) { + if hull.pointOffset == 0 { + return nil + } + + return (^Vec3)(uintptr(hull) + uintptr(hull.pointOffset)) +} + +// Get read only hull half edges. +@(require_results) +GetHullEdges :: proc "c" (hull: ^HullData) -> Maybe(^HullHalfEdge) { + if hull.edgeOffset == 0 { + return nil + } + + return (^HullHalfEdge)(uintptr(hull) + uintptr(hull.edgeOffset)) +} + +// Get read only hull faces. +@(require_results) +GetHullFaces :: proc "c" (hull: ^HullData) -> Maybe(^HullFace) { + if hull.faceOffset == 0 { + return nil + } + + return (^HullFace)(uintptr(hull) + uintptr(hull.faceOffset)) +} + +// Get read only hull planes. +@(require_results) +GetHullPlanes :: proc "c" (hull: ^HullData) -> Maybe(^Plane) { + if hull.planeOffset == 0 { + return nil + } + + return (^Plane)(uintptr(hull) + uintptr(hull.planeOffset)) +} + + +// Get read only mesh BVH nodes. +@(require_results) +GetMeshNodes :: proc "c" (mesh: ^MeshData) -> Maybe(^MeshNode) { + if mesh.nodeOffset == 0 { + return nil + } + + return (^MeshNode)(uintptr(mesh) + uintptr(mesh.nodeOffset)) +} + +// Get read only mesh vertices. +@(require_results) +GetMeshVertices :: proc "c" (mesh: ^MeshData) -> Maybe(^Vec3) { + if mesh.vertexOffset == 0 { + return nil + } + + return (^Vec3)(uintptr(mesh) + uintptr(mesh.vertexOffset)) +} + +// Get read only mesh triangles. +@(require_results) +GetMeshTriangles :: proc "c" (mesh: ^MeshData) -> Maybe(^MeshTriangle) { + if mesh.triangleOffset == 0 { + return nil + } + + return (^MeshTriangle)(uintptr(mesh) + uintptr(mesh.triangleOffset)) +} + +// Get read only mesh materials. The count is equal to the triangle count. +@(require_results) +GetMeshMaterialIndices :: proc "c" (mesh: ^MeshData) -> Maybe([^]u8) { + if mesh.materialOffset == 0 { + return nil + } + + return ([^]u8)(uintptr(mesh) + uintptr(mesh.materialOffset)) +} + +// Get read only mesh flags. The count is equal to the triangle count. +@(require_results) +GetMeshFlags :: proc "c" (mesh: ^MeshData) -> [^]u8 { + if mesh.flagsOffset == 0 { + return nil + } + + return ([^]u8)(uintptr(mesh) + uintptr(mesh.flagsOffset)) +} + + +// Get read only compressed heights. One u16 per grid point. +@(require_results) +GetHeightFieldCompressedHeights :: proc "c" (hf: ^HeightFieldData) -> [^]u16 { + if hf.heightsOffset == 0 { + return nil + } + + return ([^]u16)(uintptr(hf) + uintptr(hf.heightsOffset)) +} + +// Get read only material indices. One u8 per cell. +@(require_results) +GetHeightFieldMaterialIndices :: proc "c" (hf: ^HeightFieldData) -> [^]u8 { + if hf.materialOffset == 0 { + return nil + } + + return ([^]u8)(uintptr(hf) + uintptr(hf.materialOffset)) +} + +// Get read only triangle flags. One u8 per triangle. +@(require_results) +GetHeightFieldFlags :: proc "c" (hf: ^HeightFieldData) -> [^]u8 { + if hf.flagsOffset == 0 { + return nil + } + + return ([^]u8)(uintptr(hf) + uintptr(hf.flagsOffset)) +} diff --git a/vendor/box3d/box3d_constants.odin b/vendor/box3d/box3d_constants.odin new file mode 100644 index 000000000..3cc8233ab --- /dev/null +++ b/vendor/box3d/box3d_constants.odin @@ -0,0 +1,140 @@ +package vendor_box3d + + +@(link_prefix="b3", default_calling_convention="c") +foreign lib { + // Box3D bases all length units on meters, but you may need different units for your game. + // You can set this value to use different units. This should be done at application startup + // and only modified once. Default value is 1. + // @warning This must be modified before any calls to Box3D + SetLengthUnitsPerMeter :: proc(lengthUnits: f32) --- + + // Get the current length units per meter. + GetLengthUnitsPerMeter :: proc() -> f32 --- + + // Set the threshold for logging stalls. + SetStallThreshold :: proc(seconds: f32) --- + + // Get the threshold for logging stalls. + GetStallThreshold :: proc() -> f32 --- +} + +// Used to detect bad values. In float mode positions greater than about 16km have precision +// problems, so 100km is a safe limit. Large world mode keeps coordinates accurate much farther +// from the origin, so the sanity limit widens to keep valid far-field positions from tripping it. +@(require_results) +HUGE :: #force_inline proc "c" () -> f32 { + when DOUBLE_PRECISION { + return 1.0e9 * GetLengthUnitsPerMeter() + } else { + return 1.0e5 * GetLengthUnitsPerMeter() + } +} + +// Maximum parallel workers. Used for some fixed size arrays. +MAX_WORKERS :: 32 + +// Maximum number of tasks queued per world step. b3EnqueueTaskCallback will never be called +// more than this per world step. This is related to B3_MAX_WORKERS. With 32 workers, +// the maximum observed task count is 130. This allows an external task system to use a fixed +// size array for Box3D task, which may help with creating stable user task pointers. +MAX_TASKS :: 256 + +// Maximum number of colors in the constraint graph. Constraints that cannot +// find a color are added to the overflow set which are solved single-threaded. +// The compound barrel benchmark has minor overflow with 24 colors +GRAPH_COLOR_COUNT :: 24 + +// Number of contact point buckets for counting the number of contact points per +// shape contact pair. This is just for reporting and doesn't affect simulation. +CONTACT_MANIFOLD_COUNT_BUCKETS :: 8 + +// A small length used as a collision and constraint tolerance. Usually it is +// chosen to be numerically significant, but visually insignificant. In meters. +// @warning modifying this can have a significant impact on stability +@(require_results) +LINEAR_SLOP :: #force_inline proc "c" () -> f32 { + return 0.005 * GetLengthUnitsPerMeter() +} + +@(require_results) +MIN_CAPSULE_LENGTH :: #force_inline proc "c" () -> f32 { + return LINEAR_SLOP() +} + +// The distance between shapes where they are considered overlapped. This is needed +// because GJK may return small positive values for overlapped shapes in degenerate +// configurations. +@(require_results) +OVERLAP_SLOP :: #force_inline proc "c" () -> f32 { + return 0.1 * LINEAR_SLOP() +} + +// Maximum number of simultaneous worlds that can be allocated +MAX_WORLDS :: 128 + +// The maximum rotation of a body per time step. This limit is very large and is used +// to prevent numerical problems. You shouldn't need to adjust this. +// @warning increasing this to 0.5f * B3_PI or greater will break continuous collision. +MAX_ROTATION :: 0.25 * PI + +// @warning modifying this can have a significant impact on performance and stability +@(require_results) +SPECULATIVE_DISTANCE :: #force_inline proc "c" () -> f32 { + return 4.0 * LINEAR_SLOP() +} + +// The rest offset is used for mesh contact to reduce ghost collisions and assist with CCD. +// The rest offset adjusts the contact point separation value, making the solver push the shapes +// apart by this distance. +// Must be at least B3_LINEAR_SLOP and less than B3_SPECULATIVE_DISTANCE. +@(require_results) +MESH_REST_OFFSET :: #force_inline proc "c" () -> f32 { + return 1.0 * LINEAR_SLOP() +} + +// The default contact recycling distance. +@(require_results) +CONTACT_RECYCLE_DISTANCE :: #force_inline proc "c" () -> f32 { + return 10.0 * LINEAR_SLOP() +} + +// The default contact recycling world angle threshold. For performance this value +// is cos(angle/2)^2. This value corresponds to 10 degrees. +CONTACT_RECYCLE_ANGULAR_DISTANCE :: 0.99240388 + +// This is used to fatten AABBs in the dynamic tree. This allows proxies +// to move by a small amount without triggering a tree adjustment. This is in meters. +// @warning modifying this can have a significant impact on performance +@(require_results) +MAX_AABB_MARGIN :: #force_inline proc "c" () -> f32 { + return 0.05 * GetLengthUnitsPerMeter() +} + +// Per-shape AABB margin is a fraction of the shape extent (capped by B3_MAX_AABB_MARGIN). +// Small shapes get small margins; large shapes are clamped to the cap. +AABB_MARGIN_FRACTION :: 0.125 + +// The time that a body must be still before it will go to sleep. In seconds. +TIME_TO_SLEEP :: 0.5 + +// Maximum length of the body name. Can be 0 if you don't need names. +// Note: this gates recording capability. +BODY_NAME_LENGTH :: 18 + +// Maximum length of the shape name. Can be 0 if you don't need names. +// Note: this gates recording capability. +// todo waiting on this because it breaks existing recordings +SHAPE_NAME_LENGTH :: 18 + +// The maximum number of contact points between two touching shapes. +MAX_MANIFOLD_POINTS :: 4 + +// The maximum number points to use for shape cast proxies (swept point cloud). +MAX_SHAPE_CAST_POINTS :: 64 + +// These generous limits allow for easy hashing. See b3ShapePairKey. +SHAPE_POWER :: 22 +CHILD_POWER :: 64 - 2 * SHAPE_POWER +MAX_SHAPES :: 1 << SHAPE_POWER +MAX_CHILD_SHAPES :: 1 << CHILD_POWER \ No newline at end of file diff --git a/vendor/box3d/box3d_id.odin b/vendor/box3d/box3d_id.odin new file mode 100644 index 000000000..69453c4ba --- /dev/null +++ b/vendor/box3d/box3d_id.odin @@ -0,0 +1,129 @@ +package vendor_box3d + +/// World id references a world instance. This should be treated as an opaque handle. +WorldId :: struct { + index1: u16, + generation: u16, +} + +/// Body id references a body instance. This should be treated as an opaque handle. +BodyId :: struct { + index1: i32, + world0: u16, + generation: u16, +} + +/// Shape id references a shape instance. This should be treated as an opaque handle. +ShapeId :: struct { + index1: i32, + world0: u16, + generation: u16, +} + +/// Joint id references a joint instance. This should be treated as an opaque handle. +JointId :: struct { + index1: i32, + world0: u16, + generation: u16, +} + +/// Contact id references a contact instance. This should be treated as an opaque handle. +ContactId :: struct { + index1: i32, + world0: u16, + _: i16, + generation: u32, +} + + +/// Use these to make your identifiers null. +/// You may also use zero initialization to get null. +nullWorldId :: WorldId{} +nullBodyId :: BodyId{} +nullShapeId :: ShapeId{} +nullJointId :: JointId{} +nullContactId :: ContactId{} + +/// Macro to determine if any id is null. +@(require_results) +IS_NULL :: #force_inline proc "c" (id: $T) -> bool { + return id.index1 == 0 +} + +/// Macro to determine if any id is non-null. +@(require_results) +IS_NON_NULL :: #force_inline proc "c" (id: $T) -> bool { + return id.index1 != 0 +} + +/// Compare two ids for equality. Doesn't work for b3WorldId. Don't mix types. +@(require_results) +ID_EQUALS :: #force_inline proc "c" (id1, id2: $T) -> bool { + return id1.index1 == id2.index1 && id1.world0 == id2.world0 && id1.generation == id2.generation +} + +/// Store a world id into a u32. +@(require_results) +StoreWorldId :: #force_inline proc "c" (id: WorldId) -> u32 { + return u32(id.index1) << 16 | u32(id.generation) +} + +/// Load a u32 into a world id. +@(require_results) +LoadWorldId :: #force_inline proc "c" (x: u32) -> WorldId { + return WorldId{u16(x >> 16), u16(x)} +} + +/// Store a body id into a u64. +@(require_results) +StoreBodyId :: #force_inline proc "c" (id: BodyId) -> u64 { + return (u64(id.index1) << 32) | u64(id.world0) << 16 | u64(id.generation) +} + +/// Load a u64 into a body id. +@(require_results) +LoadBodyId :: #force_inline proc "c" (x: u64) -> BodyId { + return BodyId{i32(x >> 32), u16(x >> 16), u16(x)} +} + +/// Store a shape id into a u64. +@(require_results) +StoreShapeId :: #force_inline proc "c" (id: ShapeId) -> u64 { + return (u64(id.index1) << 32) | u64(id.world0) << 16 | u64(id.generation) +} + +/// Load a u64 into a shape id. +@(require_results) +LoadShapeId :: #force_inline proc "c" (x: u64) -> ShapeId { + return ShapeId{i32(x >> 32), u16(x >> 16), u16(x)} +} + +/// Store a joint id into a u64. +@(require_results) +StoreJointId :: #force_inline proc "c" (id: JointId) -> u64 { + return (u64(id.index1) << 32) | u64(id.world0) << 16 | u64(id.generation) +} + +/// Load a u64 into a joint id. +@(require_results) +LoadJointId :: #force_inline proc "c" (x: u64) -> JointId { + return JointId{i32(x >> 32), u16(x >> 16), u16(x)} +} + +/// Store a contact id into three uint32 values +@(require_results) +StoreContactId :: #force_inline proc "c" (id: ContactId) -> (values: [3]u32) { + values[0] = u32(id.index1) + values[1] = u32(id.world0) + values[2] = u32(id.generation) + return +} + +/// Load a contact id from three uint32 values. +@(require_results) +LoadContactId :: #force_inline proc "c" (values: [3]u32) -> (id: ContactId) { + id.index1 = i32(values[0]) + id.world0 = u16(values[1]) + id.generation = u32(values[2]) + return +} \ No newline at end of file diff --git a/vendor/box3d/box3d_math.odin b/vendor/box3d/box3d_math.odin new file mode 100644 index 000000000..ee7ac4528 --- /dev/null +++ b/vendor/box3d/box3d_math.odin @@ -0,0 +1,747 @@ +package vendor_box3d + +import "base:builtin" +import "core:math" +import "core:math/linalg" + +DOUBLE_PRECISION :: false + +// https://en.wikipedia.org/wiki/Pi +PI :: math.PI + +// Convenience constant to convert from degrees to radians. +DEG_TO_RAD :: math.RAD_PER_DEG +// Convenience constant to convert from radians to degrees. +RAD_TO_DEG :: math.DEG_PER_RAD + + +// Minimum scale used for scaling collision meshes, etc. +MIN_SCALE :: 0.01 + +Vec2 :: [2]f32 +Vec3 :: [3]f32 + +// Cosine and sine pair. +// This uses a custom implementation designed for cross-platform determinism. +CosSin :: struct { + cosine: f32, + sine: f32, +} + +Quat :: quaternion128 + +Transform :: struct { + p: Vec3, + q: Quat, +} + +Pos :: [3]f64 when DOUBLE_PRECISION else [3]f32 + +WorldTransform :: struct { + p: Pos, + q: Quat, +} + +Matrix3 :: matrix[3, 3]f32 + +// Axis aligned bounding box. +AABB :: struct { + lowerBound: Vec3, + upperBound: Vec3, +} + +// A plane. +// separation = dot(normal, point) - offset +Plane :: struct { + normal: Vec3, + offset: f32, +} + +Vec3_zero :: Vec3{0.0, 0.0, 0.0} +Vec3_one :: Vec3{1.0, 1.0, 1.0} +Vec3_axisX :: Vec3{1.0, 0.0, 0.0} +Vec3_axisY :: Vec3{0.0, 1.0, 0.0} +Vec3_axisZ :: Vec3{0.0, 0.0, 1.0} +Quat_identity :: Quat(1) +Transform_identity :: Transform{p={0, 0, 0}, q=1} +Mat3_zero :: Matrix3(0) +Mat3_identity :: Matrix3(1) + +Pos_zero :: Pos{0.0, 0.0, 0.0} +WorldTransform_identity :: WorldTransform{p={0, 0, 0}, q=1} + + + +// @return the minimum of two integers. + +MinInt :: builtin.min +MaxInt :: builtin.max +ClampInt :: builtin.clamp + +// The closest points between to segments or infinite lines. +SegmentDistanceResult :: struct { + point1: Vec3, + fraction1: f32, + point2: Vec3, + fraction2: f32, +} + + +@(link_prefix="b3", default_calling_convention="c", require_results) +foreign lib { + // @return is this float valid (finite and not NaN). + IsValidFloat :: proc(a: f32) -> bool --- + + + // Compute an approximate arctangent in the range [-pi, pi] + // This is hand coded for cross-platform determinism. The atan2f + // function in the standard library is not cross-platform deterministic. + // Accurate to around 0.0023 degrees. + Atan2 :: proc(y, x: f32) -> f32 --- + + // Compute the cosine and sine of an angle in radians. Implemented + // for cross-platform determinism. + ComputeCosSin :: proc(radians: f32) -> CosSin --- + + // Compute the closest point on the segment a-b to the target q. + PointToSegmentDistance :: proc(a, b: Vec3, q: Vec3) -> Vec3 --- + + // Compute the closest points on two infinite lines. + LineDistance :: proc(p1, d1: Vec3, p2, d2: Vec3) -> SegmentDistanceResult --- + + // Compute the closest points on two line segments. + SegmentDistance :: proc(p1, q1: Vec3, p2, q2: Vec3) -> SegmentDistanceResult --- + + // Is this a valid vector? Not NaN or infinity. + IsValidVec3 :: proc(a: Vec3) -> bool --- + + // Is this a valid quaternion? Not NaN or infinity. Is normalized. + IsValidQuat :: proc(q: Quat) -> bool --- + + // Is this a valid transform? Not NaN or infinity. Is normalized. + IsValidTransform :: proc(a: Transform) -> bool --- + + // Is this a valid matrix? Not NaN or infinity. + IsValidMatrix3 :: proc(a: Matrix3) -> bool --- + + // Is this a valid bounding box? Not Nan or infinity. Upper bound greater than or equal to lower bound. + IsValidAABB :: proc(a: AABB) -> bool --- + + // Is this AABB reasonably close to the origin? See B3_HUGE. + IsBoundedAABB :: proc(a: AABB) -> bool --- + + // Is this AABB valid and reasonable? + IsSaneAABB :: proc(a: AABB) -> bool --- + + // Is this a valid plane? Normal is a unit vector. Not Nan or infinity. + IsValidPlane :: proc(a: Plane) -> bool --- + + // Is this a valid world position? Not NaN or infinity. + IsValidPosition :: proc(p: Pos) -> bool --- + + // Is this a valid world transform? Not NaN or infinity. Rotation is normalized. + IsValidWorldTransform :: proc(t: WorldTransform) -> bool --- + + // Get the inertia tensor of an offset point. + // https://en.wikipedia.org/wiki/Parallel_axis_theorem + Steiner :: proc(mass: f32, origin: Vec3) -> Matrix3 --- + + // Extract a quaternion from a rotation matrix. + MakeQuatFromMatrix :: proc(#by_ptr m: Matrix3) -> Quat --- + + // Find a quaternion that rotates one vector to another. + ComputeQuatBetweenUnitVectors :: proc(v1, v2: Vec3) -> Quat --- + + + +} + +AbsFloat :: builtin.abs +MinFloat :: builtin.min +MaxFloat :: builtin.max +ClampFloat :: builtin.clamp +LerpFloat :: math.lerp + +// Convert any angle into the range [-pi, pi]. +@(require_results) +UnwindAngle :: #force_inline proc "c" (radians: f32) -> f32 { + // Assuming this is deterministic + return math.remainder(radians, 2.0 * PI) +} + +// Vector dot product. +Dot :: linalg.dot +Length :: linalg.length +LengthSquared :: linalg.length2 + + +// Distance between two points. +@(require_results) +Distance :: #force_inline proc "c" (a, b: Vec3) -> f32 { + dv := b - a + return Length(dv) +} + +// Squared distance between two points. +@(require_results) +DistanceSquared :: #force_inline proc "c" (a, b: Vec3) -> f32 { + dv := b - a + return LengthSquared(dv) +} + +FLT_EPSILON :: 1.1920928955078125e-07 /* 0x0.000002p0 */ + + +// Normalize a vector. Returns a zero vector if the input vector is very small. +@(require_results) +Normalize :: proc "c" (a: Vec3) -> Vec3 { + lengthSquared := a.x * a.x + a.y * a.y + a.z * a.z + + if lengthSquared > 1000.0 * min(f32) { + s := 1.0 / math.sqrt(lengthSquared) + return Vec3{ s * a.x, s * a.y, s * a.z } + } + + return Vec3{0.0, 0.0, 0.0} +} + +// Normalize a vector and return the length. Returns a zero vector +// if the input is very small. +@(require_results) +GetLengthAndNormalize :: proc "c" (a: Vec3) -> (length: f32, n: Vec3) { + length = Length(a) + if length < FLT_EPSILON { + return + } + + invLength := 1.0 / length + n = {invLength * a.x, invLength * a.y, invLength * a.z} + return +} + +// Get a unit vector that is perpendicular to the supplied vector. +@(require_results) +Perp :: proc "c" (a: Vec3) -> Vec3 { + // Suppose vector a has all equal components and is a unit vector: a = (s, s, s) + // Then 3*s*s = 1, s = sqrt(1/3) = 0.57735. This means that at least one component + // of a unit vector must be greater or equal to 0.57735. + p: Vec3 + if a.x < -0.5 || 0.5 < a.x { + p = {a.y, -a.x, 0.0} + } else { + p = {0.0, a.z, -a.y} + } + + return Normalize(p) +} + +// Is a vector normalized? In other words, does it have unit length? +@(require_results) +IsNormalized :: proc "c" (a: Vec3) -> bool { + aa := Dot(a, a) + return AbsFloat(1.0 - aa) < 100.0 * FLT_EPSILON +} +// https://en.wikipedia.org/wiki/Cross_product +Cross :: linalg.cross + +// Linearly interpolate between two vectors. +Lerp :: linalg.lerp + +// Blend two vectors: s * a + t * b +@(require_results) +Blend2 :: proc "c" (s: f32, a: Vec3, t: f32, b: Vec3) -> Vec3 { + return { + s * a.x + t * b.x, + s * a.y + t * b.y, + s * a.z + t * b.z, + } +} + +// Component-wise absolute value. +Abs :: linalg.abs + +// Component-wise -1 or 1 (1 if zero). +Sign :: linalg.sign + +// Component-wise minimum value. +Min :: linalg.min + +// Component-wise maximum value. +Max :: linalg.max + +// Component-wise clamped value. +Clamp :: linalg.clamp + +// Create a safe scaling value for scaling collision. This allows +// negative scale, but keeps scale sufficiently far from zero. +@(require_results) +SafeScale :: proc "c" (a: Vec3) -> Vec3 { + absScale := Abs(a) + minScale := Vec3{MIN_SCALE, MIN_SCALE, MIN_SCALE} + safeScale := Sign(a) * Max(absScale, minScale) + return safeScale +} + +// Does the supplied quaternion have unit length? +@(require_results) +IsNormalizedQuat :: proc "c" (q: Quat) -> bool { + qq := q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w + return 1.0 - 20.0 * FLT_EPSILON < qq && qq < 1.0 + 20.0 * FLT_EPSILON +} + +// Rotate a vector. +@(require_results) +RotateVector :: proc "c" (q: Quat, v: Vec3) -> Vec3 { + // v + 2 * cross(q.xyz, cross(q.xyz, v) + q.w * v) + // B3_ASSERT(IsNormalizedQuat(q)); + t1 := Cross(q.xyz, v) + t2 := t1 * q.w + v + t3 := Cross(q.xyz, t2) + return v * 2.0 + t3 +} + +// Inverse rotate a vector. +@(require_results) +InvRotateVector :: proc "c" (q: Quat, v: Vec3) -> Vec3 { + // v + 2 * cross(q.xyz, cross(q.xyz, v) - q.w * v) + // B3_ASSERT(IsNormalizedQuat(q)); + t1 := Cross(q.xyz, v) + t2 := t1 * q.w - v + t3 := Cross(q.xyz, t2) + return v * 2.0 + t3 +} + +// Compute dot product of two quaternions. Useful for polarity tests. +@(require_results) +DotQuat :: linalg.dot + +// Multiply two quaternions. +@(require_results) +MulQuat :: proc "c" (q1, q2: Quat) -> Quat { + return q1 * q2 +} + +// Compute a relative quaternion. +// inv(q1) * q2 +@(require_results) +InvMulQuat :: proc "c" (q1, q2: Quat) -> Quat { + t1 := Cross(q2.xyz, q1.xyz) + t2 := t1 * q1.w + q2.xyz + t3 := t2 * q2.w - q1.xyz + return quaternion(x=t3.x, y=t3.y, z=t3.z, w=q1.w * q2.w + Dot(q1.xyz, q2.xyz)) +} + +// Quaternion conjugate (cheap inverse). +Conjugate :: builtin.conj + +// Component-wise quaternion negation. +@(require_results) +NegateQuat :: proc "c" (q: Quat) -> Quat { + return -q +} + +// Normalize a quaternion. +@(require_results) +NormalizeQuat :: proc "c" (q: Quat) -> Quat { + lengthSq := DotQuat(q, q) + if lengthSq > 1000.0 * min(f32) { + s := 1.0 / math.sqrt(lengthSq) + return Quat(s) * q + } + + return Quat_identity +} + +// Make a quaternion that is equivalent to rotating around an axis by a specified angle. +@(require_results) +MakeQuatFromAxisAngle :: proc "c" (axis: Vec3, radians: f32) -> Quat { + ASSERT(IsNormalized(axis)) + cs := ComputeCosSin(0.5 * radians) + return quaternion(x=cs.sine * axis.x, y=cs.sine * axis.y, z=cs.sine * axis.z, w=cs.cosine) +} + +// Get the axis and angle from a quaternion. Assumes the quaternion is normalized. +@(require_results) +GetAxisAngle :: proc "c" (q: Quat) -> (radians: f32, axis: Vec3) { + length := math.sqrt(q.x * q.x + q.y * q.y + q.z * q.z) + radians = 2.0 * Atan2(length, q.w) + if length > 0.0 { + invLength := 1.0 / length + axis = {invLength * q.x, invLength * q.y, invLength * q.z} + } + return +} + +// Get the angle for a quaternion in radians +@(require_results) +GetQuatAngle :: proc "c" (q: Quat) -> f32 { + length := math.sqrt(q.x * q.x + q.y * q.y + q.z * q.z) + return 2.0 * Atan2(length, q.w) +} + +// Twist angle around the z-axis, used for twist limit and revolute angle limit +@(require_results) +GetTwistAngle :: proc "c" (q: Quat) -> f32 { + // Account for polarity to keep the twist angle in range. + // This is simpler than asking the user to check polarity or unwinding. + twist := q.w < 0.0 ? Atan2(-q.z, -q.w) : Atan2(q.z, q.w) + twist *= 2.0 + ASSERT(-PI <= twist && twist <= PI) + return twist +} + +// Swing angle used for cone limit +@(require_results) +GetSwingAngle :: proc "c" (q: Quat) -> f32 { + // Polarity should not matter because all terms are squared. + x := math.sqrt(q.z * q.z + q.w * q.w) + y := math.sqrt(q.x * q.x + q.y * q.y) + swing := 2.0 * Atan2(y, x) + ASSERT(0.0 <= swing && swing <= PI) + return swing +} + +// Linearly interpolate and normalize between two quaternions +@(require_results) +NLerp :: proc "c" (q1, q2: Quat, alpha: f32) -> Quat { + VALIDATE(0.0 <= alpha && alpha <= 1.0) + q1 := q1 + if DotQuat(q1, q2) < 0.0 { + q1 = -q1 + } + + q: Quat + q.xyz = Lerp(q1.xyz, q2.xyz, alpha) + q.w = (1.0 - alpha) * q1.w + alpha * q2.w + + return NormalizeQuat(q) +} + +// Multiply two transforms. If the result is applied to a point p local to frame B, +// the transform would first convert p to a point local to frame A, then into a point +// in the world frame. This is useful if frame B is a child of frame A. +@(require_results) +MulTransforms :: proc "c" (a, b: Transform) -> (out: Transform) { + out.p = RotateVector(a.q, b.p) + a.p + out.q = a.q * b.q + return +} + +// Creates a transform that converts a local point in frame B to a local point in frame A. +// This is useful for transforming points between the local spaces of two frames that are +// in world space. +@(require_results) +InvMulTransforms :: #force_inline proc "c" (a, b: Transform) -> (out: Transform) { + out.p = InvRotateVector(a.q, b.p - a.p) + out.q = InvMulQuat(a.q, b.q) + return +} + +// Get the inverse of a transform. +@(require_results) +InvertTransform :: proc "c" (t: Transform) -> (out: Transform) { + out.p = InvRotateVector(t.q, -t.p) + out.q = Conjugate(t.q) + return +} + +// Transform a point. +@(require_results) +TransformPoint :: proc "c" (t: Transform, v: Vec3) -> Vec3 { + rv := RotateVector(t.q, v) + return rv + t.p +} + +// Inverse transform a point. +@(require_results) +InvTransformPoint :: proc "c" (t: Transform, v: Vec3) -> Vec3 { + return InvRotateVector(t.q, v - t.p) +} + +// World position boundary. These cross between the double precision world space at the public +// boundary and the float interior. One set of bodies serves both modes: the typedefs collapse +// the types in float mode and the explicit float casts become no-ops. + +// Convert a vector to a world position. +@(require_results) +ToPos :: proc "c" (v: Vec3) -> Pos { + T :: type_of(Pos{}.x) + return {T(v.x), T(v.y), T(v.z)} +} + +// Lossy conversion of a world position to a float vector. +@(require_results) +ToVec3 :: proc "c" (p: Pos) -> Vec3 { + return {f32(p.x), f32(p.y), f32(p.z)} +} + +// Narrow a world coordinate to float, rounding toward negative infinity. Use with +// RoundUpFloat to build a conservative float box that always contains the double bounds, +// where plain rounding far from the origin could clip. nextafterf is an exact IEEE operation, +// so this is cross-platform deterministic. With large world mode off this is a plain conversion. +@(require_results) +RoundDownFloat :: proc "c" (x: f64) -> f32 { + when DOUBLE_PRECISION { + f := f32(x) + return f64(f) > f64(x) ? math.nextafter(f, -max(f32)) : f + } else { + return f32(x) + } +} + +// Narrow a world coordinate to float, rounding toward positive infinity. +@(require_results) +RoundUpFloat :: proc "c" (x: f32) -> f32 { + when DOUBLE_PRECISION { + f := f32(x) + return f64(f) < f64(x) ? math.nextafter(f, max(f32)) : f + } else { + return f32(x) + } +} + +// p + d +@(require_results) +OffsetPos :: proc "c" (p: Pos, d: Vec3) -> Pos { + T :: type_of(Pos{}.x) + return {p.x + T(d.x), p.y + T(d.y), p.z + T(d.z)} +} + +// World position interpolation for sweeps and sampling. +LerpPosition :: linalg.lerp + +// Transform a local point to a world position. Rotation in float, translation in double. +@(require_results) +TransformWorldPoint :: proc "c" (t: WorldTransform, p: Vec3) -> Pos { + T :: type_of(Pos{}.x) + r := RotateVector(t.q, p) + return {T(t.p.x + r.x), T(t.p.y + r.y), T(t.p.z + r.z)} +} + +// Transform a world position to a local point. One double subtraction, then float. +@(require_results) +InvTransformWorldPoint :: proc "c" (t: WorldTransform, p: Pos) -> Vec3 { + d := Vec3{f32(p.x - t.p.x), f32(p.y - t.p.y), f32(p.z - t.p.z)} + return InvRotateVector(t.q, d) +} + +// Relative transform of frame B in frame A. The narrow phase boundary. +@(require_results) +InvMulWorldTransforms :: proc "c" (A, B: WorldTransform) -> (C: Transform) { + C.q = InvMulQuat(A.q, B.q) + d := Vec3{f32(B.p.x - A.p.x), f32(B.p.y - A.p.y), f32(B.p.z - A.p.z)} + C.p = InvRotateVector(A.q, d) + return +} + +// Compose a world transform with a local transform. +@(require_results) +MulWorldTransforms :: proc "c" (A: WorldTransform, B: Transform) -> (C: WorldTransform) { + T :: type_of(Pos{}.x) + C.q = A.q * B.q + r := RotateVector(A.q, B.p) + C.p = Pos{T(A.p.x + r.x), T(A.p.y + r.y), T(A.p.z + r.z)} + return +} + +// Shift a world transform into the frame of a base position. +@(require_results) +ToRelativeTransform :: proc "c" (t: WorldTransform, base: Pos) -> (r: Transform) { + r.q = t.q + r.p = {f32(t.p.x - base.x), f32(t.p.y - base.y), f32(t.p.z - base.z)} + return +} + +// Promote a float transform to a world transform. Lossless. +@(require_results) +MakeWorldTransform :: proc "c" (t: Transform) -> (w: WorldTransform) { + w.p = ToPos(t.p) + w.q = t.q + return +} + +// Translate a local AABB by a world origin, rounding outward so the float box always contains +// the double box. Far from the origin a plain conversion could clip a shape out of its own box. +// In float mode the origin is float and the rounding is a no-op. +@(require_results) +OffsetAABB :: proc "c" (localBox: AABB, origin: Pos) -> (out: AABB) { + out.lowerBound.x = RoundDownFloat(f64(origin.x + localBox.lowerBound.x)) + out.lowerBound.y = RoundDownFloat(f64(origin.y + localBox.lowerBound.y)) + out.lowerBound.z = RoundDownFloat(f64(origin.z + localBox.lowerBound.z)) + out.upperBound.x = RoundUpFloat(f32(origin.x + localBox.upperBound.x)) + out.upperBound.y = RoundUpFloat(f32(origin.y + localBox.upperBound.y)) + out.upperBound.z = RoundUpFloat(f32(origin.z + localBox.upperBound.z)) + return +} + +// Compute the determinant of a 3-by-3 matrix. +Det :: linalg.determinant + +// Matrix transpose. +Transpose :: linalg.transpose + +// General matrix inverse. +@(require_results) +InvertMatrix :: proc "c" (m: Matrix3) -> Matrix3 { + det := Det(m) + if AbsFloat(det) > 1000.0 * min(f32) { + invDet := 1.0 / det + out: Matrix3 + out[0] = invDet * Cross(m[1], m[2]) + out[1] = invDet * Cross(m[2], m[0]) + out[2] = invDet * Cross(m[0], m[1]) + return Transpose(out) + } + return Mat3_zero +} + +// Solve a matrix equation. +// @return inv(m) * a +@(require_results) +Solve3 :: proc "c" (m: Matrix3, a: Vec3) -> Vec3 { + return InvertMatrix(m) * a +} + +// Invert a matrix. +@(require_results) +InvertT :: proc "c" (m: Matrix3) -> Matrix3 { + det := Det(m) + if AbsFloat(det) > 1000.0 * min(f32) { + invDet := 1.0 / det + out: Matrix3 + out[0] = invDet * Cross(m[1], m[2]) + out[1] = invDet * Cross(m[2], m[0]) + out[2] = invDet * Cross(m[0], m[1]) + return out + } + return Mat3_zero +} + +// Get the component-wise absolute value of a matrix. +@(require_results) +AbsMatrix3 :: proc "c" (m: Matrix3) -> (out: Matrix3) { + out[0] = Abs(m[0]) + out[1] = Abs(m[1]) + out[2] = Abs(m[2]) + return +} + +// Make a matrix from a quaternion. This is useful if you need to +// rotate many vectors. +// The force inline improves the performance of ShapeDistance. +@(require_results) +MakeMatrixFromQuat :: proc "c" (q: Quat) -> (out: Matrix3) { + xx := q.x * q.x + yy := q.y * q.y + zz := q.z * q.z + xy := q.x * q.y + xz := q.x * q.z + xw := q.x * q.w + yz := q.y * q.z + yw := q.y * q.w + zw := q.z * q.w + + out[0] = { 1.0 - 2.0 * (yy + zz), 2.0 * (xy + zw), 2.0 * (xz - yw) } + out[1] = { 2.0 * (xy - zw), 1.0 - 2.0 * (xx + zz), 2.0 * (yz + xw) } + out[2] = { 2.0 * (xz + yw), 2.0 * (yz - xw), 1.0 - 2.0 * (xx + yy) } + return +} + +// Get the AABB of a point cloud. +@(require_results) +MakeAABB :: proc "c" (points: []Vec3, radius: f32) -> (a: AABB) #no_bounds_check { + ASSERT(len(points) > 0) + a = AABB{points[0], points[0]} + for i in 1.. bool { + switch { + case a.lowerBound.x > b.lowerBound.x || b.upperBound.x > a.upperBound.x: + return false + case a.lowerBound.y > b.lowerBound.y || b.upperBound.y > a.upperBound.y: + return false + case a.lowerBound.z > b.lowerBound.z || b.upperBound.z > a.upperBound.z: + return false + } + return true +} + +// Get the surface area of an axis-aligned bounding box. +@(require_results) +AABB_Area :: proc "c" (a: AABB) -> f32 { + delta := a.upperBound - a.lowerBound + return 2.0 * (delta.x * delta.y + delta.y * delta.z + delta.z * delta.x) +} + +// Get the center of an axis-aligned bounding box. +@(require_results) +AABB_Center :: proc "c" (a: AABB) -> Vec3 { + return 0.5 * (a.upperBound + a.lowerBound) +} + +// Get the extents (half-widths) of an axis-aligned bounding box. +@(require_results) +AABB_Extents :: proc "c" (a: AABB) -> Vec3 { + return 0.5 * (a.upperBound - a.lowerBound) +} + +// Get the union of two axis-aligned bounding boxes. +@(require_results) +AABB_Union :: proc "c" (a, b: AABB) -> (out: AABB) { + out.lowerBound = Min(a.lowerBound, b.lowerBound) + out.upperBound = Max(a.upperBound, b.upperBound) + return +} + +// Add uniform padding to an axis-aligned bounding box. +@(require_results) +AABB_Inflate :: proc "c" (a: AABB, extension: f32) -> (out: AABB) { + radius := Vec3{extension, extension, extension} + + out.lowerBound = a.lowerBound - radius + out.upperBound = a.upperBound + radius + return +} + +// Do two axis-aligned boxes overlap? +@(require_results) +AABB_Overlaps :: proc "c" (a, b: AABB) -> bool { + // No intersection if separated along one axis + switch { + case a.upperBound.x < b.lowerBound.x || a.lowerBound.x > b.upperBound.x: + return false + case a.upperBound.y < b.lowerBound.y || a.lowerBound.y > b.upperBound.y: + return false + case a.upperBound.z < b.lowerBound.z || a.lowerBound.z > b.upperBound.z: + return false + } + + // Overlapping on all axis means bounds are intersecting + return true +} + +// Transform an axis-aligned bounding box. This can create a larger box +// than if you recomputed the AABB of the original shape with the transform +// applied. +@(require_results) +AABB_Transform :: proc "c" (transform: Transform, a: AABB) -> AABB { + center := TransformPoint(transform, AABB_Center(a)) + m := MakeMatrixFromQuat(transform.q) + extent := AbsMatrix3(m) * AABB_Extents(a) + return AABB{center - extent, center + extent} +} + +// Get the closest point on an axis-aligned bounding box. +@(require_results) +ClosestPointToAABB :: proc "c" (point: Vec3, a: AABB) -> Vec3 { + return Clamp(point, a.lowerBound, a.upperBound) +} diff --git a/vendor/box3d/box3d_types.odin b/vendor/box3d/box3d_types.odin new file mode 100644 index 000000000..895261696 --- /dev/null +++ b/vendor/box3d/box3d_types.odin @@ -0,0 +1,2923 @@ +package vendor_box3d + +import "core:c" + +DEFAULT_CATEGORY_BITS :: max(u64) +DEFAULT_MASK_BITS :: max(u64) + + +// Task interface +// This is the prototype for a Box3D task. Your task system is expected to run this callback on a worker thread, +// exactly once per enqueue, passing back the same taskContext pointer supplied to EnqueueTaskCallback. +// @ingroup world +TaskCallback :: proc "c" (taskContext: rawptr) + +// These functions can be provided to Box3D to invoke a task system. +// Returns a pointer to the user's task object. May be nullptr. A nullptr indicates to Box3D that the work was executed +// serially within the callback and there is no need to call b3FinishTaskCallback. Otherwise the returned +// value must be non-null will be passed to b3FinishTaskCallback as the userTask. +// @param task the Box3D task to be called by the scheduler +// @param taskContext the Box3D context object that the scheduler must pass to the task +// @param userContext the scheduler context object that is opaque to Box3D +// @param taskName the Box3D task name that the scheduler can use for diagnostics +// @ingroup world +EnqueueTaskCallback :: proc "c" (task: rawptr, taskContext: rawptr, userContext: rawptr, taskName: cstring) -> rawptr + +// Finishes a user task object that wraps a Box3D task. This must block until the task has completed. +// The step blocks here on the tasks it spawned, so b3World_Step holds its stack across every +// fork/join. Drive it from a thread you can dedicate to the step, or from a fiber this callback can +// park to free the underlying thread. In a job system that cannot park a job's stack, do not call +// b3World_Step from inside a job: a job that blocks on its own sub-jobs without yielding its thread +// can deadlock. The in-tree scheduler instead runs other pending tasks on the waiting thread. +// @ingroup world +FinishTaskCallback :: proc "c" (userTask: rawptr, userContext: rawptr) + + +// The user needs to be able to create debug draw shapes for multi-pass rendering to work efficiently. +// These user shapes are created and destroyed via callback so they can be bound to shape lifetime and scaling updates. +// @ingroup debug_draw +CreateDebugShapeCallback :: proc "c" (debugShape: ^DebugShape, userContext: rawptr) -> rawptr +DestroyDebugShapeCallback :: proc "c" (userShape: rawptr, userContext: rawptr) + +// Optional friction mixing callback. This intentionally provides no context objects because this is called +// from a worker thread. +// @warning This function should not attempt to modify Box3D state or user application state. +// @ingroup world +FrictionCallback :: proc "c" (frictionA: f32, userMaterialIdA: u64, frictionB: f32, userMaterialIdB: u64) -> f32 + +// Optional restitution mixing callback. This intentionally provides no context objects because this is called +// from a worker thread. +// @warning This function should not attempt to modify Box3D state or user application state. +// @ingroup world +RestitutionCallback :: proc "c" (restitutionA: f32, userMaterialIdA: u64, restitutionB: f32, userMaterialIdB: u64) -> f32 + +// Prototype for a contact filter callback. +// This is called when a contact pair is considered for collision. This allows you to +// perform custom logic to prevent collision between shapes. This is only called if +// one of the two shapes has custom filtering enabled. @see b3ShapeDef. +// Notes: +// - this function must be thread-safe +// - this is only called if one of the two shapes has enabled custom filtering +// - this is called only for awake dynamic bodies +// Return false if you want to disable the collision +// @warning Do not attempt to modify the world inside this callback +// @ingroup world +CustomFilterFcn :: proc "c" (shapeIdA: ShapeId, shapeIdB: ShapeId, ctx: rawptr) -> bool + +// Prototype for a pre-solve callback. +// This is called after a contact is updated. This allows you to inspect a +// collision before it goes to the solver. +// Notes: +// - this function must be thread-safe +// - this is only called if the shape has enabled pre-solve events +// - this may be called for awake dynamic bodies and sensors +// - this is not called for sensors +// Return false if you want to disable the contact this step +// This has limited information because it is used during CCD which does not have the +// full contact manifold. +// @warning Do not attempt to modify the world inside this callback +// @ingroup world +PreSolveFcn :: proc "c" (shapeIdA: ShapeId, shapeIdB: ShapeId, point: Pos, normal: Vec3, ctx: rawptr) -> bool + +// Prototype callback for overlap queries. +// Called for each shape found in the query. +// @see b3World_OverlapAABB +// @return false to terminate the query. +// @ingroup world +OverlapResultFcn :: proc "c" (shapeId: ShapeId, ctx: rawptr) -> bool + +// Prototype callback for ray casts. +// Called for each shape found in the query. You control how the ray cast +// proceeds by returning a float: +// return -1: ignore this shape and continue +// return 0: terminate the ray cast +// return fraction: clip the ray to this point +// return 1: don't clip the ray and continue +// @param shapeId the shape hit by the ray +// @param point the point of initial intersection +// @param normal the normal vector at the point of intersection +// @param fraction the fraction along the ray at the point of intersection +// @param userMaterialId the shape or triangle surface type +// @param triangleIndex the triangle index for mesh or height field shapes or -1 for other shape types +// @param childIndex the child shape index for compound shapes +// @param context the user context +// @return -1 to filter, 0 to terminate, fraction to clip the ray for closest hit, 1 to continue +// @see b3World_CastRay +// @ingroup world +CastResultFcn :: proc "c" (shapeId: ShapeId, point: Pos, normal: Vec3, fraction: f32, userMateriald: u64, triangleIndex: c.int, childIndex: c.int, ctx: rawptr) -> f32 + +@(link_prefix="b3", default_calling_convention="c", require_results) +foreign lib { + // Use this to initialize your world definition + // @ingroup world + DefaultWorldDef :: proc() -> WorldDef --- + + // Use this to initialize your body definition + // @ingroup body + DefaultBodyDef :: proc() -> BodyDef --- + + // Use this to initialize your filter + // @ingroup shape + DefaultFilter :: proc() -> Filter --- + + // Use this to initialize your surface material + // @ingroup shape + DefaultSurfaceMaterial :: proc() -> SurfaceMaterial --- + + // Use this to initialize your shape definition + // @ingroup shape + DefaultShapeDef :: proc() -> ShapeDef --- + + // Use this to initialize your joint definition + // @ingroup distance_joint + DefaultDistanceJointDef :: proc() -> DistanceJointDef --- + + // Use this to initialize your joint definition + // @ingroup motor_joint + DefaultMotorJointDef :: proc() -> MotorJointDef --- + + // Use this to initialize your joint definition + // @ingroup filter_joint + DefaultFilterJointDef :: proc() -> FilterJointDef --- + + + // Use this to initialize your joint definition + // @ingroup parallel_joint + DefaultParallelJointDef :: proc() -> ParallelJointDef --- + + + // Use this to initialize your joint definition + // @ingroup prismatic_joint + DefaultPrismaticJointDef :: proc() -> PrismaticJointDef --- + + + // Use this to initialize your joint definition. + // @ingroup revolute_joint + DefaultRevoluteJointDef :: proc() -> RevoluteJointDef --- + + // Use this to initialize your joint definition. + // @ingroup spherical_joint + DefaultSphericalJointDef :: proc() -> SphericalJointDef --- + + + // Use this to initialize your joint definition + // @ingroup weld_joint + DefaultWeldJointDef :: proc() -> WeldJointDef --- + + // Use this to initialize your joint definition + // @ingroup wheel_joint + DefaultWheelJointDef :: proc() -> WheelJointDef --- + + // Use this to initialize your explosion definition + // @ingroup world + DefaultExplosionDef :: proc() -> ExplosionDef --- + + // Use this to initialize your query filter + DefaultQueryFilter :: proc() -> QueryFilter --- + + // Get the visualization color assigned to a constraint graph color slot. The last index + // (B3_GRAPH_COLOR_COUNT - 1) is the overflow color. + GetGraphColor :: proc(index: c.int) -> HexColor --- + + // Create a debug draw struct with default values. + DefaultDebugDraw :: proc() -> DebugDraw --- +} + +// Pack an RGB color with a material preset for debug draw. The preset rides in +// the high byte where the color converters ignore it. +@(require_results) +MakeDebugColor :: #force_inline proc "c" (rgb: HexColor, material: DebugMaterial) -> u32 { + return (u32(rgb)&0x00FFFFFF) | (u32(material)<<24) +} + + + + +// Optional world capacities that can be use to avoid run-time allocations +// @ingroup world +Capacity :: struct { + // Number of expected static shapes. + staticShapeCount: c.int, + + // Number of expected dynamic and kinematic shapes. + dynamicShapeCount: c.int, + + // Number of expected static bodies. + staticBodyCount: c.int, + + // Number of expected dynamic and kinematic bodies. + dynamicBodyCount: c.int, + + // Number of expected contacts. + contactCount: c.int, +} + + +// World definition used to create a simulation world. Must be initialized using b3DefaultWorldDef. +// @ingroup world +WorldDef :: struct { + // Gravity vector. Box3D has no up-vector defined. + gravity: Vec3, + + // Restitution speed threshold, usually in m/s. Collisions above this + // speed have restitution applied (will bounce). + restitutionThreshold: f32, + + // Hit event speed threshold, usually in m/s. Collisions above this + // speed can generate hit events if the shape also enables hit events. + hitEventThreshold: f32, + + // Contact stiffness. Cycles per second. Increasing this increases the speed of overlap recovery, but can introduce jitter. + contactHertz: f32, + + // Contact bounciness. Non-dimensional. You can speed up overlap recovery by decreasing this with + // the trade-off that overlap resolution becomes more energetic. + contactDampingRatio: f32, + + // This parameter controls how fast overlap is resolved and usually has units of meters per second. This only + // puts a cap on the resolution speed. The resolution speed is increased by increasing the hertz and/or + // decreasing the damping ratio. + contactSpeed: f32, + + // Maximum linear speed. Usually meters per second. + maximumLinearSpeed: f32, + + // Optional mixing callback for friction. The default uses sqrt(frictionA * frictionB). + frictionCallback: FrictionCallback, + + // Optional mixing callback for restitution. The default uses max(restitutionA, restitutionB). + restitutionCallback: RestitutionCallback, + + // Can bodies go to sleep to improve performance + enableSleep: bool, + + // Enable continuous collision + enableContinuous: bool, + + // Number of workers to use with the provided task system. Box3D performs best when using only + // performance cores and accessing a single L2 cache. Efficiency cores and hyper-threading provide + // little benefit and may even harm performance. + // This is clamped to the range [1, B3_MAX_WORKERS]. Using a value above 1 will turn on multithreading. + // If task callbacks are provided then Box3D will use the user provided task system. Otherwise Box3D + // will create threads and use an internal scheduler. + workerCount: u32, + + // function to spawn task + enqueueTask: EnqueueTaskCallback, + + // function to finish a task + finishTask: FinishTaskCallback, + + // User context that is provided to enqueueTask and finishTask + userTaskContext: rawptr, + + // User data associated with a world + userData: rawptr, + + // Used to create debug draw shapes. This is called when a shape is + // first drawn using b3DebugDraw. + createDebugShape: CreateDebugShapeCallback, + + // Used to destroy debug draw shapes. This is called when a shape is modified or destroyed. + destroyDebugShape: DestroyDebugShapeCallback, + + // This is passed to the debug shape callbacks to provide a user context. + userDebugShapeContext: rawptr, + + // Optional initial capacities + capacity: Capacity, + + // Used internally to detect a valid definition. DO NOT SET. + internalValue: c.int, +} + + +// The body simulation type. +// Each body is one of these three types. The type determines how the body behaves in the simulation. +// @ingroup body +BodyType :: enum c.int { + // zero mass, zero velocity, may be manually moved + staticBody = 0, + + // zero mass, velocity set by user, moved by solver + kinematicBody = 1, + + // positive mass, velocity determined by forces, moved by solver + dynamicBody = 2, +} + +// Motion locks to restrict the body movement +// @ingroup body +MotionLocks :: struct { + // Prevent translation along the x-axis + linearX: bool, + + // Prevent translation along the y-axis + linearY: bool, + + // Prevent translation along the z-axis + linearZ: bool, + + // Prevent rotation around the x-axis + angularX: bool, + + // Prevent rotation around the y-axis + angularY: bool, + + // Prevent rotation around the z-axis + angularZ: bool, +} + +// A body definition holds all the data needed to construct a rigid body. +// You can safely re-use body definitions. Shapes are added to a body after construction. +// Body definitions are temporary objects used to bundle creation parameters. +// Must be initialized using b3DefaultBodyDef(). +// @ingroup body +BodyDef :: struct{ + // The body type: static, kinematic, or dynamic. + type: BodyType, + + // The initial world position of the body. Bodies should be created with the desired position. + // @note Creating bodies at the origin and then moving them nearly doubles the cost of body creation, especially + // if the body is moved after shapes have been added. + position: Pos, + + // The initial world rotation of the body. + rotation: Quat, + + // The initial linear velocity of the body's origin. Usually in meters per second. + linearVelocity: Vec3, + + // The initial angular velocity of the body. Radians per second. + angularVelocity: Vec3, + + // Linear damping is used to reduce the linear velocity. The damping parameter + // can be larger than 1 but the damping effect becomes sensitive to the + // time step when the damping parameter is large. + // Generally linear damping is undesirable because it makes objects move slowly + // as if they are floating. + linearDamping: f32, + + // Angular damping is used to reduce the angular velocity. The damping parameter + // can be larger than 1.0f but the damping effect becomes sensitive to the + // time step when the damping parameter is large. + // Angular damping can be used to slow down rotating bodies. + angularDamping: f32, + + // Scale the gravity applied to this body. Non-dimensional. + gravityScale: f32, + + // Sleep speed threshold, default is 0.05 meters per second + sleepThreshold: f32, + + // Optional body name for debugging. Up to B3_BODY_NAME_LENGTH characters (including null termination) + name: cstring, + + // Use this to store application specific body data. + userData: rawptr, + + // Motions locks to restrict linear and angular movement + motionLocks: MotionLocks, + + // Set this flag to false if this body should never fall asleep. + enableSleep: bool, + + // Is this body initially awake or sleeping? + isAwake: bool, + + // Treat this body as a high speed object that performs continuous collision detection + // against dynamic and kinematic bodies, but not other bullet bodies. + // @warning Bullets should be used sparingly. They are not a solution for general dynamic-versus-dynamic + // continuous collision. They do not guarantee accurate collision if both bodies are fast moving because + // the bullet does a continuous check after all non-bullet bodies have moved. You could get unlucky and have + // the bullet body end a time step very close to a non-bullet body and the non-bullet body then moves over + // the bullet body. In continuous collision, initial overlap is ignored to avoid freezing bodies in place. + // I do not recommend using them for game projectiles if precise collision timing is needed. Instead consider + // using a ray or shape cast. You can use a marching ray or shape cast for projectile that moves over time. + // If you want a fast moving projectile to collide with a fast moving target, you need to consider the relative + // movement in your ray or shape cast. This is out of the scope of Box3D. + // So what are good use cases for bullets? Pinball games or games with dynamic containers that hold other objects. + // It should be a use case where it doesn't break the game if there is a collision missed, but having them + // captured improves the quality of the game. + isBullet: bool, + + // Used to disable a body. A disabled body does not move or collide. + isEnabled: bool, + + // This allows this body to bypass rotational speed limits. Should only be used + // for circular objects, like wheels. + allowFastRotation: bool, + + // Enable contact recycling. True by default. Leaving this enabled improves performance + // but may lead to ghost collision that should be avoided on characters. + enableContactRecycling: bool, + + // Used internally to detect a valid definition. DO NOT SET. + internalValue: c.int, +} + + +// This is used to filter collision on shapes. It affects shape-vs-shape collision +// and shape-versus-query collision (such as b3World_CastRay). +// @ingroup shape +Filter :: struct { + // The collision category bits. Normally you would just set one bit. The category bits should + // represent your application object types. For example: + // @code{.odin} + // MyCategories :: bit_set[MyCategory; u64] + // MyCategory :: enum { + // Static = 0, + // Dynamic = 1, + // Debris = 2, + // Player = 3, + // // etc + // }; + // @endcode + categoryBits: u64, + + // The collision mask bits. This states the categories that this + // shape would accept for collision. + // For example, you may want your player to only collide with static objects + // and other players. + // @code{.odin} + // maskBits = {/Static, .Player}; + // @endcode + maskBits: u64, + + // Collision groups allow a certain group of objects to never collide (negative) + // or always collide (positive). A group index of zero has no effect. Non-zero group filtering + // always wins against the mask bits. + // For example, you may want ragdolls to collide with other ragdolls but you don't want + // ragdoll self-collision. In this case you would give each ragdoll a unique negative group index + // and apply that group index to all shapes on the ragdoll. + groupIndex: c.int, +} + + +// Material properties supported per triangle on meshes and height fields +// @ingroup shape +SurfaceMaterial :: struct { + // The Coulomb (dry) friction coefficient, usually in the range [0,1]. + friction: f32, + + // The coefficient of restitution (bounce) usually in the range [0,1]. + // https://en.wikipedia.org/wiki/Coefficient_of_restitution + restitution: f32, + + // The rolling resistance usually in the range [0,1]. This is only used for spheres and capsules. + rollingResistance: f32, + + // The tangent velocity for conveyor belts. This is local to the shape and will be projected + // onto the contact surface. + tangentVelocity: Vec3, + + // User material identifier. This is passed with query results and to friction and restitution + // combining functions. It is not used internally. + userMaterialId: u64, + + // Custom debug draw color. Ignored if 0. The low 24 bits are RGB. The high byte may + // carry a b3DebugMaterial preset, see b3MakeDebugColor. + // @see b3HexColor + customColor: u32, +} + + +// Shape type +// @ingroup shape +ShapeType :: enum c.int { + // A capsule is an extruded sphere + capsuleShape, + + // A compound shape composed of up to 64K spheres, capsules, hulls, and meshes + compoundShape, + + // A height field useful for terrain + heightShape, + + // A convex hull + hullShape, + + // A triangle soup + meshShape, + + // A sphere with an offset + sphereShape, +} + +// Used to create a shape +// @ingroup shape +ShapeDef :: struct { + // Use this to store application specific shape data. + userData: rawptr, + + // Surface material used on mesh shapes per triangle. Ignored for convex shapes. Ignored for compound shapes. + materials: [^]SurfaceMaterial `fmt:"v,materialCount"`, + + // Surface material count. + materialCount: c.int, + + // The base surface material. Ignored for compound shapes. + baseMaterial: SurfaceMaterial, + + // The density, usually in kg/m^3. + density: f32, + + // Explosion scale for b3World_Explode. non-dimensional + explosionScale: f32, + + // Contact filtering data. + filter: Filter, + + // Enable custom filtering. Only one of the two shapes needs to enable custom filtering. See b3WorldDef. + enableCustomFiltering: bool, + + // A sensor shape generates overlap events but never generates a collision response. + // Sensors do not have continuous collision. Instead, use a ray or shape cast for those scenarios. + // Sensors still contribute to the body mass if they have non-zero density. + // @note Sensor events are disabled by default. + // @see enableSensorEvents + isSensor: bool, + + // Enable sensor events for this shape. This applies to sensors and non-sensors. False by default, even for sensors. + enableSensorEvents: bool, + + // Enable contact events for this shape. Only applies to kinematic and dynamic bodies. Ignored for sensors. False by default. + enableContactEvents: bool, + + // Enable hit events for this shape. Only applies to kinematic and dynamic bodies. Ignored for sensors. False by default. + enableHitEvents: bool, + + // Enable pre-solve contact events for this shape. Only applies to dynamic bodies. These are expensive + // and must be carefully handled due to multithreading. Ignored for sensors. + enablePreSolveEvents: bool, + + // When shapes are created they will scan the environment for collision the next time step. This can significantly slow down + // static body creation when there are many static shapes. + // This is flag is ignored for dynamic and kinematic shapes which always invoke contact creation. + invokeContactCreation: bool, + + // Should the body update the mass properties when this shape is created. Default is true. + updateBodyMass: bool, + + // Used internally to detect a valid definition. DO NOT SET. + internalValue: c.int, +} + +//! @cond +// Profiling data. Times are in milliseconds. +// @ingroup world +Profile :: struct { + step: f32, + pairs: f32, + collide: f32, + solve: f32, + solverSetup: f32, + constraints: f32, + prepareConstraints: f32, + integrateVelocities: f32, + warmStart: f32, + solveImpulses: f32, + integratePositions: f32, + relaxImpulses: f32, + applyRestitution: f32, + storeImpulses: f32, + splitIslands: f32, + transforms: f32, + sensorHits: f32, + jointEvents: f32, + hitEvents: f32, + refit: f32, + bullets: f32, + sleepIslands: f32, + sensors: f32, +} + +// Counters that give details of the simulation size. +// @ingroup world +Counters :: struct { + bodyCount: c.int, + shapeCount: c.int, + contactCount: c.int, + jointCount: c.int, + islandCount: c.int, + stackUsed: c.int, + arenaCapacity: c.int, + staticTreeHeight: c.int, + treeHeight: c.int, + satCallCount: c.int, + satCacheHitCount: c.int, + byteCount: c.int, + taskCount: c.int, + colorCounts: [24]c.int, + manifoldCounts: [CONTACT_MANIFOLD_COUNT_BUCKETS]c.int, + + // Number of contacts touched by the collide pass + // graph contacts + awake-set non-touching + awakeContactCount: c.int, + + // Number of contacts recycled in the most recent step. + recycledContactCount: c.int, + + // Maximum number of time of impact iterations + distanceIterations: c.int, + pushBackIterations: c.int, + rootIterations: c.int, +} +//! @endcond + +// Joint type enumeration. This is useful because all joint types use b3JointId and sometimes you +// want to get the type of a joint. +// @ingroup joint +JointType :: enum c.int { + parallelJoint, + distanceJoint, + filterJoint, + motorJoint, + prismaticJoint, + revoluteJoint, + sphericalJoint, + weldJoint, + wheelJoint, +} + +// Base joint definition used by all joint types. The local frames are measured from the +// body's origin rather than the center of mass because: +// 1. You might not know where the center of mass will be. +// 2. If you add/remove shapes from a body and recompute the mass, the joints will be broken. +// @ingroup joint +JointDef :: struct { + // User data pointer + userData: rawptr, + + // The first attached body + bodyIdA: BodyId, + + // The second attached body + bodyIdB: BodyId, + + // The first local joint frame + localFrameA: Transform, + + // The second local joint frame + localFrameB: Transform, + + // Force threshold for joint events + forceThreshold: f32, + + // Torque threshold for joint events + torqueThreshold: f32, + + // Constraint hertz (advanced feature) + constraintHertz: f32, + + // Constraint damping ratio (advanced feature) + constraintDampingRatio: f32, + + // Debug draw scale + drawScale: f32, + + // Set this flag to true if the attached bodies should collide + collideConnected: bool, + + // Used internally to detect a valid definition. DO NOT SET. + internalValue: c.int, +} + +// Distance joint definition. +// Connects a point on body A with a point on body B by a segment. +// Useful for ropes and springs. +// @ingroup distance_joint +DistanceJointDef :: struct { + // Base joint definition + using base: JointDef, + + // The rest length of this joint. Clamped to a stable minimum value. + length: f32, + + // Enable the distance constraint to behave like a spring. If false + // then the distance joint will be rigid, overriding the limit and motor. + enableSpring: bool, + + // The lower spring force controls how much tension it can sustain + lowerSpringForce: f32, + + // The upper spring force controls how much compression it can sustain + upperSpringForce: f32, + + // The spring linear stiffness Hertz, cycles per second + hertz: f32, + + // The spring linear damping ratio, non-dimensional + dampingRatio: f32, + + // Enable/disable the joint limit + enableLimit: bool, + + // Minimum length. Clamped to a stable minimum value. + minLength: f32, + + // Maximum length. Must be greater than or equal to the minimum length. + maxLength: f32, + + // Enable/disable the joint motor + enableMotor: bool, + + // The maximum motor force, usually in newtons + maxMotorForce: f32, + + // The desired motor speed, usually in meters per second + motorSpeed: f32, +} + + +// A motor joint is used to control the relative position and velocity between two bodies. +// @ingroup motor_joint +MotorJointDef :: struct { + // Base joint definition + using base: JointDef, + + // The desired linear velocity + linearVelocity: Vec3, + + // The maximum motor force in newtons + maxVelocityForce: f32, + + // The desired angular velocity + angularVelocity: Vec3, + + // The maximum motor torque in newton-meters + maxVelocityTorque: f32, + + // Linear spring hertz for position control + linearHertz: f32, + + // Linear spring damping ratio + linearDampingRatio: f32, + + // Maximum spring force in newtons + maxSpringForce: f32, + + // Angular spring hertz for position control + angularHertz: f32, + + // Angular spring damping ratio + angularDampingRatio: f32, + + // Maximum spring torque in newton-meters + maxSpringTorque: f32, +} + +// A filter joint is used to disable collision between two specific bodies. +// @ingroup filter_joint +FilterJointDef :: struct { + // Base joint definition + using base: JointDef, +} + + +// Parallel joint definition. Constrains the angle between axis z in body A and axis z in body B +// using a spring. Useful to keep a body upright. +// @ingroup parallel_joint +ParallelJointDef :: struct { + // Base joint definition + using base: JointDef, + + // The spring stiffness Hertz, cycles per second + hertz: f32, + + // The spring damping ratio, non-dimensional + dampingRatio: f32, + + // The maximum spring torque, typically in newton-meters. + maxTorque: f32, +} + +// Prismatic joint definition. Body B may slide along the x-axis in local frame A. +// Body B cannot rotate relative to body A. The joint translation is zero when the +// local frame origins coincide in world space. +// @ingroup prismatic_joint +PrismaticJointDef :: struct { + // Base joint definition + using base: JointDef, + + // Enable a linear spring along the prismatic joint axis + enableSpring: bool, + + // The spring stiffness Hertz, cycles per second + hertz: f32, + + // The spring damping ratio, non-dimensional + dampingRatio: f32, + + // The target translation for the joint in meters. The spring-damper will drive + // to this translation. + targetTranslation: f32, + + // Enable/disable the joint limit + enableLimit: bool, + + // The lower translation limit + lowerTranslation: f32, + + // The upper translation limit + upperTranslation: f32, + + // Enable/disable the joint motor + enableMotor: bool, + + // The maximum motor force, typically in newtons + maxMotorForce: f32, + + // The desired motor speed, typically in meters per second + motorSpeed: f32, +} + +// Revolute joint definition. A point on body B is fixed to a point on body A. +// Allows relative rotation about the z-axis. +// @ingroup revolute_joint +RevoluteJointDef :: struct { + // Base joint definition. + using base: JointDef, + + // The bodyB angle minus bodyA angle in the reference state (radians). + // This defines the zero angle for the joint limit. + targetAngle: f32, + + // Enable a rotational spring on the revolute hinge axis. + enableSpring: bool, + + // The spring stiffness Hertz, cycles per second. + hertz: f32, + + // The spring damping ratio, non-dimensional. + dampingRatio: f32, + + // A flag to enable joint limits. + enableLimit: bool, + + // The lower angle for the joint limit in radians. Minimum of -0.99*pi radians. + lowerAngle: f32, + + // The upper angle for the joint limit in radians. Maximum of 0.99*pi radians. + upperAngle: f32, + + // A flag to enable the joint motor. + enableMotor: bool, + + // The maximum motor torque, typically in newton-meters. + maxMotorTorque: f32, + + // The desired motor speed in radians per second. + motorSpeed: f32, +} + +// Spherical joint definition. A point on body B is fixed to a point on body A. +// Allows rotation about the shared point. +// @ingroup spherical_joint +SphericalJointDef :: struct { + // Base joint definition + using base: JointDef, + + // Enable a rotational spring that attempts to align the two joint frames. + enableSpring: bool, + + // The spring stiffness Hertz, cycles per second. This may be clamped internally + // according to the time step to maintain stability. Non-negative number. + hertz: f32, + + // The spring damping ratio, non-dimensional. Non-negative number. + dampingRatio: f32, + + // Target spring rotation, joint frame B relative to joint frame A. + targetRotation: Quat, + + // A flag to enable the cone limit. The cone is centered on the frameA z-axis. + enableConeLimit: bool, + + // The angle for the cone limit in radians. Valid range is [0, pi] + coneAngle: f32, + + // A flag to enable the twist limit. The twist is centered on the frameB z-axis. + enableTwistLimit: bool, + + // The angle for the lower twist limit in radians. Minimum of -0.99*pi radians. + lowerTwistAngle: f32, + + // The angle for the upper twist limit in radians. Maximum of 0.99*pi radians. + upperTwistAngle: f32, + + // A flag to enable the joint motor + enableMotor: bool, + + // The maximum motor torque, typically in newton-meters. Non-negative number. + maxMotorTorque: f32, + + // The desired motor angular velocity in radians per second. + motorVelocity: Vec3, +} + + +// Weld joint definition +// Connects two bodies together rigidly. This constraint provides springs to mimic +// soft-body simulation. +// @note The approximate solver in Box3D cannot hold many bodies together rigidly +// @ingroup weld_joint +WeldJointDef :: struct { + // Base joint definition + using base: JointDef, + + // Linear stiffness expressed as Hertz (cycles per second). Use zero for maximum stiffness. + linearHertz: f32, + + // Angular stiffness as Hertz (cycles per second). Use zero for maximum stiffness. + angularHertz: f32, + + // Linear damping ratio, non-dimensional. Use 1 for critical damping. + linearDampingRatio: f32, + + // Linear damping ratio, non-dimensional. Use 1 for critical damping. + angularDampingRatio: f32, +} + +// Wheel joint definition +// Body A is the chassis and body B is the wheel. +// The wheel rotates around the local z-axis in frame B. +// The wheel translates along the local x-axis in frame A. +// The wheel can optionally steer along the x-axis in frame A. +// @ingroup wheel_joint +WheelJointDef :: struct { + // Base joint definition + using base: JointDef, + + // Enable a linear spring along the local axis + enableSuspensionSpring: bool, + + // Spring stiffness in Hertz + suspensionHertz: f32, + + // Spring damping ratio, non-dimensional + suspensionDampingRatio: f32, + + // Enable/disable the joint linear limit + enableSuspensionLimit: bool, + + // The lower suspension translation limit + lowerSuspensionLimit: f32, + + // The upper translation limit + upperSuspensionLimit: f32, + + // Enable/disable the joint rotational motor + enableSpinMotor: bool, + + // The maximum motor torque, typically in newton-meters + maxSpinTorque: f32, + + // The desired motor speed in radians per second + spinSpeed: f32, + + // Enable steering, otherwise the steering is fixed forward + enableSteering: bool, + + // Steering stiffness in Hertz + steeringHertz: f32, + + // Spring damping ratio, non-dimensional + steeringDampingRatio: f32, + + // The target steering angle in radians + targetSteeringAngle: f32, + + // The maximum steering torque in N*m + maxSteeringTorque: f32, + + // Enable/disable the steering angular limit + enableSteeringLimit: bool, + + // The lower steering angle in radians + lowerSteeringLimit: f32, + + // The upper steering angle in radians + upperSteeringLimit: f32, +} + + +// The explosion definition is used to configure options for explosions. Explosions +// consider shape geometry when computing the impulse. +// @ingroup world +ExplosionDef :: struct { + // Mask bits to filter shapes + maskBits: u64, + + // The center of the explosion in world space + position: Pos, + + // The radius of the explosion + radius: f32, + + // The falloff distance beyond the radius. Impulse is reduced to zero at this distance. + falloff: f32, + + // Impulse per unit area. This applies an impulse according to the shape area that + // is facing the explosion. Explosions only apply to spheres, capsules, and hulls. This + // may be negative for implosions. + impulsePerArea: f32, +} + +/** + * @defgroup event Events + * World event types. + * + * Events are used to collect events that occur during the world time step. These events + * are then available to query after the time step is complete. This is preferable to callbacks + * because Box3D uses multithreaded simulation. + * + * Also when events occur in the simulation step it may be problematic to modify the world, which is + * often what applications want to do when events occur. + * + * With event arrays, you can scan the events in a loop and modify the world. However, you need to be careful + * that some event data may become invalid. There are several samples that show how to do this safely. + * + * @{ + */ + +// A begin-touch event is generated when a shape starts to overlap a sensor shape. +SensorBeginTouchEvent :: struct { + // The id of the sensor shape + sensorShapeId: ShapeId, + + // The id of the shape that began touching the sensor shape + visitorShapeId: ShapeId, +} + +// An end touch event is generated when a shape stops overlapping a sensor shape. +// These include things like setting the transform, destroying a body or shape, or changing +// a filter. You will also get an end event if the sensor or visitor are destroyed. +// Therefore you should always confirm the shape id is valid using b3Shape_IsValid. +SensorEndTouchEvent :: struct { + // The id of the sensor shape + // @warning this shape may have been destroyed + // @see b3Shape_IsValid + sensorShapeId: ShapeId, + + // The id of the shape that stopped touching the sensor shape + // @warning this shape may have been destroyed + // @see b3Shape_IsValid + visitorShapeId: ShapeId, +} + +// Sensor events are buffered in the world and are available +// as begin/end overlap event arrays after the time step is complete. +// Note: these may become invalid if bodies and/or shapes are destroyed +SensorEvents :: struct { + // Array of sensor begin touch events + beginEvents: [^]SensorBeginTouchEvent `fmt:"v,beginCount"`, + + // Array of sensor end touch events + endEvents: [^]SensorEndTouchEvent `fmt:"v,endCount"`, + + // The number of begin touch events + beginCount: c.int, + + // The number of end touch events + endCount: c.int, +} + +// A begin-touch event is generated when two shapes begin touching. +ContactBeginTouchEvent :: struct { + // Id of the first shape + shapeIdA: ShapeId, + + // Id of the second shape + shapeIdB: ShapeId, + + // The transient contact id. This contact may be destroyed automatically when the world is modified or simulated. + // Use b3Contact_IsValid before using this id. + contactId: ContactId, +} + +// An end touch event is generated when two shapes stop touching. +// You will get an end event if you do anything that destroys contacts previous to the last +// world step. These include things like setting the transform, destroying a body +// or shape, or changing a filter or body type. +ContactEndTouchEvent :: struct { + // Id of the first shape + // @warning this shape may have been destroyed + // @see b3Shape_IsValid + shapeIdA: ShapeId, + + // Id of the first shape + // @warning this shape may have been destroyed + // @see b3Shape_IsValid + shapeIdB: ShapeId, + + // Id of the contact. + // @warning this contact may have been destroyed + // @see b3Contact_IsValid + contactId: ContactId, +} + +// A hit touch event is generated when two shapes collide with a speed faster than the hit speed threshold. +// This may be reported for speculative contacts that have a confirmed impulse. +ContactHitEvent :: struct { + // Id of the first shape + shapeIdA: ShapeId, + + // Id of the second shape + shapeIdB: ShapeId, + + // Id of the contact. + // @warning this contact may have been destroyed + // @see b3Contact_IsValid + contactId: ContactId, + + // Point where the shapes hit at the beginning of the time step. + // This is a mid-point between the two surfaces. It could be at speculative + // point where the two shapes were not touching at the beginning of the time step. + point: Pos, + + // Normal vector pointing from shape A to shape B + normal: Vec3, + + // The speed the shapes are approaching. Always positive. Typically in meters per second. + approachSpeed: f32, + + // User material on shape A + userMaterialIdA: u64, + + // User material on shape B + userMaterialIdB: u64, +} + +// Contact events are buffered in the world and are available +// as event arrays after the time step is complete. +// Note: these may become invalid if bodies and/or shapes are destroyed +ContactEvents :: struct { + // Array of begin touch events + beginEvents: [^]ContactBeginTouchEvent `fmt:"v,beginCount"`, + + // Array of end touch events + endEvents: [^]ContactEndTouchEvent `fmt:"v,endCount"`, + + // Array of hit events + hitEvents: [^]ContactHitEvent `fmt:"v,hitCount"`, + + // Number of begin touch events + beginCount: c.int, + + // Number of end touch events + endCount: c.int, + + // Number of hit events + hitCount: c.int, +} + +// Body move events triggered when a body moves. +// Triggered when a body moves due to simulation. Not reported for bodies moved by the user. +// This also has a flag to indicate that the body went to sleep so the application can also +// sleep that actor/entity/object associated with the body. +// On the other hand if the flag does not indicate the body went to sleep then the application +// can treat the actor/entity/object associated with the body as awake. +// This is an efficient way for an application to update game object transforms rather than +// calling functions such as b3Body_GetTransform() because this data is delivered as a contiguous array +// and it is only populated with bodies that have moved. +// @note If sleeping is disabled all dynamic and kinematic bodies will trigger move events. +BodyMoveEvent :: struct { + // The body user data. + userData: rawptr, + + // The body transform. + transform: WorldTransform, + + // The body id. + bodyId: BodyId, + + // Did the body fall asleep this time step? + fellAsleep: bool, +} + +// Body events are buffered in the world and are available +// as event arrays after the time step is complete. +// Note: this data becomes invalid if bodies are destroyed +BodyEvents :: struct { + // Array of move events + moveEvents: [^]BodyMoveEvent `fmt:"v,moveCount"`, + + // Number of move events + moveCount: c.int, +} + +// Joint events report joints that are awake and have a force and/or torque exceeding the threshold +// The observed forces and torques are not returned for efficiency reasons. +JointEvent :: struct { + // The joint id + jointId: JointId, + + // The user data from the joint for convenience + userData: rawptr, +} + +// Joint events are buffered in the world and are available +// as event arrays after the time step is complete. +// Note: this data becomes invalid if joints are destroyed +JointEvents :: struct { + // Array of events + jointEvents: [^]JointEvent `fmt:"v,count"`, + + // Number of events + count: c.int, +} + +// The contact data for two shapes. By convention the manifold normal points +// from shape A to shape B. +// @see b3Shape_GetContactData() and b3Body_GetContactData() +ContactData :: struct { + // The contact id. You may hold onto this to track a contact across time steps. + // This id may become orphaned. Use b3Contact_IsValid before using it for other functions. + contactId: ContactId, + + // The first shape id. + shapeIdA: ShapeId, + + // The second shape id. + shapeIdB: ShapeId, + + // The contact manifold. This points to internal data and may become invalid. Do not store + // this pointer. + manifolds: [^]Manifold `fmt:"v,manifoldCount"`, + + // The number of contact manifolds. For mesh and height-field collision there can be multiple manifolds. + manifoldCount: c.int, +} + +/**@}*/ // event + +/** + * @defgroup query Query + * @brief Query types and functions + * + * Queries include ray casts, shapes casts, overlap, distance, and time of impact. + * @{ + */ + +// The query filter is used to filter collisions between queries and shapes. For example, +// you may want a ray-cast representing a projectile to hit players and the static environment +// but not debris. +QueryFilter :: struct { + // The collision category bits of this query. Normally you would just set one bit. + categoryBits: u64, + + // The collision mask bits. This states the shape categories that this + // query would accept for collision. + maskBits: u64, + + // Optional id combined with @ref name to identify this query in a recording, e.g. an entity id. + // Need not be unique on its own. 0 with a null name means untagged. Ignored when not recording. + id: u64, + + // Optional label combined with @ref id to identify this query, e.g. "bullet". Need not be unique + // on its own. The recorder hashes (id, name) into one stable key the viewer tracks the query by, + // so the same id and name pair identifies the same query across frames. NULL means none. Ignored + // when not recording. + name: cstring, +} + + +// Low level ray cast input data. +RayCastInput :: struct { + // Start point of the ray cast. + origin: Vec3, + + // Translation of the ray cast. + // end = start + translation. + translation: Vec3, + + // The maximum fraction of the translation to consider, typically 1 + maxFraction: f32, +} + +// Result from b3World_RayCastClosest. +RayResult :: struct { + // The shape hit. + shapeId: ShapeId, + + // The world point of the hit. + point: Pos, + + // The world normal of the shape surface at the hit point. + normal: Vec3, + + // The user material id at the hit point. This can be per triangle + // if the shape is a mesh, height-field, or compound with child mesh. + userMaterialId: u64, + + // The fraction of the input ray. + fraction: f32, + + // The triangle index if the shape is a mesh, height-field, or compound with + // child mesh. + triangleIndex: c.int, + + // The child index if the shape is a compound. + childIndex: c.int, + + // The number of BVH nodes visited. Diagnostic. + nodeVisits: c.int, + + // The number of BVH leaves visited. Diagnostic. + leafVisits: c.int, + + // Did the ray hit? If false, all other data is invalid. + hit: bool, +} + +// A shape proxy is used by the GJK algorithm. It can represent a convex shape. +ShapeProxy :: struct { + // The point cloud. + points: [^]Vec3 `fmt:"v,count"`, + + // The number of points. Do not exceed B3_MAX_SHAPE_CAST_POINTS. + count: c.int, + + // The external radius of the point cloud. + radius: f32, +} + +// Low level shape cast input in generic form. This allows casting an arbitrary point +// cloud wrap with a radius. For example, a sphere is a single point with a non-zero radius. +// A capsule is two points with a non-zero radius. A box is four points with a zero radius. +ShapeCastInput :: struct { + // A generic query shape. + proxy: ShapeProxy, + + // The translation of the shape cast. + translation: Vec3, + + // The maximum fraction of the translation to consider, typically 1. + maxFraction: f32, + + // Allow shape cast to encroach when initially touching. This only works if the radius is greater than zero. + canEncroach: bool, +} + +// Input for sweeping an AABB through a dynamic tree. The box is in the tree's world float frame. +// The caller folds the cast shape radius and any world origin into the box, so the tree traversal +// stays a conservative box sweep and the precise narrow phase happens per shape in the callback. +BoxCastInput :: struct { + // The AABB to cast, in the tree's frame. + box: AABB, + + // The sweep translation. + translation: Vec3, + + // The maximum fraction of the translation to consider, typically 1. + maxFraction: f32, +} + +// Low level ray cast or shape-cast output data. +CastOutput :: struct { + // The surface normal at the hit point. + normal: Vec3, + + // The surface hit point. + point: Vec3, + + // The fraction of the input translation at collision. + fraction: f32, + + // The number of iterations used. + iterations: c.int, + + // The index of the mesh or height field triangle hit. + triangleIndex: c.int, + + // The index of the compound child shape. + childIndex: c.int, + + // The material index. May be -1 for null. + materialIndex: c.int, + + // Did the cast hit? + hit: bool, +} + + +// Ray cast or shape-cast output in world space. The hit point is a world position so the result +// stays precise far from the world origin. Mirrors b3CastOutput with a double precision point. +WorldCastOutput :: struct { + // The surface normal at the hit point. + normal: Vec3, + + // The surface hit point in world space. + point: Pos, + + // The fraction of the input translation at collision. + fraction: f32, + + // The number of iterations used. + iterations: c.int, + + // The index of the mesh or height field triangle hit. + triangleIndex: c.int, + + // The index of the compound child shape. + childIndex: c.int, + + // The material index. May be -1 for null. + materialIndex: c.int, + + // Did the cast hit? + hit: bool, +} + + +// Body cast result for ray and shape casts. +BodyCastResult :: struct { + // The shape hit. + shapeId: ShapeId, + + // The world point on the shape surface. + point: Pos, + + // The world normal vector on the shape surface. + normal: Vec3, + + // The fraction along the ray hit. + // hit point = origin + fraction * translation + fraction: f32, + + // The triangle index if the shape is a mesh or height-field. + triangleIndex: c.int, + + // The user material id at the hit point. This can be per triangle + // if the shape is a mesh, height-field, or compound with child mesh. + userMaterialId: u64, + + // The number of iterations used. Diagnostic. + iterations: c.int, + + // Did the cast hit? If false, all other fields are invalid. + hit: bool, +} + +// Used to warm start the GJK simplex. If you call this function multiple times with nearby +// transforms this might improve performance. Otherwise you can zero initialize this. +// The distance cache must be initialized to zero on the first call. +// Users should generally just zero initialize this structure for each call. +SimplexCache :: struct { + // Value use to compare length, area, volume of two simplexes. + metric: f32, + + // todo use an index of 0xFF as a sentinel and remove the count + // The number of stored simplex points + count: u16, + + // The cached simplex indices on shape A + indexA: [4]u8, + + // The cached simplex indices on shape B + indexB: [4]u8, +} + +emptyDistanceCache :: SimplexCache{} + +// Input parameters for b3ShapeCast +ShapeCastPairInput :: struct { + proxyA: ShapeProxy, //< The proxy for shape A + proxyB: ShapeProxy, //< The proxy for shape B + transform: Transform, //< Transform of shape B in shape A's frame, the relative pose B in A + translationB: Vec3, //< The translation of shape B, in A's frame + maxFraction: f32, //< The fraction of the translation to consider, typically 1 + canEncroach: bool, //< Allows shapes with a radius to move slightly closer if already touching +} + +// Input for ShapeDistance +DistanceInput :: struct { + // The proxy for shape A + proxyA: ShapeProxy, + + // The proxy for shape B + proxyB: ShapeProxy, + + // Transform of shape B in shape A's frame, the relative pose B in A + // (b3InvMulWorldTransforms( worldA, worldB )). The query is origin independent and runs in frame A. + transform: Transform, + + // Should the proxy radius be considered? + useRadii: bool, +} + +// Output for b3ShapeDistance +DistanceOutput :: struct { + pointA: Vec3, //< Closest point on shapeA, in shape A's frame + pointB: Vec3, //< Closest point on shapeB, in shape A's frame + normal: Vec3, //< A to B normal in shape A's frame. Invalid if distance is zero. + distance: f32, //< The final distance, zero if overlapped + iterations: c.int, //< Number of GJK iterations used + simplexCount: c.int, //< The number of simplexes stored in the simplex array +} + +// Simplex vertex for debugging the GJK algorithm +SimplexVertex :: struct { + wA: Vec3, //< support point in proxyA + wB: Vec3, //< support point in proxyB + w: Vec3, //< wB - wA + a: f32, //< barycentric coordinates + indexA: c.int, //< wA index + indexB: c.int, //< wB index +} + +// Simplex from the GJK algorithm +Simplex :: struct { + vertices: [4]SimplexVertex `fmt:"v,count"`, //< vertices + count: c.int, //< number of valid vertices +} + +// This describes the motion of a body/shape for TOI computation. Shapes are defined with respect to the body origin, +// which may not coincide with the center of mass. However, to support dynamics we must interpolate the center of mass +// position. +Sweep :: struct { + localCenter: Vec3, //< Local center of mass position + c1: Vec3, //< Starting center of mass world position + c2: Vec3, //< Ending center of mass world position + q1: Quat, //< Starting world rotation + q2: Quat, //< Ending world rotation +} + +// Time of impact input +TOIInput :: struct { + proxyA: ShapeProxy, //< The proxy for shape A + proxyB: ShapeProxy, //< The proxy for shape B + sweepA: Sweep, //< The movement of shape A + sweepB: Sweep, //< The movement of shape B + maxFraction: f32, //< Defines the sweep interval [0, tMax] +} + +// Describes the TOI output +TOIState :: enum c.int { + Unknown, + Failed, + Overlapped, + Hit, + Separated, +} + +// Time of impact output +TOIOutput :: struct { + // The type of result + state: TOIState, + + // The hit point + point: Vec3, + + // The hit normal + normal: Vec3, + + // The sweep time of the collision + fraction: f32, + + // The final distance + distance: f32, + + // Number of outer iterations + distanceIterations: c.int, + + // Total number of push back iterations + pushBackIterations: c.int, + + // Total number of root iterations + rootIterations: c.int, + + // Indicates that the time of impact detected initial + // overlap and used a fallback sphere as a last ditch effort + // to prevent tunneling. + usedFallback: bool, +} + +/**@}*/ // query + +/** + * @defgroup tree Dynamic Tree + * The dynamic tree is a binary AABB tree to organize and query large numbers of geometric objects + * + * Box3D uses the dynamic tree internally to sort collision shapes into a binary bounding volume hierarchy. + * This data structure may have uses in games for organizing other geometry data and may be used independently + * of Box3D rigid body simulation. + * + * A dynamic AABB tree broad-phase, inspired by Nathanael Presson's btDbvt. + * A dynamic tree arranges data in a binary tree to accelerate + * queries such as AABB queries and ray casts. Leaf nodes are proxies + * with an AABB. These are used to hold a user collision object. + * Nodes are pooled and relocatable, so I use node indices rather than pointers. + * The dynamic tree is made available for advanced users that would like to use it to organize + * spatial game data besides rigid bodies. + * @{ + */ + +// Flags for tree nodes. For internal usage. +TreeNodeFlags :: distinct bit_set[TreeNodeFlag; u16] + +TreeNodeFlag :: enum u16 { + allocatedNode = 0, + enlargedNode = 1, + leafNode = 2, +} + +// Tree node child indices. For internal usage. +TreeNodeChildren :: struct { + child1: c.int, //< child node index 1 + child2: c.int, //< child node index 2 +} + +// A node in the dynamic tree. This is private data placed here for performance reasons. +// todo test padding to 64 bytes to avoid straddling cache lines +TreeNode :: struct { + // The node bounding box + aabb: AABB, // 24 + + // Category bits for collision filtering + categoryBits: u64, // 8 + + using _: struct #raw_union { + // Children (internal node) + children: TreeNodeChildren, + + // User data (leaf node) + userData: u64, + }, // 8 + + using _: struct #raw_union { + // The node parent index (allocated node) + parent: c.int, + + // The node freelist next index (free node) + next: c.int, + }, // 4 + + // Height of the node. Leaves have a height of 0. + height: u16, // 2 + + // @see TreeNodeFlags + flags: TreeNodeFlags, // 2 +} + +// Dynamic tree version for compatibility testing. +DYNAMIC_TREE_VERSION :: 0x93EDAF889FD30B4A + +// The dynamic tree structure. This should be considered private data. +// It is placed here for performance reasons. +DynamicTree :: struct { + // The dynamic tree version. Always the first field. Useful + // if the tree is serialized. + version: u64, + + // The tree nodes + nodes: [^]TreeNode `fmt:"v,nodeCapacity"`, + + // The root index + root: c.int, + + // The number of nodes + nodeCount: c.int, + + // The allocated node space + nodeCapacity: c.int, + + // Number of proxies created + proxyCount: c.int, + + // Node free list + freeList: c.int, + + // Leaf indices for rebuild + leafIndices: [^]int, + + // Leaf bounding boxes for rebuild + leafBoxes: [^]AABB, + + // Leaf bounding box centers for rebuild + leafCenters: [^]Vec3, + + // Bins for sorting during rebuild + binIndices: [^]c.int, + + // Allocated space for rebuilding + rebuildCapacity: c.int, +} + +// These are performance results returned by dynamic tree queries. +TreeStats :: struct { + // Number of internal nodes visited during the query + nodeVisits: c.int, + + // Number of leaf nodes visited during the query + leafVisits: c.int, +} + +// This function receives proxies found in the AABB query. +// @return true if the query should continue +TreeQueryCallbackFcn :: proc "c" (proxyId: c.int, userData: u64, ctx: rawptr) -> bool + +// This function receives the minimum distance squared so far and proxy to check in the closest query. +// @return minimum distance squared to user objects in the proxy +TreeQueryClosestCallbackFcn :: proc "c" (distanceSqrMin: f32, proxyId: c.int, userData: u64, ctx: rawptr) -> f32 + +// This function receives clipped AABB cast input for a proxy. The function returns the new cast +// fraction. +// - return a value of 0 to terminate the cast +// - return a value less than input->maxFraction to clip the cast +// - return a value of input->maxFraction to continue the cast without clipping +TreeBoxCastCallbackFcn :: proc "c" (#by_ptr input: BoxCastInput, proxyId: c.int, userData: u64, ctx: rawptr) -> f32 + +// This function receives clipped ray cast input for a proxy. The function +// returns the new ray fraction. +// - return a value of 0 to terminate the ray cast +// - return a value less than input->maxFraction to clip the ray +// - return a value of input->maxFraction to continue the ray cast without clipping +TreeRayCastCallbackFcn :: proc "c" (#by_ptr input: RayCastInput, proxyId: c.int, userData: u64, ctx: rawptr) -> f32 + +/**@}*/ // tree + +/** + * @defgroup character Character Mover + * Character movement solver + * @{ + */ + +// The plane between a character mover and a shape +PlaneResult :: struct { + // Outward pointing plane. + plane: Plane, + + // Closest point on the shape. May not be unique. + point: Vec3, +} + +// These are collision planes that can be fed to b3SolvePlanes. Normally +// this is assembled by the user from plane results in b3PlaneResult. +CollisionPlane :: struct { + // The collision plane between the mover and some shape. + plane: Plane, + + // Setting this to FLT_MAX makes the plane as rigid as possible. Lower values can + // make the plane collision soft. Usually in meters. + pushLimit: f32, + + // The push on the mover determined by b3SolvePlanes. Usually in meters. + push: f32, + + // Indicates if b3ClipVector should clip against this plane. Should be false for soft collision. + clipVelocity: bool, +} + +// Result returned by b3SolvePlanes. +PlaneSolverResult :: struct { + // The final relative translation. + delta: Vec3, + + // The number of iterations used by the plane solver. For diagnostics. + iterationCount: c.int, +} + +// Body plane result for movers. +BodyPlaneResult :: struct { + // The shape id on the body. + shapeId: ShapeId, + + // The plane result. + result: PlaneResult, +} + +// Used to collect collision planes for character movers. +// Return true to continue gathering planes. +PlaneResultFcn :: proc "c" (shapeId: ShapeId, plane: [^]PlaneResult, planeCount: c.int, ctx: rawptr) -> bool + +// Used to filter shapes for shape casting character movers. +// Return true to accept the collision +MoverFilterFcn :: proc "c" (shapeId: ShapeId, ctx: rawptr) -> bool + +/**@}*/ // mover + +/** + * @defgroup geometry Geometry + * @brief Geometry types and algorithms + * + * Definitions of spheres, capsules, hulls, meshes, height fields, and compounds. + * @{ + */ + +// This holds the mass data computed for a shape. +MassData :: struct { + // The shape mass + mass: f32, + + // The local center of mass position. + center: Vec3, + + // The inertia tensor about the shape center of mass. + inertia: Matrix3, +} + +/** + * @defgroup sphere Sphere + * @brief Sphere primitive + * @{ + */ + +// A solid sphere +Sphere :: struct { + // The local center + center: Vec3, + + // The radius + radius: f32, +} + +/**@}*/ // sphere + +/** + * @defgroup capsule Capsule + * @brief Capsule primitive + * @{ + */ + +// A solid capsule can be viewed as two hemispheres connected +// by a rectangle. +Capsule :: struct { + // Local center of the first hemisphere + center1: Vec3, + + // Local center of the second hemisphere + center2: Vec3, + + // The radius of the hemispheres + radius: f32, +} + +/**@}*/ // capsule + +/** + * @defgroup hull Convex Hull + * @brief Convex hull primitive + * @{ + */ + +// A hull vertex. Identified by a half-edge with this +// vertex as its tail. +HullVertex :: struct { + // A half-edge that has this vertex as the origin + // Can be used along with edge twins and winding order + // to traverse all the edges connected to this vertex. + edge: u8, +} + +// Half-edge for hull data structure +HullHalfEdge :: struct { + // Next edge index CCW + next: u8, + + // Twin edge index + twin: u8, + + // index of origin vertex and point + origin: u8, + + // Face to the left of this edge + face: u8, +} + +// A hull face. Hulls use a half-edge data structure, so a face +// can be determined from a single half-edge index. +HullFace :: struct { + // An arbitrary half-edge on this face + edge: u8, +} + +// 64-bit hull version. Useful for validating serialized data. +HULL_VERSION :: 0x9D4716CE3793900E + +// A convex hull. +// @note This data structure has data hanging off the end and cannot be directly copied. +HullData :: struct { + // Version must be first and match B3_HULL_VERSION + version: u64, + + // The total number of bytes for this hull. + byteCount: c.int, + + // Hash of this hull (this field is zero when the hash is computed). + hash: u32, + + // Axis-aligned box in local space. + aabb: AABB, + + // Surface area, typically in squared meters. + surfaceArea: f32, + + // Volume, typically in m^3. + volume: f32, + + // The radius of the largest sphere at the center. + innerRadius: f32, + + // The local centroid + center: Vec3, + + // The inertia tensor about the centroid. + centralInertia: Matrix3, + + // The vertex count. + vertexCount: c.int, + + // Offset of the vertex array in bytes from the struct address. + vertexOffset: c.int, + + // Offset of the point array in bytes from the struct address. + pointOffset: c.int, + + // This is the half-edge count (double the edge count) + edgeCount: c.int, + + // Offset of the edge array in bytes from the struct address. + edgeOffset: c.int, + + // The face count. Hulls faces are convex polygons. + faceCount: c.int, + + // Offset of the face array in bytes from the struct address. + faceOffset: c.int, + + // Offset of the face plane array in bytes from the struct address. + planeOffset: c.int, + + // Explicit padding. Hull identity is a content hash and memcmp over raw bytes, + // so there must be no unnamed padding for struct copies to scramble. + padding: c.int, +} + +// Efficient box hull +BoxHull :: struct { + // The embedded hull. So the offsets index into the arrays that follow. + base: HullData, + boxVertices: [8]HullVertex, //< Box vertices. + boxPoints: [8]Vec3, //< Box points. + boxEdges: [24]HullHalfEdge, //< Box half-edges. + boxFaces: [6]HullFace, //< Box faces. + padding: [2]u8, //< Explicit padding, see b3HullData::padding. + boxPlanes: [6]Plane, //< Box face planes. +} + +/**@}*/ // hull + +/** + * @defgroup mesh Triangle Mesh + * @brief Triangle mesh collision shape + * @{ + */ + +// This is used to create a re-usable collision mesh +MeshDef :: struct { + // Triangle vertices + vertices: [^]Vec3 `fmt:"v,vertexCount"`, + + // Triangle vertex indices. 3 for each triangle. + indices: [^]i32, + + // Triangle material index. 1 per triangle. Indexes into b3ShapeDef::materials. + // This allows different run-time material data to be associated with different + // instances of this mesh. + materialIndices: [^]u8, + + // Tolerance for vertex welding in length units. + weldTolerance: f32, + + // The vertex count. Must be 3 or more. + vertexCount: c.int, + + // The triangle count. Must be 1 or more. + triangleCount: c.int, + + // Optionally weld nearby vertices. + weldVertices: bool, + + // Use the median split instead of SAH to speed up mesh creation. Good + // for meshes that are structured like a grid. + useMedianSplit: bool, + + // Compute triangle adjacency information using shared edges + identifyEdges: bool, +} + +// 64-bit mesh version. Useful for validating serialized data. +MESH_VERSION :: 0xABD11AB62A6E886D + +// Triangle mesh edge flags. + +MeshEdgeFlags :: distinct bit_set[MeshEdgeFlag; c.uint] +MeshEdgeFlag :: enum c.uint { + concaveEdge1 = 0, + concaveEdge2 = 1, + concaveEdge3 = 2, + + inverseConcaveEdge1 = 4, + inverseConcaveEdge2 = 5, + inverseConcaveEdge3 = 6, +} + +concaveEdge1 :: MeshEdgeFlags{.concaveEdge1} +concaveEdge2 :: MeshEdgeFlags{.concaveEdge2} +concaveEdge3 :: MeshEdgeFlags{.concaveEdge3} +inverseConcaveEdge1 :: MeshEdgeFlags{.inverseConcaveEdge1} +inverseConcaveEdge2 :: MeshEdgeFlags{.inverseConcaveEdge2} +inverseConcaveEdge3 :: MeshEdgeFlags{.inverseConcaveEdge3} +allConcaveEdges :: concaveEdge1 + concaveEdge2 + concaveEdge3 +flatEdge1 :: concaveEdge1 + inverseConcaveEdge1 +flatEdge2 :: concaveEdge2 + inverseConcaveEdge2 +flatEdge3 :: concaveEdge3 + inverseConcaveEdge3 +allFlatEdges :: flatEdge1 + flatEdge2 + flatEdge3 + +// A mesh triangle. +MeshTriangle :: struct { + index1: i32, //< Index of vertex 1. + index2: i32, //< Index of vertex 2. + index3: i32, //< Index of vertex 3. +} + +// A mesh BVH node. +MeshNode :: struct { + // The lower bound of the node AABB. Strategic placement for SIMD. + lowerBound: Vec3, + + // Anonymous union. + data: struct #raw_union { + // Internal node + asNode: bit_field u32 { + // Split axis. 0, 1, or 2. + axis: u32 | 2, + // Offset of the second child node. + childOffset: u32 | 30, + }, + + // Leaf node + asLeaf: bit_field u32 { + // Aligned with axis above and has value of 3 if this is a leaf. + type: u32 | 2, + + // The number of triangles for this leaf node. + triangleCount: u32 | 30, + }, + }, + + // The upper bound of the node AABB. Strategic placement for SIMD. + upperBound: Vec3, + + // The index of the leaf triangles. + triangleOffset: u32, +} + +// This is a sorted triangle collision bounding volume hierarchy. +// @note This struct has data hanging off the end and cannot be directly copied. +MeshData :: struct { + // Version must be first. + version: u64, + + // The total number of bytes for this mesh. + byteCount: c.int, + + // Hash of this mesh (this field is zero when the hash is computed) + hash: u32, + + // Local axis-aligned box. + bounds: AABB, + + // Combined surface area of all triangles. Single-sided. + surfaceArea: f32, + + // The height of the bounding volume hierarchy. + treeHeight: c.int, + + // The number of degenerate triangles. Diagnostic. + degenerateCount: c.int, + + // Offset of the node array in bytes from the struct address. + nodeOffset: c.int, + + // The number of BVH nodes. + nodeCount: c.int, + + // Offset of the vertex array in bytes from the struct address. + vertexOffset: c.int, + + // The number of vertices. + vertexCount: c.int, + + // Offset of the triangle array in bytes from the struct address. + triangleOffset: c.int, + + // The number of triangles. + triangleCount: c.int, + + // Offset of the material array in bytes from the struct address. + materialOffset: c.int, + + // The number of materials. + materialCount: c.int, + + // Offset of the triangle flag array in bytes from the struct address. + flagsOffset: c.int, +} + +// This allows mesh data to be re-used with different scales. +Mesh :: struct { + // Immutable pointer to the mesh data. + data: ^MeshData, + + // This scale may be non-uniform and have negative components. However, + // no component may be very small in magnitude. + scale: Vec3, +} + +/**@}*/ // mesh + +/** + * @defgroup height_field Height Field + * @brief Height field collision shape + * @{ + */ + +// Data used to create a height field +HeightFieldDef :: struct { + // Grid point heights + // count = countX * countZ + heights: [^]f32, + + // Grid cell material + // A value of 0xFF is reserved for holes + // count = (countX - 1) * (countZ - 1) + materialIndices: [^]u8, + + // The height field scale. All components must be positive values. + scale: Vec3, + + // The number of grid lines along the x-axis. + countX: c.int, + + // The number of grid lines along the z-axis. + countZ: c.int, + + // Global minimum and maximum heights used for quantization. This is important + // if you want height fields to be placed next to each other and line up exactly. + // In that case, both height fields should use the same minimum and maximum heights. + // All height values are clamped to this range. + // These values are in unscaled space. + globalMinimumHeight: f32, + + // The maximum. + globalMaximumHeight: f32, + + // Use clock-wise winding. This effectively inverts the height-field along the y-axis. + clockwiseWinding: bool, +} + +// This material index is used to designate holes in a height field. +HEIGHT_FIELD_HOLE :: 0xFF + +// 64-bit height-field version. Useful for validating serialized data. +HEIGHT_FIELD_VERSION :: 0x8B18CBD138A6BC84 + +// A height field with compressed storage. +// @note This data structure has data hanging off the end and cannot be directly copied. +HeightFieldData :: struct { + // Version must be first and match B3_HEIGHT_FIELD_VERSION + version: i64, + + // The total number of bytes for this height field. + byteCount: c.int, + + // Hash of this height field (this field is zero when the hash is computed). + hash: u32, + + // The local axis-aligned bounding box. + aabb: AABB, + + // The minimum y value. + minHeight: f32, + + // The maximum y value + maxHeight: f32, + + // The quantization scale. + heightScale: f32, + + // The overall scale. + scale: Vec3, + + // The number of grid columns along the local x-axis. + columnCount: c.int, + + // The number of grid rows along the local z-axis. + rowCount: c.int, + + // Offset of the compressed height array in bytes from the struct address. + // uint16_t, one per grid point. + heightsOffset: c.int, + + // Offset of the material index array in bytes from the struct address. + // uint8_t, one per cell. + materialOffset: c.int, + + // Offset of the flag array in bytes from the struct address. + // uint8_t, one per triangle. + flagsOffset: c.int, + + // Triangle winding. + clockwise: bool, + + // Explicit padding. Identity is a content hash over raw bytes, so there must + // be no unnamed padding for struct copies to scramble. + padding: [3]u8, +} + +/**@}*/ // height_field + +/** + * @defgroup compound Compound + * @brief Compound collision shape + * @{ + */ + +// Definition for a capsule in a compound shape. +CompoundCapsuleDef :: struct { + // Local capsule. + capsule: Capsule, + + // Material properties. + material: SurfaceMaterial, +} + +// Definition for a convex hull in a compound shape. +CompoundHullDef :: struct { + // Shared hull. + hull: ^HullData, + + // Transform of the shared hull into compound local space. + transform: Transform, + + // Material properties. + material: SurfaceMaterial, +} + +// Definition for a triangle mesh in a compound shape. +CompoundMeshDef :: struct { + // Shared mesh. + meshData: ^MeshData, + + // Transform of the shared mesh into compound local space. + transform: Transform, + + // Local space non-uniform mesh scale. May have negative components. + scale: Vec3, + + // Material properties. + // This array must line up with the material indices on the triangles. + materials: [^]SurfaceMaterial `fmt:"v,materialCount"`, + + // Number of materials. + materialCount: c.int, +} + +// Definition for a sphere in a compound shape. +CompoundSphereDef :: struct { + // Local sphere. + sphere: Sphere, + + // Material properties. + material: SurfaceMaterial, +} + +// Definition for creating a compound shape. All this data is fully cloned +// into the run-time compound shape. +CompoundDef :: struct { + // Capsule instances. + capsules: [^]CompoundCapsuleDef `fmt:"v,capsuleCount"`, + + // Number of capsules. + capsuleCount: int, + + // Hulls instances. + hulls: [^]CompoundHullDef `fmt:"v,hullCount"`, + + // Number of hull instances. + hullCount: int, + + // Mesh instances. + meshes: [^]CompoundMeshDef `fmt:"v,meshCount"`, + + // Number of mesh instances. + meshCount: int, + + // Sphere instances. + spheres: [^]CompoundSphereDef `fmt:"v,sphereCount"`, + + // Number of spheres. + sphereCount: int, +} + +// The compound version depends on the tree, mesh, and hull versions. +COMPOUND_VERSION :: 0x830778DB07086EB4 ~ DYNAMIC_TREE_VERSION ~ MESH_VERSION ~ HULL_VERSION + +// Meshes used in compounds have limited space for materials. If you have +// a mesh with many materials, you can use it outside of the compound. +MAX_COMPOUND_MESH_MATERIALS :: 4 + +// The runtime data for a compound shape. This is a potentially large yet highly optimized +// data structure. It can contain thousands of child shapes, yet at runtime it populates +// into the world as a single shape in the runtime broad-phase. +// This data structure has data living off the end and must be accessed using offsets. +// Accessors are provided for user relevant data. +CompoundData :: struct { + // The compound version is always first. + version: u64, + + // The total number of bytes for this compound. + byteCount: c.int, + + // Offset of the tree node array in bytes from the struct address. + nodeOffset: c.int, + + // Immutable dynamic tree. The tree node pointer must be fixed up using the node offset + tree: DynamicTree, + + // Offset of the material array in bytes from the struct address. + materialOffset: c.int, + + // The number of materials. + materialCount: c.int, + + // Offset of the capsule array in bytes from the struct address. + capsuleOffset: c.int, + + // The number of capsules. + capsuleCount: c.int, + + // Offset of the hull instance array in bytes from the struct address. + hullOffset: c.int, + + // The number of hull instances. + hullCount: c.int, + + // The number of unique hulls. Diagnostic. + sharedHullCount: c.int, + + // Offset of the mesh instance array in bytes from the struct address. + meshOffset: c.int, + + // The number of mesh instances. + meshCount: c.int, + + // The number of unique meshes. Diagnostic. + sharedMeshCount: c.int, + + // Offset of the sphere array in bytes from the struct address. + sphereOffset: c.int, + + // The number of spheres. + sphereCount: c.int, +} + +// A capsule that lives in a compound. +CompoundCapsule :: struct { + // Local capsule. + capsule: Capsule, + + // Index to a shared material. + materialIndex: c.int, +} + +// A hull that lives in a compound. +CompoundHull :: struct { + // Pointer to the unique shared hull. + hull: ^HullData, + + // The transform of this hull instance. + transform: Transform, + + // Index to a shared material. + materialIndex: c.int, +} + +// A mesh with non-uniform scale that lives in a compound. +CompoundMesh :: struct { + // Pointer to the unique shared mesh. + meshData: [^]MeshData, + + // The transform of this mesh instance. + transform: Transform, + + // Non-uniform scale of this mesh instance. + scale: Vec3, + + // This is used to access the surface material from b3GetCompoundMaterials. + // Requires an extra level of indirection. The triangle material index + // is clamped to B3_MAX_COMPOUND_MESH_MATERIALS. + // materialIndex = materialIndices[triangle->materialIndex] + materialIndices: [MAX_COMPOUND_MESH_MATERIALS]c.int, +} + +// A sphere that lives in a compound. +CompoundSphere :: struct { + // Local sphere. + sphere: Sphere, + + // Index to a shared material. + materialIndex: c.int, +} + +// Child shape of a compound +ChildShape :: struct { + // Tagged union. + using _: struct #raw_union { + capsule: Capsule, //< Capsule. + hull: ^HullData, //< Hull. + mesh: Mesh, //< Mesh. + sphere: Sphere, //< Sphere. + }, + + // Transform of the shape into compound local space. + transform: Transform, + + // Material indices. Index 0 is used for convex shapes. + // todo limit to 64K? + materialIndices: [MAX_COMPOUND_MESH_MATERIALS]c.int, + + // The shape type (union tag). + type: ShapeType, +} + +// Callback for compound overlap queries. +CompoundQueryFcn :: proc "c" (#by_ptr compound: CompoundData, childIndex: c.int, ctx: rawptr) -> bool + +/**@}*/ // compound + +/**@}*/ // geometry + +/** + * @defgroup collision Shape Collision + * Collide pairs of shapes. + * @{ + */ + +// A manifold point is a contact point belonging to a contact manifold. +// It holds details related to the geometry and dynamics of the contact points. +// Box3D uses speculative collision so some contact points may be separated. +// You may use the maxNormalImpulse to determine if there was an interaction during +// the time step. +ManifoldPoint :: struct { + // Location of the contact point relative to the bodyA center of mass in world space. + anchorA: Vec3, + + // Location of the contact point relative to the bodyB center of mass in world space. + anchorB: Vec3, + + // The separation of the contact point, negative if penetrating + separation: f32, + + // Cached separation used for contact recycling + baseSeparation: f32, + + // The impulse along the manifold normal vector. Since Box3D uses sub-stepping, this is + // result from the final sub-step. + normalImpulse: f32, + + // The total normal impulse applied during sub-stepping. This is important + // to identify speculative contact points that had an interaction in the time step. + totalNormalImpulse: f32, + + // Relative normal velocity pre-solve. Used for hit events. If the normal impulse is + // zero then there was no hit. Negative means shapes are approaching. + normalVelocity: f32, + + // Local point for matching + // Uniquely identifies a contact point between two shapes + featureId: u32, + + // Triangle index if one of the shapes is a mesh or height field + triangleIndex: c.int, + + // Did this contact point exist in the previous step? + persisted: bool, +} + +// A contact manifold describes the contact points between colliding shapes. +// @note Box3D uses speculative collision so some contact points may be separated. +Manifold :: struct { + // The manifold points. There may be 1 to 4 valid points. + points: [MAX_MANIFOLD_POINTS]ManifoldPoint, + + // The unit normal vector in world space, points from shape A to shape B + normal: Vec3, + + // Central friction angular impulse (applied about the normal) + twistImpulse: f32, + + // Central friction linear impulse + frictionImpulse: Vec3, + + // Rolling resistance angular impulse + rollingImpulse: Vec3, + + // The number of contact points, will be 0 to 4 + pointCount: c.int, +} + +// Cached separating axis feature. +SeparatingFeature :: enum c.int { + invalidAxis = 0, + backsideAxis, + faceAxisA, + faceAxisB, + edgePairAxis, + closestPointsAxis, + + // These are for testing + manualFaceAxisA, + manualFaceAxisB, + manualEdgePairAxis, +} + +// Cached triangle feature. +TriangleFeature :: enum c.int { + featureNone = 0, + featureTriangleFace, + featureHullFace, + // v1-v2 + featureEdge1, + // v2-v3 + featureEdge2, + // v3-v1 + featureEdge3, + featureVertex1, + featureVertex2, + featureVertex3, +} + +// Separating axis test cache. Provides temporal acceleration of collision routines. +SATCache :: struct { + // The separation when the cache is populated. Negative for overlap. + separation: f32, + + // b3SeparatingFeature. + type: u8, + + // Index of the feature on shape A. + indexA: u8, + + // Index of the feature on shape B. + indexB: u8, + + // Was the cache re-used? + hit: u8, +} + +// Contact points are always the result of two edges intersecting. +// It can be two edges of the same shape, which is just a shape vertex. +// Or a contact point can be the result of two edges crossing from different shapes. +// This is designed to support hull versus hull, but it is adapted to work +// with all shape types. The feature pair is used to identify contact points +// for temporal coherence and warm starting. +FeaturePair :: struct { + // Incoming type (either edge on shape A or shape B) + owner1: u8, + // Incoming edge index (into associated shape array) + index1: u8, + // Outgoing type (either edge on shape A or shape B) + owner2: u8, + // Outgoing edge index (into associated shape array) + index2: u8, +} + +// A local manifold point and normal in frame A. +LocalManifoldPoint :: struct { + // Local point in frame A. + point: Vec3, + + // The contact point separation. Negative for overlap. + separation: f32, + + // The feature pair for this point. + pair: FeaturePair, + + // The triangle index when collide with a mesh or height-field. + triangleIndex: c.int, +} + +// A local manifold with no dynamic information. Used by b3Collide functions. +LocalManifold :: struct { + // Local normal in frame A. + normal: Vec3, + + // The triangle normal. + triangleNormal: Vec3, + + // The manifold points. From a point buffer. + points: LocalManifoldPoint, + + // The number of manifold points. Only bounded by the buffer capacity. + pointCount: c.int, + + // The index of the triangle. + triangleIndex: c.int, + + i1: c.int, //< Vertex 1 index. + i2: c.int, //< Vertex 2 index. + i3: c.int, //< Vertex 3 index. + + // The squared distance of a sphere from a triangle. For ghost collision reduction. + squaredDistance: f32, + + // The triangle feature involved. + feature: TriangleFeature, + + // MeshEdgeFlags. + triangleFlags: MeshEdgeFlags, +} + +/**@}*/ // collision + +/** + * @defgroup debug_draw Debug Draw + * @{ + */ + +// These colors are used for debug draw and mostly match the named SVG colors. +// See https://www.rapidtables.com/web/color/index.html +// https://johndecember.com/html/spec/colorsvg.html +// https://upload.wikimedia.org/wikipedia/commons/2/2b/SVG_Recognized_color_keyword_names.svg +HexColor :: enum c.uint { + AliceBlue = 0xF0F8FF, + AntiqueWhite = 0xFAEBD7, + Aqua = 0x00FFFF, + Aquamarine = 0x7FFFD4, + Azure = 0xF0FFFF, + Beige = 0xF5F5DC, + Bisque = 0xFFE4C4, + Black = 0x000000, + BlanchedAlmond = 0xFFEBCD, + Blue = 0x0000FF, + BlueViolet = 0x8A2BE2, + Brown = 0xA52A2A, + Burlywood = 0xDEB887, + CadetBlue = 0x5F9EA0, + Chartreuse = 0x7FFF00, + Chocolate = 0xD2691E, + Coral = 0xFF7F50, + CornflowerBlue = 0x6495ED, + Cornsilk = 0xFFF8DC, + Crimson = 0xDC143C, + Cyan = 0x00FFFF, + DarkBlue = 0x00008B, + DarkCyan = 0x008B8B, + DarkGoldenRod = 0xB8860B, + DarkGray = 0xA9A9A9, + DarkGreen = 0x006400, + DarkKhaki = 0xBDB76B, + DarkMagenta = 0x8B008B, + DarkOliveGreen = 0x556B2F, + DarkOrange = 0xFF8C00, + DarkOrchid = 0x9932CC, + DarkRed = 0x8B0000, + DarkSalmon = 0xE9967A, + DarkSeaGreen = 0x8FBC8F, + DarkSlateBlue = 0x483D8B, + DarkSlateGray = 0x2F4F4F, + DarkTurquoise = 0x00CED1, + DarkViolet = 0x9400D3, + DeepPink = 0xFF1493, + DeepSkyBlue = 0x00BFFF, + DimGray = 0x696969, + DodgerBlue = 0x1E90FF, + FireBrick = 0xB22222, + FloralWhite = 0xFFFAF0, + ForestGreen = 0x228B22, + Fuchsia = 0xFF00FF, + Gainsboro = 0xDCDCDC, + GhostWhite = 0xF8F8FF, + Gold = 0xFFD700, + GoldenRod = 0xDAA520, + Gray = 0x808080, + Green = 0x008000, + GreenYellow = 0xADFF2F, + HoneyDew = 0xF0FFF0, + HotPink = 0xFF69B4, + IndianRed = 0xCD5C5C, + Indigo = 0x4B0082, + Ivory = 0xFFFFF0, + Khaki = 0xF0E68C, + Lavender = 0xE6E6FA, + LavenderBlush = 0xFFF0F5, + LawnGreen = 0x7CFC00, + LemonChiffon = 0xFFFACD, + LightBlue = 0xADD8E6, + LightCoral = 0xF08080, + LightCyan = 0xE0FFFF, + LightGoldenRodYellow = 0xFAFAD2, + LightGray = 0xD3D3D3, + LightGreen = 0x90EE90, + LightPink = 0xFFB6C1, + LightSalmon = 0xFFA07A, + LightSeaGreen = 0x20B2AA, + LightSkyBlue = 0x87CEFA, + LightSlateGray = 0x778899, + LightSteelBlue = 0xB0C4DE, + LightYellow = 0xFFFFE0, + Lime = 0x00FF00, + LimeGreen = 0x32CD32, + Linen = 0xFAF0E6, + Magenta = 0xFF00FF, + Maroon = 0x800000, + MediumAquaMarine = 0x66CDAA, + MediumBlue = 0x0000CD, + MediumOrchid = 0xBA55D3, + MediumPurple = 0x9370DB, + MediumSeaGreen = 0x3CB371, + MediumSlateBlue = 0x7B68EE, + MediumSpringGreen = 0x00FA9A, + MediumTurquoise = 0x48D1CC, + MediumVioletRed = 0xC71585, + MidnightBlue = 0x191970, + MintCream = 0xF5FFFA, + MistyRose = 0xFFE4E1, + Moccasin = 0xFFE4B5, + NavajoWhite = 0xFFDEAD, + Navy = 0x000080, + OldLace = 0xFDF5E6, + Olive = 0x808000, + OliveDrab = 0x6B8E23, + Orange = 0xFFA500, + OrangeRed = 0xFF4500, + Orchid = 0xDA70D6, + PaleGoldenRod = 0xEEE8AA, + PaleGreen = 0x98FB98, + PaleTurquoise = 0xAFEEEE, + PaleVioletRed = 0xDB7093, + PapayaWhip = 0xFFEFD5, + PeachPuff = 0xFFDAB9, + Peru = 0xCD853F, + Pink = 0xFFC0CB, + Plum = 0xDDA0DD, + PowderBlue = 0xB0E0E6, + Purple = 0x800080, + RebeccaPurple = 0x663399, + Red = 0xFF0000, + RosyBrown = 0xBC8F8F, + RoyalBlue = 0x4169E1, + SaddleBrown = 0x8B4513, + Salmon = 0xFA8072, + SandyBrown = 0xF4A460, + SeaGreen = 0x2E8B57, + SeaShell = 0xFFF5EE, + Sienna = 0xA0522D, + Silver = 0xC0C0C0, + SkyBlue = 0x87CEEB, + SlateBlue = 0x6A5ACD, + SlateGray = 0x708090, + Snow = 0xFFFAFA, + SpringGreen = 0x00FF7F, + SteelBlue = 0x4682B4, + Tan = 0xD2B48C, + Teal = 0x008080, + Thistle = 0xD8BFD8, + Tomato = 0xFF6347, + Turquoise = 0x40E0D0, + Violet = 0xEE82EE, + Wheat = 0xF5DEB3, + White = 0xFFFFFF, + WhiteSmoke = 0xF5F5F5, + Yellow = 0xFFFF00, + YellowGreen = 0x9ACD32, + + Box2DRed = 0xDC3132, + Box2DBlue = 0x30AEBF, + Box2DGreen = 0x8CC924, + Box2DYellow = 0xFFEE8C, +} + +// Debug draw material preset. Optionally packed into the unused high byte of a +// b3HexColor (or b3SurfaceMaterial::customColor) to drive the renderer's PBR +// roughness and metalness. The low 24 bits stay RGB, so a plain 0xRRGGBB color +// reads as b3_debugMaterialDefault and keeps the renderer's per-body-type look. +DebugMaterial :: enum c.uint { + Default = 0, + Matte, + Soft, + Dead, + Glossy, + Metallic, +} + + +// This is sent to the user for debug shape creation. The user should know the type in case they have +// custom sphere or capsule rendering. +DebugShape :: struct { + // Shape id. + shapeId: ShapeId, + + // Shape type. + type: ShapeType, + + // Tagged union. + using _: struct #raw_union { + capsule: ^Capsule `raw_union_tag:"type=.capsuleShape"`, //< Capsule shape. + compound: ^CompoundData `raw_union_tag:"type=.compoundShape"`, //< Compound shape. + heightField: ^HeightFieldData `raw_union_tag:"type=.heightShape"`, //< Height-field shape. + hull: ^HullData `raw_union_tag:"type=.hullShape"`, //< Convex hull shape. + mesh: ^Mesh `raw_union_tag:"type=.meshShape"`, //< Mesh shape with scale. + sphere: ^Sphere `raw_union_tag:"type=.sphereShape"`, //< Sphere shape. + }, +} + +// This struct is passed to b3World_Draw to draw a debug view of the simulation world. +// Callbacks receive world coordinates. In large world mode the translation is double precision so +// it stays accurate far from the origin. Shift into your own camera frame inside the callbacks. +DebugDraw :: struct { + // Draws a shape and returns true if drawing should continue + DrawShapeFcn: proc "c" (userShape: rawptr, transform: WorldTransform, color: HexColor, ctx: rawptr) -> bool, + + // Draw a line segment. + DrawSegmentFcn: proc "c" (p1, p2: Pos, color: HexColor, ctx: rawptr), + + // Draw a transform. Choose your own length scale. + DrawTransformFcn: proc "c" (transform: WorldTransform, ctx: rawptr), + + // Draw a point. + DrawPointFcn: proc "c" (p: Pos, size: f32, color: HexColor, ctx: rawptr), + + // Draw a sphere. + DrawSphereFcn: proc "c" (p: Pos, radius: f32, color: HexColor, alpha: f32, ctx: rawptr), + + // Draw a capsule. + DrawCapsuleFcn: proc "c" (p1, p2: Pos, radius: f32, color: HexColor, alpha: f32, ctx: rawptr), + + // Draw a bounding box. + DrawBoundsFcn: proc "c" (aabb: AABB, color: HexColor, ctx: rawptr), + + // Draw an oriented box. + DrawBoxFcn: proc "c" (extents: Vec3, transform: WorldTransform, color: HexColor, ctx: rawptr), + + // Draw a string in world space + DrawStringFcn: proc "c" (p: Pos, s: cstring, color: HexColor, ctx: rawptr), + + // World bounds to use for debug draw + drawingBounds: AABB, + + // Scale to use when drawing forces + forceScale: f32, + + // Global scaling for joint drawing + jointScale: f32, + + // Option to draw shapes + drawShapes: bool, + + // Option to draw joints + drawJoints: bool, + + // Option to draw additional information for joints + drawJointExtras: bool, + + // Option to draw the bounding boxes for shapes + drawBounds: bool, + + // Option to draw the mass and center of mass of dynamic bodies + drawMass: bool, + + // Option to draw body names + drawBodyNames: bool, + + // Option to draw contact points + drawContacts: bool, + + // Draw contact anchor A or B + drawAnchorA: c.int, + + // Option to visualize the graph coloring used for contacts and joints + drawGraphColors: bool, + + // Option to draw contact features + drawContactFeatures: bool, + + // Option to draw contact normals + drawContactNormals: bool, + + // Option to draw contact normal forces + drawContactForces: bool, + + // Option to draw contact friction forces + drawFrictionForces: bool, + + // Option to draw islands as bounding boxes + drawIslands: bool, + + // User context that is passed as an argument to drawing callback functions + ctx: rawptr, +} From 49120b0fa979c6553c9e7e3bacd70a8df7a81c27 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 2 Jul 2026 13:33:52 +0100 Subject: [PATCH 3/6] Use `q.xyz` rather than `transmute` --- core/math/linalg/general.odin | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/core/math/linalg/general.odin b/core/math/linalg/general.odin index 7013de244..90ff301bd 100644 --- a/core/math/linalg/general.odin +++ b/core/math/linalg/general.odin @@ -244,27 +244,18 @@ quaternion_mul_quaternion :: proc "contextless" (q1, q2: $Q) -> Q where IS_QUATE @(require_results) quaternion64_mul_vector3 :: proc "contextless" (q: $Q/quaternion64, v: $V/[3]$F/f16) -> V { - q := transmute(runtime.Raw_Quaternion64_Vector_Scalar)q - v := v - - t := cross(2*q.vector, v) - return V(v + q.scalar*t + cross(q.vector, t)) + t := cross(2*q.xyz, v) + return V(v + q.w*t + cross(q.xyz, t)) } @(require_results) quaternion128_mul_vector3 :: proc "contextless" (q: $Q/quaternion128, v: $V/[3]$F/f32) -> V { - q := transmute(runtime.Raw_Quaternion128_Vector_Scalar)q - v := v - - t := cross(2*q.vector, v) - return V(v + q.scalar*t + cross(q.vector, t)) + t := cross(2*q.xyz, v) + return V(v + q.w*t + cross(q.xyz, t)) } @(require_results) quaternion256_mul_vector3 :: proc "contextless" (q: $Q/quaternion256, v: $V/[3]$F/f64) -> V { - q := transmute(runtime.Raw_Quaternion256_Vector_Scalar)q - v := v - - t := cross(2*q.vector, v) - return V(v + q.scalar*t + cross(q.vector, t)) + t := cross(2*q.xyz, v) + return V(v + q.w*t + cross(q.xyz, t)) } quaternion_mul_vector3 :: proc{quaternion64_mul_vector3, quaternion128_mul_vector3, quaternion256_mul_vector3} From 723a4311451cb5ad8027834edffe315a46eb958b Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 2 Jul 2026 13:40:35 +0100 Subject: [PATCH 4/6] Add box3d.lib for Windows --- vendor/box3d/box3d.odin | 13 ++++++++++--- vendor/box3d/lib/box3d.lib | Bin 0 -> 2263698 bytes 2 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 vendor/box3d/lib/box3d.lib diff --git a/vendor/box3d/box3d.odin b/vendor/box3d/box3d.odin index fe9f591af..2eb792dea 100644 --- a/vendor/box3d/box3d.odin +++ b/vendor/box3d/box3d.odin @@ -7,9 +7,16 @@ import "core:c" ENABLE_VALIDATION :: false -@(export) -foreign import lib { - "box3d.lib", +when ODIN_OS == .Windows { + @(export) + foreign import lib { + "lib/box3d.lib", + } +} else { + @(export) + foreign import lib { + "system:box3d", + } } // This is used to indicate null for interfaces that work with indices instead of pointers diff --git a/vendor/box3d/lib/box3d.lib b/vendor/box3d/lib/box3d.lib new file mode 100644 index 0000000000000000000000000000000000000000..4bc6c5b212621be0b52b25b00344269a571ba769 GIT binary patch literal 2263698 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�NUZMS%g7su&nR7rBDe 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

cLql!=#C9A16DP-@arEas{l1^ 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

{6O8*+{A*6{36gH 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

oN?sWcnrE0 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

5%QY``SNEZdOeL2^JYzO$ix*I$Im~Q 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�SD>+ct2KhmCfz+VRYD0F0 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�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%0D$IiUOn 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 literal 0 HcmV?d00001 From 8a0d37efaf5e94a591a2f5af5f78bd97f64ce615 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 2 Jul 2026 13:41:11 +0100 Subject: [PATCH 5/6] Add box3d headers --- vendor/box3d/src/include/box3d/base.h | 193 ++ vendor/box3d/src/include/box3d/box3d.h | 1730 ++++++++++ vendor/box3d/src/include/box3d/collision.h | 645 ++++ vendor/box3d/src/include/box3d/config.h | 31 + vendor/box3d/src/include/box3d/constants.h | 123 + vendor/box3d/src/include/box3d/id.h | 178 + .../box3d/src/include/box3d/math_functions.h | 1208 +++++++ vendor/box3d/src/include/box3d/types.h | 3034 +++++++++++++++++ 8 files changed, 7142 insertions(+) create mode 100644 vendor/box3d/src/include/box3d/base.h create mode 100644 vendor/box3d/src/include/box3d/box3d.h create mode 100644 vendor/box3d/src/include/box3d/collision.h create mode 100644 vendor/box3d/src/include/box3d/config.h create mode 100644 vendor/box3d/src/include/box3d/constants.h create mode 100644 vendor/box3d/src/include/box3d/id.h create mode 100644 vendor/box3d/src/include/box3d/math_functions.h create mode 100644 vendor/box3d/src/include/box3d/types.h diff --git a/vendor/box3d/src/include/box3d/base.h b/vendor/box3d/src/include/box3d/base.h new file mode 100644 index 000000000..2c0bb93f3 --- /dev/null +++ b/vendor/box3d/src/include/box3d/base.h @@ -0,0 +1,193 @@ +// SPDX-FileCopyrightText: 2025 Erin Catto +// SPDX-License-Identifier: MIT + +#pragma once + +#include +#include + +// Compile-time options. Edit box3d/config.h, or define BOX3D_USER_CONFIG to +// point at your own copy. +#ifdef BOX3D_USER_CONFIG +#include BOX3D_USER_CONFIG +#endif +#include "config.h" + +// clang-format off +// +// Shared library macros +// Predefine BOX3D_EXPORT to reuse an existing export/import scheme, for example +// when compiling Box3D into another shared library. +#ifndef BOX3D_EXPORT +#if defined(_WIN32) && defined(box3d_EXPORTS) + // build the Windows DLL + #define BOX3D_EXPORT __declspec(dllexport) +#elif defined(_WIN32) && defined(BOX3D_DLL) + // using the Windows DLL + #define BOX3D_EXPORT __declspec(dllimport) +#elif defined(box3d_EXPORTS) + // building or using the shared library + #define BOX3D_EXPORT __attribute__((visibility("default"))) +#else + // static library + #define BOX3D_EXPORT +#endif +#endif + +// C++ macros +#ifdef __cplusplus + #define B3_API extern "C" BOX3D_EXPORT + #define B3_INLINE inline + +#if defined( _MSC_VER ) + #define B3_FORCE_INLINE __forceinline +#elif defined( __GNUC__ ) || defined( __clang__ ) + #define B3_FORCE_INLINE inline __attribute__((always_inline)) +#else + #define B3_FORCE_INLINE inline +#endif + + #define B3_LITERAL(T) T + #define B3_ZERO_INIT {} +#else + #define B3_API BOX3D_EXPORT + #define B3_INLINE static inline + +#if defined( _MSC_VER ) + #define B3_FORCE_INLINE static __forceinline +#elif defined( __GNUC__ ) || defined( __clang__ ) + #define B3_FORCE_INLINE static inline __attribute__((always_inline)) +#else + #define B3_FORCE_INLINE static inline +#endif + +/// Used for C literals like (b3Vec3){1.0f, 2.0f, 3.0f} where C++ requires b3Vec3{1.0f, 2.0f, 3.0f} + #define B3_LITERAL(T) (T) + #define B3_ZERO_INIT {0} +#endif +// clang-format on + +#if defined( BOX3D_VALIDATE ) && !defined( NDEBUG ) +#define B3_ENABLE_VALIDATION 1 +#else +#define B3_ENABLE_VALIDATION 0 +#endif + +/** + * @defgroup base Base + * Base functionality + * @{ + */ + +/// This is used to indicate null for interfaces that work with indices instead of pointers +#define B3_NULL_INDEX -1 + +/// Prototype for user allocation function. +/// @param size the allocation size in bytes +/// @param alignment the required alignment, guaranteed to be a power of 2 +typedef void* b3AllocFcn( int32_t size, int32_t alignment ); + +/// Prototype for user free function. +/// @param mem the memory previously allocated through `b3AllocFcn` +typedef void b3FreeFcn( void* mem ); + +/// Prototype for the user assert callback. Return 0 to skip the debugger break. +typedef int b3AssertFcn( const char* condition, const char* fileName, int lineNumber ); + +/// Prototype for user log callback. Used to log warnings. +typedef void b3LogFcn( const char* message ); + +/// This allows the user to override the allocation functions. These should be +/// set during application startup. +B3_API void b3SetAllocator( b3AllocFcn* allocFcn, b3FreeFcn* freeFcn ); + +/// Total bytes allocated by Box3D +B3_API int32_t b3GetByteCount( void ); + +/// Override the default assert callback. +/// @param assertFcn a non-null assert callback +B3_API void b3SetAssertFcn( b3AssertFcn* assertFcn ); + +/// see https://github.com/scottt/debugbreak +#if defined( _MSC_VER ) +/// Break to the debugger +#define B3_BREAKPOINT __debugbreak() +#elif defined( __GNUC__ ) || defined( __clang__ ) +#define B3_BREAKPOINT __builtin_trap() +#else +/// Unknown compiler +#include +#define B3_BREAKPOINT assert( 0 ) +#endif + +#if !defined( NDEBUG ) || defined( B3_ENABLE_ASSERT ) +/// Internal assertion handler. Allows for host intervention. +B3_API int b3InternalAssert( const char* condition, const char* fileName, int lineNumber ); +/// Assert that a condition is true. +#define B3_ASSERT( condition ) \ + ( (void)( ( !!( condition ) ) || ( b3InternalAssert( #condition, __FILE__, (int)( __LINE__ ) ), 0 ) ) ) +#else +#define B3_ASSERT( ... ) ( (void)0 ) +#endif + +#if B3_ENABLE_VALIDATION +/// Validation is typically only enabled in debug builds. +/// Floating point tolerance checks should use this instead of the regular assertion +#define B3_VALIDATE( condition ) B3_ASSERT( condition ) +#else +/// Validation is typically only enabled in debug builds. +/// Floating point tolerance checks should use this instead of the regular assertion +#define B3_VALIDATE( ... ) ( (void)0 ) +#endif + +/// Override the default logging callback. +B3_API void b3SetLogFcn( b3LogFcn* logFcn ); + +/// Version numbering scheme. +/// See https://semver.org/ +typedef struct b3Version +{ + /// Significant changes + int major; + + /// Incremental changes + int minor; + + /// Bug fixes + int revision; +} b3Version; + +/// Get the current version of Box3D +B3_API b3Version b3GetVersion( void ); + +/// @return true if the library was built with BOX3D_DOUBLE_PRECISION (large world mode) +B3_API bool b3IsDoublePrecision( void ); + +/**@}*/ + +//! @cond + +/// Get the absolute number of system ticks. The value is platform specific. +B3_API uint64_t b3GetTicks( void ); + +/// Get the milliseconds passed from an initial tick value. +B3_API float b3GetMilliseconds( uint64_t ticks ); + +/// Get the milliseconds passed from an initial tick value. +B3_API float b3GetMillisecondsAndReset( uint64_t* ticks ); + +/// Yield to be used in a busy loop. +B3_API void b3Yield( void ); + +/// Sleep the current thread for a number of milliseconds. +B3_API void b3Sleep( int milliseconds ); + +// Simple djb2 hash function for determinism testing +#define B3_HASH_INIT 5381 +B3_API uint32_t b3Hash( uint32_t hash, const uint8_t* data, int count ); + +// Dump file support functions +B3_API void b3WriteBinaryFile( void* data, int size, const char* fileName ); +B3_API void* b3ReadBinaryFile( const char* prefix, const char* fileName, int* memSize ); + +//! @endcond diff --git a/vendor/box3d/src/include/box3d/box3d.h b/vendor/box3d/src/include/box3d/box3d.h new file mode 100644 index 000000000..22756636a --- /dev/null +++ b/vendor/box3d/src/include/box3d/box3d.h @@ -0,0 +1,1730 @@ +// SPDX-FileCopyrightText: 2025 Erin Catto +// SPDX-License-Identifier: MIT + +#pragma once + +#include "base.h" +#include "collision.h" +#include "id.h" +#include "math_functions.h" +#include "types.h" + +#include + +/** + * @defgroup world World + * These functions allow you to create a simulation world. + * + * You can add rigid bodies and joint constraints to the world and run the simulation. You can get contact + * information to get contact points and normals as well as events. You can query the world, checking for overlaps and casting + * rays or shapes. There is also debugging information such as debug draw, timing information, and counters. You can find + * documentation here: https://box2d.org/ + * @{ + */ + +#if defined( BOX3D_DOUBLE_PRECISION ) +// Force a link error if the application and library disagree on precision. A float app linking +// a double precision library, or the reverse, gets one unresolved external on the first call +// every program makes. CMake consumers inherit the define and cannot mismatch. +#define b3CreateWorld b3CreateWorldDoublePrecision +#endif + +/// Create a world for rigid body simulation. A world contains bodies, shapes, and constraints. You may create +/// up to 128 worlds. Each world is completely independent and may be simulated in parallel. +/// @return the world id. +B3_API b3WorldId b3CreateWorld( const b3WorldDef* def ); + +/// Destroy a world +B3_API void b3DestroyWorld( b3WorldId worldId ); + +/// Get the current number of worlds +B3_API int b3GetWorldCount( void ); + +/// Get the maximum number of simultaneous worlds that have been created +B3_API int b3GetMaxWorldCount( void ); + +/// World id validation. Provides validation for up to 64K allocations. +B3_API bool b3World_IsValid( b3WorldId id ); + +/// Simulate a world for one time step. This performs collision detection, integration, and constraint solution. +/// @param worldId The world to simulate +/// @param timeStep The amount of time to simulate, this should be a fixed number. Usually 1/60. +/// @param subStepCount The number of sub-steps, increasing the sub-step count can increase accuracy. Usually 4. +B3_API void b3World_Step( b3WorldId worldId, float timeStep, int subStepCount ); + +/// Call this to draw shapes and other debug draw data +B3_API void b3World_Draw( b3WorldId worldId, b3DebugDraw* draw, uint64_t maskBits ); + +/// Get the world's bounds. This is the bounding box that covers the current simulation. May have a small +/// amount of padding. +B3_API b3AABB b3World_GetBounds( b3WorldId worldId ); + +/// Get the body events for the current time step. The event data is transient. Do not store a reference to this data. +B3_API b3BodyEvents b3World_GetBodyEvents( b3WorldId worldId ); + +/// Get sensor events for the current time step. The event data is transient. Do not store a reference to this data. +B3_API b3SensorEvents b3World_GetSensorEvents( b3WorldId worldId ); + +/// Get contact events for this current time step. The event data is transient. Do not store a reference to this data. +B3_API b3ContactEvents b3World_GetContactEvents( b3WorldId worldId ); + +/// Get the joint events for the current time step. The event data is transient. Do not store a reference to this data. +B3_API b3JointEvents b3World_GetJointEvents( b3WorldId worldId ); + +/// Overlap test for all shapes that *potentially* overlap the provided AABB +B3_API b3TreeStats b3World_OverlapAABB( b3WorldId worldId, b3AABB aabb, b3QueryFilter filter, b3OverlapResultFcn* fcn, + void* context ); + +/// Overlap test for all shapes that overlap the provided shape proxy. The proxy points are relative +/// to the world origin, which lets the query stay precise far from the world origin. +B3_API b3TreeStats b3World_OverlapShape( b3WorldId worldId, b3Pos origin, const b3ShapeProxy* proxy, b3QueryFilter filter, + b3OverlapResultFcn* fcn, void* context ); + +/// Cast a ray into the world to collect shapes in the path of the ray. +/// Your callback function controls whether you get the closest point, any point, or n-points. +/// @note The callback function may receive shapes in any order +/// @param worldId The world to cast the ray against +/// @param origin The start point of the ray +/// @param translation The translation of the ray from the start point to the end point +/// @param filter Contains bit flags to filter unwanted shapes from the results +/// @param fcn A user implemented callback function +/// @param context A user context that is passed along to the callback function +/// @return traversal performance counters +B3_API b3TreeStats b3World_CastRay( b3WorldId worldId, b3Pos origin, b3Vec3 translation, b3QueryFilter filter, + b3CastResultFcn* fcn, void* context ); + +/// Cast a ray into the world to collect the closest hit. This is a convenience function. Ignores initial overlap. +/// This is less general than b3World_CastRay() and does not allow for custom filtering. +B3_API b3RayResult b3World_CastRayClosest( b3WorldId worldId, b3Pos origin, b3Vec3 translation, b3QueryFilter filter ); + +/// Cast a shape through the world. Similar to a cast ray except that a shape is cast instead of a point. +/// The proxy points are relative to the origin and the hit points come back as world positions, so the +/// cast stays precise far from the world origin. +/// @see b3World_CastRay +B3_API b3TreeStats b3World_CastShape( b3WorldId worldId, b3Pos origin, const b3ShapeProxy* proxy, b3Vec3 translation, + b3QueryFilter filter, b3CastResultFcn* fcn, void* context ); + +/// Cast a capsule mover through the world. This is a special shape cast that handles sliding along other shapes while reducing +/// clipping. This is not a good source of information about what the mover is touching. Instead use the planes returned by +/// b3World_CollideMover. +/// @param worldId World to cast the mover against +/// @param origin World position the mover capsule is relative to +/// @param mover Capsule mover, relative to the origin +/// @param translation Desired mover translation +/// @param filter Contains bit flags to filter unwanted shapes from the results +/// @param fcn Optional callback for custom shape filtering +/// @param context A user context that is passed along to the callback function +/// @return the translation fraction +B3_API float b3World_CastMover( b3WorldId worldId, b3Pos origin, const b3Capsule* mover, b3Vec3 translation, b3QueryFilter filter, + b3MoverFilterFcn* fcn, void* context ); + +/// Collide a capsule mover with the world, gathering collision planes that can be fed to b3SolvePlanes. Useful for +/// kinematic character movement. The mover and the returned planes are relative to the origin. +B3_API void b3World_CollideMover( b3WorldId worldId, b3Pos origin, const b3Capsule* mover, b3QueryFilter filter, + b3PlaneResultFcn* fcn, void* context ); + +/// Enable/disable sleep. If your application does not need sleeping, you can gain some performance +/// by disabling sleep completely at the world level. +/// @see b3WorldDef +B3_API void b3World_EnableSleeping( b3WorldId worldId, bool flag ); + +/// Is body sleeping enabled? +B3_API bool b3World_IsSleepingEnabled( b3WorldId worldId ); + +/// Enable/disable continuous collision between dynamic and static bodies. Generally you should keep continuous +/// collision enabled to prevent fast moving objects from going through static objects. The performance gain from +/// disabling continuous collision is minor. +/// @see b3WorldDef +B3_API void b3World_EnableContinuous( b3WorldId worldId, bool flag ); + +/// Is continuous collision enabled? +B3_API bool b3World_IsContinuousEnabled( b3WorldId worldId ); + +/// Adjust the restitution threshold. It is recommended not to make this value very small +/// because it will prevent bodies from sleeping. Usually in meters per second. +/// @see b3WorldDef +B3_API void b3World_SetRestitutionThreshold( b3WorldId worldId, float value ); + +/// Get the restitution speed threshold. Usually in meters per second. +B3_API float b3World_GetRestitutionThreshold( b3WorldId worldId ); + +/// Adjust the hit event threshold. This controls the collision speed needed to generate a b3ContactHitEvent. +/// Usually in meters per second. +/// @see b3WorldDef::hitEventThreshold +B3_API void b3World_SetHitEventThreshold( b3WorldId worldId, float value ); + +/// Get the hit event speed threshold. Usually in meters per second. +B3_API float b3World_GetHitEventThreshold( b3WorldId worldId ); + +/// Register the custom filter callback. This is optional. +B3_API void b3World_SetCustomFilterCallback( b3WorldId worldId, b3CustomFilterFcn* fcn, void* context ); + +/// Register the pre-solve callback. This is optional. +B3_API void b3World_SetPreSolveCallback( b3WorldId worldId, b3PreSolveFcn* fcn, void* context ); + +/// Set the gravity vector for the entire world. Box3D has no concept of an up direction and this +/// is left as a decision for the application. Usually in m/s^2. +/// @see b3WorldDef +B3_API void b3World_SetGravity( b3WorldId worldId, b3Vec3 gravity ); + +/// Get the gravity vector +B3_API b3Vec3 b3World_GetGravity( b3WorldId worldId ); + +/// Apply a radial explosion +/// @param worldId The world id +/// @param explosionDef The explosion definition +B3_API void b3World_Explode( b3WorldId worldId, const b3ExplosionDef* explosionDef ); + +/// Adjust contact tuning parameters +/// @param worldId The world id +/// @param hertz The contact stiffness (cycles per second) +/// @param dampingRatio The contact bounciness with 1 being critical damping (non-dimensional) +/// @param contactSpeed The maximum contact constraint push out speed (meters per second) +/// @note Advanced feature +B3_API void b3World_SetContactTuning( b3WorldId worldId, float hertz, float dampingRatio, float contactSpeed ); + +/// Set the contact point recycling distance. Setting this to zero disables contact point recycling. +/// Usually in meters. +B3_API void b3World_SetContactRecycleDistance( b3WorldId worldId, float recycleDistance ); + +/// Get the contact point recycling distance. Usually in meters. +B3_API float b3World_GetContactRecycleDistance( b3WorldId worldId ); + +/// Set the maximum linear speed. Usually in m/s. +B3_API void b3World_SetMaximumLinearSpeed( b3WorldId worldId, float maximumLinearSpeed ); + +/// Get the maximum linear speed. Usually in m/s. +B3_API float b3World_GetMaximumLinearSpeed( b3WorldId worldId ); + +/// Enable/disable constraint warm starting. Advanced feature for testing. Disabling +/// warm starting greatly reduces stability and provides no performance gain. +B3_API void b3World_EnableWarmStarting( b3WorldId worldId, bool flag ); + +/// Is constraint warm starting enabled? +B3_API bool b3World_IsWarmStartingEnabled( b3WorldId worldId ); + +/// Get the number of awake bodies +B3_API int b3World_GetAwakeBodyCount( b3WorldId worldId ); + +/// Get the current world performance profile +B3_API b3Profile b3World_GetProfile( b3WorldId worldId ); + +/// Get world counters and sizes +B3_API b3Counters b3World_GetCounters( b3WorldId worldId ); + +/// Get max capacity. This can be used with b3WorldDef to avoid run-time allocations and copies +B3_API b3Capacity b3World_GetMaxCapacity( b3WorldId worldId ); + +/// Set the user data pointer. +B3_API void b3World_SetUserData( b3WorldId worldId, void* userData ); + +/// Get the user data pointer. +B3_API void* b3World_GetUserData( b3WorldId worldId ); + +/// Set the friction callback. Passing NULL resets to default. +B3_API void b3World_SetFrictionCallback( b3WorldId worldId, b3FrictionCallback* callback ); + +/// Set the restitution callback. Passing NULL resets to default. +B3_API void b3World_SetRestitutionCallback( b3WorldId worldId, b3RestitutionCallback* callback ); + +/// Set the worker count. Must be in the range [1, B3_MAX_WORKERS] +B3_API void b3World_SetWorkerCount( b3WorldId worldId, int count ); + +/// Get the worker count. +B3_API int b3World_GetWorkerCount( b3WorldId worldId ); + +/// Dump memory stats to log. +B3_API void b3World_DumpMemoryStats( b3WorldId worldId ); + +/// Dump shape bounds to box3d_bounds.txt +B3_API void b3World_DumpShapeBounds( b3WorldId worldId, b3BodyType type ); + +/// This is for internal testing +B3_API void b3World_RebuildStaticTree( b3WorldId worldId ); + +/// This is for internal testing +B3_API void b3World_EnableSpeculative( b3WorldId worldId, bool flag ); + +/// Dump world to a text file. Saves only awake bodies and associated static bodies. +/// Meshes are saved to binary b3m files. +B3_API void b3World_DumpAwake( b3WorldId worldId ); + +/// Dump world to a text file. Meshes are saved to binary b3m files. +B3_API void b3World_Dump( b3WorldId worldId ); + +/** + * @defgroup recording Recording + * @brief Record and replay world state for debugging. + * @{ + */ + +/// Opaque recording handle. Create with b3CreateRecording, destroy with b3DestroyRecording. +typedef struct b3Recording b3Recording; + +/// Create a recording buffer with an optional initial byte capacity. +/// Pass 0 to use the default (64 KiB). The buffer grows on demand. +/// @return a new recording, owned by the caller +B3_API b3Recording* b3CreateRecording( int byteCapacity ); + +/// Destroy a recording and free its buffer. +/// @param recording may be NULL +B3_API void b3DestroyRecording( b3Recording* recording ); + +/// Get a pointer to the raw recording bytes. +/// Valid until the recording buffer is modified or destroyed. +/// @param recording the recording handle +/// @return pointer to the byte buffer, or NULL if no bytes have been written +B3_API const uint8_t* b3Recording_GetData( const b3Recording* recording ); + +/// Get the number of bytes currently in the recording buffer. +/// @param recording the recording handle +B3_API int b3Recording_GetSize( const b3Recording* recording ); + +/// Begin recording world mutations into the provided buffer. +/// The buffer is reset on each call so a single b3Recording can be reused for multiple sessions. +/// @param worldId the world to record +/// @param recording the recording handle to write into +B3_API void b3World_StartRecording( b3WorldId worldId, b3Recording* recording ); + +/// End the current recording session. Writes the trailing geometry registry and +/// backpatches the header. The buffer remains valid until the recording is destroyed. +/// @param worldId the world currently being recorded +B3_API void b3World_StopRecording( b3WorldId worldId ); + +/// Save the recording buffer to a file. Returns true on success. +/// @param recording the recording to save +/// @param path file path to write +B3_API bool b3SaveRecordingToFile( const b3Recording* recording, const char* path ); + +/// Load a recording from a file. Returns NULL on failure (file not found, wrong magic). +/// The caller owns the returned recording and must destroy it with b3DestroyRecording. +/// @param path file path to read +B3_API b3Recording* b3LoadRecordingFromFile( const char* path ); + +/// Replay a recording from memory and verify it reproduces the same world-state hashes. +/// Stands up a fresh world, restores the seed snapshot, replays every op, and checks each embedded +/// StateHash record. Returns true if replay completed without id mismatches or hash divergences. +/// @param data pointer to recording bytes +/// @param size byte count of the recording +/// @param workerCount reserved for future multithreaded replay; pass 1 for now +B3_API bool b3ValidateReplay( const void* data, int size, int workerCount ); + +/// Opaque incremental replay player with a keyframe ring for O(interval) backward seek. +typedef struct b3RecPlayer b3RecPlayer; + +/// Summary of a recording, read once at open so a viewer can frame and label it. +typedef struct b3RecPlayerInfo +{ + int frameCount; // total recorded steps + int workerCount; // worker count requested for the replay world + float timeStep; // dt of the recorded steps + int subStepCount; // recorded sub-steps + float lengthScale; // length units per meter in effect when recorded + b3AABB bounds; // accumulated world bounds over the recording, zero-extent if unavailable +} b3RecPlayerInfo; + +/// Create a player over a recording. Owns a private copy of the bytes. +/// @param data pointer to recording bytes +/// @param size byte count of the recording +/// @param workerCount worker count for the replay world; pass 1 to match a serial recording. +/// Replaying at a different count re-partitions the constraint graph, so the StateHash check +/// becomes a cross-thread determinism test. Adjustable later with b3RecPlayer_SetWorkerCount. +/// @return a new player, or NULL on bad header or deserialization failure +B3_API b3RecPlayer* b3RecPlayer_Create( const void* data, int size, int workerCount ); + +/// Destroy the player and free all memory. Restores the previous global length scale. +B3_API void b3RecPlayer_Destroy( b3RecPlayer* player ); + +/// Advance one frame: dispatch ops until the next Step completes. +/// @return true when a frame was stepped, false at end-of-recording +B3_API bool b3RecPlayer_StepFrame( b3RecPlayer* player ); + +/// Rewind to frame 0 (in-place restore so the world id stays stable). +B3_API void b3RecPlayer_Restart( b3RecPlayer* player ); + +/// Seek to a specific frame. Forward seek steps op-by-op; backward seek restores +/// the nearest keyframe then re-steps the remaining gap. +B3_API void b3RecPlayer_SeekFrame( b3RecPlayer* player, int targetFrame ); + +/// @return the world currently driven by this player +B3_API b3WorldId b3RecPlayer_GetWorldId( const b3RecPlayer* player ); + +/// @return the last fully-stepped frame index (0 before any step) +B3_API int b3RecPlayer_GetFrame( const b3RecPlayer* player ); + +/// @return total number of recorded frames +B3_API int b3RecPlayer_GetFrameCount( const b3RecPlayer* player ); + +/// @return true when the op stream is exhausted +B3_API bool b3RecPlayer_IsAtEnd( const b3RecPlayer* player ); + +/// @return true when any StateHash mismatch has been detected +B3_API bool b3RecPlayer_HasDiverged( const b3RecPlayer* player ); + +/// @return a summary of the recording read at open: frame count, recorded tuning, and bounds +B3_API b3RecPlayerInfo b3RecPlayer_GetInfo( const b3RecPlayer* player ); + +/// @return the first frame at which replay diverged, or -1 if it has not diverged +B3_API int b3RecPlayer_GetDivergeFrame( const b3RecPlayer* player ); + +/// Set the worker count of the replay world. Clamped to [1, B3_MAX_WORKERS]. Applied to the live +/// world at once and reused whenever the player rebuilds its world on Restart or a backward seek. +/// Replaying at a different count than recorded re-partitions the constraint graph, so the StateHash +/// check becomes a cross-thread determinism test. +B3_API void b3RecPlayer_SetWorkerCount( b3RecPlayer* player, int count ); + +/// Tune the keyframe ring used to speed up backward seeking. A keyframe is a periodic snapshot the +/// player restores from instead of replaying from the start, trading memory for seek speed. +/// @param player the recording player +/// @param budgetBytes memory cap for the kept snapshots; the spacing widens to stay under it +/// @param minIntervalFrames finest spacing between keyframes, in frames +/// A zero budget or a non-positive interval keeps that value. Clears the existing ring, so call +/// b3RecPlayer_Restart afterward to repopulate it under the new policy. +B3_API void b3RecPlayer_SetKeyframePolicy( b3RecPlayer* player, size_t budgetBytes, int minIntervalFrames ); + +/// @return the keyframe memory budget in bytes +B3_API size_t b3RecPlayer_GetKeyframeBudget( const b3RecPlayer* player ); + +/// @return the finest keyframe spacing in frames +B3_API int b3RecPlayer_GetKeyframeMinInterval( const b3RecPlayer* player ); + +/// @return the current keyframe spacing in frames; starts at the min interval and doubles as the +/// ring evicts to stay under budget, so it reflects the effective backward-seek granularity now +B3_API int b3RecPlayer_GetKeyframeInterval( const b3RecPlayer* player ); + +/// @return the memory currently held by keyframe snapshots, in bytes +B3_API size_t b3RecPlayer_GetKeyframeBytes( const b3RecPlayer* player ); + +/// @return the number of bodies tracked in creation order (including holes for destroyed bodies) +B3_API int b3RecPlayer_GetBodyCount( const b3RecPlayer* player ); + +/// Resolve a creation ordinal to the live body id at the current frame. +/// @return the body id, or a null id if that ordinal is out of range or its body is destroyed +B3_API b3BodyId b3RecPlayer_GetBodyId( const b3RecPlayer* player, int index ); + +/// Wire host debug-shape callbacks into the player's replay world so a renderer can build +/// per-shape draw resources (the 3D sample needs this or the replay world draws nothing). +/// Rebuilds the current world under the new callbacks and rewinds to frame 0, so call it +/// once right after b3RecPlayer_Create and re-read the world id afterward. The callbacks +/// persist across Restart and backward seeks, which recreate the world internally. +/// @param player the player to configure +/// @param createDebugShape called when a replayed shape is added; returns a user draw handle +/// @param destroyDebugShape called when a replayed shape is removed; may be NULL +/// @param context user context passed to both callbacks +B3_API void b3RecPlayer_SetDebugShapeCallbacks( b3RecPlayer* player, b3CreateDebugShapeCallback* createDebugShape, + b3DestroyDebugShapeCallback* destroyDebugShape, void* context ); + +/// Draw the spatial queries recorded during the most recently replayed frame, layered on top of the +/// world. Call after b3World_Draw. NULL draw function pointers are skipped. +/// @param player a valid player handle +/// @param draw debug draw callbacks +/// @param queryIndex index of the frame query to draw, or -1 to draw all of them +/// @param selectedIndex index of the query to emphasize (reserved color plus a label), or -1 for none +B3_API void b3RecPlayer_DrawFrameQueries( b3RecPlayer* player, b3DebugDraw* draw, int queryIndex, int selectedIndex ); + +/// The kind of a recorded spatial query, matching the public query and cast functions. +typedef enum b3RecQueryType +{ + b3_recQueryOverlapAABB, + b3_recQueryOverlapShape, + b3_recQueryCastRay, + b3_recQueryCastShape, + b3_recQueryCastRayClosest, + b3_recQueryCastMover, + b3_recQueryCollideMover, +} b3RecQueryType; + +/// A spatial query recorded during a replayed frame, exposed for inspection. +typedef struct b3RecQueryInfo +{ + b3RecQueryType type; + b3QueryFilter filter; + b3AABB aabb; // world-space bounds of the query, swept for casts + b3Pos origin; // query origin (zero for overlap AABB) + b3Vec3 translation; // ray and cast translation + int hitCount; // number of recorded results + uint64_t key; // identity key, the hash of (id, name), 0 if untagged + uint64_t id; // query id, 0 if none + const char* name; // query label, NULL if none +} b3RecQueryInfo; + +/// One result of a recorded spatial query. +typedef struct b3RecQueryHit +{ + b3ShapeId shape; + b3Pos point; + b3Vec3 normal; + float fraction; +} b3RecQueryHit; + +/// @return the number of spatial queries recorded for the most recently replayed frame +B3_API int b3RecPlayer_GetFrameQueryCount( const b3RecPlayer* player ); + +/// Get a recorded query from the most recently replayed frame by index. +B3_API b3RecQueryInfo b3RecPlayer_GetFrameQuery( const b3RecPlayer* player, int index ); + +/// Get one result of a recorded query from the most recently replayed frame. +B3_API b3RecQueryHit b3RecPlayer_GetFrameQueryHit( const b3RecPlayer* player, int queryIndex, int hitIndex ); + +/**@}*/ // recording + +/** @} */ // world + +/** + * @defgroup body Body + * This is the body API. + * @{ + */ + +/// Create a rigid body given a definition. No reference to the definition is retained. So you can create the definition +/// on the stack and pass it as a pointer. +/// @code{.c} +/// b3BodyDef bodyDef = b3DefaultBodyDef(); +/// b3BodyId myBodyId = b3CreateBody(myWorldId, &bodyDef); +/// @endcode +/// @warning This function is locked during callbacks. +B3_API b3BodyId b3CreateBody( b3WorldId worldId, const b3BodyDef* def ); + +/// Destroy a rigid body given an id. This destroys all shapes and joints attached to the body. +/// Do not keep references to the associated shapes and joints. +B3_API void b3DestroyBody( b3BodyId bodyId ); + +/// Body identifier validation. A valid body exists in a world and is non-null. +/// This can be used to detect orphaned ids. Provides validation for up to 64K allocations. +B3_API bool b3Body_IsValid( b3BodyId id ); + +/// Get the body type: static, kinematic, or dynamic +B3_API b3BodyType b3Body_GetType( b3BodyId bodyId ); + +/// Change the body type. This is an expensive operation. This automatically updates the mass +/// properties regardless of the automatic mass setting. +B3_API void b3Body_SetType( b3BodyId bodyId, b3BodyType type ); + +/// Set the body name. Up to B3_BODY_NAME_LENGTH characters including null termination. +B3_API void b3Body_SetName( b3BodyId bodyId, const char* name ); + +/// Get the body name. +B3_API const char* b3Body_GetName( b3BodyId bodyId ); + +/// Set the user data for a body +B3_API void b3Body_SetUserData( b3BodyId bodyId, void* userData ); + +/// Get the user data stored in a body +B3_API void* b3Body_GetUserData( b3BodyId bodyId ); + +/// Get the world position of a body. This is the location of the body origin. +B3_API b3Pos b3Body_GetPosition( b3BodyId bodyId ); + +/// Get the world rotation of a body as a quaternion +B3_API b3Quat b3Body_GetRotation( b3BodyId bodyId ); + +/// Get the world transform of a body. +B3_API b3WorldTransform b3Body_GetTransform( b3BodyId bodyId ); + +/// Set the world transform of a body. This acts as a teleport and is fairly expensive. +/// @note Generally you should create a body with the intended transform. +/// @see b3BodyDef::position and b3BodyDef::rotation +B3_API void b3Body_SetTransform( b3BodyId bodyId, b3Pos position, b3Quat rotation ); + +/// Get a local point on a body given a world point +B3_API b3Vec3 b3Body_GetLocalPoint( b3BodyId bodyId, b3Pos worldPoint ); + +/// Get a world point on a body given a local point +B3_API b3Pos b3Body_GetWorldPoint( b3BodyId bodyId, b3Vec3 localPoint ); + +/// Get a local vector on a body given a world vector +B3_API b3Vec3 b3Body_GetLocalVector( b3BodyId bodyId, b3Vec3 worldVector ); + +/// Get a world vector on a body given a local vector +B3_API b3Vec3 b3Body_GetWorldVector( b3BodyId bodyId, b3Vec3 localVector ); + +/// Get the linear velocity of a body's center of mass. Usually in meters per second. +B3_API b3Vec3 b3Body_GetLinearVelocity( b3BodyId bodyId ); + +/// Get the angular velocity of a body in radians per second +B3_API b3Vec3 b3Body_GetAngularVelocity( b3BodyId bodyId ); + +/// Set the linear velocity of a body. Usually in meters per second. +B3_API void b3Body_SetLinearVelocity( b3BodyId bodyId, b3Vec3 linearVelocity ); + +/// Set the angular velocity of a body in radians per second +B3_API void b3Body_SetAngularVelocity( b3BodyId bodyId, b3Vec3 angularVelocity ); + +/// Set the velocity to reach the given transform after a given time step. +/// The result will be close but maybe not exact. This is meant for kinematic bodies. +/// The target is not applied if the velocity would be below the sleep threshold. +/// This will optionally wake the body if asleep, but only if the movement is significant. +B3_API void b3Body_SetTargetTransform( b3BodyId bodyId, b3WorldTransform target, float timeStep, bool wake ); + +/// Get the linear velocity of a local point attached to a body. Usually in meters per second. +B3_API b3Vec3 b3Body_GetLocalPointVelocity( b3BodyId bodyId, b3Vec3 localPoint ); + +/// Get the linear velocity of a world point attached to a body. Usually in meters per second. +B3_API b3Vec3 b3Body_GetWorldPointVelocity( b3BodyId bodyId, b3Pos worldPoint ); + +/// Apply a force at a world point. If the force is not applied at the center of mass, +/// it will generate a torque and affect the angular velocity. This optionally wakes up the body. +/// The force is ignored if the body is not awake. +/// @param bodyId The body id +/// @param force The world force vector, usually in newtons (N) +/// @param point The world position of the point of application +/// @param wake Option to wake up the body +B3_API void b3Body_ApplyForce( b3BodyId bodyId, b3Vec3 force, b3Pos point, bool wake ); + +/// Apply a force to the center of mass. This optionally wakes up the body. +/// The force is ignored if the body is not awake. +/// @param bodyId The body id +/// @param force the world force vector, usually in newtons (N). +/// @param wake also wake up the body +B3_API void b3Body_ApplyForceToCenter( b3BodyId bodyId, b3Vec3 force, bool wake ); + +/// Apply a torque. This affects the angular velocity without affecting the linear velocity. +/// This optionally wakes the body. The torque is ignored if the body is not awake. +/// @param bodyId The body id +/// @param torque the world torque vector, usually in N*m. +/// @param wake also wake up the body +B3_API void b3Body_ApplyTorque( b3BodyId bodyId, b3Vec3 torque, bool wake ); + +/// Apply an impulse at a point. This immediately modifies the velocity. +/// It also modifies the angular velocity if the point of application +/// is not at the center of mass. This optionally wakes the body. +/// The impulse is ignored if the body is not awake. +/// @param bodyId The body id +/// @param impulse the world impulse vector, usually in N*s or kg*m/s. +/// @param point the world position of the point of application. +/// @param wake also wake up the body +/// @warning This should be used for one-shot impulses. If you need a steady force, +/// use a force instead, which will work better with the sub-stepping solver. +B3_API void b3Body_ApplyLinearImpulse( b3BodyId bodyId, b3Vec3 impulse, b3Pos point, bool wake ); + +/// Apply an impulse to the center of mass. This immediately modifies the velocity. +/// The impulse is ignored if the body is not awake. This optionally wakes the body. +/// @param bodyId The body id +/// @param impulse the world impulse vector, usually in N*s or kg*m/s. +/// @param wake also wake up the body +/// @warning This should be used for one-shot impulses. If you need a steady force, +/// use a force instead, which will work better with the sub-stepping solver. +B3_API void b3Body_ApplyLinearImpulseToCenter( b3BodyId bodyId, b3Vec3 impulse, bool wake ); + +/// Apply an angular impulse in world space. The impulse is ignored if the body is not awake. +/// This optionally wakes the body. +/// @param bodyId The body id +/// @param impulse the world angular impulse vector, usually in units of kg*m*m/s +/// @param wake also wake up the body +/// @warning This should be used for one-shot impulses. If you need a steady torque, +/// use a torque instead, which will work better with the sub-stepping solver. +B3_API void b3Body_ApplyAngularImpulse( b3BodyId bodyId, b3Vec3 impulse, bool wake ); + +/// Get the mass of the body, usually in kilograms +B3_API float b3Body_GetMass( b3BodyId bodyId ); + +/// Get the rotational inertia of the body in local space, usually in kg*m^2 +B3_API b3Matrix3 b3Body_GetLocalRotationalInertia( b3BodyId bodyId ); + +/// Get the inverse mass of the body, usually in 1/kilograms +B3_API float b3Body_GetInverseMass( b3BodyId bodyId ); + +/// Get the inverse rotational inertia of the body in world space, usually in 1/kg*m^2 +B3_API b3Matrix3 b3Body_GetWorldInverseRotationalInertia( b3BodyId bodyId ); + +/// Get the center of mass position of the body in local space +B3_API b3Vec3 b3Body_GetLocalCenterOfMass( b3BodyId bodyId ); + +/// Get the center of mass position of the body in world space +B3_API b3Pos b3Body_GetWorldCenterOfMass( b3BodyId bodyId ); + +/// Override the body's mass properties. Normally this is computed automatically using the +/// shape geometry and density. This information is lost if a shape is added or removed or if the +/// body type changes. +B3_API void b3Body_SetMassData( b3BodyId bodyId, b3MassData massData ); + +/// Get the mass data for a body +B3_API b3MassData b3Body_GetMassData( b3BodyId bodyId ); + +/// This updates the mass properties to the sum of the mass properties of the shapes. +/// This normally does not need to be called unless you called SetMassData to override +/// the mass and you later want to reset the mass. +/// You may also use this when automatic mass computation has been disabled. +/// You should call this regardless of body type. +B3_API void b3Body_ApplyMassFromShapes( b3BodyId bodyId ); + +/// Adjust the linear damping. Normally this is set in b3BodyDef before creation. +B3_API void b3Body_SetLinearDamping( b3BodyId bodyId, float linearDamping ); + +/// Get the current linear damping. +B3_API float b3Body_GetLinearDamping( b3BodyId bodyId ); + +/// Adjust the angular damping. Normally this is set in b3BodyDef before creation. +B3_API void b3Body_SetAngularDamping( b3BodyId bodyId, float angularDamping ); + +/// Get the current angular damping. +B3_API float b3Body_GetAngularDamping( b3BodyId bodyId ); + +/// Adjust the gravity scale. Normally this is set in b3BodyDef before creation. +/// @see b3BodyDef::gravityScale +B3_API void b3Body_SetGravityScale( b3BodyId bodyId, float gravityScale ); + +/// Get the current gravity scale +B3_API float b3Body_GetGravityScale( b3BodyId bodyId ); + +/// @return true if this body is awake +B3_API bool b3Body_IsAwake( b3BodyId bodyId ); + +/// Wake a body from sleep. This wakes the entire island the body is touching. +/// @warning Putting a body to sleep will put the entire island of bodies touching this body to sleep, +/// which can be expensive and possibly unintuitive. +B3_API void b3Body_SetAwake( b3BodyId bodyId, bool awake ); + +/// Enable or disable sleeping for this body. If sleeping is disabled the body will wake. +B3_API void b3Body_EnableSleep( b3BodyId bodyId, bool enableSleep ); + +/// Returns true if sleeping is enabled for this body +B3_API bool b3Body_IsSleepEnabled( b3BodyId bodyId ); + +/// Set the sleep threshold, usually in meters per second +B3_API void b3Body_SetSleepThreshold( b3BodyId bodyId, float sleepThreshold ); + +/// Get the sleep threshold, usually in meters per second. +B3_API float b3Body_GetSleepThreshold( b3BodyId bodyId ); + +/// Returns true if this body is enabled +B3_API bool b3Body_IsEnabled( b3BodyId bodyId ); + +/// Disable a body by removing it completely from the simulation. This is expensive. +B3_API void b3Body_Disable( b3BodyId bodyId ); + +/// Enable a body by adding it to the simulation. This is expensive. +B3_API void b3Body_Enable( b3BodyId bodyId ); + +/// Set the motion locks on this body. +B3_API void b3Body_SetMotionLocks( b3BodyId bodyId, b3MotionLocks locks ); + +/// Get the motion locks for this body. +B3_API b3MotionLocks b3Body_GetMotionLocks( b3BodyId bodyId ); + +/// Set this body to be a bullet. A bullet does continuous collision detection +/// against dynamic bodies (but not other bullets). +B3_API void b3Body_SetBullet( b3BodyId bodyId, bool flag ); + +/// Is this body a bullet? +B3_API bool b3Body_IsBullet( b3BodyId bodyId ); + +/// Enable or disable contact recycling for this body. Contact recycling is a performance optimization +/// that reuses contact manifolds when bodies move slightly. Disabling it can avoid ghost collisions +/// on characters at the cost of higher per-step work. Existing contacts retain their prior setting; +/// only contacts created after this call see the new value. +/// @see b3BodyDef::enableContactRecycling +B3_API void b3Body_EnableContactRecycling( b3BodyId bodyId, bool flag ); + +/// Is contact recycling enabled on this body? +B3_API bool b3Body_IsContactRecyclingEnabled( b3BodyId bodyId ); + +/// Enable/disable hit events on all shapes +/// @see b3ShapeDef::enableHitEvents +B3_API void b3Body_EnableHitEvents( b3BodyId bodyId, bool enableHitEvents ); + +/// Get the world that owns this body +B3_API b3WorldId b3Body_GetWorld( b3BodyId bodyId ); + +/// Get the number of shapes on this body +B3_API int b3Body_GetShapeCount( b3BodyId bodyId ); + +/// Get the shape ids for all shapes on this body, up to the provided capacity. +/// @returns the number of shape ids stored in the user array +B3_API int b3Body_GetShapes( b3BodyId bodyId, b3ShapeId* shapeArray, int capacity ); + +/// Get the number of joints on this body +B3_API int b3Body_GetJointCount( b3BodyId bodyId ); + +/// Get the joint ids for all joints on this body, up to the provided capacity +/// @returns the number of joint ids stored in the user array +B3_API int b3Body_GetJoints( b3BodyId bodyId, b3JointId* jointArray, int capacity ); + +/// Get the maximum capacity required for retrieving all the touching contacts on a body +B3_API int b3Body_GetContactCapacity( b3BodyId bodyId ); + +/// Get the touching contact data for a body +B3_API int b3Body_GetContactData( b3BodyId bodyId, b3ContactData* contactData, int capacity ); + +/// Get the current world AABB that contains all the attached shapes. Note that this may not encompass the body origin. +/// If there are no shapes attached then the returned AABB is empty and centered on the body origin. +B3_API b3AABB b3Body_ComputeAABB( b3BodyId bodyId ); + +/// Get the closest point on a body to a world target. +B3_API float b3Body_GetClosestPoint( b3BodyId bodyId, b3Vec3* result, b3Vec3 target ); + +/// Cast a ray at a specific body using a specified body transform. +B3_API b3BodyCastResult b3Body_CastRay( b3BodyId bodyId, b3Pos origin, b3Vec3 translation, b3QueryFilter filter, + float maxFraction, b3WorldTransform bodyTransform ); + +/// Cast a shape at a specific body using a specified body transform. +B3_API b3BodyCastResult b3Body_CastShape( b3BodyId bodyId, b3Pos origin, const b3ShapeProxy* proxy, b3Vec3 translation, + b3QueryFilter filter, float maxFraction, bool canEncroach, + b3WorldTransform bodyTransform ); + +/// Overlap a shape with a specific body using a specified body transform. +B3_API bool b3Body_OverlapShape( b3BodyId bodyId, b3Pos origin, const b3ShapeProxy* proxy, b3QueryFilter filter, + b3WorldTransform bodyTransform ); + +/// Collide a character mover with a specific body using a specified body transform. +B3_API int b3Body_CollideMover( b3BodyId bodyId, b3BodyPlaneResult* bodyPlanes, int planeCapacity, b3Pos origin, const b3Capsule* mover, + b3QueryFilter filter, b3WorldTransform bodyTransform ); + +/** @} */ // body + +/** + * @defgroup shape Shape + * Functions to create, destroy, and access. + * Shapes bind raw geometry to bodies and hold material properties including friction and restitution. + * @{ + */ + +/// Create a circle shape and attach it to a body. The shape definition and geometry are fully cloned. +/// Contacts are not created until the next time step. +/// @return the shape id for accessing the shape +B3_API b3ShapeId b3CreateSphereShape( b3BodyId bodyId, const b3ShapeDef* def, const b3Sphere* sphere ); + +/// Create a capsule shape and attach it to a body. The shape definition and geometry are fully cloned. +/// Contacts are not created until the next time step. +/// @return the shape id for accessing the shape +B3_API b3ShapeId b3CreateCapsuleShape( b3BodyId bodyId, const b3ShapeDef* def, const b3Capsule* capsule ); + +/// Create a convex hull shape and attach it to a body. The shape definition is fully cloned. Contacts are not created +/// until the next time step. +/// @return the shape id for accessing the shape +B3_API b3ShapeId b3CreateHullShape( b3BodyId bodyId, const b3ShapeDef* def, const b3HullData* hull ); + +/// Create a convex hull shape and attach it to a body. The hull is cloned then transformed with scale applied first. +/// Use this for non-uniform or mirrored scale or a baked local transform. The baked result is shared through the +/// world hull database. The shape definition and geometry are fully cloned. Contacts are not created until the next time step. +/// @return the shape id for accessing the shape +B3_API b3ShapeId b3CreateTransformedHullShape( b3BodyId bodyId, const b3ShapeDef* def, const b3HullData* hull, + b3Transform transform, b3Vec3 scale ); + +/// Create a mesh hull shape and attach it to a body. The shape definition is fully cloned but the mesh is not. +/// Contacts are not created until the next time step. +/// Mesh collision only creates contacts on static bodies. +/// @warning this holds reference to the input mesh data which must remain valid for the lifetime of this shape +/// @return the shape id for accessing the shape +B3_API b3ShapeId b3CreateMeshShape( b3BodyId bodyId, const b3ShapeDef* def, const b3MeshData* mesh, b3Vec3 scale ); + +/// Create a height-field shape and attach it to a body. The shape definition is fully cloned but the height field is not. +/// Contacts are not created until the next time step. +/// Height field is only allowed on static bodies. +/// @warning this holds reference to the input height field which must remain valid for the lifetime of this shape +/// @return the shape id for accessing the shape +B3_API b3ShapeId b3CreateHeightFieldShape( b3BodyId bodyId, const b3ShapeDef* def, const b3HeightFieldData* heightField ); + +/// Compound shapes are only allowed on static bodies. +B3_API b3ShapeId b3CreateCompoundShape( b3BodyId bodyId, b3ShapeDef* def, const b3CompoundData* compound ); + +/// Destroy a shape. You may defer the body mass update which can improve performance if several shapes on a +/// body are destroyed at once. +/// @see b3Body_ApplyMassFromShapes +B3_API void b3DestroyShape( b3ShapeId shapeId, bool updateBodyMass ); + +/// Shape identifier validation. Provides validation for up to 64K allocations. +B3_API bool b3Shape_IsValid( b3ShapeId id ); + +/// Get the type of a shape +B3_API b3ShapeType b3Shape_GetType( b3ShapeId shapeId ); + +/// Get the id of the body that a shape is attached to +B3_API b3BodyId b3Shape_GetBody( b3ShapeId shapeId ); + +/// Get the world that owns this shape +B3_API b3WorldId b3Shape_GetWorld( b3ShapeId shapeId ); + +/// Returns true if the shape is a sensor +B3_API bool b3Shape_IsSensor( b3ShapeId shapeId ); + +/// Set the user data for a shape +B3_API void b3Shape_SetUserData( b3ShapeId shapeId, void* userData ); + +/// Get the user data for a shape. This is useful when you get a shape id +/// from an event or query. +B3_API void* b3Shape_GetUserData( b3ShapeId shapeId ); + +/// Set the mass density of a shape, usually in kg/m^3. +/// This will optionally update the mass properties on the parent body. +/// @see b3ShapeDef::density, b3Body_ApplyMassFromShapes +B3_API void b3Shape_SetDensity( b3ShapeId shapeId, float density, bool updateBodyMass ); + +/// Get the density of a shape, usually in kg/m^3 +B3_API float b3Shape_GetDensity( b3ShapeId shapeId ); + +/// Set the friction on a shape +B3_API void b3Shape_SetFriction( b3ShapeId shapeId, float friction ); + +/// Get the friction of a shape +B3_API float b3Shape_GetFriction( b3ShapeId shapeId ); + +/// Set the shape restitution (bounciness) +B3_API void b3Shape_SetRestitution( b3ShapeId shapeId, float restitution ); + +/// Get the shape restitution +B3_API float b3Shape_GetRestitution( b3ShapeId shapeId ); + +/// Set the shape base surface material. Does not change per triangle materials. +B3_API void b3Shape_SetSurfaceMaterial( b3ShapeId shapeId, b3SurfaceMaterial surfaceMaterial ); + +/// Get the base shape surface material. +B3_API b3SurfaceMaterial b3Shape_GetSurfaceMaterial( b3ShapeId shapeId ); + +/// Get the number of mesh surface materials. +B3_API int b3Shape_GetMeshMaterialCount( b3ShapeId shapeId ); + +/// Set a surface material for a mesh shape. +B3_API void b3Shape_SetMeshMaterial( b3ShapeId shapeId, b3SurfaceMaterial surfaceMaterial, int index ); + +/// Get a surface material for a mesh shape +B3_API b3SurfaceMaterial b3Shape_GetMeshSurfaceMaterial( b3ShapeId shapeId, int index ); + +/// Get the shape filter +B3_API b3Filter b3Shape_GetFilter( b3ShapeId shapeId ); + +/// Set the current filter. This is almost as expensive as recreating the shape. +/// @see b3ShapeDef::filter +/// @param shapeId the shape +/// @param filter the new filter +/// @param invokeContacts if true then the shape will have all contacts recomputed the next time step (expensive) +B3_API void b3Shape_SetFilter( b3ShapeId shapeId, b3Filter filter, bool invokeContacts ); + +/// Enable sensor events for this shape. Only applies to kinematic and dynamic bodies. Ignored for sensors. +/// @see b3ShapeDef::isSensor +B3_API void b3Shape_EnableSensorEvents( b3ShapeId shapeId, bool flag ); + +/// Returns true if sensor events are enabled +B3_API bool b3Shape_AreSensorEventsEnabled( b3ShapeId shapeId ); + +/// Enable contact events for this shape. Only applies to kinematic and dynamic bodies. Ignored for sensors. +/// @see b3ShapeDef::enableContactEvents +B3_API void b3Shape_EnableContactEvents( b3ShapeId shapeId, bool flag ); + +/// Returns true if contact events are enabled +B3_API bool b3Shape_AreContactEventsEnabled( b3ShapeId shapeId ); + +/// Enable pre-solve contact events for this shape. Only applies to dynamic bodies. These are expensive +/// and must be carefully handled due to multithreading. Ignored for sensors. +/// @see b3PreSolveFcn +B3_API void b3Shape_EnablePreSolveEvents( b3ShapeId shapeId, bool flag ); + +/// Returns true if pre-solve events are enabled +B3_API bool b3Shape_ArePreSolveEventsEnabled( b3ShapeId shapeId ); + +/// Enable contact hit events for this shape. Ignored for sensors. +/// @see b3WorldDef.hitEventThreshold +B3_API void b3Shape_EnableHitEvents( b3ShapeId shapeId, bool flag ); + +/// Returns true if hit events are enabled +B3_API bool b3Shape_AreHitEventsEnabled( b3ShapeId shapeId ); + +/// Ray cast a shape directly. The ray runs from origin to origin + translation and the hit point +/// comes back as a world position, so the cast stays precise far from the world origin. +B3_API b3WorldCastOutput b3Shape_RayCast( b3ShapeId shapeId, b3Pos origin, b3Vec3 translation ); + +/// Get a copy of the shape's sphere. Asserts the type is correct. +B3_API b3Sphere b3Shape_GetSphere( b3ShapeId shapeId ); + +/// Get a copy of the shape's capsule. Asserts the type is correct. +B3_API b3Capsule b3Shape_GetCapsule( b3ShapeId shapeId ); + +/// Get the shape's convex hull. Asserts the type is correct. +B3_API const b3HullData* b3Shape_GetHull( b3ShapeId shapeId ); + +/// Get the shape's mesh. Asserts the type is correct. +B3_API b3Mesh b3Shape_GetMesh( b3ShapeId shapeId ); + +/// Get the shape's height field. Asserts the type is correct. +B3_API const b3HeightFieldData* b3Shape_GetHeightField( b3ShapeId shapeId ); + +/// Allows you to change a shape to be a sphere or update the current sphere. +/// This does not modify the mass properties. +/// @see b3Body_ApplyMassFromShapes +B3_API void b3Shape_SetSphere( b3ShapeId shapeId, const b3Sphere* sphere ); + +/// Allows you to change a shape to be a capsule or update the current capsule. +/// This does not modify the mass properties. +/// @see b3Body_ApplyMassFromShapes +B3_API void b3Shape_SetCapsule( b3ShapeId shapeId, const b3Capsule* capsule ); + +/// Allows you to change a shape to be a hull or update the current hull. +/// This does not modify the mass properties. +/// @see b3Body_ApplyMassFromShapes +B3_API void b3Shape_SetHull( b3ShapeId shapeId, const b3HullData* hull ); + +/// Allows you to change a shape to be a mesh or update the current mesh. +/// This does not modify the mass properties. +/// @see b3Body_ApplyMassFromShapes +B3_API void b3Shape_SetMesh( b3ShapeId shapeId, const b3MeshData* meshData, b3Vec3 scale ); + +/// Get the maximum capacity required for retrieving all the touching contacts on a shape +B3_API int b3Shape_GetContactCapacity( b3ShapeId shapeId ); + +/// Get the touching contact data for a shape. The provided shapeId will be either shapeIdA or shapeIdB on the contact data. +/// @note Box3D uses speculative collision so some contact points may be separated. +/// @returns the number of elements filled in the provided array +/// @warning do not ignore the return value, it specifies the valid number of elements +B3_API int b3Shape_GetContactData( b3ShapeId shapeId, b3ContactData* contactData, int capacity ); + +/// Get the maximum capacity required for retrieving all the overlapped shapes on a sensor shape. +/// This returns 0 if the provided shape is not a sensor. +/// @param shapeId the id of a sensor shape +/// @returns the required capacity to get all the overlaps in b3Shape_GetSensorOverlaps +B3_API int b3Shape_GetSensorCapacity( b3ShapeId shapeId ); + +/// Get the overlap data for a sensor shape. +/// @param shapeId the id of a sensor shape +/// @param visitorIds a user allocated array that is filled with the overlapping shapes (visitors) +/// @param capacity the capacity of overlappedShapes +/// @returns the number of elements filled in the provided array +/// @warning do not ignore the return value, it specifies the valid number of elements +/// @warning overlaps may contain destroyed shapes so use b3Shape_IsValid to confirm each overlap +B3_API int b3Shape_GetSensorData( b3ShapeId shapeId, b3ShapeId* visitorIds, int capacity ); + +/// Get the current world AABB +B3_API b3AABB b3Shape_GetAABB( b3ShapeId shapeId ); + +/// Compute the mass data for a shape +B3_API b3MassData b3Shape_ComputeMassData( b3ShapeId shapeId ); + +/// Get the closest point on a shape to a target point. Target and result are in world space. +B3_API b3Vec3 b3Shape_GetClosestPoint( b3ShapeId shapeId, b3Vec3 target ); + +/// Apply a wind force to the body for this shape using the density of air. This considers +/// the projected area of the shape in the wind direction. This also considers +/// the relative velocity of the shape. +/// @param shapeId the shape id +/// @param wind the wind velocity in world space +/// @param drag the drag coefficient, the force that opposes the relative velocity +/// @param lift the lift coefficient, the force that is perpendicular to the relative velocity +/// @param maxSpeed the maximum relative speed. Speed cap is necessary for stability. Typically 10m/s or less. +/// @param wake should this wake the body +B3_API void b3Shape_ApplyWind( b3ShapeId shapeId, b3Vec3 wind, float drag, float lift, float maxSpeed, bool wake ); + +/** @} */ // shape + +/** + * @defgroup joint Joint + * @brief Joints allow you to connect rigid bodies together while allowing various forms of relative motions. + * @{ + */ + +/// Destroy a joint +B3_API void b3DestroyJoint( b3JointId jointId, bool wakeAttached ); + +/// Joint identifier validation. Provides validation for up to 64K allocations. +B3_API bool b3Joint_IsValid( b3JointId id ); + +/// Get the joint type +B3_API b3JointType b3Joint_GetType( b3JointId jointId ); + +/// Get body A id on a joint +B3_API b3BodyId b3Joint_GetBodyA( b3JointId jointId ); + +/// Get body B id on a joint +B3_API b3BodyId b3Joint_GetBodyB( b3JointId jointId ); + +/// Get the world that owns this joint +B3_API b3WorldId b3Joint_GetWorld( b3JointId jointId ); + +/// Set the local frame on bodyA +B3_API void b3Joint_SetLocalFrameA( b3JointId jointId, b3Transform localFrame ); + +/// Get the local frame on bodyA +B3_API b3Transform b3Joint_GetLocalFrameA( b3JointId jointId ); + +/// Set the local frame on bodyB +B3_API void b3Joint_SetLocalFrameB( b3JointId jointId, b3Transform localFrame ); + +/// Get the local frame on bodyB +B3_API b3Transform b3Joint_GetLocalFrameB( b3JointId jointId ); + +/// Toggle collision between connected bodies +B3_API void b3Joint_SetCollideConnected( b3JointId jointId, bool shouldCollide ); + +/// Is collision allowed between connected bodies? +B3_API bool b3Joint_GetCollideConnected( b3JointId jointId ); + +/// Set the user data on a joint +B3_API void b3Joint_SetUserData( b3JointId jointId, void* userData ); + +/// Get the user data on a joint +B3_API void* b3Joint_GetUserData( b3JointId jointId ); + +/// Wake the bodies connect to this joint +B3_API void b3Joint_WakeBodies( b3JointId jointId ); + +/// Get the current constraint force for this joint +B3_API b3Vec3 b3Joint_GetConstraintForce( b3JointId jointId ); + +/// Get the current constraint torque for this joint +B3_API b3Vec3 b3Joint_GetConstraintTorque( b3JointId jointId ); + +/// Get the current linear separation error for this joint. Does not consider admissible movement. Usually in meters. +B3_API float b3Joint_GetLinearSeparation( b3JointId jointId ); + +/// Get the current angular separation error for this joint. Does not consider admissible movement. Usually in radians. +B3_API float b3Joint_GetAngularSeparation( b3JointId jointId ); + +/// Set the joint constraint tuning. Advanced feature. +/// @param jointId the joint +/// @param hertz the stiffness in Hertz (cycles per second) +/// @param dampingRatio the non-dimensional damping ratio (one for critical damping) +B3_API void b3Joint_SetConstraintTuning( b3JointId jointId, float hertz, float dampingRatio ); + +/// Get the joint constraint tuning. Advanced feature. +B3_API void b3Joint_GetConstraintTuning( b3JointId jointId, float* hertz, float* dampingRatio ); + +/// Set the force threshold for joint events (Newtons) +B3_API void b3Joint_SetForceThreshold( b3JointId jointId, float threshold ); + +/// Get the force threshold for joint events (Newtons) +B3_API float b3Joint_GetForceThreshold( b3JointId jointId ); + +/// Set the torque threshold for joint events (N-m) +B3_API void b3Joint_SetTorqueThreshold( b3JointId jointId, float threshold ); + +/// Get the torque threshold for joint events (N-m) +B3_API float b3Joint_GetTorqueThreshold( b3JointId jointId ); + +/** + * @defgroup parallel_joint Parallel Joint + * @brief Functions for the parallel joint. + * @{ + */ + +/// Create a parallel joint +/// @see b3ParallelJointDef for details +B3_API b3JointId b3CreateParallelJoint( b3WorldId worldId, const b3ParallelJointDef* def ); + +/// Set the spring stiffness in Hertz +B3_API void b3ParallelJoint_SetSpringHertz( b3JointId jointId, float hertz ); + +/// Set the spring damping ratio, non-dimensional +B3_API void b3ParallelJoint_SetSpringDampingRatio( b3JointId jointId, float dampingRatio ); + +/// Get the spring Hertz +B3_API float b3ParallelJoint_GetSpringHertz( b3JointId jointId ); + +/// Get the spring damping ratio +B3_API float b3ParallelJoint_GetSpringDampingRatio( b3JointId jointId ); + +/// Set the maximum spring torque, usually in newton-meters +B3_API void b3ParallelJoint_SetMaxTorque( b3JointId jointId, float force ); + +/// Get the maximum spring torque, usually in newton-meters +B3_API float b3ParallelJoint_GetMaxTorque( b3JointId jointId ); + +/** @} */ // parallel_joint + +/** + * @defgroup distance_joint Distance Joint + * @brief Functions for the distance joint. + * @{ + */ + +/// Create a distance joint +/// @see b3DistanceJointDef for details +B3_API b3JointId b3CreateDistanceJoint( b3WorldId worldId, const b3DistanceJointDef* def ); + +/// Set the rest length of a distance joint +/// @param jointId The id for a distance joint +/// @param length The new distance joint length +B3_API void b3DistanceJoint_SetLength( b3JointId jointId, float length ); + +/// Get the rest length of a distance joint +B3_API float b3DistanceJoint_GetLength( b3JointId jointId ); + +/// Enable/disable the distance joint spring. When disabled the distance joint is rigid. +B3_API void b3DistanceJoint_EnableSpring( b3JointId jointId, bool enableSpring ); + +/// Is the distance joint spring enabled? +B3_API bool b3DistanceJoint_IsSpringEnabled( b3JointId jointId ); + +/// Set the force range for the spring. +B3_API void b3DistanceJoint_SetSpringForceRange( b3JointId jointId, float lowerForce, float upperForce ); + +/// Get the force range for the spring. +B3_API void b3DistanceJoint_GetSpringForceRange( b3JointId jointId, float* lowerForce, float* upperForce ); + +/// Set the spring stiffness in Hertz +B3_API void b3DistanceJoint_SetSpringHertz( b3JointId jointId, float hertz ); + +/// Set the spring damping ratio, non-dimensional +B3_API void b3DistanceJoint_SetSpringDampingRatio( b3JointId jointId, float dampingRatio ); + +/// Get the spring Hertz +B3_API float b3DistanceJoint_GetSpringHertz( b3JointId jointId ); + +/// Get the spring damping ratio +B3_API float b3DistanceJoint_GetSpringDampingRatio( b3JointId jointId ); + +/// Enable joint limit. The limit only works if the joint spring is enabled. Otherwise the joint is rigid +/// and the limit has no effect. +B3_API void b3DistanceJoint_EnableLimit( b3JointId jointId, bool enableLimit ); + +/// Is the distance joint limit enabled? +B3_API bool b3DistanceJoint_IsLimitEnabled( b3JointId jointId ); + +/// Set the minimum and maximum length parameters of a distance joint +B3_API void b3DistanceJoint_SetLengthRange( b3JointId jointId, float minLength, float maxLength ); + +/// Get the distance joint minimum length +B3_API float b3DistanceJoint_GetMinLength( b3JointId jointId ); + +/// Get the distance joint maximum length +B3_API float b3DistanceJoint_GetMaxLength( b3JointId jointId ); + +/// Get the current length of a distance joint +B3_API float b3DistanceJoint_GetCurrentLength( b3JointId jointId ); + +/// Enable/disable the distance joint motor +B3_API void b3DistanceJoint_EnableMotor( b3JointId jointId, bool enableMotor ); + +/// Is the distance joint motor enabled? +B3_API bool b3DistanceJoint_IsMotorEnabled( b3JointId jointId ); + +/// Set the distance joint motor speed, usually in meters per second +B3_API void b3DistanceJoint_SetMotorSpeed( b3JointId jointId, float motorSpeed ); + +/// Get the distance joint motor speed, usually in meters per second +B3_API float b3DistanceJoint_GetMotorSpeed( b3JointId jointId ); + +/// Set the distance joint maximum motor force, usually in newtons +B3_API void b3DistanceJoint_SetMaxMotorForce( b3JointId jointId, float force ); + +/// Get the distance joint maximum motor force, usually in newtons +B3_API float b3DistanceJoint_GetMaxMotorForce( b3JointId jointId ); + +/// Get the distance joint current motor force, usually in newtons +B3_API float b3DistanceJoint_GetMotorForce( b3JointId jointId ); + +/** @} */ // distance_joint + +/** + * @defgroup motor_joint Motor Joint + * @brief Functions for the motor joint. + * + * The motor joint is designed to control the movement of a body while still being + * responsive to collisions. A spring controls the position and rotation. A velocity motor + * can be used to control velocity and allows for friction in top-down games. Both types + * of control can be combined. For example, you can have a spring with friction. + * Position and velocity control have force and torque limits. + * @{ + */ + +/// Create a motor joint +/// @see b3MotorJointDef for details +B3_API b3JointId b3CreateMotorJoint( b3WorldId worldId, const b3MotorJointDef* def ); + +/// Set the desired relative linear velocity in meters per second +B3_API void b3MotorJoint_SetLinearVelocity( b3JointId jointId, b3Vec3 velocity ); + +/// Get the desired relative linear velocity in meters per second +B3_API b3Vec3 b3MotorJoint_GetLinearVelocity( b3JointId jointId ); + +/// Set the desired relative angular velocity in radians per second +B3_API void b3MotorJoint_SetAngularVelocity( b3JointId jointId, b3Vec3 velocity ); + +/// Get the desired relative angular velocity in radians per second +B3_API b3Vec3 b3MotorJoint_GetAngularVelocity( b3JointId jointId ); + +/// Set the motor joint maximum force, usually in newtons +B3_API void b3MotorJoint_SetMaxVelocityForce( b3JointId jointId, float maxForce ); + +/// Get the motor joint maximum force, usually in newtons +B3_API float b3MotorJoint_GetMaxVelocityForce( b3JointId jointId ); + +/// Set the motor joint maximum torque, usually in newton-meters +B3_API void b3MotorJoint_SetMaxVelocityTorque( b3JointId jointId, float maxTorque ); + +/// Get the motor joint maximum torque, usually in newton-meters +B3_API float b3MotorJoint_GetMaxVelocityTorque( b3JointId jointId ); + +/// Set the spring linear hertz stiffness +B3_API void b3MotorJoint_SetLinearHertz( b3JointId jointId, float hertz ); + +/// Get the spring linear hertz stiffness +B3_API float b3MotorJoint_GetLinearHertz( b3JointId jointId ); + +/// Set the spring linear damping ratio. Use 1.0 for critical damping. +B3_API void b3MotorJoint_SetLinearDampingRatio( b3JointId jointId, float damping ); + +/// Get the spring linear damping ratio. +B3_API float b3MotorJoint_GetLinearDampingRatio( b3JointId jointId ); + +/// Set the spring angular hertz stiffness +B3_API void b3MotorJoint_SetAngularHertz( b3JointId jointId, float hertz ); + +/// Get the spring angular hertz stiffness +B3_API float b3MotorJoint_GetAngularHertz( b3JointId jointId ); + +/// Set the spring angular damping ratio. Use 1.0 for critical damping. +B3_API void b3MotorJoint_SetAngularDampingRatio( b3JointId jointId, float damping ); + +/// Get the spring angular damping ratio. +B3_API float b3MotorJoint_GetAngularDampingRatio( b3JointId jointId ); + +/// Set the maximum spring force in newtons. +B3_API void b3MotorJoint_SetMaxSpringForce( b3JointId jointId, float maxForce ); + +/// Get the maximum spring force in newtons. +B3_API float b3MotorJoint_GetMaxSpringForce( b3JointId jointId ); + +/// Set the maximum spring torque in newtons * meters +B3_API void b3MotorJoint_SetMaxSpringTorque( b3JointId jointId, float maxTorque ); + +/// Get the maximum spring torque in newtons * meters +B3_API float b3MotorJoint_GetMaxSpringTorque( b3JointId jointId ); + +/**@}*/ // motor_joint + +/** + * @defgroup filter_joint Filter Joint + * @brief Functions for the filter joint. + * + * The filter joint is used to disable collision between two bodies. As a side effect of being a joint, it also + * keeps the two bodies in the same simulation island. + * @{ + */ + +/// Create a filter joint. +/// @see b3FilterJointDef for details +B3_API b3JointId b3CreateFilterJoint( b3WorldId worldId, const b3FilterJointDef* def ); + +/**@}*/ // filter_joint + +/** + * @defgroup prismatic_joint Prismatic Joint + * @brief A prismatic joint allows for translation along a single axis with no rotation. + * + * The prismatic joint is useful for things like pistons and moving platforms, where you want a body to translate + * along an axis and have no rotation. Also called a *slider* joint. + * @{ + */ + +/// Create a prismatic (slider) joint. +/// @see b3PrismaticJointDef for details +B3_API b3JointId b3CreatePrismaticJoint( b3WorldId worldId, const b3PrismaticJointDef* def ); + +/// Enable/disable the joint spring. +B3_API void b3PrismaticJoint_EnableSpring( b3JointId jointId, bool enableSpring ); + +/// Is the prismatic joint spring enabled or not? +B3_API bool b3PrismaticJoint_IsSpringEnabled( b3JointId jointId ); + +/// Set the prismatic joint stiffness in Hertz. +/// This should usually be less than a quarter of the simulation rate. For example, if the simulation +/// runs at 60Hz then the joint stiffness should be 15Hz or less. +B3_API void b3PrismaticJoint_SetSpringHertz( b3JointId jointId, float hertz ); + +/// Get the prismatic joint stiffness in Hertz +B3_API float b3PrismaticJoint_GetSpringHertz( b3JointId jointId ); + +/// Set the prismatic joint damping ratio (non-dimensional) +B3_API void b3PrismaticJoint_SetSpringDampingRatio( b3JointId jointId, float dampingRatio ); + +/// Get the prismatic spring damping ratio (non-dimensional) +B3_API float b3PrismaticJoint_GetSpringDampingRatio( b3JointId jointId ); + +/// Set the prismatic joint target translation. Usually in meters. +B3_API void b3PrismaticJoint_SetTargetTranslation( b3JointId jointId, float targetTranslation ); + +/// Get the prismatic joint target translation. Usually in meters. +B3_API float b3PrismaticJoint_GetTargetTranslation( b3JointId jointId ); + +/// Enable/disable a prismatic joint limit +B3_API void b3PrismaticJoint_EnableLimit( b3JointId jointId, bool enableLimit ); + +/// Is the prismatic joint limit enabled? +B3_API bool b3PrismaticJoint_IsLimitEnabled( b3JointId jointId ); + +/// Get the prismatic joint lower limit +B3_API float b3PrismaticJoint_GetLowerLimit( b3JointId jointId ); + +/// Get the prismatic joint upper limit +B3_API float b3PrismaticJoint_GetUpperLimit( b3JointId jointId ); + +/// Set the prismatic joint limits +B3_API void b3PrismaticJoint_SetLimits( b3JointId jointId, float lower, float upper ); + +/// Enable/disable a prismatic joint motor +B3_API void b3PrismaticJoint_EnableMotor( b3JointId jointId, bool enableMotor ); + +/// Is the prismatic joint motor enabled? +B3_API bool b3PrismaticJoint_IsMotorEnabled( b3JointId jointId ); + +/// Set the prismatic joint motor speed, usually in meters per second +B3_API void b3PrismaticJoint_SetMotorSpeed( b3JointId jointId, float motorSpeed ); + +/// Get the prismatic joint motor speed, usually in meters per second +B3_API float b3PrismaticJoint_GetMotorSpeed( b3JointId jointId ); + +/// Set the prismatic joint maximum motor force, usually in newtons +B3_API void b3PrismaticJoint_SetMaxMotorForce( b3JointId jointId, float force ); + +/// Get the prismatic joint maximum motor force, usually in newtons +B3_API float b3PrismaticJoint_GetMaxMotorForce( b3JointId jointId ); + +/// Get the prismatic joint current motor force, usually in newtons +B3_API float b3PrismaticJoint_GetMotorForce( b3JointId jointId ); + +/// Get the current joint translation, usually in meters. +B3_API float b3PrismaticJoint_GetTranslation( b3JointId jointId ); + +/// Get the current joint translation speed, usually in meters per second. +B3_API float b3PrismaticJoint_GetSpeed( b3JointId jointId ); + +/**@}*/ // prismatic_joint + +/** + * @defgroup revolute_joint Revolute Joint + * @brief A revolute joint allows for relative rotation about a single axis with no relative translation. + * + * Also called a *hinge* or *pin* joint. + * @{ + */ + +/// Create a revolute joint +/// @see b3RevoluteJointDef for details +B3_API b3JointId b3CreateRevoluteJoint( b3WorldId worldId, const b3RevoluteJointDef* def ); + +/// Enable/disable the revolute joint spring +B3_API void b3RevoluteJoint_EnableSpring( b3JointId jointId, bool enableSpring ); + +/// Is the revolute angular spring enabled? +B3_API bool b3RevoluteJoint_IsSpringEnabled( b3JointId jointId ); + +/// Set the revolute joint spring stiffness in Hertz +B3_API void b3RevoluteJoint_SetSpringHertz( b3JointId jointId, float hertz ); + +/// Get the revolute joint spring stiffness in Hertz +B3_API float b3RevoluteJoint_GetSpringHertz( b3JointId jointId ); + +/// Set the revolute joint spring damping ratio, non-dimensional +B3_API void b3RevoluteJoint_SetSpringDampingRatio( b3JointId jointId, float dampingRatio ); + +/// Get the revolute joint spring damping ratio, non-dimensional +B3_API float b3RevoluteJoint_GetSpringDampingRatio( b3JointId jointId ); + +/// Set the revolute joint target angle in radians +B3_API void b3RevoluteJoint_SetTargetAngle( b3JointId jointId, float targetRadians ); + +/// Get the revolute joint target angle in radians +B3_API float b3RevoluteJoint_GetTargetAngle( b3JointId jointId ); + +/// Get the revolute joint current angle in radians relative to the reference angle +/// @see b3RevoluteJointDef::referenceAngle +B3_API float b3RevoluteJoint_GetAngle( b3JointId jointId ); + +/// Enable/disable the revolute joint limit +B3_API void b3RevoluteJoint_EnableLimit( b3JointId jointId, bool enableLimit ); + +/// Is the revolute joint limit enabled? +B3_API bool b3RevoluteJoint_IsLimitEnabled( b3JointId jointId ); + +/// Get the revolute joint lower limit in radians +B3_API float b3RevoluteJoint_GetLowerLimit( b3JointId jointId ); + +/// Get the revolute joint upper limit in radians +B3_API float b3RevoluteJoint_GetUpperLimit( b3JointId jointId ); + +/// Set the revolute joint limits in radians +B3_API void b3RevoluteJoint_SetLimits( b3JointId jointId, float lowerLimitRadians, float upperLimitRadians ); + +/// Enable/disable a revolute joint motor +B3_API void b3RevoluteJoint_EnableMotor( b3JointId jointId, bool enableMotor ); + +/// Is the revolute joint motor enabled? +B3_API bool b3RevoluteJoint_IsMotorEnabled( b3JointId jointId ); + +/// Set the revolute joint motor speed in radians per second +B3_API void b3RevoluteJoint_SetMotorSpeed( b3JointId jointId, float motorSpeed ); + +/// Get the revolute joint motor speed in radians per second +B3_API float b3RevoluteJoint_GetMotorSpeed( b3JointId jointId ); + +/// Get the revolute joint current motor torque, usually in newton-meters +B3_API float b3RevoluteJoint_GetMotorTorque( b3JointId jointId ); + +/// Set the revolute joint maximum motor torque, usually in newton-meters +B3_API void b3RevoluteJoint_SetMaxMotorTorque( b3JointId jointId, float torque ); + +/// Get the revolute joint maximum motor torque, usually in newton-meters +B3_API float b3RevoluteJoint_GetMaxMotorTorque( b3JointId jointId ); + +/**@}*/ // revolute_joint + +/** + * @defgroup spherical_joint Spherical Joint + * @brief A spherical joint allows for relative rotation in the 3D space with no relative translation. + * + * Also called a *ball-in-socket* or *point-to-point* joint. + * @{ + */ + +/// Create a spherical joint +/// @see b3SphericalJointDef for details +B3_API b3JointId b3CreateSphericalJoint( b3WorldId worldId, const b3SphericalJointDef* def ); + +/// Enable/disable the spherical joint cone limit +B3_API void b3SphericalJoint_EnableConeLimit( b3JointId jointId, bool enableLimit ); + +/// Is the spherical joint cone limit enabled? +B3_API bool b3SphericalJoint_IsConeLimitEnabled( b3JointId jointId ); + +/// Get the spherical joint cone limit in radians +B3_API float b3SphericalJoint_GetConeLimit( b3JointId jointId ); + +/// Set the spherical joint limits in radians +B3_API void b3SphericalJoint_SetConeLimit( b3JointId jointId, float angleRadians ); + +/// Get the spherical joint current cone angle in radians. +B3_API float b3SphericalJoint_GetConeAngle( b3JointId jointId ); + +/// Enable/disable the spherical joint limit +B3_API void b3SphericalJoint_EnableTwistLimit( b3JointId jointId, bool enableLimit ); + +/// Is the spherical joint limit enabled? +B3_API bool b3SphericalJoint_IsTwistLimitEnabled( b3JointId jointId ); + +/// Get the spherical joint lower limit in radians +B3_API float b3SphericalJoint_GetLowerTwistLimit( b3JointId jointId ); + +/// Get the spherical joint upper limit in radians +B3_API float b3SphericalJoint_GetUpperTwistLimit( b3JointId jointId ); + +/// Set the spherical joint limits in radians +B3_API void b3SphericalJoint_SetTwistLimits( b3JointId jointId, float lowerLimitRadians, float upperLimitRadians ); + +/// Get the spherical joint current twist angle in radians. +B3_API float b3SphericalJoint_GetTwistAngle( b3JointId jointId ); + +/// Enable/disable the spherical joint spring +B3_API void b3SphericalJoint_EnableSpring( b3JointId jointId, bool enableSpring ); + +/// Is the spherical angular spring enabled? +B3_API bool b3SphericalJoint_IsSpringEnabled( b3JointId jointId ); + +/// Set the spherical joint spring stiffness in Hertz +B3_API void b3SphericalJoint_SetSpringHertz( b3JointId jointId, float hertz ); + +/// Get the spherical joint spring stiffness in Hertz +B3_API float b3SphericalJoint_GetSpringHertz( b3JointId jointId ); + +/// Set the spherical joint spring damping ratio, non-dimensional +B3_API void b3SphericalJoint_SetSpringDampingRatio( b3JointId jointId, float dampingRatio ); + +/// Get the spherical joint spring damping ratio, non-dimensional +B3_API float b3SphericalJoint_GetSpringDampingRatio( b3JointId jointId ); + +/// Set the spherical joint spring target rotation +B3_API void b3SphericalJoint_SetTargetRotation( b3JointId jointId, b3Quat targetRotation ); + +/// Get the spherical joint spring target rotation +B3_API b3Quat b3SphericalJoint_GetTargetRotation( b3JointId jointId ); + +/// Enable/disable a spherical joint motor +B3_API void b3SphericalJoint_EnableMotor( b3JointId jointId, bool enableMotor ); + +/// Is the spherical joint motor enabled? +B3_API bool b3SphericalJoint_IsMotorEnabled( b3JointId jointId ); + +/// Set the spherical joint motor velocity in radians per second +B3_API void b3SphericalJoint_SetMotorVelocity( b3JointId jointId, b3Vec3 motorVelocity ); + +/// Get the spherical joint motor velocity in radians per second +B3_API b3Vec3 b3SphericalJoint_GetMotorVelocity( b3JointId jointId ); + +/// Get the spherical joint current motor torque, usually in newton-meters +B3_API b3Vec3 b3SphericalJoint_GetMotorTorque( b3JointId jointId ); + +/// Set the spherical joint maximum motor torque, usually in newton-meters +B3_API void b3SphericalJoint_SetMaxMotorTorque( b3JointId jointId, float torque ); + +/// Get the spherical joint maximum motor torque, usually in newton-meters +B3_API float b3SphericalJoint_GetMaxMotorTorque( b3JointId jointId ); + +/**@}*/ // spherical_joint + +/** + * @defgroup weld_joint Weld Joint + * @brief A weld joint fully constrains the relative transform between two bodies while allowing for springiness + * + * A weld joint constrains the relative rotation and translation between two bodies. Both rotation and translation + * can have damped springs. + * + * @note The accuracy of weld joint is limited by the accuracy of the solver. Long chains of weld joints may flex. + * @{ + */ + +/// Create a weld joint +/// @see b3WeldJointDef for details +B3_API b3JointId b3CreateWeldJoint( b3WorldId worldId, const b3WeldJointDef* def ); + +/// Set the weld joint linear stiffness in Hertz. 0 is rigid. +B3_API void b3WeldJoint_SetLinearHertz( b3JointId jointId, float hertz ); + +/// Get the weld joint linear stiffness in Hertz +B3_API float b3WeldJoint_GetLinearHertz( b3JointId jointId ); + +/// Set the weld joint linear damping ratio (non-dimensional) +B3_API void b3WeldJoint_SetLinearDampingRatio( b3JointId jointId, float dampingRatio ); + +/// Get the weld joint linear damping ratio (non-dimensional) +B3_API float b3WeldJoint_GetLinearDampingRatio( b3JointId jointId ); + +/// Set the weld joint angular stiffness in Hertz. 0 is rigid. +B3_API void b3WeldJoint_SetAngularHertz( b3JointId jointId, float hertz ); + +/// Get the weld joint angular stiffness in Hertz +B3_API float b3WeldJoint_GetAngularHertz( b3JointId jointId ); + +/// Set weld joint angular damping ratio, non-dimensional +B3_API void b3WeldJoint_SetAngularDampingRatio( b3JointId jointId, float dampingRatio ); + +/// Get the weld joint angular damping ratio, non-dimensional +B3_API float b3WeldJoint_GetAngularDampingRatio( b3JointId jointId ); + +/**@}*/ // weld_joint + +/** + * @defgroup wheel_joint Wheel Joint + * The wheel joint can be used to simulate wheels on vehicles. + * + * The wheel joint restricts body B to move along a local axis in body A. Body B is free to + * rotate. Supports a linear spring, linear limits, and a rotational motor. + * + * @{ + */ + +/// Create a wheel joint. +/// @see b3WheelJointDef for details. +B3_API b3JointId b3CreateWheelJoint( b3WorldId worldId, const b3WheelJointDef* def ); + +/// Enable/disable the wheel joint spring. +B3_API void b3WheelJoint_EnableSuspension( b3JointId jointId, bool flag ); + +/// Is the wheel joint spring enabled? +B3_API bool b3WheelJoint_IsSuspensionEnabled( b3JointId jointId ); + +/// Set the wheel joint stiffness in Hertz. +B3_API void b3WheelJoint_SetSuspensionHertz( b3JointId jointId, float hertz ); + +/// Get the wheel joint stiffness in Hertz. +B3_API float b3WheelJoint_GetSuspensionHertz( b3JointId jointId ); + +/// Set the wheel joint damping ratio, non-dimensional. +B3_API void b3WheelJoint_SetSuspensionDampingRatio( b3JointId jointId, float dampingRatio ); + +/// Get the wheel joint damping ratio, non-dimensional. +B3_API float b3WheelJoint_GetSuspensionDampingRatio( b3JointId jointId ); + +/// Enable/disable the wheel joint limit. +B3_API void b3WheelJoint_EnableSuspensionLimit( b3JointId jointId, bool flag ); + +/// Is the wheel joint limit enabled? +B3_API bool b3WheelJoint_IsSuspensionLimitEnabled( b3JointId jointId ); + +/// Get the wheel joint lower limit. +B3_API float b3WheelJoint_GetLowerSuspensionLimit( b3JointId jointId ); + +/// Get the wheel joint upper limit. +B3_API float b3WheelJoint_GetUpperSuspensionLimit( b3JointId jointId ); + +/// Set the wheel joint limits. +B3_API void b3WheelJoint_SetSuspensionLimits( b3JointId jointId, float lower, float upper ); + +/// Enable/disable the wheel joint motor. +B3_API void b3WheelJoint_EnableSpinMotor( b3JointId jointId, bool flag ); + +/// Is the wheel joint motor enabled? +B3_API bool b3WheelJoint_IsSpinMotorEnabled( b3JointId jointId ); + +/// Set the wheel joint motor speed in radians per second. +B3_API void b3WheelJoint_SetSpinMotorSpeed( b3JointId jointId, float speed ); + +/// Get the wheel joint motor speed in radians per second. +B3_API float b3WheelJoint_GetSpinMotorSpeed( b3JointId jointId ); + +/// Set the wheel joint maximum motor torque, usually in newton-meters. +B3_API void b3WheelJoint_SetMaxSpinTorque( b3JointId jointId, float torque ); + +/// Get the wheel joint maximum motor torque, usually in newton-meters. +B3_API float b3WheelJoint_GetMaxSpinTorque( b3JointId jointId ); + +/// Get the current spin speed in radians per second. +B3_API float b3WheelJoint_GetSpinSpeed( b3JointId jointId ); + +/// Get the wheel joint current motor torque, usually in newton-meters. +B3_API float b3WheelJoint_GetSpinTorque( b3JointId jointId ); + +/// Enable/disable wheel steering. Steering allows the wheel to rotate about the suspension axis. +B3_API void b3WheelJoint_EnableSteering( b3JointId jointId, bool flag ); + +/// Can the wheel steer? +B3_API bool b3WheelJoint_IsSteeringEnabled( b3JointId jointId ); + +/// Set the wheel joint steering stiffness in Hertz. +B3_API void b3WheelJoint_SetSteeringHertz( b3JointId jointId, float hertz ); + +/// Get the wheel joint steering stiffness in Hertz. +B3_API float b3WheelJoint_GetSteeringHertz( b3JointId jointId ); + +/// Set the wheel joint steering damping ratio, non-dimensional. +B3_API void b3WheelJoint_SetSteeringDampingRatio( b3JointId jointId, float dampingRatio ); + +/// Get the wheel joint steering damping ratio, non-dimensional. +B3_API float b3WheelJoint_GetSteeringDampingRatio( b3JointId jointId ); + +/// Set the wheel joint maximum steering torque in N*m. +B3_API void b3WheelJoint_SetMaxSteeringTorque( b3JointId jointId, float torque ); + +/// Get the wheel joint maximum steering torque in N*m. +B3_API float b3WheelJoint_GetMaxSteeringTorque( b3JointId jointId ); + +/// Enable/disable the wheel joint steering limit. +B3_API void b3WheelJoint_EnableSteeringLimit( b3JointId jointId, bool flag ); + +/// Is the wheel joint steering limit enabled? +B3_API bool b3WheelJoint_IsSteeringLimitEnabled( b3JointId jointId ); + +/// Get the wheel joint lower steering limit in radians. +B3_API float b3WheelJoint_GetLowerSteeringLimit( b3JointId jointId ); + +/// Get the wheel joint upper steering limit in radians. +B3_API float b3WheelJoint_GetUpperSteeringLimit( b3JointId jointId ); + +/// Set the wheel joint steering limits in radians. +B3_API void b3WheelJoint_SetSteeringLimits( b3JointId jointId, float lowerRadians, float upperRadians ); + +/// Set the wheel joint target steering angle in radians. +B3_API void b3WheelJoint_SetTargetSteeringAngle( b3JointId jointId, float radians ); + +/// Get the wheel joint target steering angle in radians. +B3_API float b3WheelJoint_GetTargetSteeringAngle( b3JointId jointId ); + +/// Get the current steering angle in radians. +B3_API float b3WheelJoint_GetSteeringAngle( b3JointId jointId ); + +/// Get the current steering torque in N*m. +B3_API float b3WheelJoint_GetSteeringTorque( b3JointId jointId ); + +/**@}*/ // wheel_joint + +/**@}*/ // joint + +/** + * @defgroup contact Contact + * Access to contacts + * @{ + */ + +/// Contact identifier validation. Provides validation for up to 2^32 allocations. +B3_API bool b3Contact_IsValid( b3ContactId id ); + +/// Get the manifolds for a contact. The manifold may have no points if the contact is not touching. +B3_API b3ContactData b3Contact_GetData( b3ContactId contactId ); + +/**@}*/ // contact diff --git a/vendor/box3d/src/include/box3d/collision.h b/vendor/box3d/src/include/box3d/collision.h new file mode 100644 index 000000000..30cc9579f --- /dev/null +++ b/vendor/box3d/src/include/box3d/collision.h @@ -0,0 +1,645 @@ +// SPDX-FileCopyrightText: 2025 Erin Catto +// SPDX-License-Identifier: MIT + +#pragma once + +#include "base.h" +#include "math_functions.h" +#include "types.h" + +#include +#include + +/** + * @addtogroup tree + * @{ + */ + +/// Constructing the tree initializes the node pool. +B3_API b3DynamicTree b3DynamicTree_Create( int proxyCapacity ); + +/// Destroy the tree, freeing the node pool. +B3_API void b3DynamicTree_Destroy( b3DynamicTree* tree ); + +/// Create a proxy. Provide an AABB and a userData value. +B3_API int b3DynamicTree_CreateProxy( b3DynamicTree* tree, b3AABB aabb, uint64_t categoryBits, uint64_t userData ); + +/// Destroy a proxy. This asserts if the id is invalid. +B3_API void b3DynamicTree_DestroyProxy( b3DynamicTree* tree, int proxyId ); + +/// Move a proxy to a new AABB by removing and reinserting into the tree. +B3_API void b3DynamicTree_MoveProxy( b3DynamicTree* tree, int proxyId, b3AABB aabb ); + +/// Enlarge a proxy and enlarge ancestors as necessary. +B3_API void b3DynamicTree_EnlargeProxy( b3DynamicTree* tree, int proxyId, b3AABB aabb ); + +/// Modify the category bits on a proxy. This is an expensive operation. +B3_API void b3DynamicTree_SetCategoryBits( b3DynamicTree* tree, int proxyId, uint64_t categoryBits ); + +/// Get the category bits on a proxy. +B3_API uint64_t b3DynamicTree_GetCategoryBits( b3DynamicTree* tree, int proxyId ); + +/// Query an AABB for overlapping proxies. The callback function is called for each proxy that overlaps the supplied AABB. +/// @return performance data +B3_API b3TreeStats b3DynamicTree_Query( const b3DynamicTree* tree, b3AABB aabb, uint64_t maskBits, bool requireAllBits, + b3TreeQueryCallbackFcn* callback, void* context ); + +/// Query an AABB for the closest object. The callback function is called for each proxy that might be closest to the supplied point. +/// @param tree the dynamic tree to query +/// @param point the query point +/// @param maskBits nodes are skipped if the bit-wise AND with the node category bits is zero +/// @param requireAllBits nodes are skipped if the bit-wise AND with the node category bits does not equal the maskBits +/// @param callback a user provided instance of b3TreeQueryClosestCallbackFcn +/// @param context a user context object that is provided to the callback +/// @param minDistanceSqr the initial and final minimum squared distance. Provide a small initial to restrict the search and +/// improve performance. If the value is large this query has performance that scales linearly with the number of proxies and +/// would be slower than a brute force search. +/// @return performance data +B3_API b3TreeStats b3DynamicTree_QueryClosest( const b3DynamicTree* tree, b3Vec3 point, uint64_t maskBits, bool requireAllBits, + b3TreeQueryClosestCallbackFcn* callback, void* context, float* minDistanceSqr ); + +/// Ray cast against the proxies in the tree. This relies on the callback +/// to perform an exact ray cast in the case where the proxy contains a shape. +/// The callback also performs any collision filtering. This has performance +/// roughly equal to k * log(n), where k is the number of collisions and n is the +/// number of proxies in the tree. +/// Bit-wise filtering using mask bits can greatly improve performance in some scenarios. +/// However, this filtering may be approximate, so the user should still apply filtering to results. +/// @param tree the dynamic tree to ray cast +/// @param input the ray cast input data. The ray extends from p1 to p1 + maxFraction * (p2 - p1) +/// @param maskBits bit mask test: `bool accept = (maskBits & node->categoryBits) != 0;` +/// @param requireAllBits modifies bit mask test: `bool accept = (maskBits & node->categoryBits) == maskBits;` +/// @param callback a callback function that is called for each proxy that is hit by the ray +/// @param context user context that is passed to the callback +/// @return performance data +B3_API b3TreeStats b3DynamicTree_RayCast( const b3DynamicTree* tree, const b3RayCastInput* input, uint64_t maskBits, + bool requireAllBits, b3TreeRayCastCallbackFcn* callback, void* context ); + +/// Sweep an AABB through the tree. The box is in the tree's world float frame and the callback +/// re-differences each shape at full precision against the query origin. Used by the large world +/// spatial queries so the tree traversal stays float while the narrow phase stays precise. +B3_API b3TreeStats b3DynamicTree_BoxCast( const b3DynamicTree* tree, const b3BoxCastInput* input, uint64_t maskBits, + bool requireAllBits, b3TreeBoxCastCallbackFcn* callback, void* context ); + +/// Validate this tree. For testing. +B3_API void b3DynamicTree_Validate( const b3DynamicTree* tree ); + +/// Get the height of the binary tree. +B3_API int b3DynamicTree_GetHeight( const b3DynamicTree* tree ); + +/// Get the ratio of the sum of the node areas to the root area. +B3_API float b3DynamicTree_GetAreaRatio( const b3DynamicTree* tree ); + +/// Get the bounding box that contains the entire tree +B3_API b3AABB b3DynamicTree_GetRootBounds( const b3DynamicTree* tree ); + +/// Get the number of proxies created +B3_API int b3DynamicTree_GetProxyCount( const b3DynamicTree* tree ); + +/// Rebuild the tree while retaining subtrees that haven't changed. Returns the number of boxes sorted. +B3_API int b3DynamicTree_Rebuild( b3DynamicTree* tree, bool fullBuild ); + +/// Get the number of bytes used by this tree +B3_API int b3DynamicTree_GetByteCount( const b3DynamicTree* tree ); + +/// Validate this tree. For testing. +B3_API void b3DynamicTree_Validate( const b3DynamicTree* tree ); + +/// Validate this tree has no enlarged AABBs. For testing. +B3_API void b3DynamicTree_ValidateNoEnlarged( const b3DynamicTree* tree ); + +/// Save this tree to a file for debugging +B3_API void b3DynamicTree_Save( const b3DynamicTree* tree, const char* fileName ); + +/// Load a file for debugging +B3_API b3DynamicTree b3DynamicTree_Load( const char* fileName, float scale ); + +/// Get proxy user data +B3_INLINE uint64_t b3DynamicTree_GetUserData( const b3DynamicTree* tree, int proxyId ) +{ + return tree->nodes[proxyId].userData; +} + +/// Get the AABB of a proxy +B3_INLINE b3AABB b3DynamicTree_GetAABB( const b3DynamicTree* tree, int proxyId ) +{ + return tree->nodes[proxyId].aabb; +} + +/**@}*/ // tree + +/** + * @addtogroup hull + * @{ + */ + +/// Get read only hull vertices. +B3_INLINE const b3HullVertex* b3GetHullVertices( const b3HullData* hull ) +{ + if ( hull->vertexOffset == 0 ) + { + return NULL; + } + + return (const b3HullVertex*)( (intptr_t)hull + hull->vertexOffset ); +} + +/// Get read only hull points. +B3_INLINE const b3Vec3* b3GetHullPoints( const b3HullData* hull ) +{ + if ( hull->pointOffset == 0 ) + { + return NULL; + } + + return (const b3Vec3*)( (intptr_t)hull + hull->pointOffset ); +} + +/// Get read only hull half edges. +B3_INLINE const b3HullHalfEdge* b3GetHullEdges( const b3HullData* hull ) +{ + if ( hull->edgeOffset == 0 ) + { + return NULL; + } + + return (const b3HullHalfEdge*)( (intptr_t)hull + hull->edgeOffset ); +} + +/// Get read only hull faces. +B3_INLINE const b3HullFace* b3GetHullFaces( const b3HullData* hull ) +{ + if ( hull->faceOffset == 0 ) + { + return NULL; + } + + return (const b3HullFace*)( (intptr_t)hull + hull->faceOffset ); +} + +/// Get read only hull planes. +B3_INLINE const b3Plane* b3GetHullPlanes( const b3HullData* hull ) +{ + if ( hull->planeOffset == 0 ) + { + return NULL; + } + + return (const b3Plane*)( (intptr_t)hull + hull->planeOffset ); +} + +/// Create a tessellated cylinder as a hull. +B3_API b3HullData* b3CreateCylinder( float height, float radius, float yOffset, int sides ); + +/// Create a tessellated cone as a hull. +B3_API b3HullData* b3CreateCone( float height, float radius1, float radius2, int slices ); + +/// Create a rock shaped hull. +B3_API b3HullData* b3CreateRock( float radius ); + +/// Create a generic convex hull. +B3_API b3HullData* b3CreateHull( const b3Vec3* points, int pointCount, int maxVertexCount ); + +/// Deep clone a hull. +B3_API b3HullData* b3CloneHull( const b3HullData* hull ); + +/// Clone and transform a hull. Supports non-uniform and mirroring scale. +B3_API b3HullData* b3CloneAndTransformHull( const b3HullData* original, b3Transform transform, b3Vec3 scale ); + +/// Destroy a hull. +B3_API void b3DestroyHull( b3HullData* hull ); + +/// Make a cube as a hull. Do not call b3DestroyHull on this. +B3_API b3BoxHull b3MakeCubeHull( float halfWidth ); + +/// Make a box as a hull. Do not call b3DestroyHull on this. +B3_API b3BoxHull b3MakeBoxHull( float hx, float hy, float hz ); + +/// Make an offset box as a hull. Do not call b3DestroyHull on this. +B3_API b3BoxHull b3MakeOffsetBoxHull( float hx, float hy, float hz, b3Vec3 offset ); + +/// Make a transformed box as a hull. Do not call b3DestroyHull on this. +/// @param hx, hy, hz positive half widths +/// @param transform local transform of box +B3_API b3BoxHull b3MakeTransformedBoxHull( float hx, float hy, float hz, b3Transform transform ); + +/// This makes a transformed box hull with post scaling. This is useful for boxes that are scaled in +/// a level editor. Such scaling can have reflection and shear. In the case of shear the result +/// may be approximate. If you need to support shear consider using b3CreateHull. +/// Do not call b3DestroyHull on this. +/// @param halfWidths positive half widths +/// @param transform local transform of box +/// @param postScale scale applied after the transform, may be negative +B3_API b3BoxHull b3MakeScaledBoxHull( b3Vec3 halfWidths, b3Transform transform, b3Vec3 postScale ); + +/// This takes a box with a transform and post scale and converts it into a box with the post scale +/// resolved with new half-widths and transform. This accepts non-uniform and negative scale. +/// This is approximate if there is shear. +/// @param halfWidths [in/out] the box half widths +/// @param transform [in/out] the box transform with rotation and translation +/// @param postScale the post scale being applied to the box after the transform +/// @param minHalfWidth the minimum half width after scale is applied +B3_API void b3ScaleBox( b3Vec3* halfWidths, b3Transform* transform, b3Vec3 postScale, float minHalfWidth ); + +/**@}*/ // hull + +/** + * @addtogroup mesh + * @{ + */ + +/// Get read only mesh BVH nodes. +B3_INLINE const b3MeshNode* b3GetMeshNodes( const b3MeshData* mesh ) +{ + if ( mesh->nodeOffset == 0 ) + { + return NULL; + } + + return (const b3MeshNode*)( (intptr_t)mesh + mesh->nodeOffset ); +} + +/// Get read only mesh vertices. +B3_INLINE const b3Vec3* b3GetMeshVertices( const b3MeshData* mesh ) +{ + if ( mesh->vertexOffset == 0 ) + { + return NULL; + } + + return (const b3Vec3*)( (intptr_t)mesh + mesh->vertexOffset ); +} + +/// Get read only mesh triangles. +B3_INLINE const b3MeshTriangle* b3GetMeshTriangles( const b3MeshData* mesh ) +{ + if ( mesh->triangleOffset == 0 ) + { + return NULL; + } + + return (const b3MeshTriangle*)( (intptr_t)mesh + mesh->triangleOffset ); +} + +/// Get read only mesh materials. The count is equal to the triangle count. +B3_INLINE const uint8_t* b3GetMeshMaterialIndices( const b3MeshData* mesh ) +{ + if ( mesh->materialOffset == 0 ) + { + return NULL; + } + + return (const uint8_t*)( (intptr_t)mesh + mesh->materialOffset ); +} + +/// Get read only mesh flags. The count is equal to the triangle count. +B3_INLINE const uint8_t* b3GetMeshFlags( const b3MeshData* mesh ) +{ + if ( mesh->flagsOffset == 0 ) + { + return NULL; + } + + return (const uint8_t*)( (intptr_t)mesh + mesh->flagsOffset ); +} + +/// Create a grid mesh along the x and z axes. +/// @param xCount the number of rows in the x direction +/// @param zCount the number of rows in the z direction +/// @param cellWidth the width of each cell +/// @param materialCount the number of materials to generate +/// @param identifyEdges compute adjacency information +B3_API b3MeshData* b3CreateGridMesh( int xCount, int zCount, float cellWidth, int materialCount, bool identifyEdges ); + +/// Create a wave mesh along the x and z axes. +B3_API b3MeshData* b3CreateWaveMesh( int xCount, int zCount, float cellWidth, float amplitude, float rowFrequency, + float columnFrequency ); + +/// Create a torus mesh. +B3_API b3MeshData* b3CreateTorusMesh( int radialResolution, int tubularResolution, float radius, float thickness ); + +/// Create a box mesh. +B3_API b3MeshData* b3CreateBoxMesh( b3Vec3 center, b3Vec3 extent, bool identifyEdges ); + +/// Create a hollow box mesh. +B3_API b3MeshData* b3CreateHollowBoxMesh( b3Vec3 center, b3Vec3 extent ); + +/// Create a platform mesh. A truncated pyramid. +B3_API b3MeshData* b3CreatePlatformMesh( b3Vec3 center, float height, float topWidth, float bottomWidth ); + +/// Create a generic mesh. +B3_API b3MeshData* b3CreateMesh( const b3MeshDef* def, int* degenerateTriangleIndices, int degenerateCapacity ); + +/// Destroy a mesh. +B3_API void b3DestroyMesh( b3MeshData* mesh ); + +/// Get the height of the mesh BVH. +B3_API int b3GetHeight( const b3MeshData* mesh ); + +/**@}*/ // mesh + +/** + * @addtogroup height_field + * @{ + */ + +/// Get read only compressed heights. One uint16_t per grid point. +B3_INLINE const uint16_t* b3GetHeightFieldCompressedHeights( const b3HeightFieldData* hf ) +{ + if ( hf->heightsOffset == 0 ) + { + return NULL; + } + + return (const uint16_t*)( (intptr_t)hf + hf->heightsOffset ); +} + +/// Get read only material indices. One uint8_t per cell. +B3_INLINE const uint8_t* b3GetHeightFieldMaterialIndices( const b3HeightFieldData* hf ) +{ + if ( hf->materialOffset == 0 ) + { + return NULL; + } + + return (const uint8_t*)( (intptr_t)hf + hf->materialOffset ); +} + +/// Get read only triangle flags. One uint8_t per triangle. +B3_INLINE const uint8_t* b3GetHeightFieldFlags( const b3HeightFieldData* hf ) +{ + if ( hf->flagsOffset == 0 ) + { + return NULL; + } + + return (const uint8_t*)( (intptr_t)hf + hf->flagsOffset ); +} + +/// Create a generic height field. +B3_API b3HeightFieldData* b3CreateHeightField( const b3HeightFieldDef* data ); + +/// Create a grid as a height field. +B3_API b3HeightFieldData* b3CreateGrid( int rowCount, int columnCount, b3Vec3 scale, bool makeHoles ); + +/// Create a wave grid as a height field. +B3_API b3HeightFieldData* b3CreateWave( int rowCount, int columnCount, b3Vec3 scale, float rowFrequency, float columnFrequency, + bool makeHoles ); + +/// Destroy a height field. +B3_API void b3DestroyHeightField( b3HeightFieldData* heightField ); + +/// Save input height data to a file +B3_API void b3DumpHeightData( const b3HeightFieldDef* data, const char* fileName ); + +/// Create a height field by loading a previously saved height data +B3_API b3HeightFieldData* b3LoadHeightField( const char* fileName ); + +/**@}*/ // height_field + +/** + * @addtogroup compound + * @{ + */ + +/// Get a child shape of a compound. +B3_API b3ChildShape b3GetCompoundChild( const b3CompoundData* compound, int childIndex ); + +/// Query a compound shape for children that overlap an AABB. +B3_API void b3QueryCompound( const b3CompoundData* compound, b3AABB aabb, b3CompoundQueryFcn* fcn, void* context ); + +/// Access a child capsule by index. +B3_API b3CompoundCapsule b3GetCompoundCapsule( const b3CompoundData* compound, int index ); + +/// Access a child hull by index. +B3_API b3CompoundHull b3GetCompoundHull( const b3CompoundData* compound, int index ); + +/// Access a child mesh by index. +B3_API b3CompoundMesh b3GetCompoundMesh( const b3CompoundData* compound, int index ); + +/// Access a child sphere by index. +B3_API b3CompoundSphere b3GetCompoundSphere( const b3CompoundData* compound, int index ); + +/// Access the compound material array. +B3_API const b3SurfaceMaterial* b3GetCompoundMaterials( const b3CompoundData* compound ); + +/// Create a compound shape. All input data in the definition is cloned into the resulting compound. +B3_API b3CompoundData* b3CreateCompound( const b3CompoundDef* def ); + +/// Destroy a compound shape. +B3_API void b3DestroyCompound( b3CompoundData* compound ); + +/// If bytes is null then this returns the number of required bytes. This clones all the +/// data into the bytes buffer. This is expected to run offline or asynchronously. +/// This mutates the compound to nullify pointers, leaving the compound in an unusable state. +B3_API uint8_t* b3ConvertCompoundToBytes( b3CompoundData* compound ); + +/// Convert bytes to compound. This does not clone. The bytes must remain in scope while the +/// compound is used. This is done to improve run-time performance and allow for instancing. +/// The bytes are mutated to fixup pointers. +B3_API b3CompoundData* b3ConvertBytesToCompound( uint8_t* bytes, int byteCount ); + +/**@}*/ // compound + +/** + * @addtogroup geometry + * @{ + */ + +/// Compute mass properties of a sphere +B3_API b3MassData b3ComputeSphereMass( const b3Sphere* shape, float density ); + +/// Compute mass properties of a capsule +B3_API b3MassData b3ComputeCapsuleMass( const b3Capsule* shape, float density ); + +/// Compute mass properties of a hull +B3_API b3MassData b3ComputeHullMass( const b3HullData* shape, float density ); + +/// Compute the bounding box of a transformed sphere +B3_API b3AABB b3ComputeSphereAABB( const b3Sphere* shape, b3Transform transform ); + +/// Compute the bounding box of a transformed capsule +B3_API b3AABB b3ComputeCapsuleAABB( const b3Capsule* shape, b3Transform transform ); + +/// Compute the bounding box of a transformed hull +B3_API b3AABB b3ComputeHullAABB( const b3HullData* shape, b3Transform transform ); + +/// Compute the bounding box of a transformed mesh. Scale may be non-uniform and have negative components. +B3_API b3AABB b3ComputeMeshAABB( const b3MeshData* shape, b3Transform transform, b3Vec3 scale ); + +/// Compute the bounding box of a transformed height-field +B3_API b3AABB b3ComputeHeightFieldAABB( const b3HeightFieldData* shape, b3Transform transform ); + +/// Compute the bounding box of a compound +B3_API b3AABB b3ComputeCompoundAABB( const b3CompoundData* shape, b3Transform transform ); + +/**@}*/ // geometry + +/** + * @addtogroup query + * @{ + */ + +/// Use this to ensure your ray cast input is valid and avoid internal assertions. +B3_API bool b3IsValidRay( const b3RayCastInput* input ); + +/// Overlap shape versus capsule +B3_API bool b3OverlapCapsule( const b3Capsule* shape, b3Transform shapeTransform, const b3ShapeProxy* proxy ); + +/// Overlap shape versus compound +B3_API bool b3OverlapCompound( const b3CompoundData* shape, b3Transform shapeTransform, const b3ShapeProxy* proxy ); + +/// Overlap shape versus height field +B3_API bool b3OverlapHeightField( const b3HeightFieldData* shape, b3Transform shapeTransform, const b3ShapeProxy* proxy ); + +/// Overlap shape versus hull +B3_API bool b3OverlapHull( const b3HullData* shape, b3Transform shapeTransform, const b3ShapeProxy* proxy ); + +/// Overlap shape versus mesh +B3_API bool b3OverlapMesh( const b3Mesh* shape, b3Transform shapeTransform, const b3ShapeProxy* proxy ); + +/// Overlap shape versus sphere +B3_API bool b3OverlapSphere( const b3Sphere* shape, b3Transform shapeTransform, const b3ShapeProxy* proxy ); + +/// Ray cast versus sphere in local space. A zero length ray is a point query. Initial overlap +/// reports a hit at the ray origin with zero fraction and zero normal. +B3_API b3CastOutput b3RayCastSphere( const b3Sphere* shape, const b3RayCastInput* input ); + +/// Ray cast versus a hollow sphere shell in local space. Unlike the solid sphere a ray starting +/// inside is not an overlap: it passes through and hits the far wall. +B3_API b3CastOutput b3RayCastHollowSphere( const b3Sphere* shape, const b3RayCastInput* input ); + +/// Ray cast versus capsule in local space. A zero length ray is a point query. Initial overlap +/// reports a hit at the ray origin with zero fraction and zero normal. +B3_API b3CastOutput b3RayCastCapsule( const b3Capsule* shape, const b3RayCastInput* input ); + +/// Ray cast versus compound in local space. A zero length ray is a point query. Initial overlap +/// with a child reports a hit at the ray origin with zero fraction and zero normal. +B3_API b3CastOutput b3RayCastCompound( const b3CompoundData* shape, const b3RayCastInput* input ); + +/// Ray cast versus hull shape in local space. A zero length ray is a point query. Initial overlap +/// reports a hit at the ray origin with zero fraction and zero normal. +B3_API b3CastOutput b3RayCastHull( const b3HullData* shape, const b3RayCastInput* input ); + +/// Ray cast versus mesh in local space. A thin surface with no interior, so there is no overlap case. +B3_API b3CastOutput b3RayCastMesh( const b3Mesh* shape, const b3RayCastInput* input ); + +/// Ray cast versus height field in local space. A thin surface with no interior, so there is no overlap case. +B3_API b3CastOutput b3RayCastHeightField( const b3HeightFieldData* shape, const b3RayCastInput* input ); + +/// Shape cast versus a sphere. Initial overlap is treated as a miss. +B3_API b3CastOutput b3ShapeCastSphere( const b3Sphere* shape, const b3ShapeCastInput* input ); + +/// Shape cast versus a capsule. Initial overlap is treated as a miss. +B3_API b3CastOutput b3ShapeCastCapsule( const b3Capsule* shape, const b3ShapeCastInput* input ); + +/// Shape cast versus compound. Initial overlap is treated as a miss. +B3_API b3CastOutput b3ShapeCastCompound( const b3CompoundData* shape, const b3ShapeCastInput* input ); + +/// Shape cast versus a hull. Initial overlap is treated as a miss. +B3_API b3CastOutput b3ShapeCastHull( const b3HullData* shape, const b3ShapeCastInput* input ); + +/// Shape cast versus a mesh. Initial overlap is treated as a miss. +B3_API b3CastOutput b3ShapeCastMesh( const b3Mesh* shape, const b3ShapeCastInput* input ); + +/// Shape cast versus a height field. Initial overlap is treated as a miss. +B3_API b3CastOutput b3ShapeCastHeightField( const b3HeightFieldData* shape, const b3ShapeCastInput* input ); + +/// Query callback. +typedef bool b3MeshQueryFcn( b3Vec3 a, b3Vec3 b, b3Vec3 c, int triangleIndex, void* context ); + +/// Query a mesh for triangles overlapping a bounding box in local space. May have false positives. Useful for debug draw. +/// @param mesh the mesh to query, includes scale +/// @param bounds the bounding box in local space +/// @param fcn a user function to collect triangles +/// @param context the context sent to the user function. +B3_API void b3QueryMesh( const b3Mesh* mesh, const b3AABB bounds, b3MeshQueryFcn* fcn, void* context ); + +/// Query a height field for triangles overlapping a bounding box in local space. May have false positives. Useful for debug draw. +/// @param heightField the height field to query +/// @param bounds the bounding box in local space +/// @param fcn a user function to collect triangles +/// @param context the context sent to the user function. +B3_API void b3QueryHeightField( const b3HeightFieldData* heightField, b3AABB bounds, b3MeshQueryFcn* fcn, void* context ); + +/// Compute the closest points between two shapes represented as point clouds. +/// b3SimplexCache cache is input/output. On the first call set b3SimplexCache.count to zero. +/// The query runs in frame A, so the witness points and normal are returned in frame A. +/// The underlying GJK algorithm may be debugged by passing in debug simplexes and capacity. You may pass in NULL and 0 for these. +B3_API b3DistanceOutput b3ShapeDistance( const b3DistanceInput* input, b3SimplexCache* cache, b3Simplex* simplexes, + int simplexCapacity ); + +/// Perform a linear shape cast of shape B moving and shape A fixed. Determines the hit point, normal, and translation fraction. +/// The query runs in frame A, so the hit point and normal are returned in frame A. Initially touching shapes are a miss. +B3_API b3CastOutput b3ShapeCast( const b3ShapeCastPairInput* input ); + +/// Evaluate the transform sweep at a specific time. +B3_API b3Transform b3GetSweepTransform( const b3Sweep* sweep, float time ); + +/// Compute the upper bound on time before two shapes penetrate. Time is represented as +/// a fraction between [0,tMax]. This uses a swept separating axis and may miss some intermediate, +/// non-tunneling collisions. If you change the time interval, you should call this function +/// again. +B3_API b3TOIOutput b3TimeOfImpact( const b3TOIInput* input ); + +/**@}*/ // query + +/** + * @addtogroup collision + * @{ + */ + +/// Collide two spheres. +B3_API void b3CollideSpheres( b3LocalManifold* manifold, int capacity, const b3Sphere* sphereA, const b3Sphere* sphereB, + b3Transform transformBtoA ); + +/// Collide a capsule and a sphere. +B3_API void b3CollideCapsuleAndSphere( b3LocalManifold* manifold, int capacity, const b3Capsule* capsuleA, + const b3Sphere* sphereB, b3Transform transformBtoA ); + +/// Collide a hull and a sphere. +B3_API void b3CollideHullAndSphere( b3LocalManifold* manifold, int capacity, const b3HullData* hullA, const b3Sphere* sphereB, + b3Transform transformBtoA, b3SimplexCache* cache ); + +/// Collide two capsules. +B3_API void b3CollideCapsules( b3LocalManifold* manifold, int capacity, const b3Capsule* capsuleA, const b3Capsule* capsuleB, + b3Transform transformBtoA ); + +/// Collide a hull and a capsule. +B3_API void b3CollideHullAndCapsule( b3LocalManifold* manifold, int capacity, const b3HullData* hullA, const b3Capsule* capsuleB, + b3Transform transformBtoA, b3SimplexCache* cache ); + +/// Collide two hulls. +B3_API void b3CollideHulls( b3LocalManifold* manifold, int capacity, const b3HullData* hullA, const b3HullData* hullB, + b3Transform transformBtoA, b3SATCache* cache ); + +/// Collide a capsule and a triangle. +B3_API void b3CollideCapsuleAndTriangle( b3LocalManifold* manifold, int capacity, const b3Capsule* capsuleA, + const b3Vec3* triangleB, b3SimplexCache* cache ); + +/// Collide a hull and a triangle. +B3_API void b3CollideHullAndTriangle( b3LocalManifold* manifold, int capacity, const b3HullData* hullA, b3Vec3 v1, b3Vec3 v2, + b3Vec3 v3, int triangleFlags, b3SATCache* cache ); + +/// Collide a sphere and a triangle. +B3_API void b3CollideSphereAndTriangle( b3LocalManifold* manifold, int capacity, const b3Sphere* sphereA, + const b3Vec3* triangleB ); + +/**@}*/ // collision + +/** + * @addtogroup character + * @{ + */ + +/// Solves the position of a mover that satisfies the given collision planes. +/// @param targetDelta the desired translation from the position used to generate the collision planes +/// @param planes the collision planes +/// @param count the number of collision planes +B3_API b3PlaneSolverResult b3SolvePlanes( b3Vec3 targetDelta, b3CollisionPlane* planes, int count ); + +/// Clips the velocity against the given collision planes. Planes with zero push or clipVelocity +/// set to false are skipped. +B3_API b3Vec3 b3ClipVector( b3Vec3 vector, const b3CollisionPlane* planes, int count ); + +/**@}*/ // character diff --git a/vendor/box3d/src/include/box3d/config.h b/vendor/box3d/src/include/box3d/config.h new file mode 100644 index 000000000..2790fc0b8 --- /dev/null +++ b/vendor/box3d/src/include/box3d/config.h @@ -0,0 +1,31 @@ +// SPDX-FileCopyrightText: 2026 Erin Catto +// SPDX-License-Identifier: MIT + +#pragma once + +// Box3D compile-time options. +// +// Normally set by the CMake BOX3D_* options. If you build Box3D without its +// CMake (dropping the sources into another project), set them here so the +// library and your code agree. Edit this file, or keep your settings elsewhere +// and point Box3D at them from your build: +// +// #define BOX3D_USER_CONFIG "my_box3d_config.h" +// +// A define passed on the compiler command line still wins over this file. + +// Large world mode. Stores world positions in double precision. Affects ABI. +//#define BOX3D_DOUBLE_PRECISION + +// Build the scalar fallback instead of SSE2/NEON. +//#define BOX3D_DISABLE_SIMD + +// Enable internal validation in debug builds. +//#define BOX3D_VALIDATE + +// Decorate the public API with your own export macro instead of Box3D's +// box3d_EXPORTS/BOX3D_DLL scheme, for example when compiling Box3D into another +// shared library. A single value cannot switch between dllexport and dllimport, +// so this suits embedding more than shipping Box3D as its own DLL. +//#define BOX3D_EXPORT MYENGINE_API + diff --git a/vendor/box3d/src/include/box3d/constants.h b/vendor/box3d/src/include/box3d/constants.h new file mode 100644 index 000000000..e32b73706 --- /dev/null +++ b/vendor/box3d/src/include/box3d/constants.h @@ -0,0 +1,123 @@ +// SPDX-FileCopyrightText: 2025 Erin Catto +// SPDX-License-Identifier: MIT + +#pragma once + +#include "base.h" + +/// Box3D bases all length units on meters, but you may need different units for your game. +/// You can set this value to use different units. This should be done at application startup +/// and only modified once. Default value is 1. +/// @warning This must be modified before any calls to Box3D +B3_API void b3SetLengthUnitsPerMeter( float lengthUnits ); + +/// Get the current length units per meter. +B3_API float b3GetLengthUnitsPerMeter( void ); + +/// Set the threshold for logging stalls. +B3_API void b3SetStallThreshold( float seconds ); + +/// Get the threshold for logging stalls. +B3_API float b3GetStallThreshold( void ); + +// Used to detect bad values. In float mode positions greater than about 16km have precision +// problems, so 100km is a safe limit. Large world mode keeps coordinates accurate much farther +// from the origin, so the sanity limit widens to keep valid far-field positions from tripping it. +#if defined( BOX3D_DOUBLE_PRECISION ) +#define B3_HUGE ( 1.0e9f * b3GetLengthUnitsPerMeter() ) +#else +#define B3_HUGE ( 1.0e5f * b3GetLengthUnitsPerMeter() ) +#endif + +/// Maximum parallel workers. Used for some fixed size arrays. +#define B3_MAX_WORKERS 32 + +/// Maximum number of tasks queued per world step. b3EnqueueTaskCallback will never be called +/// more than this per world step. This is related to B3_MAX_WORKERS. With 32 workers, +/// the maximum observed task count is 130. This allows an external task system to use a fixed +/// size array for Box3D task, which may help with creating stable user task pointers. +#define B3_MAX_TASKS 256 + +// Maximum number of colors in the constraint graph. Constraints that cannot +// find a color are added to the overflow set which are solved single-threaded. +// The compound barrel benchmark has minor overflow with 24 colors +#define B3_GRAPH_COLOR_COUNT 24 + +// Number of contact point buckets for counting the number of contact points per +// shape contact pair. This is just for reporting and doesn't affect simulation. +#define B3_CONTACT_MANIFOLD_COUNT_BUCKETS 8 + +// A small length used as a collision and constraint tolerance. Usually it is +// chosen to be numerically significant, but visually insignificant. In meters. +// @warning modifying this can have a significant impact on stability +#define B3_LINEAR_SLOP ( 0.005f * b3GetLengthUnitsPerMeter() ) + +#define B3_MIN_CAPSULE_LENGTH ( B3_LINEAR_SLOP ) + +/// The distance between shapes where they are considered overlapped. This is needed +/// because GJK may return small positive values for overlapped shapes in degenerate +/// configurations. +#define B3_OVERLAP_SLOP ( 0.1f * B3_LINEAR_SLOP ) + +/// Maximum number of simultaneous worlds that can be allocated +#ifndef B3_MAX_WORLDS +#define B3_MAX_WORLDS 128 +#endif + +/// The maximum rotation of a body per time step. This limit is very large and is used +/// to prevent numerical problems. You shouldn't need to adjust this. +/// @warning increasing this to 0.5f * B3_PI or greater will break continuous collision. +#define B3_MAX_ROTATION ( 0.25f * B3_PI ) + +/// @warning modifying this can have a significant impact on performance and stability +#define B3_SPECULATIVE_DISTANCE ( 4.0f * B3_LINEAR_SLOP ) + +/// The rest offset is used for mesh contact to reduce ghost collisions and assist with CCD. +/// The rest offset adjusts the contact point separation value, making the solver push the shapes +/// apart by this distance. +/// Must be at least B3_LINEAR_SLOP and less than B3_SPECULATIVE_DISTANCE. +#define B3_MESH_REST_OFFSET ( 1.0f * B3_LINEAR_SLOP ) + +/// The default contact recycling distance. +#define B3_CONTACT_RECYCLE_DISTANCE ( 10.0f * B3_LINEAR_SLOP ) + +/// The default contact recycling world angle threshold. For performance this value +/// is cos(angle/2)^2. This value corresponds to 10 degrees. +#define B3_CONTACT_RECYCLE_ANGULAR_DISTANCE ( 0.99240388f ) + +/// This is used to fatten AABBs in the dynamic tree. This allows proxies +/// to move by a small amount without triggering a tree adjustment. This is in meters. +/// @warning modifying this can have a significant impact on performance +#define B3_MAX_AABB_MARGIN ( 0.05f * b3GetLengthUnitsPerMeter() ) + +/// Per-shape AABB margin is a fraction of the shape extent (capped by B3_MAX_AABB_MARGIN). +/// Small shapes get small margins; large shapes are clamped to the cap. +#define B3_AABB_MARGIN_FRACTION 0.125f + +/// The time that a body must be still before it will go to sleep. In seconds. +#define B3_TIME_TO_SLEEP 0.5f + +/// Maximum length of the body name. Can be 0 if you don't need names. +/// Note: this gates recording capability. +#ifndef B3_BODY_NAME_LENGTH +#define B3_BODY_NAME_LENGTH 18 +#endif + +/// Maximum length of the shape name. Can be 0 if you don't need names. +/// Note: this gates recording capability. +/// todo waiting on this because it breaks existing recordings +#ifndef B3_SHAPE_NAME_LENGTH +#define B3_SHAPE_NAME_LENGTH 18 +#endif + +/// The maximum number of contact points between two touching shapes. +#define B3_MAX_MANIFOLD_POINTS 4 + +/// The maximum number points to use for shape cast proxies (swept point cloud). +#define B3_MAX_SHAPE_CAST_POINTS 64 + +/// These generous limits allow for easy hashing. See b3ShapePairKey. +#define B3_SHAPE_POWER 22 +#define B3_CHILD_POWER ( 64 - 2 * B3_SHAPE_POWER ) +#define B3_MAX_SHAPES ( 1 << B3_SHAPE_POWER ) +#define B3_MAX_CHILD_SHAPES ( 1 << B3_CHILD_POWER ) diff --git a/vendor/box3d/src/include/box3d/id.h b/vendor/box3d/src/include/box3d/id.h new file mode 100644 index 000000000..447fd34ed --- /dev/null +++ b/vendor/box3d/src/include/box3d/id.h @@ -0,0 +1,178 @@ +// SPDX-FileCopyrightText: 2026 Erin Catto +// SPDX-License-Identifier: MIT + +#pragma once + +#include + +// Note: this file should be stand-alone + +/** + * @defgroup id Ids + * These ids serve as handles to internal Box3D objects. + * These should be considered opaque data and passed by value. + * Include this header if you need the id types and not the whole Box3D API. + * All ids are considered null if initialized to zero. + * + * For example in C++: + * + * @code{.cxx} + * b3WorldId worldId = {}; + * @endcode + * + * Or in C: + * + * @code{.c} + * b3WorldId worldId = {0}; + * @endcode + * + * These are both considered null. + * + * @warning Do not use the internals of these ids. They are subject to change. Ids should be treated as opaque objects. + * @warning You should use ids to access objects in Box3D. Do not access files within the src folder. Such usage is unsupported. + * @{ + */ + +/// World id references a world instance. This should be treated as an opaque handle. +typedef struct b3WorldId +{ + uint16_t index1; + uint16_t generation; +} b3WorldId; + +/// Body id references a body instance. This should be treated as an opaque handle. +typedef struct b3BodyId +{ + int32_t index1; + uint16_t world0; + uint16_t generation; +} b3BodyId; + +/// Shape id references a shape instance. This should be treated as an opaque handle. +typedef struct b3ShapeId +{ + int32_t index1; + uint16_t world0; + uint16_t generation; +} b3ShapeId; + +/// Joint id references a joint instance. This should be treated as an opaque handle. +typedef struct b3JointId +{ + int32_t index1; + uint16_t world0; + uint16_t generation; +} b3JointId; + +/// Contact id references a contact instance. This should be treated as an opaque handle. +typedef struct b3ContactId +{ + int32_t index1; + uint16_t world0; + int16_t padding; + uint32_t generation; +} b3ContactId; + +// clang-format off +#ifdef __cplusplus + /// A null id. Works for any id type. + #define B3_NULL_ID {} + #define B3_ID_INLINE inline +#else + /// A null id. Works for any id type. + #define B3_NULL_ID { 0 } + + /// This macro bridges C and C++ inline functions. C++ has the one definition rule that C lacks. + #define B3_ID_INLINE static inline +#endif +// clang-format on + +/// Use these to make your identifiers null. +/// You may also use zero initialization to get null. +static const b3WorldId b3_nullWorldId = B3_NULL_ID; +static const b3BodyId b3_nullBodyId = B3_NULL_ID; +static const b3ShapeId b3_nullShapeId = B3_NULL_ID; +static const b3JointId b3_nullJointId = B3_NULL_ID; +static const b3ContactId b3_nullContactId = B3_NULL_ID; + +/// Macro to determine if any id is null. +#define B3_IS_NULL( id ) ( id.index1 == 0 ) + +/// Macro to determine if any id is non-null. +#define B3_IS_NON_NULL( id ) ( id.index1 != 0 ) + +/// Compare two ids for equality. Doesn't work for b3WorldId. Don't mix types. +#define B3_ID_EQUALS( id1, id2 ) ( id1.index1 == id2.index1 && id1.world0 == id2.world0 && id1.generation == id2.generation ) + +/// Store a world id into a uint32_t. +B3_ID_INLINE uint32_t b3StoreWorldId( b3WorldId id ) +{ + return ( (uint32_t)id.index1 << 16 ) | (uint32_t)id.generation; +} + +/// Load a uint32_t into a world id. +B3_ID_INLINE b3WorldId b3LoadWorldId( uint32_t x ) +{ + b3WorldId id = { (uint16_t)( x >> 16 ), (uint16_t)( x ) }; + return id; +} + +/// Store a body id into a uint64_t. +B3_ID_INLINE uint64_t b3StoreBodyId( b3BodyId id ) +{ + return ( (uint64_t)id.index1 << 32 ) | ( (uint64_t)id.world0 ) << 16 | (uint64_t)id.generation; +} + +/// Load a uint64_t into a body id. +B3_ID_INLINE b3BodyId b3LoadBodyId( uint64_t x ) +{ + b3BodyId id = { (int32_t)( x >> 32 ), (uint16_t)( x >> 16 ), (uint16_t)( x ) }; + return id; +} + +/// Store a shape id into a uint64_t. +B3_ID_INLINE uint64_t b3StoreShapeId( b3ShapeId id ) +{ + return ( (uint64_t)id.index1 << 32 ) | ( (uint64_t)id.world0 ) << 16 | (uint64_t)id.generation; +} + +/// Load a uint64_t into a shape id. +B3_ID_INLINE b3ShapeId b3LoadShapeId( uint64_t x ) +{ + b3ShapeId id = { (int32_t)( x >> 32 ), (uint16_t)( x >> 16 ), (uint16_t)( x ) }; + return id; +} + +/// Store a joint id into a uint64_t. +B3_ID_INLINE uint64_t b3StoreJointId( b3JointId id ) +{ + return ( (uint64_t)id.index1 << 32 ) | ( (uint64_t)id.world0 ) << 16 | (uint64_t)id.generation; +} + +/// Load a uint64_t into a joint id. +B3_ID_INLINE b3JointId b3LoadJointId( uint64_t x ) +{ + b3JointId id = { (int32_t)( x >> 32 ), (uint16_t)( x >> 16 ), (uint16_t)( x ) }; + return id; +} + +/// Store a contact id into three uint32 values +B3_ID_INLINE void b3StoreContactId( b3ContactId id, uint32_t values[3] ) +{ + values[0] = (uint32_t)id.index1; + values[1] = (uint32_t)id.world0; + values[2] = (uint32_t)id.generation; +} + +/// Load a contact id from three uint32 values. +B3_ID_INLINE b3ContactId b3LoadContactId( uint32_t values[3] ) +{ + b3ContactId id; + id.index1 = (int32_t)values[0]; + id.world0 = (uint16_t)values[1]; + id.padding = 0; + id.generation = (uint32_t)values[2]; + return id; +} + +/**@}*/ diff --git a/vendor/box3d/src/include/box3d/math_functions.h b/vendor/box3d/src/include/box3d/math_functions.h new file mode 100644 index 000000000..7ef7354f2 --- /dev/null +++ b/vendor/box3d/src/include/box3d/math_functions.h @@ -0,0 +1,1208 @@ +// SPDX-FileCopyrightText: 2025 Erin Catto +// SPDX-License-Identifier: MIT + +#pragma once + +#include "base.h" + +#include + +// for sqrtf and remainderf +#include +#include + +/** + * @defgroup math Math + * @brief Vector math types and functions + * @{ + */ + +/// https://en.wikipedia.org/wiki/Pi +#define B3_PI 3.14159265359f + +/// Convenience macro to convert from degrees to radians. +#define B3_DEG_TO_RAD 0.01745329251f + +/// Convenience macro to convert from radians to degrees. +#define B3_RAD_TO_DEG 57.2957795131f + +/// Minimum scale used for scaling collision meshes, etc. +#define B3_MIN_SCALE 0.01f + +/// A 2D vector. +typedef struct b3Vec2 +{ + float x; + float y; +} b3Vec2; + +/// A 3D vector. +typedef struct b3Vec3 +{ + float x; + float y; + float z; +} b3Vec3; + +/// Cosine and sine pair. +/// This uses a custom implementation designed for cross-platform determinism. +typedef struct b3CosSin +{ + /// cosine and sine + float cosine; + float sine; +} b3CosSin; + +/// A quaternion. +typedef struct b3Quat +{ + b3Vec3 v; + float s; +} b3Quat; + +/// A rigid transform. +typedef struct b3Transform +{ + b3Vec3 p; + b3Quat q; +} b3Transform; + +#if defined( BOX3D_DOUBLE_PRECISION ) + +/// A world position. Double precision in large world mode so coordinates stay accurate far +/// from the origin. +typedef struct b3Pos +{ + double x, y, z; +} b3Pos; + +/// A world transform with double precision translation and float quaternion rotation. Rotation +/// is frame local and never needs the extra range, the same split as Jolt's DMat44. +typedef struct b3WorldTransform +{ + b3Pos p; + b3Quat q; +} b3WorldTransform; + +#else + +/// In single precision mode these types are the same. +typedef b3Vec3 b3Pos; + +/// In single precision mode these types are the same. +typedef b3Transform b3WorldTransform; + +#endif + +/// A 3x3 matrix. +typedef struct b3Matrix3 +{ + b3Vec3 cx, cy, cz; +} b3Matrix3; + +/// Axis aligned bounding box. +typedef struct b3AABB +{ + b3Vec3 lowerBound; + b3Vec3 upperBound; +} b3AABB; + +/// A plane. +/// separation = dot(normal, point) - offset +typedef struct b3Plane +{ + b3Vec3 normal; + float offset; +} b3Plane; + +static const b3Vec3 b3Vec3_zero = { 0.0f, 0.0f, 0.0f }; +static const b3Vec3 b3Vec3_one = { 1.0f, 1.0f, 1.0f }; +static const b3Vec3 b3Vec3_axisX = { 1.0f, 0.0f, 0.0f }; +static const b3Vec3 b3Vec3_axisY = { 0.0f, 1.0f, 0.0f }; +static const b3Vec3 b3Vec3_axisZ = { 0.0f, 0.0f, 1.0f }; +static const b3Quat b3Quat_identity = { { 0.0f, 0.0f, 0.0f }, 1.0f }; +static const b3Transform b3Transform_identity = { { 0.0f, 0.0f, 0.0f }, { { 0.0f, 0.0f, 0.0f }, 1.0f } }; +static const b3Matrix3 b3Mat3_zero = { + { 0.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f }, +}; +static const b3Matrix3 b3Mat3_identity = { + { 1.0f, 0.0f, 0.0f }, + { 0.0f, 1.0f, 0.0f }, + { 0.0f, 0.0f, 1.0f }, +}; + +// Valid in both modes: 0.0f promotes to double, the identity rotation stays float +static const b3Pos b3Pos_zero = { 0.0f, 0.0f, 0.0f }; +static const b3WorldTransform b3WorldTransform_identity = { { 0.0f, 0.0f, 0.0f }, { { 0.0f, 0.0f, 0.0f }, 1.0f } }; + +/// @return the minimum of two integers. +B3_INLINE int b3MinInt( int a, int b ) +{ + return a < b ? a : b; +} + +/// @return the maximum of two integers. +B3_INLINE int b3MaxInt( int a, int b ) +{ + return a > b ? a : b; +} + +/// @return an integer clamped between a lower and upper bound. +B3_INLINE int b3ClampInt( int a, int lower, int upper ) +{ + return a < lower ? lower : ( upper < a ? upper : a ); +} + +/// @return is this float valid (finite and not NaN). +B3_API bool b3IsValidFloat( float a ); + +/// @return the absolute value of a float. +B3_INLINE float b3AbsFloat( float a ) +{ + return a < 0 ? -a : a; +} + +/// @return the minimum of two floats. +B3_INLINE float b3MinFloat( float a, float b ) +{ + return a < b ? a : b; +} + +/// @return the maximum of two floats. +B3_INLINE float b3MaxFloat( float a, float b ) +{ + return a > b ? a : b; +} + +/// @return a float clamped between a lower and upper bound. +B3_INLINE float b3ClampFloat( float a, float lower, float upper ) +{ + return a < lower ? lower : ( upper < a ? upper : a ); +} + +/// Interpolate a scalar. +B3_INLINE float b3LerpFloat( float a, float b, float alpha ) +{ + return ( 1.0f - alpha ) * a + alpha * b; +} + +/// Compute an approximate arctangent in the range [-pi, pi] +/// This is hand coded for cross-platform determinism. The atan2f +/// function in the standard library is not cross-platform deterministic. +/// Accurate to around 0.0023 degrees. +B3_API float b3Atan2( float y, float x ); + +/// Compute the cosine and sine of an angle in radians. Implemented +/// for cross-platform determinism. +B3_API b3CosSin b3ComputeCosSin( float radians ); + +/// @deprecated +B3_INLINE float b3Sin( float radians ) +{ + b3CosSin cs = b3ComputeCosSin( radians ); + return cs.sine; +} + +/// @deprecated +B3_INLINE float b3Cos( float radians ) +{ + b3CosSin cs = b3ComputeCosSin( radians ); + return cs.cosine; +} + +/// Convert any angle into the range [-pi, pi]. +B3_INLINE float b3UnwindAngle( float radians ) +{ + // Assuming this is deterministic + return remainderf( radians, 2.0f * B3_PI ); +} + +/// Vector addition. +B3_INLINE b3Vec3 b3Add( b3Vec3 a, b3Vec3 b ) +{ + return B3_LITERAL( b3Vec3 ){ a.x + b.x, a.y + b.y, a.z + b.z }; +} + +/// Vector subtraction. +B3_INLINE b3Vec3 b3Sub( b3Vec3 a, b3Vec3 b ) +{ + return B3_LITERAL( b3Vec3 ){ a.x - b.x, a.y - b.y, a.z - b.z }; +} + +/// Vector component-wise multiplication. +B3_INLINE b3Vec3 b3Mul( b3Vec3 a, b3Vec3 b ) +{ + return B3_LITERAL( b3Vec3 ){ a.x * b.x, a.y * b.y, a.z * b.z }; +} + +/// Vector negation. +B3_INLINE b3Vec3 b3Neg( b3Vec3 a ) +{ + return B3_LITERAL( b3Vec3 ){ -a.x, -a.y, -a.z }; +} + +/// Vector dot product. +B3_INLINE float b3Dot( b3Vec3 a, b3Vec3 b ) +{ + return a.x * b.x + a.y * b.y + a.z * b.z; +} + +/// Vector length. +B3_INLINE float b3Length( b3Vec3 v ) +{ + return sqrtf( b3Dot( v, v ) ); +} + +/// Vector length squared. +B3_INLINE float b3LengthSquared( b3Vec3 a ) +{ + return a.x * a.x + a.y * a.y + a.z * a.z; +} + +/// Distance between two points. +B3_INLINE float b3Distance( b3Vec3 a, b3Vec3 b ) +{ + b3Vec3 dv = { b.x - a.x, b.y - a.y, b.z - a.z }; + return b3Length( dv ); +} + +/// Squared distance between two points. +B3_INLINE float b3DistanceSquared( b3Vec3 a, b3Vec3 b ) +{ + b3Vec3 dv = { b.x - a.x, b.y - a.y, b.z - a.z }; + return dv.x * dv.x + dv.y * dv.y + dv.z * dv.z; +} + +/// Normalize a vector. Returns a zero vector if the input vector is very small. +B3_INLINE b3Vec3 b3Normalize( b3Vec3 a ) +{ + float lengthSquared = a.x * a.x + a.y * a.y + a.z * a.z; + + if ( lengthSquared > 1000.0f * FLT_MIN ) + { + float s = 1.0f / sqrtf( lengthSquared ); + b3Vec3 u = { s * a.x, s * a.y, s * a.z }; + return u; + } + + return B3_LITERAL( b3Vec3 ){ 0.0f, 0.0f, 0.0f }; +} + +/// Normalize a vector and return the length. Returns a zero vector +/// if the input is very small. +B3_INLINE b3Vec3 b3GetLengthAndNormalize( float* length, b3Vec3 a ) +{ + *length = b3Length( a ); + if ( *length < FLT_EPSILON ) + { + return b3Vec3_zero; + } + + float invLength = 1.0f / *length; + b3Vec3 n = { invLength * a.x, invLength * a.y, invLength * a.z }; + return n; +} + +/// Get a unit vector that is perpendicular to the supplied vector. +B3_INLINE b3Vec3 b3Perp( b3Vec3 a ) +{ + // Suppose vector a has all equal components and is a unit vector: a = (s, s, s) + // Then 3*s*s = 1, s = sqrt(1/3) = 0.57735. This means that at least one component + // of a unit vector must be greater or equal to 0.57735. + b3Vec3 p; + if ( a.x < -0.5f || 0.5f < a.x ) + { + p = B3_LITERAL( b3Vec3 ){ a.y, -a.x, 0.0f }; + } + else + { + p = B3_LITERAL( b3Vec3 ){ 0.0f, a.z, -a.y }; + } + + return b3Normalize( p ); +} + +/// Is a vector normalized? In other words, does it have unit length? +B3_INLINE bool b3IsNormalized( b3Vec3 a ) +{ + float aa = b3Dot( a, a ); + return b3AbsFloat( 1.0f - aa ) < 100.0f * FLT_EPSILON; +} + +/// a + s * b +B3_INLINE b3Vec3 b3MulAdd( b3Vec3 a, float s, b3Vec3 b ) +{ + return B3_LITERAL( b3Vec3 ){ a.x + s * b.x, a.y + s * b.y, a.z + s * b.z }; +} + +/// a - s * b +B3_INLINE b3Vec3 b3MulSub( b3Vec3 a, float s, b3Vec3 b ) +{ + return B3_LITERAL( b3Vec3 ){ a.x - s * b.x, a.y - s * b.y, a.z - s * b.z }; +} + +/// s * a +B3_INLINE b3Vec3 b3MulSV( float s, b3Vec3 a ) +{ + return B3_LITERAL( b3Vec3 ){ s * a.x, s * a.y, s * a.z }; +} + +/// https://en.wikipedia.org/wiki/Cross_product +B3_INLINE b3Vec3 b3Cross( b3Vec3 a, b3Vec3 b ) +{ + b3Vec3 c; + c.x = a.y * b.z - a.z * b.y; + c.y = a.z * b.x - a.x * b.z; + c.z = a.x * b.y - a.y * b.x; + return c; +} + +/// Linearly interpolate between two vectors. +B3_INLINE b3Vec3 b3Lerp( b3Vec3 a, b3Vec3 b, float alpha ) +{ + B3_ASSERT( 0.0f <= alpha && alpha <= 1.0f ); + + b3Vec3 c = { + ( 1.0f - alpha ) * a.x + alpha * b.x, + ( 1.0f - alpha ) * a.y + alpha * b.y, + ( 1.0f - alpha ) * a.z + alpha * b.z, + }; + return c; +} + +/// Blend two vectors: s * a + t * b +B3_INLINE b3Vec3 b3Blend2( float s, b3Vec3 a, float t, b3Vec3 b ) +{ + b3Vec3 d = { + s * a.x + t * b.x, + s * a.y + t * b.y, + s * a.z + t * b.z, + }; + return d; +} + +/// Component-wise absolute value. +B3_INLINE b3Vec3 b3Abs( b3Vec3 a ) +{ + return B3_LITERAL( b3Vec3 ){ + b3AbsFloat( a.x ), + b3AbsFloat( a.y ), + b3AbsFloat( a.z ), + }; +} + +/// Component-wise -1 or 1 (1 if zero). +B3_INLINE b3Vec3 b3Sign( b3Vec3 a ) +{ + return B3_LITERAL( b3Vec3 ){ + a.x >= 0.0f ? 1.0f : -1.0f, + a.y >= 0.0f ? 1.0f : -1.0f, + a.z >= 0.0f ? 1.0f : -1.0f, + }; +} + +/// Component-wise minimum value. +B3_INLINE b3Vec3 b3Min( b3Vec3 a, b3Vec3 b ) +{ + return B3_LITERAL( b3Vec3 ){ + b3MinFloat( a.x, b.x ), + b3MinFloat( a.y, b.y ), + b3MinFloat( a.z, b.z ), + }; +} + +/// Component-wise maximum value. +B3_INLINE b3Vec3 b3Max( b3Vec3 a, b3Vec3 b ) +{ + return B3_LITERAL( b3Vec3 ){ + b3MaxFloat( a.x, b.x ), + b3MaxFloat( a.y, b.y ), + b3MaxFloat( a.z, b.z ), + }; +} + +/// Component-wise clamped value. +B3_INLINE b3Vec3 b3Clamp( b3Vec3 a, b3Vec3 lower, b3Vec3 upper ) +{ + b3Vec3 b; + b.x = b3ClampFloat( a.x, lower.x, upper.x ); + b.y = b3ClampFloat( a.y, lower.y, upper.y ); + b.z = b3ClampFloat( a.z, lower.z, upper.z ); + return b; +} + +/// Create a safe scaling value for scaling collision. This allows +/// negative scale, but keeps scale sufficiently far from zero. +B3_INLINE b3Vec3 b3SafeScale( b3Vec3 a ) +{ + b3Vec3 absScale = b3Abs( a ); + b3Vec3 minScale = { B3_MIN_SCALE, B3_MIN_SCALE, B3_MIN_SCALE }; + b3Vec3 safeScale = b3Mul( b3Sign( a ), b3Max( absScale, minScale ) ); + return safeScale; +} + +/// Does the supplied quaternion have unit length? +B3_INLINE bool b3IsNormalizedQuat( b3Quat q ) +{ + float qq = q.v.x * q.v.x + q.v.y * q.v.y + q.v.z * q.v.z + q.s * q.s; + return 1.0f - 20.0f * FLT_EPSILON < qq && qq < 1.0f + 20.0f * FLT_EPSILON; +} + +/// Rotate a vector. +B3_INLINE b3Vec3 b3RotateVector( b3Quat q, b3Vec3 v ) +{ + // v + 2 * cross(q.v, cross(q.v, v) + q.s * v) + // B3_ASSERT( b3IsNormalizedQuat( q ) ); + b3Vec3 t1 = b3Cross( q.v, v ); + b3Vec3 t2 = b3MulAdd( t1, q.s, v ); + b3Vec3 t3 = b3Cross( q.v, t2 ); + return b3MulAdd( v, 2.0f, t3 ); +} + +/// Inverse rotate a vector. +B3_INLINE b3Vec3 b3InvRotateVector( b3Quat q, b3Vec3 v ) +{ + // v + 2 * cross(q.v, cross(q.v, v) - q.s * v) + // B3_ASSERT( b3IsNormalizedQuat( q ) ); + b3Vec3 t1 = b3Cross( q.v, v ); + b3Vec3 t2 = b3MulSub( t1, q.s, v ); + b3Vec3 t3 = b3Cross( q.v, t2 ); + return b3MulAdd( v, 2.0f, t3 ); +} + +/// Compute dot product of two quaternions. Useful for polarity tests. +B3_INLINE float b3DotQuat( b3Quat a, b3Quat b ) +{ + return a.v.x * b.v.x + a.v.y * b.v.y + a.v.z * b.v.z + a.s * b.s; +} + +/// Multiply two quaternions. +B3_INLINE b3Quat b3MulQuat( b3Quat q1, b3Quat q2 ) +{ + b3Vec3 t1 = b3Cross( q1.v, q2.v ); + b3Vec3 t2 = b3MulAdd( t1, q1.s, q2.v ); + b3Vec3 t3 = b3MulAdd( t2, q2.s, q1.v ); + b3Quat q = { t3, q1.s * q2.s - b3Dot( q1.v, q2.v ) }; + return q; +} + +/// Compute a relative quaternion. +/// inv(q1) * q2 +B3_INLINE b3Quat b3InvMulQuat( b3Quat q1, b3Quat q2 ) +{ + b3Vec3 t1 = b3Cross( q2.v, q1.v ); + b3Vec3 t2 = b3MulAdd( t1, q1.s, q2.v ); + b3Vec3 t3 = b3MulSub( t2, q2.s, q1.v ); + b3Quat q = { t3, q1.s * q2.s + b3Dot( q1.v, q2.v ) }; + return q; +} + +/// Quaternion conjugate (cheap inverse). +B3_INLINE b3Quat b3Conjugate( b3Quat q ) +{ + return B3_LITERAL( b3Quat ){ { -q.v.x, -q.v.y, -q.v.z }, q.s }; +} + +/// Component-wise quaternion negation. +B3_INLINE b3Quat b3NegateQuat( b3Quat q ) +{ + return B3_LITERAL( b3Quat ){ { -q.v.x, -q.v.y, -q.v.z }, -q.s }; +} + +/// Normalize a quaternion. +B3_INLINE b3Quat b3NormalizeQuat( b3Quat q ) +{ + float lengthSq = b3DotQuat( q, q ); + if ( lengthSq > 1000.0f * FLT_MIN ) + { + float s = 1.0f / sqrtf( lengthSq ); + b3Quat qn = { { s * q.v.x, s * q.v.y, s * q.v.z }, s * q.s }; + return qn; + } + + return b3Quat_identity; +} + +/// Make a quaternion that is equivalent to rotating around an axis by a specified angle. +B3_INLINE b3Quat b3MakeQuatFromAxisAngle( b3Vec3 axis, float radians ) +{ + B3_ASSERT( b3IsNormalized( axis ) ); + b3CosSin cs = b3ComputeCosSin( 0.5f * radians ); + b3Quat q = { { cs.sine * axis.x, cs.sine * axis.y, cs.sine * axis.z }, cs.cosine }; + return q; +} + +/// Get the axis and angle from a quaternion. Assumes the quaternion is normalized. +B3_INLINE b3Vec3 b3GetAxisAngle( float* radians, b3Quat q ) +{ + float length = sqrtf( q.v.x * q.v.x + q.v.y * q.v.y + q.v.z * q.v.z ); + *radians = 2.0f * b3Atan2( length, q.s ); + if ( length > 0.0f ) + { + float invLength = 1.0f / length; + b3Vec3 axis = { invLength * q.v.x, invLength * q.v.y, invLength * q.v.z }; + return axis; + } + + return b3Vec3_zero; +} + +/// Get the angle for a quaternion in radians +B3_INLINE float b3GetQuatAngle( b3Quat q ) +{ + float length = sqrtf( q.v.x * q.v.x + q.v.y * q.v.y + q.v.z * q.v.z ); + return 2.0f * b3Atan2( length, q.s ); +} + +/// Extract a quaternion from a rotation matrix. +B3_API b3Quat b3MakeQuatFromMatrix( const b3Matrix3* m ); + +/// Find a quaternion that rotates one vector to another. +B3_API b3Quat b3ComputeQuatBetweenUnitVectors( b3Vec3 v1, b3Vec3 v2 ); + +/// Twist angle around the z-axis, used for twist limit and revolute angle limit +B3_INLINE float b3GetTwistAngle( b3Quat q ) +{ + // Account for polarity to keep the twist angle in range. + // This is simpler than asking the user to check polarity or unwinding. + float twist = q.s < 0.0f ? b3Atan2( -q.v.z, -q.s ) : b3Atan2( q.v.z, q.s ); + twist *= 2.0f; + B3_ASSERT( -B3_PI <= twist && twist <= B3_PI ); + return twist; +} + +/// Swing angle used for cone limit +B3_INLINE float b3GetSwingAngle( b3Quat q ) +{ + // Polarity should not matter because all terms are squared. + float x = sqrtf( q.v.z * q.v.z + q.s * q.s ); + float y = sqrtf( q.v.x * q.v.x + q.v.y * q.v.y ); + float swing = 2.0f * b3Atan2( y, x ); + B3_ASSERT( 0.0f <= swing && swing <= B3_PI ); + return swing; +} + +/// Linearly interpolate and normalize between two quaternions +B3_INLINE b3Quat b3NLerp( b3Quat q1, b3Quat q2, float alpha ) +{ + B3_VALIDATE( 0.0f <= alpha && alpha <= 1.0f ); + if ( b3DotQuat( q1, q2 ) < 0.0f ) + { + q1 = B3_LITERAL( b3Quat ){ { -q1.v.x, -q1.v.y, -q1.v.z }, -q1.s }; + } + + b3Quat q; + q.v = b3Lerp( q1.v, q2.v, alpha ); + q.s = ( 1.0f - alpha ) * q1.s + alpha * q2.s; + + return b3NormalizeQuat( q ); +} + +/// Multiply two transforms. If the result is applied to a point p local to frame B, +/// the transform would first convert p to a point local to frame A, then into a point +/// in the world frame. This is useful if frame B is a child of frame A. +B3_INLINE b3Transform b3MulTransforms( b3Transform a, b3Transform b ) +{ + b3Transform out; + out.p = b3Add( b3RotateVector( a.q, b.p ), a.p ); + out.q = b3MulQuat( a.q, b.q ); + return out; +} + +/// Creates a transform that converts a local point in frame B to a local point in frame A. +/// This is useful for transforming points between the local spaces of two frames that are +/// in world space. +B3_FORCE_INLINE b3Transform b3InvMulTransforms( b3Transform a, b3Transform b ) +{ + b3Transform out; + out.p = b3InvRotateVector( a.q, b3Sub( b.p, a.p ) ); + out.q = b3InvMulQuat( a.q, b.q ); + return out; +} + +/// Get the inverse of a transform. +B3_INLINE b3Transform b3InvertTransform( b3Transform t ) +{ + b3Transform out; + out.p = b3InvRotateVector( t.q, b3Neg( t.p ) ); + out.q = b3Conjugate( t.q ); + return out; +} + +/// Transform a point. +B3_INLINE b3Vec3 b3TransformPoint( b3Transform t, b3Vec3 v ) +{ + b3Vec3 rv = b3RotateVector( t.q, v ); + return b3Add( rv, t.p ); +} + +/// Inverse transform a point. +B3_INLINE b3Vec3 b3InvTransformPoint( b3Transform t, b3Vec3 v ) +{ + return b3InvRotateVector( t.q, b3Sub( v, t.p ) ); +} + +// World position boundary. These cross between the double precision world space at the public +// boundary and the float interior. One set of bodies serves both modes: the typedefs collapse +// the types in float mode and the explicit float casts become no-ops. + +/// Convert a vector to a world position. +B3_INLINE b3Pos b3ToPos( b3Vec3 v ) +{ + return B3_LITERAL( b3Pos ){ v.x, v.y, v.z }; +} + +/// Lossy conversion of a world position to a float vector. +B3_INLINE b3Vec3 b3ToVec3( b3Pos p ) +{ + return B3_LITERAL( b3Vec3 ){ (float)p.x, (float)p.y, (float)p.z }; +} + +/// Narrow a world coordinate to float, rounding toward negative infinity. Use with +/// b3RoundUpFloat to build a conservative float box that always contains the double bounds, +/// where plain rounding far from the origin could clip. nextafterf is an exact IEEE operation, +/// so this is cross-platform deterministic. With large world mode off this is a plain conversion. +B3_INLINE float b3RoundDownFloat( double x ) +{ +#if defined( BOX3D_DOUBLE_PRECISION ) + float f = (float)x; + return (double)f > x ? nextafterf( f, -FLT_MAX ) : f; +#else + return (float)x; +#endif +} + +/// Narrow a world coordinate to float, rounding toward positive infinity. +B3_INLINE float b3RoundUpFloat( double x ) +{ +#if defined( BOX3D_DOUBLE_PRECISION ) + float f = (float)x; + return (double)f < x ? nextafterf( f, FLT_MAX ) : f; +#else + return (float)x; +#endif +} + +/// a - b, demoted to float. The primary precision boundary operation. +B3_INLINE b3Vec3 b3SubPos( b3Pos a, b3Pos b ) +{ + return B3_LITERAL( b3Vec3 ){ (float)( a.x - b.x ), (float)( a.y - b.y ), (float)( a.z - b.z ) }; +} + +/// p + d +B3_INLINE b3Pos b3OffsetPos( b3Pos p, b3Vec3 d ) +{ + return B3_LITERAL( b3Pos ){ p.x + d.x, p.y + d.y, p.z + d.z }; +} + +/// World position interpolation for sweeps and sampling. +B3_INLINE b3Pos b3LerpPosition( b3Pos a, b3Pos b, float t ) +{ + return B3_LITERAL( b3Pos ){ + ( 1.0f - t ) * a.x + t * b.x, + ( 1.0f - t ) * a.y + t * b.y, + ( 1.0f - t ) * a.z + t * b.z, + }; +} + +/// Transform a local point to a world position. Rotation in float, translation in double. +B3_INLINE b3Pos b3TransformWorldPoint( b3WorldTransform t, b3Vec3 p ) +{ + b3Vec3 r = b3RotateVector( t.q, p ); + return B3_LITERAL( b3Pos ){ t.p.x + r.x, t.p.y + r.y, t.p.z + r.z }; +} + +/// Transform a world position to a local point. One double subtraction, then float. +B3_INLINE b3Vec3 b3InvTransformWorldPoint( b3WorldTransform t, b3Pos p ) +{ + b3Vec3 d = { (float)( p.x - t.p.x ), (float)( p.y - t.p.y ), (float)( p.z - t.p.z ) }; + return b3InvRotateVector( t.q, d ); +} + +/// Relative transform of frame B in frame A. The narrow phase boundary. +B3_INLINE b3Transform b3InvMulWorldTransforms( b3WorldTransform A, b3WorldTransform B ) +{ + b3Transform C; + C.q = b3InvMulQuat( A.q, B.q ); + b3Vec3 d = { (float)( B.p.x - A.p.x ), (float)( B.p.y - A.p.y ), (float)( B.p.z - A.p.z ) }; + C.p = b3InvRotateVector( A.q, d ); + return C; +} + +/// Compose a world transform with a local transform. +B3_INLINE b3WorldTransform b3MulWorldTransforms( b3WorldTransform A, b3Transform B ) +{ + b3WorldTransform C; + C.q = b3MulQuat( A.q, B.q ); + b3Vec3 r = b3RotateVector( A.q, B.p ); + C.p = B3_LITERAL( b3Pos ){ A.p.x + r.x, A.p.y + r.y, A.p.z + r.z }; + return C; +} + +/// Shift a world transform into the frame of a base position. +B3_INLINE b3Transform b3ToRelativeTransform( b3WorldTransform t, b3Pos base ) +{ + b3Transform r; + r.q = t.q; + r.p = B3_LITERAL( b3Vec3 ){ (float)( t.p.x - base.x ), (float)( t.p.y - base.y ), (float)( t.p.z - base.z ) }; + return r; +} + +/// Promote a float transform to a world transform. Lossless. +B3_INLINE b3WorldTransform b3MakeWorldTransform( b3Transform t ) +{ + b3WorldTransform w; + w.p = b3ToPos( t.p ); + w.q = t.q; + return w; +} + +/// Translate a local AABB by a world origin, rounding outward so the float box always contains +/// the double box. Far from the origin a plain conversion could clip a shape out of its own box. +/// In float mode the origin is float and the rounding is a no-op. +B3_INLINE b3AABB b3OffsetAABB( b3AABB localBox, b3Pos origin ) +{ + b3AABB out; + out.lowerBound.x = b3RoundDownFloat( origin.x + localBox.lowerBound.x ); + out.lowerBound.y = b3RoundDownFloat( origin.y + localBox.lowerBound.y ); + out.lowerBound.z = b3RoundDownFloat( origin.z + localBox.lowerBound.z ); + out.upperBound.x = b3RoundUpFloat( origin.x + localBox.upperBound.x ); + out.upperBound.y = b3RoundUpFloat( origin.y + localBox.upperBound.y ); + out.upperBound.z = b3RoundUpFloat( origin.z + localBox.upperBound.z ); + return out; +} + +/// Compute the determinant of a 3-by-3 matrix. +B3_INLINE float b3Det( b3Matrix3 m ) +{ + return b3Dot( m.cx, b3Cross( m.cy, m.cz ) ); +} + +/// Multiply a matrix times a column vector. +B3_INLINE b3Vec3 b3MulMV( b3Matrix3 m, b3Vec3 a ) +{ + b3Vec3 b = { + m.cx.x * a.x + m.cy.x * a.y + m.cz.x * a.z, + m.cx.y * a.x + m.cy.y * a.y + m.cz.y * a.z, + m.cx.z * a.x + m.cy.z * a.y + m.cz.z * a.z, + }; + return b; +} + +/// Negate a matrix. +B3_INLINE b3Matrix3 b3NegateMat3( b3Matrix3 a ) +{ + return B3_LITERAL( b3Matrix3 ){ + { -a.cx.x, -a.cx.y, -a.cx.z }, + { -a.cy.x, -a.cy.y, -a.cy.z }, + { -a.cz.x, -a.cz.y, -a.cz.z }, + }; +} + +/// Matrix addition. +/// @return a + b +B3_INLINE b3Matrix3 b3AddMM( b3Matrix3 a, b3Matrix3 b ) +{ + return B3_LITERAL( b3Matrix3 ){ + { a.cx.x + b.cx.x, a.cx.y + b.cx.y, a.cx.z + b.cx.z }, + { a.cy.x + b.cy.x, a.cy.y + b.cy.y, a.cy.z + b.cy.z }, + { a.cz.x + b.cz.x, a.cz.y + b.cz.y, a.cz.z + b.cz.z }, + }; +} + +/// Matrix subtraction. +/// @return a - b +B3_INLINE b3Matrix3 b3SubMM( b3Matrix3 a, b3Matrix3 b ) +{ + return B3_LITERAL( b3Matrix3 ){ + { a.cx.x - b.cx.x, a.cx.y - b.cx.y, a.cx.z - b.cx.z }, + { a.cy.x - b.cy.x, a.cy.y - b.cy.y, a.cy.z - b.cy.z }, + { a.cz.x - b.cz.x, a.cz.y - b.cz.y, a.cz.z - b.cz.z }, + }; +} + +/// Multiply a matrix by a scalar, component-wise. +B3_INLINE b3Matrix3 b3MulSM( float s, b3Matrix3 a ) +{ + return B3_LITERAL( b3Matrix3 ){ + { s * a.cx.x, s * a.cx.y, s * a.cx.z }, + { s * a.cy.x, s * a.cy.y, s * a.cy.z }, + { s * a.cz.x, s * a.cz.y, s * a.cz.z }, + }; +} + +/// Matrix multiplication. +/// @return a * b +B3_INLINE b3Matrix3 b3MulMM( b3Matrix3 a, b3Matrix3 b ) +{ + b3Matrix3 out; + out.cx = b3MulMV( a, b.cx ); + out.cy = b3MulMV( a, b.cy ); + out.cz = b3MulMV( a, b.cz ); + return out; +} + +/// Matrix transpose. +B3_INLINE b3Matrix3 b3Transpose( b3Matrix3 m ) +{ + b3Matrix3 out; + out.cx = B3_LITERAL( b3Vec3 ){ m.cx.x, m.cy.x, m.cz.x }; + out.cy = B3_LITERAL( b3Vec3 ){ m.cx.y, m.cy.y, m.cz.y }; + out.cz = B3_LITERAL( b3Vec3 ){ m.cx.z, m.cy.z, m.cz.z }; + + return out; +} + +/// General matrix inverse. +B3_INLINE b3Matrix3 b3InvertMatrix( b3Matrix3 m ) +{ + float det = b3Det( m ); + if ( b3AbsFloat( det ) > 1000.0f * FLT_MIN ) + { + float invDet = 1.0f / det; + b3Matrix3 out; + out.cx = b3MulSV( invDet, b3Cross( m.cy, m.cz ) ); + out.cy = b3MulSV( invDet, b3Cross( m.cz, m.cx ) ); + out.cz = b3MulSV( invDet, b3Cross( m.cx, m.cy ) ); + + return b3Transpose( out ); + } + + return b3Mat3_zero; +} + +/// Solve a matrix equation. +/// @return inv(m) * a +B3_INLINE b3Vec3 b3Solve3( b3Matrix3 m, b3Vec3 a ) +{ + float det = b3Det( m ); + if ( b3AbsFloat( det ) > 1000.0f * FLT_MIN ) + { + float invDet = 1.0f / det; + b3Matrix3 s; + s.cx = b3Cross( m.cy, m.cz ); + s.cy = b3Cross( m.cz, m.cx ); + s.cz = b3Cross( m.cx, m.cy ); + + b3Vec3 b = { + invDet * b3Dot( s.cx, a ), + invDet * b3Dot( s.cy, a ), + invDet * b3Dot( s.cz, a ), + }; + + return b; + } + + return b3Vec3_zero; +} + +/// Invert a matrix. +B3_INLINE b3Matrix3 b3InvertT( b3Matrix3 m ) +{ + float det = b3Det( m ); + if ( b3AbsFloat( det ) > 1000.0f * FLT_MIN ) + { + float invDet = 1.0f / det; + b3Matrix3 out; + out.cx = b3MulSV( invDet, b3Cross( m.cy, m.cz ) ); + out.cy = b3MulSV( invDet, b3Cross( m.cz, m.cx ) ); + out.cz = b3MulSV( invDet, b3Cross( m.cx, m.cy ) ); + return out; + } + + return b3Mat3_zero; +} + +/// Get the component-wise absolute value of a matrix. +B3_INLINE b3Matrix3 b3AbsMatrix3( b3Matrix3 m ) +{ + b3Matrix3 out; + out.cx = b3Abs( m.cx ); + out.cy = b3Abs( m.cy ); + out.cz = b3Abs( m.cz ); + + return out; +} + +/// Make a matrix from a quaternion. This is useful if you need to +/// rotate many vectors. +/// The force inline improves the performance of b3ShapeDistance. +B3_FORCE_INLINE b3Matrix3 b3MakeMatrixFromQuat( b3Quat q ) +{ + float xx = q.v.x * q.v.x; + float yy = q.v.y * q.v.y; + float zz = q.v.z * q.v.z; + float xy = q.v.x * q.v.y; + float xz = q.v.x * q.v.z; + float xw = q.v.x * q.s; + float yz = q.v.y * q.v.z; + float yw = q.v.y * q.s; + float zw = q.v.z * q.s; + + return B3_LITERAL( b3Matrix3 ){ + { 1.0f - 2.0f * ( yy + zz ), 2.0f * ( xy + zw ), 2.0f * ( xz - yw ) }, + { 2.0f * ( xy - zw ), 1.0f - 2.0f * ( xx + zz ), 2.0f * ( yz + xw ) }, + { 2.0f * ( xz + yw ), 2.0f * ( yz - xw ), 1.0f - 2.0f * ( xx + yy ) }, + }; +} + +/// Get the inertia tensor of an offset point. +/// https://en.wikipedia.org/wiki/Parallel_axis_theorem +B3_API b3Matrix3 b3Steiner( float mass, b3Vec3 origin ); + +/// Get the AABB of a point cloud. +B3_INLINE b3AABB b3MakeAABB( const b3Vec3* points, int count, float radius ) +{ + B3_ASSERT( count > 0 ); + b3AABB a = { points[0], points[0] }; + for ( int i = 1; i < count; ++i ) + { + a.lowerBound = b3Min( a.lowerBound, points[i] ); + a.upperBound = b3Max( a.upperBound, points[i] ); + } + + b3Vec3 r = { radius, radius, radius }; + a.lowerBound = b3Sub( a.lowerBound, r ); + a.upperBound = b3Add( a.upperBound, r ); + + return a; +} + +/// Does a fully contain b? +B3_INLINE bool b3AABB_Contains( b3AABB a, b3AABB b ) +{ + if ( a.lowerBound.x > b.lowerBound.x || b.upperBound.x > a.upperBound.x ) + return false; + if ( a.lowerBound.y > b.lowerBound.y || b.upperBound.y > a.upperBound.y ) + return false; + if ( a.lowerBound.z > b.lowerBound.z || b.upperBound.z > a.upperBound.z ) + return false; + + return true; +} + +/// Get the surface area of an axis-aligned bounding box. +B3_INLINE float b3AABB_Area( b3AABB a ) +{ + b3Vec3 delta = b3Sub( a.upperBound, a.lowerBound ); + return 2.0f * ( delta.x * delta.y + delta.y * delta.z + delta.z * delta.x ); +} + +/// Get the center of an axis-aligned bounding box. +B3_INLINE b3Vec3 b3AABB_Center( b3AABB a ) +{ + return b3MulSV( 0.5f, b3Add( a.upperBound, a.lowerBound ) ); +} + +/// Get the extents (half-widths) of an axis-aligned bounding box. +B3_INLINE b3Vec3 b3AABB_Extents( b3AABB a ) +{ + return b3MulSV( 0.5f, b3Sub( a.upperBound, a.lowerBound ) ); +} + +/// Get the union of two axis-aligned bounding boxes. +B3_INLINE b3AABB b3AABB_Union( b3AABB a, b3AABB b ) +{ + b3AABB out; + out.lowerBound = b3Min( a.lowerBound, b.lowerBound ); + out.upperBound = b3Max( a.upperBound, b.upperBound ); + return out; +} + +/// Add uniform padding to an axis-aligned bounding box. +B3_INLINE b3AABB b3AABB_Inflate( b3AABB a, float extension ) +{ + b3Vec3 radius = { extension, extension, extension }; + + b3AABB out; + out.lowerBound = b3Sub( a.lowerBound, radius ); + out.upperBound = b3Add( a.upperBound, radius ); + return out; +} + +/// Do two axis-aligned boxes overlap? +B3_INLINE bool b3AABB_Overlaps( b3AABB a, b3AABB b ) +{ + // No intersection if separated along one axis + if ( a.upperBound.x < b.lowerBound.x || a.lowerBound.x > b.upperBound.x ) + return false; + if ( a.upperBound.y < b.lowerBound.y || a.lowerBound.y > b.upperBound.y ) + return false; + if ( a.upperBound.z < b.lowerBound.z || a.lowerBound.z > b.upperBound.z ) + return false; + + // Overlapping on all axis means bounds are intersecting + return true; +} + +/// Transform an axis-aligned bounding box. This can create a larger box +/// than if you recomputed the AABB of the original shape with the transform +/// applied. +B3_INLINE b3AABB b3AABB_Transform( b3Transform transform, b3AABB a ) +{ + b3Vec3 center = b3TransformPoint( transform, b3AABB_Center( a ) ); + b3Matrix3 m = b3MakeMatrixFromQuat( transform.q ); + b3Vec3 extent = b3MulMV( b3AbsMatrix3( m ), b3AABB_Extents( a ) ); + b3AABB out = { b3Sub( center, extent ), b3Add( center, extent ) }; + return out; +} + +/// Get the closest point on an axis-aligned bounding box. +B3_INLINE b3Vec3 b3ClosestPointToAABB( b3Vec3 point, b3AABB a ) +{ + return b3Clamp( point, a.lowerBound, a.upperBound ); +} + +/// The closest points between to segments or infinite lines. +typedef struct b3SegmentDistanceResult +{ + b3Vec3 point1; + float fraction1; + b3Vec3 point2; + float fraction2; +} b3SegmentDistanceResult; + +/// Compute the closest point on the segment a-b to the target q. +B3_API b3Vec3 b3PointToSegmentDistance( b3Vec3 a, b3Vec3 b, b3Vec3 q ); + +/// Compute the closest points on two infinite lines. +B3_API b3SegmentDistanceResult b3LineDistance( b3Vec3 p1, b3Vec3 d1, b3Vec3 p2, b3Vec3 d2 ); + +/// Compute the closest points on two line segments. +B3_API b3SegmentDistanceResult b3SegmentDistance( b3Vec3 p1, b3Vec3 q1, b3Vec3 p2, b3Vec3 q2 ); + +/// Is this a valid number? Not NaN or infinity. +B3_API bool b3IsValidFloat( float a ); + +/// Is this a valid vector? Not NaN or infinity. +B3_API bool b3IsValidVec3( b3Vec3 a ); + +/// Is this a valid quaternion? Not NaN or infinity. Is normalized. +B3_API bool b3IsValidQuat( b3Quat q ); + +/// Is this a valid transform? Not NaN or infinity. Is normalized. +B3_API bool b3IsValidTransform( b3Transform a ); + +/// Is this a valid matrix? Not NaN or infinity. +B3_API bool b3IsValidMatrix3( b3Matrix3 a ); + +/// Is this a valid bounding box? Not Nan or infinity. Upper bound greater than or equal to lower bound. +B3_API bool b3IsValidAABB( b3AABB a ); + +/// Is this AABB reasonably close to the origin? See B3_HUGE. +B3_API bool b3IsBoundedAABB( b3AABB a ); + +/// Is this AABB valid and reasonable? +B3_API bool b3IsSaneAABB( b3AABB a ); + +/// Is this a valid plane? Normal is a unit vector. Not Nan or infinity. +B3_API bool b3IsValidPlane( b3Plane a ); + +/// Is this a valid world position? Not NaN or infinity. +B3_API bool b3IsValidPosition( b3Pos p ); + +/// Is this a valid world transform? Not NaN or infinity. Rotation is normalized. +B3_API bool b3IsValidWorldTransform( b3WorldTransform t ); + +/**@}*/ // math + +/** + * @defgroup math_cpp C++ Math + * @brief Math operator overloads for C++ + * Some of the simpler ones are expanded to improve debug performance. + * See math_functions.h for details. + * @{ + */ + +#ifdef __cplusplus + +/// Vector addition. +B3_FORCE_INLINE b3Vec3& operator+=( b3Vec3& a, b3Vec3 b ) +{ + a.x += b.x; + a.y += b.y; + a.z += b.z; + return a; +} + +/// Vector subtraction. +B3_FORCE_INLINE b3Vec3& operator-=( b3Vec3& a, b3Vec3 b ) +{ + a.x -= b.x; + a.y -= b.y; + a.z -= b.z; + return a; +} + +/// Vector scaling. +B3_FORCE_INLINE b3Vec3& operator*=( b3Vec3& a, float s ) +{ + a.x *= s; + a.y *= s; + a.z *= s; + return a; +} + +/// Vector negation. +B3_FORCE_INLINE b3Vec3 operator-( b3Vec3 a ) +{ + return { -a.x, -a.y, -a.z }; +} + +/// Vector scaling. +B3_FORCE_INLINE b3Vec3 operator*( float s, b3Vec3 a ) +{ + return { s * a.x, s * a.y, s * a.z }; +} + +/// Vector scaling. +B3_FORCE_INLINE b3Vec3 operator*( b3Vec3 a, float s ) +{ + return { s * a.x, s * a.y, s * a.z }; +} + +/// Component-wise vector multiplication. +B3_FORCE_INLINE b3Vec3 operator*( b3Vec3 a, b3Vec3 b ) +{ + return { a.x * b.x, a.y * b.y, a.z * b.z }; +} + +/// Vector addition. +B3_FORCE_INLINE b3Vec3 operator+( b3Vec3 a, b3Vec3 b ) +{ + return { a.x + b.x, a.y + b.y, a.z + b.z }; +} + +/// Vector subtraction. +B3_FORCE_INLINE b3Vec3 operator-( b3Vec3 a, b3Vec3 b ) +{ + return { a.x - b.x, a.y - b.y, a.z - b.z }; +} + +#if defined( BOX3D_DOUBLE_PRECISION ) + +/// Offset a world position by a vector. +B3_FORCE_INLINE b3Pos operator+( b3Pos a, b3Vec3 b ) +{ + return { a.x + b.x, a.y + b.y, a.z + b.z }; +} + +/// Offset a world position by a vector. +B3_FORCE_INLINE b3Pos operator-( b3Pos a, b3Vec3 b ) +{ + return { a.x - b.x, a.y - b.y, a.z - b.z }; +} + +/// Delta between two world positions, demoted to float. +B3_FORCE_INLINE b3Vec3 operator-( b3Pos a, b3Pos b ) +{ + return { (float)( a.x - b.x ), (float)( a.y - b.y ), (float)( a.z - b.z ) }; +} + +#endif + +#endif + +/**@}*/ // math_cpp diff --git a/vendor/box3d/src/include/box3d/types.h b/vendor/box3d/src/include/box3d/types.h new file mode 100644 index 000000000..2c75977f0 --- /dev/null +++ b/vendor/box3d/src/include/box3d/types.h @@ -0,0 +1,3034 @@ +// SPDX-FileCopyrightText: 2025 Erin Catto +// SPDX-License-Identifier: MIT + +#pragma once + +#include "base.h" +#include "constants.h" +#include "id.h" +#include "math_functions.h" + +#include + +#define B3_DEFAULT_CATEGORY_BITS UINT64_MAX +#define B3_DEFAULT_MASK_BITS UINT64_MAX + +/// Task interface +/// This is the prototype for a Box3D task. Your task system is expected to run this callback on a worker thread, +/// exactly once per enqueue, passing back the same taskContext pointer supplied to b3EnqueueTaskCallback. +/// @ingroup world +typedef void b3TaskCallback( void* taskContext ); + +/// These functions can be provided to Box3D to invoke a task system. +/// Returns a pointer to the user's task object. May be nullptr. A nullptr indicates to Box3D that the work was executed +/// serially within the callback and there is no need to call b3FinishTaskCallback. Otherwise the returned +/// value must be non-null will be passed to b3FinishTaskCallback as the userTask. +/// @param task the Box3D task to be called by the scheduler +/// @param taskContext the Box3D context object that the scheduler must pass to the task +/// @param userContext the scheduler context object that is opaque to Box3D +/// @param taskName the Box3D task name that the scheduler can use for diagnostics +/// @ingroup world +typedef void* b3EnqueueTaskCallback( b3TaskCallback* task, void* taskContext, void* userContext, const char* taskName ); + +/// Finishes a user task object that wraps a Box3D task. This must block until the task has completed. +/// The step blocks here on the tasks it spawned, so b3World_Step holds its stack across every +/// fork/join. Drive it from a thread you can dedicate to the step, or from a fiber this callback can +/// park to free the underlying thread. In a job system that cannot park a job's stack, do not call +/// b3World_Step from inside a job: a job that blocks on its own sub-jobs without yielding its thread +/// can deadlock. The in-tree scheduler instead runs other pending tasks on the waiting thread. +/// @ingroup world +typedef void b3FinishTaskCallback( void* userTask, void* userContext ); + +typedef struct b3DebugShape b3DebugShape; + +/// The user needs to be able to create debug draw shapes for multi-pass rendering to work efficiently. +/// These user shapes are created and destroyed via callback so they can be bound to shape lifetime and scaling updates. +/// @ingroup debug_draw +typedef void* b3CreateDebugShapeCallback( const b3DebugShape* debugShape, void* userContext ); +typedef void b3DestroyDebugShapeCallback( void* userShape, void* userContext ); + +/// Optional friction mixing callback. This intentionally provides no context objects because this is called +/// from a worker thread. +/// @warning This function should not attempt to modify Box3D state or user application state. +/// @ingroup world +typedef float b3FrictionCallback( float frictionA, uint64_t userMaterialIdA, float frictionB, uint64_t userMaterialIdB ); + +/// Optional restitution mixing callback. This intentionally provides no context objects because this is called +/// from a worker thread. +/// @warning This function should not attempt to modify Box3D state or user application state. +/// @ingroup world +typedef float b3RestitutionCallback( float restitutionA, uint64_t userMaterialIdA, float restitutionB, uint64_t userMaterialIdB ); + +/// Prototype for a contact filter callback. +/// This is called when a contact pair is considered for collision. This allows you to +/// perform custom logic to prevent collision between shapes. This is only called if +/// one of the two shapes has custom filtering enabled. @see b3ShapeDef. +/// Notes: +/// - this function must be thread-safe +/// - this is only called if one of the two shapes has enabled custom filtering +/// - this is called only for awake dynamic bodies +/// Return false if you want to disable the collision +/// @warning Do not attempt to modify the world inside this callback +/// @ingroup world +typedef bool b3CustomFilterFcn( b3ShapeId shapeIdA, b3ShapeId shapeIdB, void* context ); + +/// Prototype for a pre-solve callback. +/// This is called after a contact is updated. This allows you to inspect a +/// collision before it goes to the solver. +/// Notes: +/// - this function must be thread-safe +/// - this is only called if the shape has enabled pre-solve events +/// - this may be called for awake dynamic bodies and sensors +/// - this is not called for sensors +/// Return false if you want to disable the contact this step +/// This has limited information because it is used during CCD which does not have the +/// full contact manifold. +/// @warning Do not attempt to modify the world inside this callback +/// @ingroup world +typedef bool b3PreSolveFcn( b3ShapeId shapeIdA, b3ShapeId shapeIdB, b3Pos point, b3Vec3 normal, void* context ); + +/// Prototype callback for overlap queries. +/// Called for each shape found in the query. +/// @see b3World_OverlapAABB +/// @return false to terminate the query. +/// @ingroup world +typedef bool b3OverlapResultFcn( b3ShapeId shapeId, void* context ); + +/// Prototype callback for ray casts. +/// Called for each shape found in the query. You control how the ray cast +/// proceeds by returning a float: +/// return -1: ignore this shape and continue +/// return 0: terminate the ray cast +/// return fraction: clip the ray to this point +/// return 1: don't clip the ray and continue +/// @param shapeId the shape hit by the ray +/// @param point the point of initial intersection +/// @param normal the normal vector at the point of intersection +/// @param fraction the fraction along the ray at the point of intersection +/// @param userMaterialId the shape or triangle surface type +/// @param triangleIndex the triangle index for mesh or height field shapes or -1 for other shape types +/// @param childIndex the child shape index for compound shapes +/// @param context the user context +/// @return -1 to filter, 0 to terminate, fraction to clip the ray for closest hit, 1 to continue +/// @see b3World_CastRay +/// @ingroup world +typedef float b3CastResultFcn( b3ShapeId shapeId, b3Pos point, b3Vec3 normal, float fraction, uint64_t userMaterialId, + int triangleIndex, int childIndex, void* context ); + +/// Optional world capacities that can be use to avoid run-time allocations +/// @ingroup world +typedef struct b3Capacity +{ + /// Number of expected static shapes. + int staticShapeCount; + + /// Number of expected dynamic and kinematic shapes. + int dynamicShapeCount; + + /// Number of expected static bodies. + int staticBodyCount; + + /// Number of expected dynamic and kinematic bodies. + int dynamicBodyCount; + + /// Number of expected contacts. + int contactCount; +} b3Capacity; + +/// World definition used to create a simulation world. Must be initialized using b3DefaultWorldDef. +/// @ingroup world +typedef struct b3WorldDef +{ + /// Gravity vector. Box3D has no up-vector defined. + b3Vec3 gravity; + + /// Restitution speed threshold, usually in m/s. Collisions above this + /// speed have restitution applied (will bounce). + float restitutionThreshold; + + /// Hit event speed threshold, usually in m/s. Collisions above this + /// speed can generate hit events if the shape also enables hit events. + float hitEventThreshold; + + /// Contact stiffness. Cycles per second. Increasing this increases the speed of overlap recovery, but can introduce jitter. + float contactHertz; + + /// Contact bounciness. Non-dimensional. You can speed up overlap recovery by decreasing this with + /// the trade-off that overlap resolution becomes more energetic. + float contactDampingRatio; + + /// This parameter controls how fast overlap is resolved and usually has units of meters per second. This only + /// puts a cap on the resolution speed. The resolution speed is increased by increasing the hertz and/or + /// decreasing the damping ratio. + float contactSpeed; + + /// Maximum linear speed. Usually meters per second. + float maximumLinearSpeed; + + /// Optional mixing callback for friction. The default uses sqrt(frictionA * frictionB). + b3FrictionCallback* frictionCallback; + + /// Optional mixing callback for restitution. The default uses max(restitutionA, restitutionB). + b3RestitutionCallback* restitutionCallback; + + /// Can bodies go to sleep to improve performance + bool enableSleep; + + /// Enable continuous collision + bool enableContinuous; + + /// Number of workers to use with the provided task system. Box3D performs best when using only + /// performance cores and accessing a single L2 cache. Efficiency cores and hyper-threading provide + /// little benefit and may even harm performance. + /// This is clamped to the range [1, B3_MAX_WORKERS]. Using a value above 1 will turn on multithreading. + /// If task callbacks are provided then Box3D will use the user provided task system. Otherwise Box3D + /// will create threads and use an internal scheduler. + uint32_t workerCount; + + /// function to spawn task + b3EnqueueTaskCallback* enqueueTask; + + /// function to finish a task + b3FinishTaskCallback* finishTask; + + /// User context that is provided to enqueueTask and finishTask + void* userTaskContext; + + /// User data associated with a world + void* userData; + + /// Used to create debug draw shapes. This is called when a shape is + /// first drawn using b3DebugDraw. + b3CreateDebugShapeCallback* createDebugShape; + + /// Used to destroy debug draw shapes. This is called when a shape is modified or destroyed. + b3DestroyDebugShapeCallback* destroyDebugShape; + + /// This is passed to the debug shape callbacks to provide a user context. + void* userDebugShapeContext; + + /// Optional initial capacities + b3Capacity capacity; + + /// Used internally to detect a valid definition. DO NOT SET. + int internalValue; +} b3WorldDef; + +/// Use this to initialize your world definition +/// @ingroup world +B3_API b3WorldDef b3DefaultWorldDef( void ); + +/// The body simulation type. +/// Each body is one of these three types. The type determines how the body behaves in the simulation. +/// @ingroup body +typedef enum b3BodyType +{ + /// zero mass, zero velocity, may be manually moved + b3_staticBody = 0, + + /// zero mass, velocity set by user, moved by solver + b3_kinematicBody = 1, + + /// positive mass, velocity determined by forces, moved by solver + b3_dynamicBody = 2, + + /// number of body types + b3_bodyTypeCount, +} b3BodyType; + +/// Motion locks to restrict the body movement +/// @ingroup body +typedef struct b3MotionLocks +{ + /// Prevent translation along the x-axis + bool linearX; + + /// Prevent translation along the y-axis + bool linearY; + + /// Prevent translation along the z-axis + bool linearZ; + + /// Prevent rotation around the x-axis + bool angularX; + + /// Prevent rotation around the y-axis + bool angularY; + + /// Prevent rotation around the z-axis + bool angularZ; +} b3MotionLocks; + +/// A body definition holds all the data needed to construct a rigid body. +/// You can safely re-use body definitions. Shapes are added to a body after construction. +/// Body definitions are temporary objects used to bundle creation parameters. +/// Must be initialized using b3DefaultBodyDef(). +/// @ingroup body +typedef struct b3BodyDef +{ + /// The body type: static, kinematic, or dynamic. + b3BodyType type; + + /// The initial world position of the body. Bodies should be created with the desired position. + /// @note Creating bodies at the origin and then moving them nearly doubles the cost of body creation, especially + /// if the body is moved after shapes have been added. + b3Pos position; + + /// The initial world rotation of the body. + b3Quat rotation; + + /// The initial linear velocity of the body's origin. Usually in meters per second. + b3Vec3 linearVelocity; + + /// The initial angular velocity of the body. Radians per second. + b3Vec3 angularVelocity; + + /// Linear damping is used to reduce the linear velocity. The damping parameter + /// can be larger than 1 but the damping effect becomes sensitive to the + /// time step when the damping parameter is large. + /// Generally linear damping is undesirable because it makes objects move slowly + /// as if they are floating. + float linearDamping; + + /// Angular damping is used to reduce the angular velocity. The damping parameter + /// can be larger than 1.0f but the damping effect becomes sensitive to the + /// time step when the damping parameter is large. + /// Angular damping can be used to slow down rotating bodies. + float angularDamping; + + /// Scale the gravity applied to this body. Non-dimensional. + float gravityScale; + + /// Sleep speed threshold, default is 0.05 meters per second + float sleepThreshold; + + /// Optional body name for debugging. Up to B3_BODY_NAME_LENGTH characters (including null termination) + const char* name; + + /// Use this to store application specific body data. + void* userData; + + /// Motions locks to restrict linear and angular movement + b3MotionLocks motionLocks; + + /// Set this flag to false if this body should never fall asleep. + bool enableSleep; + + /// Is this body initially awake or sleeping? + bool isAwake; + + /// Treat this body as a high speed object that performs continuous collision detection + /// against dynamic and kinematic bodies, but not other bullet bodies. + /// @warning Bullets should be used sparingly. They are not a solution for general dynamic-versus-dynamic + /// continuous collision. They do not guarantee accurate collision if both bodies are fast moving because + /// the bullet does a continuous check after all non-bullet bodies have moved. You could get unlucky and have + /// the bullet body end a time step very close to a non-bullet body and the non-bullet body then moves over + /// the bullet body. In continuous collision, initial overlap is ignored to avoid freezing bodies in place. + /// I do not recommend using them for game projectiles if precise collision timing is needed. Instead consider + /// using a ray or shape cast. You can use a marching ray or shape cast for projectile that moves over time. + /// If you want a fast moving projectile to collide with a fast moving target, you need to consider the relative + /// movement in your ray or shape cast. This is out of the scope of Box3D. + /// So what are good use cases for bullets? Pinball games or games with dynamic containers that hold other objects. + /// It should be a use case where it doesn't break the game if there is a collision missed, but having them + /// captured improves the quality of the game. + bool isBullet; + + /// Used to disable a body. A disabled body does not move or collide. + bool isEnabled; + + /// This allows this body to bypass rotational speed limits. Should only be used + /// for circular objects, like wheels. + bool allowFastRotation; + + /// Enable contact recycling. True by default. Leaving this enabled improves performance + /// but may lead to ghost collision that should be avoided on characters. + bool enableContactRecycling; + + /// Used internally to detect a valid definition. DO NOT SET. + int internalValue; +} b3BodyDef; + +/// Use this to initialize your body definition +/// @ingroup body +B3_API b3BodyDef b3DefaultBodyDef( void ); + +/// This is used to filter collision on shapes. It affects shape-vs-shape collision +/// and shape-versus-query collision (such as b3World_CastRay). +/// @ingroup shape +typedef struct b3Filter +{ + /// The collision category bits. Normally you would just set one bit. The category bits should + /// represent your application object types. For example: + /// @code{.cpp} + /// enum MyCategories + /// { + /// Static = 0x00000001, + /// Dynamic = 0x00000002, + /// Debris = 0x00000004, + /// Player = 0x00000008, + /// // etc + /// }; + /// @endcode + uint64_t categoryBits; + + /// The collision mask bits. This states the categories that this + /// shape would accept for collision. + /// For example, you may want your player to only collide with static objects + /// and other players. + /// @code{.c} + /// maskBits = Static | Player; + /// @endcode + uint64_t maskBits; + + /// Collision groups allow a certain group of objects to never collide (negative) + /// or always collide (positive). A group index of zero has no effect. Non-zero group filtering + /// always wins against the mask bits. + /// For example, you may want ragdolls to collide with other ragdolls but you don't want + /// ragdoll self-collision. In this case you would give each ragdoll a unique negative group index + /// and apply that group index to all shapes on the ragdoll. + int groupIndex; +} b3Filter; + +/// Use this to initialize your filter +/// @ingroup shape +B3_API b3Filter b3DefaultFilter( void ); + +/// Material properties supported per triangle on meshes and height fields +/// @ingroup shape +typedef struct b3SurfaceMaterial +{ + /// The Coulomb (dry) friction coefficient, usually in the range [0,1]. + float friction; + + /// The coefficient of restitution (bounce) usually in the range [0,1]. + /// https://en.wikipedia.org/wiki/Coefficient_of_restitution + float restitution; + + /// The rolling resistance usually in the range [0,1]. This is only used for spheres and capsules. + float rollingResistance; + + /// The tangent velocity for conveyor belts. This is local to the shape and will be projected + /// onto the contact surface. + b3Vec3 tangentVelocity; + + /// User material identifier. This is passed with query results and to friction and restitution + /// combining functions. It is not used internally. + uint64_t userMaterialId; + + /// Custom debug draw color. Ignored if 0. The low 24 bits are RGB. The high byte may + /// carry a b3DebugMaterial preset, see b3MakeDebugColor. + /// @see b3HexColor + uint32_t customColor; +} b3SurfaceMaterial; + +/// Use this to initialize your surface material +/// @ingroup shape +B3_API b3SurfaceMaterial b3DefaultSurfaceMaterial( void ); + +/// Shape type +/// @ingroup shape +typedef enum b3ShapeType +{ + /// A capsule is an extruded sphere + b3_capsuleShape, + + /// A compound shape composed of up to 64K spheres, capsules, hulls, and meshes + b3_compoundShape, + + /// A height field useful for terrain + b3_heightShape, + + /// A convex hull + b3_hullShape, + + /// A triangle soup + b3_meshShape, + + /// A sphere with an offset + b3_sphereShape, + + /// The number of shape types + b3_shapeTypeCount +} b3ShapeType; + +/// Used to create a shape +/// @ingroup shape +typedef struct b3ShapeDef +{ + /// Use this to store application specific shape data. + void* userData; + + /// Surface material used on mesh shapes per triangle. Ignored for convex shapes. Ignored for compound shapes. + b3SurfaceMaterial* materials; + + /// Surface material count. + int materialCount; + + /// The base surface material. Ignored for compound shapes. + b3SurfaceMaterial baseMaterial; + + /// The density, usually in kg/m^3. + float density; + + /// Explosion scale for b3World_Explode. non-dimensional + float explosionScale; + + /// Contact filtering data. + b3Filter filter; + + /// Enable custom filtering. Only one of the two shapes needs to enable custom filtering. See b3WorldDef. + bool enableCustomFiltering; + + /// A sensor shape generates overlap events but never generates a collision response. + /// Sensors do not have continuous collision. Instead, use a ray or shape cast for those scenarios. + /// Sensors still contribute to the body mass if they have non-zero density. + /// @note Sensor events are disabled by default. + /// @see enableSensorEvents + bool isSensor; + + /// Enable sensor events for this shape. This applies to sensors and non-sensors. False by default, even for sensors. + bool enableSensorEvents; + + /// Enable contact events for this shape. Only applies to kinematic and dynamic bodies. Ignored for sensors. False by default. + bool enableContactEvents; + + /// Enable hit events for this shape. Only applies to kinematic and dynamic bodies. Ignored for sensors. False by default. + bool enableHitEvents; + + /// Enable pre-solve contact events for this shape. Only applies to dynamic bodies. These are expensive + /// and must be carefully handled due to multithreading. Ignored for sensors. + bool enablePreSolveEvents; + + /// When shapes are created they will scan the environment for collision the next time step. This can significantly slow down + /// static body creation when there are many static shapes. + /// This is flag is ignored for dynamic and kinematic shapes which always invoke contact creation. + bool invokeContactCreation; + + /// Should the body update the mass properties when this shape is created. Default is true. + bool updateBodyMass; + + /// Used internally to detect a valid definition. DO NOT SET. + int internalValue; + +} b3ShapeDef; + +/// Use this to initialize your shape definition +/// @ingroup shape +B3_API b3ShapeDef b3DefaultShapeDef( void ); + +//! @cond +/// Profiling data. Times are in milliseconds. +/// @ingroup world +typedef struct b3Profile +{ + float step; + float pairs; + float collide; + float solve; + float solverSetup; + float constraints; + float prepareConstraints; + float integrateVelocities; + float warmStart; + float solveImpulses; + float integratePositions; + float relaxImpulses; + float applyRestitution; + float storeImpulses; + float splitIslands; + float transforms; + float sensorHits; + float jointEvents; + float hitEvents; + float refit; + float bullets; + float sleepIslands; + float sensors; +} b3Profile; + +/// Counters that give details of the simulation size. +/// @ingroup world +typedef struct b3Counters +{ + int bodyCount; + int shapeCount; + int contactCount; + int jointCount; + int islandCount; + int stackUsed; + int arenaCapacity; + int staticTreeHeight; + int treeHeight; + int satCallCount; + int satCacheHitCount; + int byteCount; + int taskCount; + int colorCounts[24]; + int manifoldCounts[B3_CONTACT_MANIFOLD_COUNT_BUCKETS]; + + /// Number of contacts touched by the collide pass + /// graph contacts + awake-set non-touching + int awakeContactCount; + + /// Number of contacts recycled in the most recent step. + int recycledContactCount; + + /// Maximum number of time of impact iterations + int distanceIterations; + int pushBackIterations; + int rootIterations; +} b3Counters; +//! @endcond + +/// Joint type enumeration. This is useful because all joint types use b3JointId and sometimes you +/// want to get the type of a joint. +/// @ingroup joint +typedef enum b3JointType +{ + b3_parallelJoint, + b3_distanceJoint, + b3_filterJoint, + b3_motorJoint, + b3_prismaticJoint, + b3_revoluteJoint, + b3_sphericalJoint, + b3_weldJoint, + b3_wheelJoint, +} b3JointType; + +/// Base joint definition used by all joint types. The local frames are measured from the +/// body's origin rather than the center of mass because: +/// 1. You might not know where the center of mass will be. +/// 2. If you add/remove shapes from a body and recompute the mass, the joints will be broken. +/// @ingroup joint +typedef struct b3JointDef +{ + /// User data pointer + void* userData; + + /// The first attached body + b3BodyId bodyIdA; + + /// The second attached body + b3BodyId bodyIdB; + + /// The first local joint frame + b3Transform localFrameA; + + /// The second local joint frame + b3Transform localFrameB; + + /// Force threshold for joint events + float forceThreshold; + + /// Torque threshold for joint events + float torqueThreshold; + + /// Constraint hertz (advanced feature) + float constraintHertz; + + /// Constraint damping ratio (advanced feature) + float constraintDampingRatio; + + /// Debug draw scale + float drawScale; + + /// Set this flag to true if the attached bodies should collide + bool collideConnected; + + /// Used internally to detect a valid definition. DO NOT SET. + int internalValue; +} b3JointDef; + +/// Distance joint definition. +/// Connects a point on body A with a point on body B by a segment. +/// Useful for ropes and springs. +/// @ingroup distance_joint +typedef struct b3DistanceJointDef +{ + /// Base joint definition + b3JointDef base; + + /// The rest length of this joint. Clamped to a stable minimum value. + float length; + + /// Enable the distance constraint to behave like a spring. If false + /// then the distance joint will be rigid, overriding the limit and motor. + bool enableSpring; + + /// The lower spring force controls how much tension it can sustain + float lowerSpringForce; + + /// The upper spring force controls how much compression it can sustain + float upperSpringForce; + + /// The spring linear stiffness Hertz, cycles per second + float hertz; + + /// The spring linear damping ratio, non-dimensional + float dampingRatio; + + /// Enable/disable the joint limit + bool enableLimit; + + /// Minimum length. Clamped to a stable minimum value. + float minLength; + + /// Maximum length. Must be greater than or equal to the minimum length. + float maxLength; + + /// Enable/disable the joint motor + bool enableMotor; + + /// The maximum motor force, usually in newtons + float maxMotorForce; + + /// The desired motor speed, usually in meters per second + float motorSpeed; +} b3DistanceJointDef; + +/// Use this to initialize your joint definition +/// @ingroup distance_joint +B3_API b3DistanceJointDef b3DefaultDistanceJointDef( void ); + +/// A motor joint is used to control the relative position and velocity between two bodies. +/// @ingroup motor_joint +typedef struct b3MotorJointDef +{ + /// Base joint definition + b3JointDef base; + + /// The desired linear velocity + b3Vec3 linearVelocity; + + /// The maximum motor force in newtons + float maxVelocityForce; + + /// The desired angular velocity + b3Vec3 angularVelocity; + + /// The maximum motor torque in newton-meters + float maxVelocityTorque; + + /// Linear spring hertz for position control + float linearHertz; + + /// Linear spring damping ratio + float linearDampingRatio; + + /// Maximum spring force in newtons + float maxSpringForce; + + /// Angular spring hertz for position control + float angularHertz; + + /// Angular spring damping ratio + float angularDampingRatio; + + /// Maximum spring torque in newton-meters + float maxSpringTorque; +} b3MotorJointDef; + +/// Use this to initialize your joint definition +/// @ingroup motor_joint +B3_API b3MotorJointDef b3DefaultMotorJointDef( void ); + +/// A filter joint is used to disable collision between two specific bodies. +/// @ingroup filter_joint +typedef struct b3FilterJointDef +{ + /// Base joint definition + b3JointDef base; +} b3FilterJointDef; + +/// Use this to initialize your joint definition +/// @ingroup filter_joint +B3_API b3FilterJointDef b3DefaultFilterJointDef( void ); + +/// Parallel joint definition. Constrains the angle between axis z in body A and axis z in body B +/// using a spring. Useful to keep a body upright. +/// @ingroup parallel_joint +typedef struct b3ParallelJointDef +{ + /// Base joint definition + b3JointDef base; + + /// The spring stiffness Hertz, cycles per second + float hertz; + + /// The spring damping ratio, non-dimensional + float dampingRatio; + + /// The maximum spring torque, typically in newton-meters. + float maxTorque; + +} b3ParallelJointDef; + +/// Use this to initialize your joint definition +/// @ingroup parallel_joint +B3_API b3ParallelJointDef b3DefaultParallelJointDef( void ); + +/// Prismatic joint definition. Body B may slide along the x-axis in local frame A. +/// Body B cannot rotate relative to body A. The joint translation is zero when the +/// local frame origins coincide in world space. +/// @ingroup prismatic_joint +typedef struct b3PrismaticJointDef +{ + /// Base joint definition + b3JointDef base; + + /// Enable a linear spring along the prismatic joint axis + bool enableSpring; + + /// The spring stiffness Hertz, cycles per second + float hertz; + + /// The spring damping ratio, non-dimensional + float dampingRatio; + + /// The target translation for the joint in meters. The spring-damper will drive + /// to this translation. + float targetTranslation; + + /// Enable/disable the joint limit + bool enableLimit; + + /// The lower translation limit + float lowerTranslation; + + /// The upper translation limit + float upperTranslation; + + /// Enable/disable the joint motor + bool enableMotor; + + /// The maximum motor force, typically in newtons + float maxMotorForce; + + /// The desired motor speed, typically in meters per second + float motorSpeed; +} b3PrismaticJointDef; + +/// Use this to initialize your joint definition +/// @ingroup prismatic_joint +B3_API b3PrismaticJointDef b3DefaultPrismaticJointDef( void ); + +/// Revolute joint definition. A point on body B is fixed to a point on body A. +/// Allows relative rotation about the z-axis. +/// @ingroup revolute_joint +typedef struct b3RevoluteJointDef +{ + /// Base joint definition. + b3JointDef base; + + /// The bodyB angle minus bodyA angle in the reference state (radians). + /// This defines the zero angle for the joint limit. + float targetAngle; + + /// Enable a rotational spring on the revolute hinge axis. + bool enableSpring; + + /// The spring stiffness Hertz, cycles per second. + float hertz; + + /// The spring damping ratio, non-dimensional. + float dampingRatio; + + /// A flag to enable joint limits. + bool enableLimit; + + /// The lower angle for the joint limit in radians. Minimum of -0.99*pi radians. + float lowerAngle; + + /// The upper angle for the joint limit in radians. Maximum of 0.99*pi radians. + float upperAngle; + + /// A flag to enable the joint motor. + bool enableMotor; + + /// The maximum motor torque, typically in newton-meters. + float maxMotorTorque; + + /// The desired motor speed in radians per second. + float motorSpeed; +} b3RevoluteJointDef; + +/// Use this to initialize your joint definition. +/// @ingroup revolute_joint +B3_API b3RevoluteJointDef b3DefaultRevoluteJointDef( void ); + +/// Spherical joint definition. A point on body B is fixed to a point on body A. +/// Allows rotation about the shared point. +/// @ingroup spherical_joint +typedef struct b3SphericalJointDef +{ + /// Base joint definition + b3JointDef base; + + /// Enable a rotational spring that attempts to align the two joint frames. + bool enableSpring; + + /// The spring stiffness Hertz, cycles per second. This may be clamped internally + /// according to the time step to maintain stability. Non-negative number. + float hertz; + + /// The spring damping ratio, non-dimensional. Non-negative number. + float dampingRatio; + + /// Target spring rotation, joint frame B relative to joint frame A. + b3Quat targetRotation; + + /// A flag to enable the cone limit. The cone is centered on the frameA z-axis. + bool enableConeLimit; + + /// The angle for the cone limit in radians. Valid range is [0, pi] + float coneAngle; + + /// A flag to enable the twist limit. The twist is centered on the frameB z-axis. + bool enableTwistLimit; + + /// The angle for the lower twist limit in radians. Minimum of -0.99*pi radians. + float lowerTwistAngle; + + /// The angle for the upper twist limit in radians. Maximum of 0.99*pi radians. + float upperTwistAngle; + + /// A flag to enable the joint motor + bool enableMotor; + + /// The maximum motor torque, typically in newton-meters. Non-negative number. + float maxMotorTorque; + + /// The desired motor angular velocity in radians per second. + b3Vec3 motorVelocity; +} b3SphericalJointDef; + +/// Use this to initialize your joint definition. +/// @ingroup spherical_joint +B3_API b3SphericalJointDef b3DefaultSphericalJointDef( void ); + +/// Weld joint definition +/// Connects two bodies together rigidly. This constraint provides springs to mimic +/// soft-body simulation. +/// @note The approximate solver in Box3D cannot hold many bodies together rigidly +/// @ingroup weld_joint +typedef struct b3WeldJointDef +{ + /// Base joint definition + b3JointDef base; + + /// Linear stiffness expressed as Hertz (cycles per second). Use zero for maximum stiffness. + float linearHertz; + + /// Angular stiffness as Hertz (cycles per second). Use zero for maximum stiffness. + float angularHertz; + + /// Linear damping ratio, non-dimensional. Use 1 for critical damping. + float linearDampingRatio; + + /// Linear damping ratio, non-dimensional. Use 1 for critical damping. + float angularDampingRatio; +} b3WeldJointDef; + +/// Use this to initialize your joint definition +/// @ingroup weld_joint +B3_API b3WeldJointDef b3DefaultWeldJointDef( void ); + +/// Wheel joint definition +/// Body A is the chassis and body B is the wheel. +/// The wheel rotates around the local z-axis in frame B. +/// The wheel translates along the local x-axis in frame A. +/// The wheel can optionally steer along the x-axis in frame A. +/// @ingroup wheel_joint +typedef struct b3WheelJointDef +{ + /// Base joint definition + b3JointDef base; + + /// Enable a linear spring along the local axis + bool enableSuspensionSpring; + + /// Spring stiffness in Hertz + float suspensionHertz; + + /// Spring damping ratio, non-dimensional + float suspensionDampingRatio; + + /// Enable/disable the joint linear limit + bool enableSuspensionLimit; + + /// The lower suspension translation limit + float lowerSuspensionLimit; + + /// The upper translation limit + float upperSuspensionLimit; + + /// Enable/disable the joint rotational motor + bool enableSpinMotor; + + /// The maximum motor torque, typically in newton-meters + float maxSpinTorque; + + /// The desired motor speed in radians per second + float spinSpeed; + + /// Enable steering, otherwise the steering is fixed forward + bool enableSteering; + + /// Steering stiffness in Hertz + float steeringHertz; + + /// Spring damping ratio, non-dimensional + float steeringDampingRatio; + + /// The target steering angle in radians + float targetSteeringAngle; + + /// The maximum steering torque in N*m + float maxSteeringTorque; + + /// Enable/disable the steering angular limit + bool enableSteeringLimit; + + /// The lower steering angle in radians + float lowerSteeringLimit; + + /// The upper steering angle in radians + float upperSteeringLimit; +} b3WheelJointDef; + +/// Use this to initialize your joint definition +/// @ingroup wheel_joint +B3_API b3WheelJointDef b3DefaultWheelJointDef( void ); + +/// The explosion definition is used to configure options for explosions. Explosions +/// consider shape geometry when computing the impulse. +/// @ingroup world +typedef struct b3ExplosionDef +{ + /// Mask bits to filter shapes + uint64_t maskBits; + + /// The center of the explosion in world space + b3Pos position; + + /// The radius of the explosion + float radius; + + /// The falloff distance beyond the radius. Impulse is reduced to zero at this distance. + float falloff; + + /// Impulse per unit area. This applies an impulse according to the shape area that + /// is facing the explosion. Explosions only apply to spheres, capsules, and hulls. This + /// may be negative for implosions. + float impulsePerArea; +} b3ExplosionDef; + +/// Use this to initialize your explosion definition +/// @ingroup world +B3_API b3ExplosionDef b3DefaultExplosionDef( void ); + +/** + * @defgroup event Events + * World event types. + * + * Events are used to collect events that occur during the world time step. These events + * are then available to query after the time step is complete. This is preferable to callbacks + * because Box3D uses multithreaded simulation. + * + * Also when events occur in the simulation step it may be problematic to modify the world, which is + * often what applications want to do when events occur. + * + * With event arrays, you can scan the events in a loop and modify the world. However, you need to be careful + * that some event data may become invalid. There are several samples that show how to do this safely. + * + * @{ + */ + +/// A begin-touch event is generated when a shape starts to overlap a sensor shape. +typedef struct b3SensorBeginTouchEvent +{ + /// The id of the sensor shape + b3ShapeId sensorShapeId; + + /// The id of the shape that began touching the sensor shape + b3ShapeId visitorShapeId; +} b3SensorBeginTouchEvent; + +/// An end touch event is generated when a shape stops overlapping a sensor shape. +/// These include things like setting the transform, destroying a body or shape, or changing +/// a filter. You will also get an end event if the sensor or visitor are destroyed. +/// Therefore you should always confirm the shape id is valid using b3Shape_IsValid. +typedef struct b3SensorEndTouchEvent +{ + /// The id of the sensor shape + /// @warning this shape may have been destroyed + /// @see b3Shape_IsValid + b3ShapeId sensorShapeId; + + /// The id of the shape that stopped touching the sensor shape + /// @warning this shape may have been destroyed + /// @see b3Shape_IsValid + b3ShapeId visitorShapeId; +} b3SensorEndTouchEvent; + +/// Sensor events are buffered in the world and are available +/// as begin/end overlap event arrays after the time step is complete. +/// Note: these may become invalid if bodies and/or shapes are destroyed +typedef struct b3SensorEvents +{ + /// Array of sensor begin touch events + b3SensorBeginTouchEvent* beginEvents; + + /// Array of sensor end touch events + b3SensorEndTouchEvent* endEvents; + + /// The number of begin touch events + int beginCount; + + /// The number of end touch events + int endCount; +} b3SensorEvents; + +/// A begin-touch event is generated when two shapes begin touching. +typedef struct b3ContactBeginTouchEvent +{ + /// Id of the first shape + b3ShapeId shapeIdA; + + /// Id of the second shape + b3ShapeId shapeIdB; + + /// The transient contact id. This contact may be destroyed automatically when the world is modified or simulated. + /// Use b3Contact_IsValid before using this id. + b3ContactId contactId; +} b3ContactBeginTouchEvent; + +/// An end touch event is generated when two shapes stop touching. +/// You will get an end event if you do anything that destroys contacts previous to the last +/// world step. These include things like setting the transform, destroying a body +/// or shape, or changing a filter or body type. +typedef struct b3ContactEndTouchEvent +{ + /// Id of the first shape + /// @warning this shape may have been destroyed + /// @see b3Shape_IsValid + b3ShapeId shapeIdA; + + /// Id of the first shape + /// @warning this shape may have been destroyed + /// @see b3Shape_IsValid + b3ShapeId shapeIdB; + + /// Id of the contact. + /// @warning this contact may have been destroyed + /// @see b3Contact_IsValid + b3ContactId contactId; +} b3ContactEndTouchEvent; + +/// A hit touch event is generated when two shapes collide with a speed faster than the hit speed threshold. +/// This may be reported for speculative contacts that have a confirmed impulse. +typedef struct b3ContactHitEvent +{ + /// Id of the first shape + b3ShapeId shapeIdA; + + /// Id of the second shape + b3ShapeId shapeIdB; + + /// Id of the contact. + /// @warning this contact may have been destroyed + /// @see b3Contact_IsValid + b3ContactId contactId; + + /// Point where the shapes hit at the beginning of the time step. + /// This is a mid-point between the two surfaces. It could be at speculative + /// point where the two shapes were not touching at the beginning of the time step. + b3Pos point; + + /// Normal vector pointing from shape A to shape B + b3Vec3 normal; + + /// The speed the shapes are approaching. Always positive. Typically in meters per second. + float approachSpeed; + + /// User material on shape A + uint64_t userMaterialIdA; + + /// User material on shape B + uint64_t userMaterialIdB; + +} b3ContactHitEvent; + +/// Contact events are buffered in the world and are available +/// as event arrays after the time step is complete. +/// Note: these may become invalid if bodies and/or shapes are destroyed +typedef struct b3ContactEvents +{ + /// Array of begin touch events + b3ContactBeginTouchEvent* beginEvents; + + /// Array of end touch events + b3ContactEndTouchEvent* endEvents; + + /// Array of hit events + b3ContactHitEvent* hitEvents; + + /// Number of begin touch events + int beginCount; + + /// Number of end touch events + int endCount; + + /// Number of hit events + int hitCount; +} b3ContactEvents; + +/// Body move events triggered when a body moves. +/// Triggered when a body moves due to simulation. Not reported for bodies moved by the user. +/// This also has a flag to indicate that the body went to sleep so the application can also +/// sleep that actor/entity/object associated with the body. +/// On the other hand if the flag does not indicate the body went to sleep then the application +/// can treat the actor/entity/object associated with the body as awake. +/// This is an efficient way for an application to update game object transforms rather than +/// calling functions such as b3Body_GetTransform() because this data is delivered as a contiguous array +/// and it is only populated with bodies that have moved. +/// @note If sleeping is disabled all dynamic and kinematic bodies will trigger move events. +typedef struct b3BodyMoveEvent +{ + /// The body user data. + void* userData; + + /// The body transform. + b3WorldTransform transform; + + /// The body id. + b3BodyId bodyId; + + /// Did the body fall asleep this time step? + bool fellAsleep; +} b3BodyMoveEvent; + +/// Body events are buffered in the world and are available +/// as event arrays after the time step is complete. +/// Note: this data becomes invalid if bodies are destroyed +typedef struct b3BodyEvents +{ + /// Array of move events + b3BodyMoveEvent* moveEvents; + + /// Number of move events + int moveCount; +} b3BodyEvents; + +/// Joint events report joints that are awake and have a force and/or torque exceeding the threshold +/// The observed forces and torques are not returned for efficiency reasons. +typedef struct b3JointEvent +{ + /// The joint id + b3JointId jointId; + + /// The user data from the joint for convenience + void* userData; +} b3JointEvent; + +/// Joint events are buffered in the world and are available +/// as event arrays after the time step is complete. +/// Note: this data becomes invalid if joints are destroyed +typedef struct b3JointEvents +{ + /// Array of events + b3JointEvent* jointEvents; + + /// Number of events + int count; +} b3JointEvents; + +/// The contact data for two shapes. By convention the manifold normal points +/// from shape A to shape B. +/// @see b3Shape_GetContactData() and b3Body_GetContactData() +typedef struct b3ContactData +{ + /// The contact id. You may hold onto this to track a contact across time steps. + /// This id may become orphaned. Use b3Contact_IsValid before using it for other functions. + b3ContactId contactId; + + /// The first shape id. + b3ShapeId shapeIdA; + + /// The second shape id. + b3ShapeId shapeIdB; + + /// The contact manifold. This points to internal data and may become invalid. Do not store + /// this pointer. + const struct b3Manifold* manifolds; + + /// The number of contact manifolds. For mesh and height-field collision there can be multiple manifolds. + int manifoldCount; +} b3ContactData; + +/**@}*/ // event + +/** + * @defgroup query Query + * @brief Query types and functions + * + * Queries include ray casts, shapes casts, overlap, distance, and time of impact. + * @{ + */ + +/// The query filter is used to filter collisions between queries and shapes. For example, +/// you may want a ray-cast representing a projectile to hit players and the static environment +/// but not debris. +typedef struct b3QueryFilter +{ + /// The collision category bits of this query. Normally you would just set one bit. + uint64_t categoryBits; + + /// The collision mask bits. This states the shape categories that this + /// query would accept for collision. + uint64_t maskBits; + + /// Optional id combined with @ref name to identify this query in a recording, e.g. an entity id. + /// Need not be unique on its own. 0 with a null name means untagged. Ignored when not recording. + uint64_t id; + + /// Optional label combined with @ref id to identify this query, e.g. "bullet". Need not be unique + /// on its own. The recorder hashes (id, name) into one stable key the viewer tracks the query by, + /// so the same id and name pair identifies the same query across frames. NULL means none. Ignored + /// when not recording. + const char* name; +} b3QueryFilter; + +/// Use this to initialize your query filter +B3_API b3QueryFilter b3DefaultQueryFilter( void ); + +/// Low level ray cast input data. +typedef struct b3RayCastInput +{ + /// Start point of the ray cast. + b3Vec3 origin; + + /// Translation of the ray cast. + /// end = start + translation. + b3Vec3 translation; + + /// The maximum fraction of the translation to consider, typically 1 + float maxFraction; +} b3RayCastInput; + +/// Result from b3World_RayCastClosest. +typedef struct b3RayResult +{ + /// The shape hit. + b3ShapeId shapeId; + + /// The world point of the hit. + b3Pos point; + + /// The world normal of the shape surface at the hit point. + b3Vec3 normal; + + /// The user material id at the hit point. This can be per triangle + /// if the shape is a mesh, height-field, or compound with child mesh. + uint64_t userMaterialId; + + /// The fraction of the input ray. + float fraction; + + /// The triangle index if the shape is a mesh, height-field, or compound with + /// child mesh. + int triangleIndex; + + /// The child index if the shape is a compound. + int childIndex; + + /// The number of BVH nodes visited. Diagnostic. + int nodeVisits; + + /// The number of BVH leaves visited. Diagnostic. + int leafVisits; + + /// Did the ray hit? If false, all other data is invalid. + bool hit; +} b3RayResult; + +/// A shape proxy is used by the GJK algorithm. It can represent a convex shape. +typedef struct b3ShapeProxy +{ + /// The point cloud. + const b3Vec3* points; + + /// The number of points. Do not exceed B3_MAX_SHAPE_CAST_POINTS. + int count; + + /// The external radius of the point cloud. + float radius; +} b3ShapeProxy; + +/// Low level shape cast input in generic form. This allows casting an arbitrary point +/// cloud wrap with a radius. For example, a sphere is a single point with a non-zero radius. +/// A capsule is two points with a non-zero radius. A box is four points with a zero radius. +typedef struct b3ShapeCastInput +{ + /// A generic query shape. + b3ShapeProxy proxy; + + /// The translation of the shape cast. + b3Vec3 translation; + + /// The maximum fraction of the translation to consider, typically 1. + float maxFraction; + + /// Allow shape cast to encroach when initially touching. This only works if the radius is greater than zero. + bool canEncroach; +} b3ShapeCastInput; + +/// Input for sweeping an AABB through a dynamic tree. The box is in the tree's world float frame. +/// The caller folds the cast shape radius and any world origin into the box, so the tree traversal +/// stays a conservative box sweep and the precise narrow phase happens per shape in the callback. +typedef struct b3BoxCastInput +{ + /// The AABB to cast, in the tree's frame. + b3AABB box; + + /// The sweep translation. + b3Vec3 translation; + + /// The maximum fraction of the translation to consider, typically 1. + float maxFraction; +} b3BoxCastInput; + +/// Low level ray cast or shape-cast output data. +typedef struct b3CastOutput +{ + /// The surface normal at the hit point. + b3Vec3 normal; + + /// The surface hit point. + b3Vec3 point; + + /// The fraction of the input translation at collision. + float fraction; + + /// The number of iterations used. + int iterations; + + /// The index of the mesh or height field triangle hit. + int triangleIndex; + + /// The index of the compound child shape. + int childIndex; + + /// The material index. May be -1 for null. + int materialIndex; + + /// Did the cast hit? + bool hit; +} b3CastOutput; + +#if defined( BOX3D_DOUBLE_PRECISION ) + +/// Ray cast or shape-cast output in world space. The hit point is a world position so the result +/// stays precise far from the world origin. Mirrors b3CastOutput with a double precision point. +typedef struct b3WorldCastOutput +{ + /// The surface normal at the hit point. + b3Vec3 normal; + + /// The surface hit point in world space. + b3Pos point; + + /// The fraction of the input translation at collision. + float fraction; + + /// The number of iterations used. + int iterations; + + /// The index of the mesh or height field triangle hit. + int triangleIndex; + + /// The index of the compound child shape. + int childIndex; + + /// The material index. May be -1 for null. + int materialIndex; + + /// Did the cast hit? + bool hit; +} b3WorldCastOutput; + +#else + +/// Same type in single precision. +typedef b3CastOutput b3WorldCastOutput; + +#endif + +/// Body cast result for ray and shape casts. +typedef struct b3BodyCastResult +{ + /// The shape hit. + b3ShapeId shapeId; + + /// The world point on the shape surface. + b3Pos point; + + /// The world normal vector on the shape surface. + b3Vec3 normal; + + /// The fraction along the ray hit. + /// hit point = origin + fraction * translation + float fraction; + + /// The triangle index if the shape is a mesh or height-field. + int triangleIndex; + + /// The user material id at the hit point. This can be per triangle + /// if the shape is a mesh, height-field, or compound with child mesh. + uint64_t userMaterialId; + + /// The number of iterations used. Diagnostic. + int iterations; + + /// Did the cast hit? If false, all other fields are invalid. + bool hit; +} b3BodyCastResult; + +/// Used to warm start the GJK simplex. If you call this function multiple times with nearby +/// transforms this might improve performance. Otherwise you can zero initialize this. +/// The distance cache must be initialized to zero on the first call. +/// Users should generally just zero initialize this structure for each call. +typedef struct b3SimplexCache +{ + /// Value use to compare length, area, volume of two simplexes. + float metric; + + // todo use an index of 0xFF as a sentinel and remove the count + /// The number of stored simplex points + uint16_t count; + + /// The cached simplex indices on shape A + uint8_t indexA[4]; + + /// The cached simplex indices on shape B + uint8_t indexB[4]; + +} b3SimplexCache; + +static const b3SimplexCache b3_emptyDistanceCache = B3_ZERO_INIT; + +/// Input parameters for b3ShapeCast +typedef struct b3ShapeCastPairInput +{ + b3ShapeProxy proxyA; ///< The proxy for shape A + b3ShapeProxy proxyB; ///< The proxy for shape B + b3Transform transform; ///< Transform of shape B in shape A's frame, the relative pose B in A + b3Vec3 translationB; ///< The translation of shape B, in A's frame + float maxFraction; ///< The fraction of the translation to consider, typically 1 + bool canEncroach; ///< Allows shapes with a radius to move slightly closer if already touching +} b3ShapeCastPairInput; + +/// Input for b3ShapeDistance +typedef struct b3DistanceInput +{ + /// The proxy for shape A + b3ShapeProxy proxyA; + + /// The proxy for shape B + b3ShapeProxy proxyB; + + /// Transform of shape B in shape A's frame, the relative pose B in A + /// (b3InvMulWorldTransforms( worldA, worldB )). The query is origin independent and runs in frame A. + b3Transform transform; + + /// Should the proxy radius be considered? + bool useRadii; +} b3DistanceInput; + +/// Output for b3ShapeDistance +typedef struct b3DistanceOutput +{ + b3Vec3 pointA; ///< Closest point on shapeA, in shape A's frame + b3Vec3 pointB; ///< Closest point on shapeB, in shape A's frame + b3Vec3 normal; ///< A to B normal in shape A's frame. Invalid if distance is zero. + float distance; ///< The final distance, zero if overlapped + int iterations; ///< Number of GJK iterations used + int simplexCount; ///< The number of simplexes stored in the simplex array +} b3DistanceOutput; + +/// Simplex vertex for debugging the GJK algorithm +typedef struct b3SimplexVertex +{ + b3Vec3 wA; ///< support point in proxyA + b3Vec3 wB; ///< support point in proxyB + b3Vec3 w; ///< wB - wA + float a; ///< barycentric coordinates + int indexA; ///< wA index + int indexB; ///< wB index +} b3SimplexVertex; + +/// Simplex from the GJK algorithm +typedef struct b3Simplex +{ + b3SimplexVertex vertices[4]; ///< vertices + int count; ///< number of valid vertices +} b3Simplex; + +/// This describes the motion of a body/shape for TOI computation. Shapes are defined with respect to the body origin, +/// which may not coincide with the center of mass. However, to support dynamics we must interpolate the center of mass +/// position. +typedef struct b3Sweep +{ + b3Vec3 localCenter; ///< Local center of mass position + b3Vec3 c1; ///< Starting center of mass world position + b3Vec3 c2; ///< Ending center of mass world position + b3Quat q1; ///< Starting world rotation + b3Quat q2; ///< Ending world rotation +} b3Sweep; + +/// Time of impact input +typedef struct b3TOIInput +{ + b3ShapeProxy proxyA; ///< The proxy for shape A + b3ShapeProxy proxyB; ///< The proxy for shape B + b3Sweep sweepA; ///< The movement of shape A + b3Sweep sweepB; ///< The movement of shape B + float maxFraction; ///< Defines the sweep interval [0, tMax] +} b3TOIInput; + +/// Describes the TOI output +typedef enum b3TOIState +{ + b3_toiStateUnknown, + b3_toiStateFailed, + b3_toiStateOverlapped, + b3_toiStateHit, + b3_toiStateSeparated +} b3TOIState; + +/// Time of impact output +typedef struct b3TOIOutput +{ + /// The type of result + b3TOIState state; + + /// The hit point + b3Vec3 point; + + /// The hit normal + b3Vec3 normal; + + /// The sweep time of the collision + float fraction; + + /// The final distance + float distance; + + /// Number of outer iterations + int distanceIterations; + + /// Total number of push back iterations + int pushBackIterations; + + /// Total number of root iterations + int rootIterations; + + /// Indicates that the time of impact detected initial + /// overlap and used a fallback sphere as a last ditch effort + /// to prevent tunneling. + bool usedFallback; +} b3TOIOutput; + +/**@}*/ // query + +/** + * @defgroup tree Dynamic Tree + * The dynamic tree is a binary AABB tree to organize and query large numbers of geometric objects + * + * Box3D uses the dynamic tree internally to sort collision shapes into a binary bounding volume hierarchy. + * This data structure may have uses in games for organizing other geometry data and may be used independently + * of Box3D rigid body simulation. + * + * A dynamic AABB tree broad-phase, inspired by Nathanael Presson's btDbvt. + * A dynamic tree arranges data in a binary tree to accelerate + * queries such as AABB queries and ray casts. Leaf nodes are proxies + * with an AABB. These are used to hold a user collision object. + * Nodes are pooled and relocatable, so I use node indices rather than pointers. + * The dynamic tree is made available for advanced users that would like to use it to organize + * spatial game data besides rigid bodies. + * @{ + */ + +/// Flags for tree nodes. For internal usage. +typedef enum b3TreeNodeFlags +{ + b3_allocatedNode = 0x0001, + b3_enlargedNode = 0x0002, + b3_leafNode = 0x0004, +} b3TreeNodeFlags; + +/// Tree node child indices. For internal usage. +typedef struct b3TreeNodeChildren +{ + int child1; ///< child node index 1 + int child2; ///< child node index 2 +} b3TreeNodeChildren; + +/// A node in the dynamic tree. This is private data placed here for performance reasons. +/// todo test padding to 64 bytes to avoid straddling cache lines +typedef struct b3TreeNode +{ + /// The node bounding box + b3AABB aabb; // 24 + + /// Category bits for collision filtering + uint64_t categoryBits; // 8 + + union + { + /// Children (internal node) + b3TreeNodeChildren children; + + /// User data (leaf node) + uint64_t userData; + }; // 8 + + union + { + /// The node parent index (allocated node) + int parent; + + /// The node freelist next index (free node) + int next; + }; // 4 + + /// Height of the node. Leaves have a height of 0. + uint16_t height; // 2 + + /// @see b3TreeNodeFlags + uint16_t flags; // 2 +} b3TreeNode; + +/// Dynamic tree version for compatibility testing. +#define B3_DYNAMIC_TREE_VERSION 0x93EDAF889FD30B4Aull + +/// The dynamic tree structure. This should be considered private data. +/// It is placed here for performance reasons. +typedef struct b3DynamicTree +{ + /// The dynamic tree version. Always the first field. Useful + /// if the tree is serialized. + uint64_t version; + + /// The tree nodes + b3TreeNode* nodes; + + /// The root index + int root; + + /// The number of nodes + int nodeCount; + + /// The allocated node space + int nodeCapacity; + + /// Number of proxies created + int proxyCount; + + /// Node free list + int freeList; + + /// Leaf indices for rebuild + int* leafIndices; + + /// Leaf bounding boxes for rebuild + b3AABB* leafBoxes; + + /// Leaf bounding box centers for rebuild + b3Vec3* leafCenters; + + /// Bins for sorting during rebuild + int* binIndices; + + /// Allocated space for rebuilding + int rebuildCapacity; +} b3DynamicTree; + +/// These are performance results returned by dynamic tree queries. +typedef struct b3TreeStats +{ + /// Number of internal nodes visited during the query + int nodeVisits; + + /// Number of leaf nodes visited during the query + int leafVisits; +} b3TreeStats; + +/// This function receives proxies found in the AABB query. +/// @return true if the query should continue +typedef bool b3TreeQueryCallbackFcn( int proxyId, uint64_t userData, void* context ); + +/// This function receives the minimum distance squared so far and proxy to check in the closest query. +/// @return minimum distance squared to user objects in the proxy +typedef float b3TreeQueryClosestCallbackFcn( float distanceSqrMin, int proxyId, uint64_t userData, void* context ); + +/// This function receives clipped AABB cast input for a proxy. The function returns the new cast +/// fraction. +/// - return a value of 0 to terminate the cast +/// - return a value less than input->maxFraction to clip the cast +/// - return a value of input->maxFraction to continue the cast without clipping +typedef float b3TreeBoxCastCallbackFcn( const b3BoxCastInput* input, int proxyId, uint64_t userData, void* context ); + +/// This function receives clipped ray cast input for a proxy. The function +/// returns the new ray fraction. +/// - return a value of 0 to terminate the ray cast +/// - return a value less than input->maxFraction to clip the ray +/// - return a value of input->maxFraction to continue the ray cast without clipping +typedef float b3TreeRayCastCallbackFcn( const b3RayCastInput* input, int proxyId, uint64_t userData, void* context ); + +/**@}*/ // tree + +/** + * @defgroup character Character Mover + * Character movement solver + * @{ + */ + +/// The plane between a character mover and a shape +typedef struct b3PlaneResult +{ + /// Outward pointing plane. + b3Plane plane; + + /// Closest point on the shape. May not be unique. + b3Vec3 point; + +} b3PlaneResult; + +/// These are collision planes that can be fed to b3SolvePlanes. Normally +/// this is assembled by the user from plane results in b3PlaneResult. +typedef struct b3CollisionPlane +{ + /// The collision plane between the mover and some shape. + b3Plane plane; + + /// Setting this to FLT_MAX makes the plane as rigid as possible. Lower values can + /// make the plane collision soft. Usually in meters. + float pushLimit; + + /// The push on the mover determined by b3SolvePlanes. Usually in meters. + float push; + + /// Indicates if b3ClipVector should clip against this plane. Should be false for soft collision. + bool clipVelocity; +} b3CollisionPlane; + +/// Result returned by b3SolvePlanes. +typedef struct b3PlaneSolverResult +{ + /// The final relative translation. + b3Vec3 delta; + + /// The number of iterations used by the plane solver. For diagnostics. + int iterationCount; +} b3PlaneSolverResult; + +/// Body plane result for movers. +typedef struct b3BodyPlaneResult +{ + /// The shape id on the body. + b3ShapeId shapeId; + + /// The plane result. + b3PlaneResult result; +} b3BodyPlaneResult; + +/// Used to collect collision planes for character movers. +/// Return true to continue gathering planes. +typedef bool b3PlaneResultFcn( b3ShapeId shapeId, const b3PlaneResult* plane, int planeCount, void* context ); + +/// Used to filter shapes for shape casting character movers. +/// Return true to accept the collision +typedef bool b3MoverFilterFcn( b3ShapeId shapeId, void* context ); + +/**@}*/ // mover + +/** + * @defgroup geometry Geometry + * @brief Geometry types and algorithms + * + * Definitions of spheres, capsules, hulls, meshes, height fields, and compounds. + * @{ + */ + +/// This holds the mass data computed for a shape. +typedef struct b3MassData +{ + /// The shape mass + float mass; + + /// The local center of mass position. + b3Vec3 center; + + /// The inertia tensor about the shape center of mass. + b3Matrix3 inertia; +} b3MassData; + +/** + * @defgroup sphere Sphere + * @brief Sphere primitive + * @{ + */ + +/// A solid sphere +typedef struct b3Sphere +{ + /// The local center + b3Vec3 center; + + /// The radius + float radius; +} b3Sphere; + +/**@}*/ // sphere + +/** + * @defgroup capsule Capsule + * @brief Capsule primitive + * @{ + */ + +/// A solid capsule can be viewed as two hemispheres connected +/// by a rectangle. +typedef struct b3Capsule +{ + /// Local center of the first hemisphere + b3Vec3 center1; + + /// Local center of the second hemisphere + b3Vec3 center2; + + /// The radius of the hemispheres + float radius; +} b3Capsule; + +/**@}*/ // capsule + +/** + * @defgroup hull Convex Hull + * @brief Convex hull primitive + * @{ + */ + +/// A hull vertex. Identified by a half-edge with this +/// vertex as its tail. +typedef struct b3HullVertex +{ + /// A half-edge that has this vertex as the origin + /// Can be used along with edge twins and winding order + /// to traverse all the edges connected to this vertex. + uint8_t edge; +} b3HullVertex; + +/// Half-edge for hull data structure +typedef struct b3HullHalfEdge +{ + /// Next edge index CCW + uint8_t next; + + /// Twin edge index + uint8_t twin; + + /// index of origin vertex and point + uint8_t origin; + + /// Face to the left of this edge + uint8_t face; +} b3HullHalfEdge; + +/// A hull face. Hulls use a half-edge data structure, so a face +/// can be determined from a single half-edge index. +typedef struct b3HullFace +{ + /// An arbitrary half-edge on this face + uint8_t edge; +} b3HullFace; + +/// 64-bit hull version. Useful for validating serialized data. +#define B3_HULL_VERSION 0x9D4716CE3793900Eull + +/// A convex hull. +/// @note This data structure has data hanging off the end and cannot be directly copied. +typedef struct b3HullData +{ + /// Version must be first and match B3_HULL_VERSION + uint64_t version; + + /// The total number of bytes for this hull. + int byteCount; + + /// Hash of this hull (this field is zero when the hash is computed). + uint32_t hash; + + /// Axis-aligned box in local space. + b3AABB aabb; + + /// Surface area, typically in squared meters. + float surfaceArea; + + /// Volume, typically in m^3. + float volume; + + /// The radius of the largest sphere at the center. + float innerRadius; + + /// The local centroid + b3Vec3 center; + + /// The inertia tensor about the centroid. + b3Matrix3 centralInertia; + + /// The vertex count. + int vertexCount; + + /// Offset of the vertex array in bytes from the struct address. + int vertexOffset; + + /// Offset of the point array in bytes from the struct address. + int pointOffset; + + /// This is the half-edge count (double the edge count) + int edgeCount; + + /// Offset of the edge array in bytes from the struct address. + int edgeOffset; + + /// The face count. Hulls faces are convex polygons. + int faceCount; + + /// Offset of the face array in bytes from the struct address. + int faceOffset; + + /// Offset of the face plane array in bytes from the struct address. + int planeOffset; + + /// Explicit padding. Hull identity is a content hash and memcmp over raw bytes, + /// so there must be no unnamed padding for struct copies to scramble. + int padding; +} b3HullData; + +/// Efficient box hull +typedef struct b3BoxHull +{ + /// The embedded hull. So the offsets index into the arrays that follow. + b3HullData base; + b3HullVertex boxVertices[8]; ///< Box vertices. + b3Vec3 boxPoints[8]; ///< Box points. + b3HullHalfEdge boxEdges[24]; ///< Box half-edges. + b3HullFace boxFaces[6]; ///< Box faces. + uint8_t padding[2]; ///< Explicit padding, see b3HullData::padding. + b3Plane boxPlanes[6]; ///< Box face planes. +} b3BoxHull; + +/**@}*/ // hull + +/** + * @defgroup mesh Triangle Mesh + * @brief Triangle mesh collision shape + * @{ + */ + +/// This is used to create a re-usable collision mesh +typedef struct b3MeshDef +{ + /// Triangle vertices + b3Vec3* vertices; + + /// Triangle vertex indices. 3 for each triangle. + int32_t* indices; + + /// Triangle material index. 1 per triangle. Indexes into b3ShapeDef::materials. + /// This allows different run-time material data to be associated with different + /// instances of this mesh. + uint8_t* materialIndices; + + /// Tolerance for vertex welding in length units. + float weldTolerance; + + /// The vertex count. Must be 3 or more. + int vertexCount; + + /// The triangle count. Must be 1 or more. + int triangleCount; + + /// Optionally weld nearby vertices. + bool weldVertices; + + /// Use the median split instead of SAH to speed up mesh creation. Good + /// for meshes that are structured like a grid. + bool useMedianSplit; + + /// Compute triangle adjacency information using shared edges + bool identifyEdges; +} b3MeshDef; + +/// 64-bit mesh version. Useful for validating serialized data. +#define B3_MESH_VERSION 0xABD11AB62A6E886Dull + +/// Triangle mesh edge flags. +typedef enum b3MeshEdgeFlags +{ + b3_concaveEdge1 = 0x01, + b3_concaveEdge2 = 0x02, + b3_concaveEdge3 = 0x04, + + b3_inverseConcaveEdge1 = 0x10, + b3_inverseConcaveEdge2 = 0x20, + b3_inverseConcaveEdge3 = 0x40, + + b3_allConcaveEdges = b3_concaveEdge1 | b3_concaveEdge2 | b3_concaveEdge3, + + b3_flatEdge1 = b3_concaveEdge1 | b3_inverseConcaveEdge1, + b3_flatEdge2 = b3_concaveEdge2 | b3_inverseConcaveEdge2, + b3_flatEdge3 = b3_concaveEdge3 | b3_inverseConcaveEdge3, + + b3_allFlatEdges = b3_flatEdge1 | b3_flatEdge2 | b3_flatEdge3, + +} b3MeshEdgeFlags; + +/// A mesh triangle. +typedef struct b3MeshTriangle +{ + int32_t index1; ///< Index of vertex 1. + int32_t index2; ///< Index of vertex 2. + int32_t index3; ///< Index of vertex 3. +} b3MeshTriangle; + +/// A mesh BVH node. +typedef struct b3MeshNode +{ + /// The lower bound of the node AABB. Strategic placement for SIMD. + b3Vec3 lowerBound; + + /// Anonymous union. + union + { + /// Internal node + struct + { + /// Split axis. 0, 1, or 2. + uint32_t axis : 2; + /// Offset of the second child node. + uint32_t childOffset : 30; + } asNode; + + /// Leaf node + struct + { + /// Aligned with axis above and has value of 3 if this is a leaf. + uint32_t type : 2; + + /// The number of triangles for this leaf node. + uint32_t triangleCount : 30; + } asLeaf; + } data; + + /// The upper bound of the node AABB. Strategic placement for SIMD. + b3Vec3 upperBound; + + /// The index of the leaf triangles. + uint32_t triangleOffset; +} b3MeshNode; + +/// This is a sorted triangle collision bounding volume hierarchy. +/// @note This struct has data hanging off the end and cannot be directly copied. +typedef struct b3MeshData +{ + /// Version must be first. + uint64_t version; + + /// The total number of bytes for this mesh. + int byteCount; + + /// Hash of this mesh (this field is zero when the hash is computed) + uint32_t hash; + + /// Local axis-aligned box. + b3AABB bounds; + + /// Combined surface area of all triangles. Single-sided. + float surfaceArea; + + /// The height of the bounding volume hierarchy. + int treeHeight; + + /// The number of degenerate triangles. Diagnostic. + int degenerateCount; + + /// Offset of the node array in bytes from the struct address. + int nodeOffset; + + /// The number of BVH nodes. + int nodeCount; + + /// Offset of the vertex array in bytes from the struct address. + int vertexOffset; + + /// The number of vertices. + int vertexCount; + + /// Offset of the triangle array in bytes from the struct address. + int triangleOffset; + + /// The number of triangles. + int triangleCount; + + /// Offset of the material array in bytes from the struct address. + int materialOffset; + + /// The number of materials. + int materialCount; + + /// Offset of the triangle flag array in bytes from the struct address. + int flagsOffset; +} b3MeshData; + +/// This allows mesh data to be re-used with different scales. +typedef struct b3Mesh +{ + /// Immutable pointer to the mesh data. + const b3MeshData* data; + + /// This scale may be non-uniform and have negative components. However, + /// no component may be very small in magnitude. + b3Vec3 scale; +} b3Mesh; + +/**@}*/ // mesh + +/** + * @defgroup height_field Height Field + * @brief Height field collision shape + * @{ + */ + +/// Data used to create a height field +typedef struct b3HeightFieldDef +{ + /// Grid point heights + /// count = countX * countZ + float* heights; + + /// Grid cell material + /// A value of 0xFF is reserved for holes + /// count = (countX - 1) * (countZ - 1) + uint8_t* materialIndices; + + /// The height field scale. All components must be positive values. + b3Vec3 scale; + + /// The number of grid lines along the x-axis. + int countX; + + /// The number of grid lines along the z-axis. + int countZ; + + /// Global minimum and maximum heights used for quantization. This is important + /// if you want height fields to be placed next to each other and line up exactly. + /// In that case, both height fields should use the same minimum and maximum heights. + /// All height values are clamped to this range. + /// These values are in unscaled space. + float globalMinimumHeight; + + /// The maximum. + float globalMaximumHeight; + + /// Use clock-wise winding. This effectively inverts the height-field along the y-axis. + bool clockwiseWinding; +} b3HeightFieldDef; + +/// This material index is used to designate holes in a height field. +#define B3_HEIGHT_FIELD_HOLE 0xFF + +/// 64-bit height-field version. Useful for validating serialized data. +#define B3_HEIGHT_FIELD_VERSION 0x8B18CBD138A6BC84ull + +/// A height field with compressed storage. +/// @note This data structure has data hanging off the end and cannot be directly copied. +typedef struct b3HeightFieldData +{ + /// Version must be first and match B3_HEIGHT_FIELD_VERSION + uint64_t version; + + /// The total number of bytes for this height field. + int byteCount; + + /// Hash of this height field (this field is zero when the hash is computed). + uint32_t hash; + + /// The local axis-aligned bounding box. + b3AABB aabb; + + /// The minimum y value. + float minHeight; + + /// The maximum y value + float maxHeight; + + /// The quantization scale. + float heightScale; + + /// The overall scale. + b3Vec3 scale; + + /// The number of grid columns along the local x-axis. + int columnCount; + + /// The number of grid rows along the local z-axis. + int rowCount; + + /// Offset of the compressed height array in bytes from the struct address. + /// uint16_t, one per grid point. + int heightsOffset; + + /// Offset of the material index array in bytes from the struct address. + /// uint8_t, one per cell. + int materialOffset; + + /// Offset of the flag array in bytes from the struct address. + /// uint8_t, one per triangle. + int flagsOffset; + + /// Triangle winding. + bool clockwise; + + /// Explicit padding. Identity is a content hash over raw bytes, so there must + /// be no unnamed padding for struct copies to scramble. + uint8_t padding[3]; +} b3HeightFieldData; + +/**@}*/ // height_field + +/** + * @defgroup compound Compound + * @brief Compound collision shape + * @{ + */ + +/// Definition for a capsule in a compound shape. +typedef struct b3CompoundCapsuleDef +{ + /// Local capsule. + b3Capsule capsule; + + /// Material properties. + b3SurfaceMaterial material; +} b3CompoundCapsuleDef; + +/// Definition for a convex hull in a compound shape. +typedef struct b3CompoundHullDef +{ + /// Shared hull. + const b3HullData* hull; + + /// Transform of the shared hull into compound local space. + b3Transform transform; + + /// Material properties. + b3SurfaceMaterial material; +} b3CompoundHullDef; + +/// Definition for a triangle mesh in a compound shape. +typedef struct b3CompoundMeshDef +{ + /// Shared mesh. + const b3MeshData* meshData; + + /// Transform of the shared mesh into compound local space. + b3Transform transform; + + /// Local space non-uniform mesh scale. May have negative components. + b3Vec3 scale; + + /// Material properties. + /// This array must line up with the material indices on the triangles. + const b3SurfaceMaterial* materials; + + /// Number of materials. + int materialCount; +} b3CompoundMeshDef; + +/// Definition for a sphere in a compound shape. +typedef struct b3CompoundSphereDef +{ + /// Local sphere. + b3Sphere sphere; + + /// Material properties. + b3SurfaceMaterial material; +} b3CompoundSphereDef; + +/// Definition for creating a compound shape. All this data is fully cloned +/// into the run-time compound shape. +typedef struct b3CompoundDef +{ + /// Capsule instances. + b3CompoundCapsuleDef* capsules; + + /// Number of capsules. + int capsuleCount; + + /// Hulls instances. + b3CompoundHullDef* hulls; + + /// Number of hull instances. + int hullCount; + + /// Mesh instances. + b3CompoundMeshDef* meshes; + + /// Number of mesh instances. + int meshCount; + + /// Sphere instances. + b3CompoundSphereDef* spheres; + + /// Number of spheres. + int sphereCount; +} b3CompoundDef; + +/// The compound version depends on the tree, mesh, and hull versions. +#define B3_COMPOUND_VERSION ( 0x830778DB07086EB4ull ^ B3_DYNAMIC_TREE_VERSION ^ B3_MESH_VERSION ^ B3_HULL_VERSION ) + +/// Meshes used in compounds have limited space for materials. If you have +/// a mesh with many materials, you can use it outside of the compound. +#define B3_MAX_COMPOUND_MESH_MATERIALS 4 + +/// The runtime data for a compound shape. This is a potentially large yet highly optimized +/// data structure. It can contain thousands of child shapes, yet at runtime it populates +/// into the world as a single shape in the runtime broad-phase. +/// This data structure has data living off the end and must be accessed using offsets. +/// Accessors are provided for user relevant data. +typedef struct b3CompoundData +{ + /// The compound version is always first. + uint64_t version; + + /// The total number of bytes for this compound. + int byteCount; + + /// Offset of the tree node array in bytes from the struct address. + int nodeOffset; + + /// Immutable dynamic tree. The tree node pointer must be fixed up using the node offset + b3DynamicTree tree; + + /// Offset of the material array in bytes from the struct address. + int materialOffset; + + /// The number of materials. + int materialCount; + + /// Offset of the capsule array in bytes from the struct address. + int capsuleOffset; + + /// The number of capsules. + int capsuleCount; + + /// Offset of the hull instance array in bytes from the struct address. + int hullOffset; + + /// The number of hull instances. + int hullCount; + + /// The number of unique hulls. Diagnostic. + int sharedHullCount; + + /// Offset of the mesh instance array in bytes from the struct address. + int meshOffset; + + /// The number of mesh instances. + int meshCount; + + /// The number of unique meshes. Diagnostic. + int sharedMeshCount; + + /// Offset of the sphere array in bytes from the struct address. + int sphereOffset; + + /// The number of spheres. + int sphereCount; +} b3CompoundData; + +/// A capsule that lives in a compound. +typedef struct b3CompoundCapsule +{ + /// Local capsule. + b3Capsule capsule; + + /// Index to a shared material. + int materialIndex; +} b3CompoundCapsule; + +/// A hull that lives in a compound. +typedef struct b3CompoundHull +{ + /// Pointer to the unique shared hull. + const b3HullData* hull; + + /// The transform of this hull instance. + b3Transform transform; + + /// Index to a shared material. + int materialIndex; +} b3CompoundHull; + +/// A mesh with non-uniform scale that lives in a compound. +typedef struct b3CompoundMesh +{ + /// Pointer to the unique shared mesh. + const b3MeshData* meshData; + + /// The transform of this mesh instance. + b3Transform transform; + + /// Non-uniform scale of this mesh instance. + b3Vec3 scale; + + /// This is used to access the surface material from b3GetCompoundMaterials. + /// Requires an extra level of indirection. The triangle material index + /// is clamped to B3_MAX_COMPOUND_MESH_MATERIALS. + /// materialIndex = materialIndices[triangle->materialIndex] + int materialIndices[B3_MAX_COMPOUND_MESH_MATERIALS]; +} b3CompoundMesh; + +/// A sphere that lives in a compound. +typedef struct b3CompoundSphere +{ + /// Local sphere. + b3Sphere sphere; + + /// Index to a shared material. + int materialIndex; +} b3CompoundSphere; + +/// Child shape of a compound +typedef struct b3ChildShape +{ + /// Tagged union. + union + { + b3Capsule capsule; ///< Capsule. + const b3HullData* hull; ///< Hull. + b3Mesh mesh; ///< Mesh. + b3Sphere sphere; ///< Sphere. + }; + + /// Transform of the shape into compound local space. + b3Transform transform; + + /// Material indices. Index 0 is used for convex shapes. + /// todo limit to 64K? + int materialIndices[B3_MAX_COMPOUND_MESH_MATERIALS]; + + /// The shape type (union tag). + b3ShapeType type; +} b3ChildShape; + +/// Callback for compound overlap queries. +typedef bool b3CompoundQueryFcn( const b3CompoundData* compound, int childIndex, void* context ); + +/**@}*/ // compound + +/**@}*/ // geometry + +/** + * @defgroup collision Shape Collision + * Collide pairs of shapes. + * @{ + */ + +/// A manifold point is a contact point belonging to a contact manifold. +/// It holds details related to the geometry and dynamics of the contact points. +/// Box3D uses speculative collision so some contact points may be separated. +/// You may use the maxNormalImpulse to determine if there was an interaction during +/// the time step. +typedef struct b3ManifoldPoint +{ + /// Location of the contact point relative to the bodyA center of mass in world space. + b3Vec3 anchorA; + + /// Location of the contact point relative to the bodyB center of mass in world space. + b3Vec3 anchorB; + + /// The separation of the contact point, negative if penetrating + float separation; + + /// Cached separation used for contact recycling + float baseSeparation; + + /// The impulse along the manifold normal vector. Since Box3D uses sub-stepping, this is + /// result from the final sub-step. + float normalImpulse; + + /// The total normal impulse applied during sub-stepping. This is important + /// to identify speculative contact points that had an interaction in the time step. + float totalNormalImpulse; + + /// Relative normal velocity pre-solve. Used for hit events. If the normal impulse is + /// zero then there was no hit. Negative means shapes are approaching. + float normalVelocity; + + /// Local point for matching + /// Uniquely identifies a contact point between two shapes + uint32_t featureId; + + /// Triangle index if one of the shapes is a mesh or height field + int triangleIndex; + + /// Did this contact point exist in the previous step? + bool persisted; +} b3ManifoldPoint; + +/// A contact manifold describes the contact points between colliding shapes. +/// @note Box3D uses speculative collision so some contact points may be separated. +typedef struct b3Manifold +{ + /// The manifold points. There may be 1 to 4 valid points. + b3ManifoldPoint points[B3_MAX_MANIFOLD_POINTS]; + + /// The unit normal vector in world space, points from shape A to shape B + b3Vec3 normal; + + /// Central friction angular impulse (applied about the normal) + float twistImpulse; + + /// Central friction linear impulse + b3Vec3 frictionImpulse; + + /// Rolling resistance angular impulse + b3Vec3 rollingImpulse; + + /// The number of contact points, will be 0 to 4 + int pointCount; + +} b3Manifold; + +/// Cached separating axis feature. +typedef enum +{ + b3_invalidAxis = 0, + b3_backsideAxis, + b3_faceAxisA, + b3_faceAxisB, + b3_edgePairAxis, + b3_closestPointsAxis, + + /// These are for testing + b3_manualFaceAxisA, + b3_manualFaceAxisB, + b3_manualEdgePairAxis, +} b3SeparatingFeature; + +/// Cached triangle feature. +typedef enum +{ + b3_featureNone = 0, + b3_featureTriangleFace, + b3_featureHullFace, + /// v1-v2 + b3_featureEdge1, + /// v2-v3 + b3_featureEdge2, + /// v3-v1 + b3_featureEdge3, + b3_featureVertex1, + b3_featureVertex2, + b3_featureVertex3 +} b3TriangleFeature; + +/// Separating axis test cache. Provides temporal acceleration of collision routines. +typedef struct +{ + /// The separation when the cache is populated. Negative for overlap. + float separation; + + /// b3SeparatingFeature. + uint8_t type; + + /// Index of the feature on shape A. + uint8_t indexA; + + /// Index of the feature on shape B. + uint8_t indexB; + + /// Was the cache re-used? + uint8_t hit; +} b3SATCache; + +/// Contact points are always the result of two edges intersecting. +/// It can be two edges of the same shape, which is just a shape vertex. +/// Or a contact point can be the result of two edges crossing from different shapes. +/// This is designed to support hull versus hull, but it is adapted to work +/// with all shape types. The feature pair is used to identify contact points +/// for temporal coherence and warm starting. +typedef struct b3FeaturePair +{ + /// Incoming type (either edge on shape A or shape B) + uint8_t owner1; + /// Incoming edge index (into associated shape array) + uint8_t index1; + /// Outgoing type (either edge on shape A or shape B) + uint8_t owner2; + /// Outgoing edge index (into associated shape array) + uint8_t index2; +} b3FeaturePair; + +/// A local manifold point and normal in frame A. +typedef struct b3LocalManifoldPoint +{ + /// Local point in frame A. + b3Vec3 point; + + /// The contact point separation. Negative for overlap. + float separation; + + /// The feature pair for this point. + b3FeaturePair pair; + + /// The triangle index when collide with a mesh or height-field. + int triangleIndex; +} b3LocalManifoldPoint; + +/// A local manifold with no dynamic information. Used by b3Collide functions. +typedef struct b3LocalManifold +{ + /// Local normal in frame A. + b3Vec3 normal; + + /// The triangle normal. + b3Vec3 triangleNormal; + + /// The manifold points. From a point buffer. + b3LocalManifoldPoint* points; + + /// The number of manifold points. Only bounded by the buffer capacity. + int pointCount; + + /// The index of the triangle. + int triangleIndex; + + int i1; ///< Vertex 1 index. + int i2; ///< Vertex 2 index. + int i3; ///< Vertex 3 index. + + /// The squared distance of a sphere from a triangle. For ghost collision reduction. + float squaredDistance; + + /// The triangle feature involved. + b3TriangleFeature feature; + + /// b3MeshEdgeFlags. + int triangleFlags; +} b3LocalManifold; + +/**@}*/ // collision + +/** + * @defgroup debug_draw Debug Draw + * @{ + */ + +/// These colors are used for debug draw and mostly match the named SVG colors. +/// See https://www.rapidtables.com/web/color/index.html +/// https://johndecember.com/html/spec/colorsvg.html +/// https://upload.wikimedia.org/wikipedia/commons/2/2b/SVG_Recognized_color_keyword_names.svg +typedef enum b3HexColor +{ + b3_colorAliceBlue = 0xF0F8FF, + b3_colorAntiqueWhite = 0xFAEBD7, + b3_colorAqua = 0x00FFFF, + b3_colorAquamarine = 0x7FFFD4, + b3_colorAzure = 0xF0FFFF, + b3_colorBeige = 0xF5F5DC, + b3_colorBisque = 0xFFE4C4, + b3_colorBlack = 0x000000, + b3_colorBlanchedAlmond = 0xFFEBCD, + b3_colorBlue = 0x0000FF, + b3_colorBlueViolet = 0x8A2BE2, + b3_colorBrown = 0xA52A2A, + b3_colorBurlywood = 0xDEB887, + b3_colorCadetBlue = 0x5F9EA0, + b3_colorChartreuse = 0x7FFF00, + b3_colorChocolate = 0xD2691E, + b3_colorCoral = 0xFF7F50, + b3_colorCornflowerBlue = 0x6495ED, + b3_colorCornsilk = 0xFFF8DC, + b3_colorCrimson = 0xDC143C, + b3_colorCyan = 0x00FFFF, + b3_colorDarkBlue = 0x00008B, + b3_colorDarkCyan = 0x008B8B, + b3_colorDarkGoldenRod = 0xB8860B, + b3_colorDarkGray = 0xA9A9A9, + b3_colorDarkGreen = 0x006400, + b3_colorDarkKhaki = 0xBDB76B, + b3_colorDarkMagenta = 0x8B008B, + b3_colorDarkOliveGreen = 0x556B2F, + b3_colorDarkOrange = 0xFF8C00, + b3_colorDarkOrchid = 0x9932CC, + b3_colorDarkRed = 0x8B0000, + b3_colorDarkSalmon = 0xE9967A, + b3_colorDarkSeaGreen = 0x8FBC8F, + b3_colorDarkSlateBlue = 0x483D8B, + b3_colorDarkSlateGray = 0x2F4F4F, + b3_colorDarkTurquoise = 0x00CED1, + b3_colorDarkViolet = 0x9400D3, + b3_colorDeepPink = 0xFF1493, + b3_colorDeepSkyBlue = 0x00BFFF, + b3_colorDimGray = 0x696969, + b3_colorDodgerBlue = 0x1E90FF, + b3_colorFireBrick = 0xB22222, + b3_colorFloralWhite = 0xFFFAF0, + b3_colorForestGreen = 0x228B22, + b3_colorFuchsia = 0xFF00FF, + b3_colorGainsboro = 0xDCDCDC, + b3_colorGhostWhite = 0xF8F8FF, + b3_colorGold = 0xFFD700, + b3_colorGoldenRod = 0xDAA520, + b3_colorGray = 0x808080, + b3_colorGreen = 0x008000, + b3_colorGreenYellow = 0xADFF2F, + b3_colorHoneyDew = 0xF0FFF0, + b3_colorHotPink = 0xFF69B4, + b3_colorIndianRed = 0xCD5C5C, + b3_colorIndigo = 0x4B0082, + b3_colorIvory = 0xFFFFF0, + b3_colorKhaki = 0xF0E68C, + b3_colorLavender = 0xE6E6FA, + b3_colorLavenderBlush = 0xFFF0F5, + b3_colorLawnGreen = 0x7CFC00, + b3_colorLemonChiffon = 0xFFFACD, + b3_colorLightBlue = 0xADD8E6, + b3_colorLightCoral = 0xF08080, + b3_colorLightCyan = 0xE0FFFF, + b3_colorLightGoldenRodYellow = 0xFAFAD2, + b3_colorLightGray = 0xD3D3D3, + b3_colorLightGreen = 0x90EE90, + b3_colorLightPink = 0xFFB6C1, + b3_colorLightSalmon = 0xFFA07A, + b3_colorLightSeaGreen = 0x20B2AA, + b3_colorLightSkyBlue = 0x87CEFA, + b3_colorLightSlateGray = 0x778899, + b3_colorLightSteelBlue = 0xB0C4DE, + b3_colorLightYellow = 0xFFFFE0, + b3_colorLime = 0x00FF00, + b3_colorLimeGreen = 0x32CD32, + b3_colorLinen = 0xFAF0E6, + b3_colorMagenta = 0xFF00FF, + b3_colorMaroon = 0x800000, + b3_colorMediumAquaMarine = 0x66CDAA, + b3_colorMediumBlue = 0x0000CD, + b3_colorMediumOrchid = 0xBA55D3, + b3_colorMediumPurple = 0x9370DB, + b3_colorMediumSeaGreen = 0x3CB371, + b3_colorMediumSlateBlue = 0x7B68EE, + b3_colorMediumSpringGreen = 0x00FA9A, + b3_colorMediumTurquoise = 0x48D1CC, + b3_colorMediumVioletRed = 0xC71585, + b3_colorMidnightBlue = 0x191970, + b3_colorMintCream = 0xF5FFFA, + b3_colorMistyRose = 0xFFE4E1, + b3_colorMoccasin = 0xFFE4B5, + b3_colorNavajoWhite = 0xFFDEAD, + b3_colorNavy = 0x000080, + b3_colorOldLace = 0xFDF5E6, + b3_colorOlive = 0x808000, + b3_colorOliveDrab = 0x6B8E23, + b3_colorOrange = 0xFFA500, + b3_colorOrangeRed = 0xFF4500, + b3_colorOrchid = 0xDA70D6, + b3_colorPaleGoldenRod = 0xEEE8AA, + b3_colorPaleGreen = 0x98FB98, + b3_colorPaleTurquoise = 0xAFEEEE, + b3_colorPaleVioletRed = 0xDB7093, + b3_colorPapayaWhip = 0xFFEFD5, + b3_colorPeachPuff = 0xFFDAB9, + b3_colorPeru = 0xCD853F, + b3_colorPink = 0xFFC0CB, + b3_colorPlum = 0xDDA0DD, + b3_colorPowderBlue = 0xB0E0E6, + b3_colorPurple = 0x800080, + b3_colorRebeccaPurple = 0x663399, + b3_colorRed = 0xFF0000, + b3_colorRosyBrown = 0xBC8F8F, + b3_colorRoyalBlue = 0x4169E1, + b3_colorSaddleBrown = 0x8B4513, + b3_colorSalmon = 0xFA8072, + b3_colorSandyBrown = 0xF4A460, + b3_colorSeaGreen = 0x2E8B57, + b3_colorSeaShell = 0xFFF5EE, + b3_colorSienna = 0xA0522D, + b3_colorSilver = 0xC0C0C0, + b3_colorSkyBlue = 0x87CEEB, + b3_colorSlateBlue = 0x6A5ACD, + b3_colorSlateGray = 0x708090, + b3_colorSnow = 0xFFFAFA, + b3_colorSpringGreen = 0x00FF7F, + b3_colorSteelBlue = 0x4682B4, + b3_colorTan = 0xD2B48C, + b3_colorTeal = 0x008080, + b3_colorThistle = 0xD8BFD8, + b3_colorTomato = 0xFF6347, + b3_colorTurquoise = 0x40E0D0, + b3_colorViolet = 0xEE82EE, + b3_colorWheat = 0xF5DEB3, + b3_colorWhite = 0xFFFFFF, + b3_colorWhiteSmoke = 0xF5F5F5, + b3_colorYellow = 0xFFFF00, + b3_colorYellowGreen = 0x9ACD32, + + b3_colorBox2DRed = 0xDC3132, + b3_colorBox2DBlue = 0x30AEBF, + b3_colorBox2DGreen = 0x8CC924, + b3_colorBox2DYellow = 0xFFEE8C +} b3HexColor; + +/// Debug draw material preset. Optionally packed into the unused high byte of a +/// b3HexColor (or b3SurfaceMaterial::customColor) to drive the renderer's PBR +/// roughness and metalness. The low 24 bits stay RGB, so a plain 0xRRGGBB color +/// reads as b3_debugMaterialDefault and keeps the renderer's per-body-type look. +typedef enum b3DebugMaterial +{ + b3_debugMaterialDefault = 0, + b3_debugMaterialMatte, + b3_debugMaterialSoft, + b3_debugMaterialDead, + b3_debugMaterialGlossy, + b3_debugMaterialMetallic +} b3DebugMaterial; + +/// Pack an RGB color with a material preset for debug draw. The preset rides in +/// the high byte where the color converters ignore it. +B3_INLINE uint32_t b3MakeDebugColor( b3HexColor rgb, b3DebugMaterial material ) +{ + return ( (uint32_t)rgb & 0x00FFFFFFu ) | ( (uint32_t)material << 24 ); +} + +/// Get the visualization color assigned to a constraint graph color slot. The last index +/// (B3_GRAPH_COLOR_COUNT - 1) is the overflow color. +B3_API b3HexColor b3GetGraphColor( int index ); + +/// This is sent to the user for debug shape creation. The user should know the type in case they have +/// custom sphere or capsule rendering. +typedef struct b3DebugShape +{ + /// Shape id. + b3ShapeId shapeId; + + /// Shape type. + b3ShapeType type; + + /// Tagged union. + union + { + const b3Capsule* capsule; ///< Capsule shape. + const b3CompoundData* compound; ///< Compound shape. + const b3HeightFieldData* heightField; ///< Height-field shape. + const b3HullData* hull; ///< Convex hull shape. + const b3Mesh* mesh; ///< Mesh shape with scale. + const b3Sphere* sphere; ///< Sphere shape. + }; +} b3DebugShape; + +/// This struct is passed to b3World_Draw to draw a debug view of the simulation world. +/// Callbacks receive world coordinates. In large world mode the translation is double precision so +/// it stays accurate far from the origin. Shift into your own camera frame inside the callbacks. +typedef struct b3DebugDraw +{ + /// Draws a shape and returns true if drawing should continue + bool ( *DrawShapeFcn )( void* userShape, b3WorldTransform transform, b3HexColor color, void* context ); + + /// Draw a line segment. + void ( *DrawSegmentFcn )( b3Pos p1, b3Pos p2, b3HexColor color, void* context ); + + /// Draw a transform. Choose your own length scale. + void ( *DrawTransformFcn )( b3WorldTransform transform, void* context ); + + /// Draw a point. + void ( *DrawPointFcn )( b3Pos p, float size, b3HexColor color, void* context ); + + /// Draw a sphere. + void ( *DrawSphereFcn )( b3Pos p, float radius, b3HexColor color, float alpha, void* context ); + + /// Draw a capsule. + void ( *DrawCapsuleFcn )( b3Pos p1, b3Pos p2, float radius, b3HexColor color, float alpha, void* context ); + + /// Draw a bounding box. + void ( *DrawBoundsFcn )( b3AABB aabb, b3HexColor color, void* context ); + + /// Draw an oriented box. + void ( *DrawBoxFcn )( b3Vec3 extents, b3WorldTransform transform, b3HexColor color, void* context ); + + /// Draw a string in world space + void ( *DrawStringFcn )( b3Pos p, const char* s, b3HexColor color, void* context ); + + /// World bounds to use for debug draw + b3AABB drawingBounds; + + /// Scale to use when drawing forces + float forceScale; + + /// Global scaling for joint drawing + float jointScale; + + /// Option to draw shapes + bool drawShapes; + + /// Option to draw joints + bool drawJoints; + + /// Option to draw additional information for joints + bool drawJointExtras; + + /// Option to draw the bounding boxes for shapes + bool drawBounds; + + /// Option to draw the mass and center of mass of dynamic bodies + bool drawMass; + + /// Option to draw body names + bool drawBodyNames; + + /// Option to draw contact points + bool drawContacts; + + /// Draw contact anchor A or B + int drawAnchorA; + + /// Option to visualize the graph coloring used for contacts and joints + bool drawGraphColors; + + /// Option to draw contact features + bool drawContactFeatures; + + /// Option to draw contact normals + bool drawContactNormals; + + /// Option to draw contact normal forces + bool drawContactForces; + + /// Option to draw contact friction forces + bool drawFrictionForces; + + /// Option to draw islands as bounding boxes + bool drawIslands; + + /// User context that is passed as an argument to drawing callback functions + void* context; +} b3DebugDraw; + +/// Create a debug draw struct with default values. +B3_API b3DebugDraw b3DefaultDebugDraw( void ); + +/**@}*/ // debug_draw From e9c753c7c3c30167872612aba28fc0a6549c19fe Mon Sep 17 00:00:00 2001 From: gingerBill Date: Thu, 2 Jul 2026 13:41:39 +0100 Subject: [PATCH 6/6] Add `vendor:box3d` to `examples/all` --- examples/all/all_vendor_windows.odin | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/all/all_vendor_windows.odin b/examples/all/all_vendor_windows.odin index 8a0c29eaf..02db53b77 100644 --- a/examples/all/all_vendor_windows.odin +++ b/examples/all/all_vendor_windows.odin @@ -6,5 +6,6 @@ package all @(require) import "vendor:wgpu/sdl2glue" @(require) import "vendor:wgpu" @(require) import "vendor:box2d" +@(require) import "vendor:box3d" @(require) import "vendor:windows/GameInput" @(require) import "vendor:windows/XAudio2" \ No newline at end of file