From f2ba3da895ada7f872997074aa4ff4e1eb685aee Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 13 Aug 2024 16:18:24 +0100 Subject: [PATCH 01/12] Create bindings for box2d Currently missing lib binaries --- vendor/box2d/LICENSE | 21 + vendor/box2d/README.md | 32 + vendor/box2d/box2d.odin | 1202 +++++++++++++++++++++++++++++ vendor/box2d/collision.odin | 757 ++++++++++++++++++ vendor/box2d/id.odin | 77 ++ vendor/box2d/math_functions.odin | 460 +++++++++++ vendor/box2d/types.odin | 1231 ++++++++++++++++++++++++++++++ 7 files changed, 3780 insertions(+) create mode 100644 vendor/box2d/LICENSE create mode 100644 vendor/box2d/README.md create mode 100644 vendor/box2d/box2d.odin create mode 100644 vendor/box2d/collision.odin create mode 100644 vendor/box2d/id.odin create mode 100644 vendor/box2d/math_functions.odin create mode 100644 vendor/box2d/types.odin diff --git a/vendor/box2d/LICENSE b/vendor/box2d/LICENSE new file mode 100644 index 000000000..e90f787a5 --- /dev/null +++ b/vendor/box2d/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Erin Catto + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/vendor/box2d/README.md b/vendor/box2d/README.md new file mode 100644 index 000000000..8b215aca4 --- /dev/null +++ b/vendor/box2d/README.md @@ -0,0 +1,32 @@ +![Box2D Logo](https://box2d.org/images/logo.svg) + +# Status +[![Build Status](https://github.com/erincatto/box2c/actions/workflows/build.yml/badge.svg)](https://github.com/erincatto/box2c/actions) + +# Box2D v3.0 Notes +This repository is beta and ready for testing. It should build on recent versions of clang and gcc. However, you will need the latest Visual Studio version for C11 atomics to compile (17.8.3+). + +AVX2 CPU support is assumed. You can turn this off in the CMake options and use SSE2 instead. + +# Box2D +Box2D is a 2D physics engine for games. + +## Contributing +Please do not submit pull requests with new features or core library changes. Instead, please file an issue first for discussion. For bugs, I prefer detailed bug reports over pull requests. + +# Giving Feedback +Please visit the discussions tab, file an issue, or start a chat on discord. + +## Community +- [Discord](https://discord.gg/NKYgCBP) + +## License +Box2D is developed by Erin Catto, and uses the [MIT license](https://en.wikipedia.org/wiki/MIT_License). + +## Sponsorship +Support development of Box2D through [Github Sponsors](https://github.com/sponsors/erincatto) + +## Ports, wrappers, and Bindings +- https://github.com/odin-lang/Odin/tree/master/vendor/box2d +- https://github.com/EnokViking/Box2DBeef +- https://github.com/HolyBlackCat/box2cpp \ No newline at end of file diff --git a/vendor/box2d/box2d.odin b/vendor/box2d/box2d.odin new file mode 100644 index 000000000..e7d2c1a7d --- /dev/null +++ b/vendor/box2d/box2d.odin @@ -0,0 +1,1202 @@ +package vendor_box2d + +foreign import lib { + "box2d.lib", // dummy +} + +import "core:c" + + +// 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 :: #type proc "c" (size: u32, alignment: i32) -> rawptr + +// Prototype for user free function +// @param mem the memory previously allocated through `b2AllocFcn` +FreeFcn :: #type proc "c" (mem: rawptr) + +// Prototype for the user assert callback. Return 0 to skip the debugger break. +AssertFcn :: #type proc "c" (condition, file_name: cstring, line_number: i32) -> i32 + +// Version numbering scheme. +// +// See https://semver.org/ +Version :: struct { + major: i32, // Significant changes + minor: i32, // Incremental changes + revision: i32, // Bug fixes +} + +when ODIN_OS == .Windows { + // Timer for profiling. This has platform specific code and may + // not work on every platform. + Timer :: struct { + start: i64, + } +} else when ODIN_OS == .Linux || ODIN_OS == .Darwin { + // Timer for profiling. This has platform specific code and may + // not work on every platform. + Timer :: struct { + start_sec: u64, + start_usec: u64, + } +} else { + // Timer for profiling. This has platform specific code and may + // not work on every platform. + Timer :: struct { + dummy: i32, + } +} + +@(link_prefix="b2", default_calling_convention="c") +foreign lib { + // This allows the user to override the allocation functions. These should be + // set during application startup. + SetAllocator :: proc(allocFcn: AllocFcn, freefcn: FreeFcn) --- + // @return the total bytes allocated by Box2D + GetByteCount :: proc() -> c.int --- + // Override the default assert callback + // @param assertFcn a non-null assert callback + SetAssertFcn :: proc(assertfcn: AssertFcn) --- + + + CreateTimer :: proc() -> Timer --- + GetTicks :: proc(timer: ^Timer) -> i64 --- + GetMilliseconds :: proc(#by_ptr timer: Timer) -> f32 --- + GetMillisecondsAndReset :: proc(timer: ^Timer) -> f32 --- + SleepMilliseconds :: proc(milliseconds: c.int) --- + Yield :: proc() --- + + + // Box2D 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 Box2D + SetLengthUnitsPerMeter :: proc(lengthUnits: f32) --- + + // Get the current length units per meter. + GetLengthUnitsPerMeter :: proc() -> f32 --- +} + +@(link_prefix="b2", default_calling_convention="c") +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 query filter + // @ingroup shape + DefaultQueryFilter :: proc() -> QueryFilter --- + + // Use this to initialize your shape definition + // @ingroup shape + DefaultShapeDef :: proc() -> ShapeDef --- + + // Use this to initialize your chain definition + // @ingroup shape + DefaultChainDef :: proc() -> ChainDef --- + + // 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 mouse_joint + DefaultMouseJointDef :: proc() -> MouseJointDef --- + + // Use this to initialize your joint definition + // @ingroupd 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 weld_joint + DefaultWeldJointDef :: proc() -> WeldJointDef --- + + // Use this to initialize your joint definition + // @ingroup wheel_joint + DefaultWheelJointDef :: proc() -> WheelJointDef --- +} + + + +@(link_prefix="b2", default_calling_convention="c") +foreign lib { + + /** + * @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 to 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/ + */ + + /// Create a world for rigid body simulation. A world contains bodies, shapes, and constraints. You make 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) --- + + /// 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. Typically 1/60. + /// @param subStepCount The number of sub-steps, increasing the sub-step count can increase accuracy. Typically 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) --- + + /// 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 --- + + /// Overlap test for all shapes that *potentially* overlap the provided AABB + World_OverlapAABB :: proc(worldId: WorldId, aabb: AABB, filter: QueryFilter, fcn: OverlapResultFcn, ctx: rawptr) --- + + /// Overlap test for for all shapes that overlap the provided circle + World_OverlapCircle :: proc(worldId: WorldId, #by_ptr circle: Circle, transform: Transform, filter: QueryFilter, fcn: OverlapResultFcn, ctx: rawptr) --- + + /// Overlap test for all shapes that overlap the provided capsule + World_OverlapCapsule :: proc(worldId: WorldId, #by_ptr capsule: Capsule, transform: Transform, filter: QueryFilter, fcn: OverlapResultFcn, ctx: rawptr) --- + + /// Overlap test for all shapes that overlap the provided polygon + World_OverlapPolygon :: proc(worldId: WorldId, #by_ptr polygon: Polygon, transform: Transform, filter: QueryFilter, fcn: OverlapResultFcn, ctx: rawptr) --- + + /// 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. + /// The ray-cast ignores shapes that contain the starting point. + /// @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 + /// @note The callback function may receive shapes in any order + World_CastRay :: proc(worldId: WorldId, origin: Vec2, translation: Vec2, filter: QueryFilter, fcn: CastResultFcn, ctx: rawptr) --- + + /// Cast a ray into the world to collect the closest hit. This is a convenience function. + /// This is less general than b2World_CastRay() and does not allow for custom filtering. + World_CastRayClosest :: proc(worldId: WorldId, origin: Vec2, translation: Vec2, filter: QueryFilter) -> RayResult --- + + /// Cast a circle through the world. Similar to a cast ray except that a circle is cast instead of a point. + World_CastCircle :: proc(worldId: WorldId, #by_ptr circle: Circle, originTransform: Transform, translation: Vec2, filter: QueryFilter, fcn: CastResultFcn, ctx: rawptr) --- + + /// Cast a capsule through the world. Similar to a cast ray except that a capsule is cast instead of a point. + World_CastCapsule :: proc(worldId: WorldId, #by_ptr capsule: Capsule, originTransform: Transform, translation: Vec2, filter: QueryFilter, fcn: CastResultFcn, ctx: rawptr) --- + + /// Cast a polygon through the world. Similar to a cast ray except that a polygon is cast instead of a point. + World_CastPolygon :: proc(worldId: WorldId, #by_ptr polygon: Polygon, originTransform: Transform, translation: Vec2, filter: QueryFilter, fcn: CastResultFcn, 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) --- + + /// 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) --- + + /// Adjust the restitution threshold. It is recommended not to make this value very small + /// because it will prevent bodies from sleeping. Typically in meters per second. + /// @see WorldDef + World_SetRestitutionThreshold :: proc(worldId: WorldId, value: f32) --- + + /// Adjust the hit event threshold. This controls the collision velocity needed to generate a b2ContactHitEvent. + /// Typically in meters per second. + /// @see WorldDef::hitEventThreshold + World_SetHitEventThreshold :: proc(worldId: WorldId, value: 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. Box2D has no concept of an up direction and this + /// is left as a decision for the application. Typically in m/s^2. + /// @see WorldDef + World_SetGravity :: proc(worldId: WorldId, gravity: Vec2) --- + + /// Get the gravity vector + World_GetGravity :: proc(worldId: WorldId) -> Vec2 --- + + /// Apply a radial explosion + /// @param worldId The world id + /// @param position The center of the explosion + /// @param radius The radius of the explosion + /// @param impulse The impulse of the explosion, typically in kg * m / s or N * s. + World_Explode :: proc(worldId: WorldId, position: Vec2, radius: f32, impulse: f32) --- + + /// 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 pushVelocity The maximum contact constraint push out velocity (meters per second) + /// @note Advanced feature + World_SetContactTuning :: proc(worldId: WorldId, hertz: f32, dampingRatio: f32, pushVelocity: f32) --- + + /// Enable/disable constraint warm starting. Advanced feature for testing. Disabling + /// sleeping greatly reduces stability and provides no performance gain. + World_EnableWarmStarting :: proc(worldId: WorldId, flag: bool) --- + + /// Get the current world performance profile + World_GetProfile :: proc(worldId: WorldId) -> Profile --- + + /// Get world counters and sizes + World_GetCounters :: proc(worldId: WorldId) -> Counters --- + + /// Dump memory stats to box2d_memory.txt + World_DumpMemoryStats :: proc(worldId: WorldId) --- + + /** + * @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 = b2DefaultBodyDef(); + /// BodyId myBodyId = b2CreateBody(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. 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 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) -> rawptr --- + + /// Get the world position of a body. This is the location of the body origin. + Body_GetPosition :: proc(bodyId: BodyId) -> Vec2 --- + + /// Get the world rotation of a body as a cosine/sine pair (complex number) + Body_GetRotation :: proc(bodyId: BodyId) -> Rot --- + + /// Get the world transform of a body. + Body_GetTransform :: proc(bodyId: BodyId) -> Transform --- + + /// Set the world transform of a body. This acts as a teleport and is fairly expensive. + /// @note Generally you should create a body with then intended transform. + /// @see BodyDef::position and BodyDef::angle + Body_SetTransform :: proc(bodyId: BodyId, position: Vec2, rotation: Rot) --- + + /// Get a local point on a body given a world point + Body_GetLocalPoint :: proc(bodyId: BodyId, worldPoint: Vec2) -> Vec2 --- + + /// Get a world point on a body given a local point + Body_GetWorldPoint :: proc(bodyId: BodyId, localPoint: Vec2) -> Vec2 --- + + /// Get a local vector on a body given a world vector + Body_GetLocalVector :: proc(bodyId: BodyId, worldVector: Vec2) -> Vec2 --- + + /// Get a world vector on a body given a local vector + Body_GetWorldVector :: proc(bodyId: BodyId, localVector: Vec2) -> Vec2 --- + + /// Get the linear velocity of a body's center of mass. Typically in meters per second. + Body_GetLinearVelocity :: proc(bodyId: BodyId) -> Vec2 --- + + /// Get the angular velocity of a body in radians per second + Body_GetAngularVelocity :: proc(bodyId: BodyId) -> f32 --- + + /// Set the linear velocity of a body. Typically in meters per second. + Body_SetLinearVelocity :: proc(bodyId: BodyId, linearVelocity: Vec2) --- + + /// Set the angular velocity of a body in radians per second + Body_SetAngularVelocity :: proc(bodyId: BodyId, angularVelocity: f32) --- + + /// 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, typically 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: Vec2, point: Vec2, 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: Vec2, 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 about the z-axis (out of the screen), typically in N*m. + /// @param wake also wake up the body + Body_ApplyTorque :: proc(bodyId: BodyId, torque: f32, 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, typically 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: Vec2, point: Vec2, 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, typically 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: Vec2, wake: bool) --- + + /// Apply an angular impulse. The impulse is ignored if the body is not awake. + /// This optionally wakes the body. + /// @param bodyId The body id + /// @param impulse the angular impulse, typically 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 force, + /// use a force instead, which will work better with the sub-stepping solver. + Body_ApplyAngularImpulse :: proc(bodyId: BodyId, impulse: f32, wake: bool) --- + + /// Get the mass of the body, typically in kilograms + Body_GetMass :: proc(bodyId: BodyId) -> f32 --- + + /// Get the inertia tensor of the body, typically in kg*m^2 + Body_GetInertiaTensor :: proc(bodyId: BodyId) -> f32 --- + + /// Get the center of mass position of the body in local space + Body_GetLocalCenterOfMass :: proc(bodyId: BodyId) -> Vec2 --- + + /// Get the center of mass position of the body in world space + Body_GetWorldCenterOfMass :: proc(bodyId: BodyId) -> Vec2 --- + + /// 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 update 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) --- + + /// Set the automatic mass setting. Normally this is set in BodyDef before creation. + /// @see BodyDef::automaticMass + Body_SetAutomaticMass :: proc(bodyId: BodyId, automaticMass: bool ) --- + + /// Get the automatic mass setting + Body_GetAutomaticMass :: proc(bodyId: BodyId) -> bool --- + + /// 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, typically in meters per second + Body_SetSleepThreshold :: proc(bodyId: BodyId, sleepVelocity: f32) --- + + /// Get the sleep threshold, typically 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 this body to have fixed rotation. This causes the mass to be reset in all cases. + Body_SetFixedRotation :: proc(bodyId: BodyId, flag: bool) --- + + /// Does this body have fixed rotation? + Body_IsFixedRotation :: proc(bodyId: BodyId) -> bool --- + + /// 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/disable hit events on all shapes + /// @see b2ShapeDef::enableHitEvents + Body_EnableHitEvents :: proc(bodyId: BodyId, enableHitEvents: bool) --- + + /// Get the number of shapes on this body + Body_GetShapeCount :: proc(bodyId: BodyId) -> c.int --- + + /// Get the number of joints on this body + Body_GetJointCount :: proc(bodyId: BodyId) -> 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 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 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 "c" (bodyId: BodyId, shapeArray: []ShapeId) -> c.int { + foreign lib { + b2Body_GetShapes :: proc "c" (bodyId: BodyId, shapeArray: [^]ShapeId, capacity: c.int) -> c.int --- + } + return b2Body_GetShapes(bodyId, raw_data(shapeArray), c.int(len(shapeArray))) + +} + +/// 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 "c" (bodyId: BodyId, jointArray: []JointId) -> c.int { + foreign lib { + b2Body_GetJoints :: proc "c" (bodyId: BodyId, jointArray: [^]JointId, capacity: c.int) -> c.int --- + } + return b2Body_GetJoints(bodyId, raw_data(jointArray), c.int(len(jointArray))) + +} + +/// Get the touching contact data for a body +Body_GetContactData :: proc "c" (bodyId: BodyId, contactData: []ContactData) -> c.int { + foreign lib { + b2Body_GetContactData :: proc "c" (bodyId: BodyId, contactData: [^]ContactData, capacity: c.int) -> c.int --- + } + return b2Body_GetContactData(bodyId, raw_data(contactData), c.int(len(contactData))) + +} + +@(link_prefix="b2", default_calling_convention="c") +foreign lib { + /** + * @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 + CreateCircleShape :: proc(bodyId: BodyId, #by_ptr def: ShapeDef, #by_ptr circle: Circle) -> ShapeId --- + + /// Create a line segment 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 + CreateSegmentShape :: proc(bodyId: BodyId, #by_ptr def: ShapeDef, #by_ptr segment: Segment) -> 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 polygon 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 + CreatePolygonShape :: proc(bodyId: BodyId, #by_ptr def: ShapeDef, #by_ptr polygon: Polygon) -> ShapeId --- + + /// Destroy a shape + DestroyShape :: proc(shapeId: ShapeId) --- + + /// 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 --- + + /// 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) -> rawptr --- + + /// Set the mass density of a shape, typically in kg/m^2. + /// This will not update the mass properties on the parent body. + /// @see b2ShapeDef::density, b2Body_ApplyMassFromShapes + Shape_SetDensity :: proc(shapeId: ShapeId, density: f32) --- + + /// Get the density of a shape, typically in kg/m^2 + Shape_GetDensity :: proc(shapeId: ShapeId) -> f32 --- + + /// Set the friction on a shape + /// @see b2ShapeDef::friction + Shape_SetFriction :: proc(shapeId: ShapeId, friction: f32) --- + + /// Get the friction of a shape + Shape_GetFriction :: proc(shapeId: ShapeId) -> f32 --- + + /// Set the shape restitution (bounciness) + /// @see b2ShapeDef::restitution + Shape_SetRestitution :: proc(shapeId: ShapeId, restitution: f32) --- + + /// Get the shape restitution + Shape_GetRestitution :: proc(shapeId: ShapeId) -> f32 --- + + /// Get the shape filter + Shape_GetFilter :: proc(shapeId: ShapeId) -> Filter --- + + /// Set the current filter. This is almost as expensive as recreating the shape. + /// @see b2ShapeDef::filter + Shape_SetFilter :: proc(shapeId: ShapeId, filter: Filter) --- + + /// Enable sensor events for this shape. Only applies to kinematic and dynamic bodies. Ignored for sensors. + /// @see b2ShapeDef::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 b2ShapeDef::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 b2PreSolveFcn + 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 --- + + /// Test a point for overlap with a shape + Shape_TestPoint :: proc(shapeId: ShapeId, point: Vec2) -> bool --- + + /// Ray cast a shape directly + Shape_RayCast :: proc(shapeId: ShapeId, origin: Vec2, translation: Vec2) -> CastOutput --- + + /// Get a copy of the shape's circle. Asserts the type is correct. + Shape_GetCircle :: proc(shapeId: ShapeId) -> Circle --- + + /// Get a copy of the shape's line segment. Asserts the type is correct. + Shape_GetSegment :: proc(shapeId: ShapeId) -> Segment --- + + /// Get a copy of the shape's smooth line segment. These come from chain shapes. + /// Asserts the type is correct. + Shape_GetSmoothSegment :: proc(shapeId: ShapeId) -> SmoothSegment --- + + /// Get a copy of the shape's capsule. Asserts the type is correct. + Shape_GetCapsule :: proc(shapeId: ShapeId) -> Capsule --- + + /// Get a copy of the shape's convex polygon. Asserts the type is correct. + Shape_GetPolygon :: proc(shapeId: ShapeId) -> Polygon --- + + /// Allows you to change a shape to be a circle or update the current circle. + /// This does not modify the mass properties. + /// @see b2Body_ApplyMassFromShapes + Shape_SetCircle :: proc(shapeId: ShapeId, #by_ptr circle: Circle) --- + + /// Allows you to change a shape to be a capsule or update the current capsule. + /// This does not modify the mass properties. + /// @see b2Body_ApplyMassFromShapes + Shape_SetCapsule :: proc(shapeId: ShapeId, #by_ptr capsule: Capsule) --- + + /// Allows you to change a shape to be a segment or update the current segment. + Shape_SetSegment :: proc(shapeId: ShapeId, #by_ptr segment: Segment) --- + + /// Allows you to change a shape to be a polygon or update the current polygon. + /// This does not modify the mass properties. + /// @see b2Body_ApplyMassFromShapes + Shape_SetPolygon :: proc(shapeId: ShapeId, #by_ptr polygon: Polygon) --- + + /// Get the parent chain id if the shape type is b2_smoothSegmentShape, otherwise + /// returns b2_nullChainId. + Shape_GetParentChain :: proc(shapeId: ShapeId) -> ChainId --- + + /// 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. +Shape_GetContactData :: proc "c" (shapeId: ShapeId, contactData: []ContactData) -> c.int { + foreign lib { + b2Shape_GetContactData :: proc "c" (shapeId: ShapeId, contactData: [^]ContactData, capacity: c.int) -> c.int --- + } + return b2Shape_GetContactData(shapeId, raw_data(contactData), c.int(len(contactData))) +} + + +@(link_prefix="b2", default_calling_convention="c") +foreign lib { + /// Get the current world AABB + Shape_GetAABB :: proc(shapeId: ShapeId) -> AABB --- + + /// Get the closest point on a shape to a target point. Target and result are in world space. + Shape_GetClosestPoint :: proc(shapeId: ShapeId, target: Vec2) -> Vec2 --- + + /// Chain Shape + + /// Create a chain shape + /// @see b2ChainDef for details + CreateChain :: proc(bodyId: BodyId, #by_ptr def: ChainDef) -> ChainId --- + + /// Destroy a chain shape + DestroyChain :: proc(chainId: ChainId) --- + + /// Set the chain friction + /// @see b2ChainDef::friction + Chain_SetFriction :: proc(chainId: ChainId, friction: f32) --- + + /// Set the chain restitution (bounciness) + /// @see b2ChainDef::restitution + Chain_SetRestitution :: proc(chainId: ChainId, restitution: f32) --- + + /// Chain identifier validation. Provides validation for up to 64K allocations. + Chain_IsValid :: proc(id: ChainId) -> bool --- + + /** + * @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) --- + + /// 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 local anchor on bodyA + Joint_GetLocalAnchorA :: proc(jointId: JointId) -> Vec2 --- + + /// Get the local anchor on bodyB + Joint_GetLocalAnchorB :: proc(jointId: JointId) -> Vec2 --- + + /// 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) -> rawptr --- + + /// 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) -> Vec2 --- + + /// Get the current constraint torque for this joint + Joint_GetConstraintTorque :: proc(jointId: JointId) -> f32 --- + + /** + * @defgroup distance_joint Distance Joint + * @brief Functions for the distance joint. + */ + + /// Create a distance joint + /// @see b2DistanceJointDef 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 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_GetHertz :: proc(jointId: JointId) -> f32 --- + + /// Get the spring damping ratio + DistanceJoint_GetDampingRatio :: 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, typically in meters per second + DistanceJoint_SetMotorSpeed :: proc(jointId: JointId, motorSpeed: f32) --- + + /// Get the distance joint motor speed, typically in meters per second + DistanceJoint_GetMotorSpeed :: proc(jointId: JointId) -> f32 --- + + /// Set the distance joint maximum motor force, typically in newtons + DistanceJoint_SetMaxMotorForce :: proc(jointId: JointId, force: f32) --- + + /// Get the distance joint maximum motor force, typically in newtons + DistanceJoint_GetMaxMotorForce :: proc(jointId: JointId) -> f32 --- + + /// Get the distance joint current motor force, typically in newtons + DistanceJoint_GetMotorForce :: proc(jointId: JointId) -> f32 --- + + /** + * @defgroup motor_joint Motor Joint + * @brief Functions for the motor joint. + * + * The motor joint is used to drive the relative transform between two bodies. It takes + * a relative position and rotation and applies the forces and torques needed to achieve + * that relative transform over time. + */ + + /// Create a motor joint + /// @see b2MotorJointDef for details + CreateMotorJoint :: proc(worldId: WorldId, def: MotorJointDef) -> JointId --- + + /// Set the motor joint linear offset target + MotorJoint_SetLinearOffset :: proc(jointId: JointId, linearOffset: Vec2) --- + + /// Get the motor joint linear offset target + MotorJoint_GetLinearOffset :: proc(jointId: JointId) -> Vec2 --- + + /// Set the motor joint angular offset target in radians + MotorJoint_SetAngularOffset :: proc(jointId: JointId, angularOffset: f32) --- + + /// Get the motor joint angular offset target in radians + MotorJoint_GetAngularOffset :: proc(jointId: JointId) -> f32 --- + + /// Set the motor joint maximum force, typically in newtons + MotorJoint_SetMaxForce :: proc(jointId: JointId, maxForce: f32) --- + + /// Get the motor joint maximum force, typically in newtons + MotorJoint_GetMaxForce :: proc(jointId: JointId) -> f32 --- + + /// Set the motor joint maximum torque, typically in newton-meters + MotorJoint_SetMaxTorque :: proc(jointId: JointId, maxTorque: f32) --- + + /// Get the motor joint maximum torque, typically in newton-meters + MotorJoint_GetMaxTorque :: proc(jointId: JointId) -> f32 --- + + /// Set the motor joint correction factor, typically in [0, 1] + MotorJoint_SetCorrectionFactor :: proc(jointId: JointId, correctionFactor: f32) --- + + /// Get the motor joint correction factor, typically in [0, 1] + MotorJoint_GetCorrectionFactor :: proc(jointId: JointId) -> f32 --- + + /**@}*/ + + /** + * @defgroup mouse_joint Mouse Joint + * @brief Functions for the mouse joint. + * + * The mouse joint is designed for use in the samples application, but you may find it useful in applications where + * the user moves a rigid body with a cursor. + */ + + /// Create a mouse joint + /// @see b2MouseJointDef for details + CreateMouseJoint :: proc(worldId: WorldId, #by_ptr def: MouseJointDef) -> JointId --- + + /// Set the mouse joint target + MouseJoint_SetTarget :: proc(jointId: JointId, target: Vec2) --- + + /// Get the mouse joint target + MouseJoint_GetTarget :: proc(jointId: JointId) -> Vec2 --- + + /// Set the mouse joint spring stiffness in Hertz + MouseJoint_SetSpringHertz :: proc(jointId: JointId, hertz: f32) --- + + /// Get the mouse joint spring stiffness in Hertz + MouseJoint_GetSpringHertz :: proc(jointId: JointId) -> f32 --- + + /// Set the mouse joint spring damping ratio, non-dimensional + MouseJoint_SetSpringDampingRatio :: proc(jointId: JointId, dampingRatio: f32) --- + + /// Get the mouse joint damping ratio, non-dimensional + MouseJoint_GetSpringDampingRatio :: proc(jointId: JointId) -> f32 --- + + /// Set the mouse joint maximum force, typically in newtons + MouseJoint_SetMaxForce :: proc(jointId: JointId, maxForce: f32) --- + + /// Get the mouse joint maximum force, typically in newtons + MouseJoint_GetMaxForce :: proc(jointId: JointId) -> f32 --- + + /**@}*/ + + /** + * @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 b2PrismaticJointDef 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 --- + + /// 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: f32, 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, typically in meters per second + PrismaticJoint_SetMotorSpeed :: proc(jointId: JointId, motorSpeed: f32) --- + + /// Get the prismatic joint motor speed, typically in meters per second + PrismaticJoint_GetMotorSpeed :: proc(jointId: JointId) -> f32 --- + + /// Set the prismatic joint maximum motor force, typically in newtons + PrismaticJoint_SetMaxMotorForce :: proc(jointId: JointId, force: f32) --- + + /// Get the prismatic joint maximum motor force, typically in newtons + PrismaticJoint_GetMaxMotorForce :: proc(jointId: JointId) -> f32 --- + + /// Get the prismatic joint current motor force, typically in newtons + PrismaticJoint_GetMotorForce :: proc(jointId: JointId) -> f32 --- + + /** + * @defgroup revolute_joint Revolute Joint + * @brief A revolute joint allows for relative rotation in the 2D plane with no relative translation. + * + * The revolute joint is probably the most common joint. It can be used for ragdolls and chains. + * Also called a *hinge* or *pin* joint. + */ + + /// Create a revolute joint + /// @see b2RevoluteJointDef for details + CreateRevoluteJoint :: proc(worldId: WorldId, #by_ptr def: RevoluteJointDef) -> JointId --- + + /// Enable/disable the revolute joint spring + RevoluteJoint_EnableSpring :: proc(jointId: JointId, enableSpring: 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 --- + + /// Get the revolute joint current angle in radians relative to the reference angle + /// @see b2RevoluteJointDef::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, lower: f32, upper: 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, typically in newton-meters + RevoluteJoint_GetMotorTorque :: proc(jointId: JointId) -> f32 --- + + /// Set the revolute joint maximum motor torque, typically in newton-meters + RevoluteJoint_SetMaxMotorTorque :: proc(jointId: JointId, torque: f32) --- + + /// Get the revolute joint maximum motor torque, typically in newton-meters + RevoluteJoint_GetMaxMotorTorque :: proc(jointId: JointId) -> f32 --- + + /**@}*/ + + /** + * @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 b2WeldJointDef 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 --- + + /** + * @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 b2WheelJointDef for details + CreateWheelJoint :: proc(worldId: WorldId, #by_ptr def: WheelJointDef) -> JointId --- + + /// Enable/disable the wheel joint spring + WheelJoint_EnableSpring :: proc(jointId: JointId, enableSpring: bool) --- + + /// Is the wheel joint spring enabled? + WheelJoint_IsSpringEnabled :: proc(jointId: JointId) -> bool --- + + /// Set the wheel joint stiffness in Hertz + WheelJoint_SetSpringHertz :: proc(jointId: JointId, hertz: f32) --- + + /// Get the wheel joint stiffness in Hertz + WheelJoint_GetSpringHertz :: proc(jointId: JointId) -> f32 --- + + /// Set the wheel joint damping ratio, non-dimensional + WheelJoint_SetSpringDampingRatio :: proc(jointId: JointId, dampingRatio: f32) --- + + /// Get the wheel joint damping ratio, non-dimensional + WheelJoint_GetSpringDampingRatio :: proc(jointId: JointId) -> f32 --- + + /// Enable/disable the wheel joint limit + WheelJoint_EnableLimit :: proc(jointId: JointId, enableLimit: bool) --- + + /// Is the wheel joint limit enabled? + WheelJoint_IsLimitEnabled :: proc(jointId: JointId) -> bool --- + + /// Get the wheel joint lower limit + WheelJoint_GetLowerLimit :: proc(jointId: JointId) -> f32 --- + + /// Get the wheel joint upper limit + WheelJoint_GetUpperLimit :: proc(jointId: JointId) -> f32 --- + + /// Set the wheel joint limits + WheelJoint_SetLimits :: proc(jointId: JointId, lower: f32, upper: f32) --- + + /// Enable/disable the wheel joint motor + WheelJoint_EnableMotor :: proc(jointId: JointId, enableMotor: bool) --- + + /// Is the wheel joint motor enabled? + WheelJoint_IsMotorEnabled :: proc(jointId: JointId) -> bool --- + + /// Set the wheel joint motor speed in radians per second + WheelJoint_SetMotorSpeed :: proc(jointId: JointId, motorSpeed: f32) --- + + /// Get the wheel joint motor speed in radians per second + WheelJoint_GetMotorSpeed :: proc(jointId: JointId) -> f32 --- + + /// Set the wheel joint maximum motor torque, typically in newton-meters + WheelJoint_SetMaxMotorTorque :: proc(jointId: JointId, torque: f32) --- + + /// Get the wheel joint maximum motor torque, typically in newton-meters + WheelJoint_GetMaxMotorTorque :: proc(jointId: JointId) -> f32 --- + + /// Get the wheel joint current motor torque, typically in newton-meters + WheelJoint_GetMotorTorque :: proc(jointId: JointId) -> f32 --- +} + + + +IsValid :: proc{ + Float_IsValid, + Vec2_IsValid, + Rot_IsValid, + World_IsValid, + Body_IsValid, + Shape_IsValid, + Chain_IsValid, + Joint_IsValid, +} \ No newline at end of file diff --git a/vendor/box2d/collision.odin b/vendor/box2d/collision.odin new file mode 100644 index 000000000..f2e123ab6 --- /dev/null +++ b/vendor/box2d/collision.odin @@ -0,0 +1,757 @@ +package vendor_box2d + +foreign import lib { + "box2d.lib", // dummy +} + +import "core:c" + + +// The maximum number of vertices on a convex polygon. Changing this affects performance even if you +// don't use more vertices. +maxPolygonVertices :: 8 + +// Low level ray-cast input data +RayCastInput :: struct { + // Start point of the ray cast + origin: Vec2, + + // Translation of the ray cast + translation: Vec2, + + // The maximum fraction of the translation to consider, typically 1 + maxFraction: f32, +} + +// Low level shape cast input in generic form. This allows casting an arbitrary point +// cloud wrap with a radius. For example, a circle 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 point cloud to cast + points: [maxPolygonVertices]Vec2 `fmt:"v,count"`, + + // The number of points + count: i32, + + // The radius around the point cloud + radius: f32, + + // The translation of the shape cast + translation: Vec2, + + // 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: Vec2, + + // The surface hit point + point: Vec2, + + // The fraction of the input translation at collision + fraction: f32, + + // The number of iterations used + iterations: i32, + + // Did the cast hit? + hit: bool, +} + +// This holds the mass data computed for a shape. +MassData :: struct { + // The mass of the shape, usually in kilograms. + mass: f32, + + // The position of the shape's centroid relative to the shape's origin. + center: Vec2, + + // The rotational inertia of the shape about the local origin. + rotationalInertia: f32, +} + +// A solid circle +Circle :: struct { + // The local center + center: Vec2, + + // The radius + radius: f32, +} + +// A solid capsule can be viewed as two semicircles connected +// by a rectangle. +Capsule :: struct { + // Local center of the first semicircle + center1: Vec2, + + // Local center of the second semicircle + center2: Vec2, + + // The radius of the semicircles + radius: f32, +} + +// A solid convex polygon. It is assumed that the interior of the polygon is to +// the left of each edge. +// Polygons have a maximum number of vertices equal to maxPolygonVertices. +// In most cases you should not need many vertices for a convex polygon. +// @warning DO NOT fill this out manually, instead use a helper function like +// b2MakePolygon or b2MakeBox. +Polygon :: struct { + // The polygon vertices + vertices: [maxPolygonVertices]Vec2 `fmt:"v,count"`, + + // The outward normal vectors of the polygon sides + normals: [maxPolygonVertices]Vec2 `fmt:"v,count"`, + + // The centroid of the polygon + centroid: Vec2, + + // The external radius for rounded polygons + radius: f32, + + // The number of polygon vertices + count: i32, +} + +// A line segment with two-sided collision. +Segment :: struct { + // The first point + point1: Vec2, + + // The second point + point2: Vec2, +} + +// A smooth line segment with one-sided collision. Only collides on the right side. +// Several of these are generated for a chain shape. +// ghost1 -> point1 -> point2 -> ghost2 +SmoothSegment :: struct { + // The tail ghost vertex + ghost1: Vec2, + + // The line segment + segment: Segment, + + // The head ghost vertex + ghost2: Vec2, + + // The owning chain shape index (internal usage only) + chainId: i32, +} + + +@(link_prefix="b2", default_calling_convention="c") +foreign lib { + // Validate ray cast input data (NaN, etc) + IsValidRay :: proc(#by_ptr input: RayCastInput) -> bool --- + + // Make a convex polygon from a convex hull. This will assert if the hull is not valid. + // @warning Do not manually fill in the hull data, it must come directly from b2ComputeHull + MakePolygon :: proc(#by_ptr hull: Hull, radius: f32) -> Polygon --- + + // Make an offset convex polygon from a convex hull. This will assert if the hull is not valid. + // @warning Do not manually fill in the hull data, it must come directly from b2ComputeHull + MakeOffsetPolygon :: proc(#by_ptr hull: Hull, radius: f32, transform: Transform) -> Polygon --- + + // Make a square polygon, bypassing the need for a convex hull. + MakeSquare :: proc(h: f32) -> Polygon --- + + // Make a box (rectangle) polygon, bypassing the need for a convex hull. + MakeBox :: proc(hx, hy: f32) -> Polygon --- + + // Make a rounded box, bypassing the need for a convex hull. + MakeRoundedBox :: proc(hx, hy: f32, radius: f32) -> Polygon --- + + // Make an offset box, bypassing the need for a convex hull. + MakeOffsetBox :: proc(hx, hy: f32, center: Vec2, angle: f32) -> Polygon --- + + // Transform a polygon. This is useful for transferring a shape from one body to another. + TransformPolygon :: proc(transform: Transform, #by_ptr polygon: Polygon) -> Polygon --- + + // Compute mass properties of a circle + ComputeCircleMass :: proc(#by_ptr shape: Circle, density: f32) -> MassData --- + + // Compute mass properties of a capsule + ComputeCapsuleMass :: proc(#by_ptr shape: Capsule, density: f32) -> MassData --- + + // Compute mass properties of a polygon + ComputePolygonMass :: proc(#by_ptr shape: Polygon, density: f32) -> MassData --- + + // Compute the bounding box of a transformed circle + ComputeCircleAABB :: proc(#by_ptr shape: Circle, 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 polygon + ComputePolygonAABB :: proc(#by_ptr shape: Polygon, transform: Transform) -> AABB --- + + // Compute the bounding box of a transformed line segment + ComputeSegmentAABB :: proc(#by_ptr shape: Segment, transform: Transform) -> AABB --- + + // Test a point for overlap with a circle in local space + PointInCircle :: proc(point: Vec2, #by_ptr shape: Circle) -> bool --- + + // Test a point for overlap with a capsule in local space + PointInCapsule :: proc(point: Vec2, #by_ptr shape: Capsule) -> bool --- + + // Test a point for overlap with a convex polygon in local space + PointInPolygon :: proc(point: Vec2, #by_ptr shape: Polygon) -> bool --- + + // Ray cast versus circle in shape local space. Initial overlap is treated as a miss. + RayCastCircle :: proc(#by_ptr input: RayCastInput, #by_ptr shape: Circle) -> CastOutput --- + + // Ray cast versus capsule in shape local space. Initial overlap is treated as a miss. + RayCastCapsule :: proc(#by_ptr input: RayCastInput, #by_ptr shape: Capsule) -> CastOutput --- + + // Ray cast versus segment in shape local space. Optionally treat the segment as one-sided with hits from + // the left side being treated as a miss. + RayCastSegment :: proc(#by_ptr input: RayCastInput, #by_ptr shape: Segment, oneSided: bool) -> CastOutput --- + + // Ray cast versus polygon in shape local space. Initial overlap is treated as a miss. + RayCastPolygon :: proc(#by_ptr input: RayCastInput, #by_ptr shape: Polygon) -> CastOutput --- + + // Shape cast versus a circle. Initial overlap is treated as a miss. + ShapeCastCircle :: proc(#by_ptr input: ShapeCastInput, #by_ptr shape: Circle) -> CastOutput --- + + // Shape cast versus a capsule. Initial overlap is treated as a miss. + ShapeCastCapsule :: proc(#by_ptr input: ShapeCastInput, #by_ptr shape: Capsule) -> CastOutput --- + + // Shape cast versus a line segment. Initial overlap is treated as a miss. + ShapeCastSegment :: proc(#by_ptr input: ShapeCastInput, #by_ptr shape: Segment) -> CastOutput --- + + // Shape cast versus a convex polygon. Initial overlap is treated as a miss. + ShapeCastPolygon :: proc(#by_ptr input: ShapeCastInput, #by_ptr shape: Polygon) -> CastOutput --- +} + +// A convex hull. Used to create convex polygons. +// @warning Do not modify these values directly, instead use b2ComputeHull() +Hull :: struct { + // The final points of the hull + points: [maxPolygonVertices]Vec2 `fmt:"v,count"`, + + // The number of points + count: i32, +} + +// Compute the convex hull of a set of points. Returns an empty hull if it fails. +// Some failure cases: +// - all points very close together +// - all points on a line +// - less than 3 points +// - more than maxPolygonVertices points +// This welds close points and removes collinear points. +// @warning Do not modify a hull once it has been computed +ComputeHull :: proc "c" (points: []Vec2) -> Hull { + foreign lib { + b2ComputeHull :: proc "c" (points: [^]Vec2, count: i32) -> Hull --- + } + return b2ComputeHull(raw_data(points), i32(len(points))) +} + + +@(link_prefix="b2", default_calling_convention="c") +foreign lib { + // This determines if a hull is valid. Checks for: + // - convexity + // - collinear points + // This is expensive and should not be called at runtime. + ValidateHull :: proc(#by_ptr hull: Hull) -> bool --- +} + +/** + * @defgroup distance Distance + * Functions for computing the distance between shapes. + * + * These are advanced functions you can use to perform distance calculations. There + * are functions for computing the closest points between shapes, doing linear shape casts, + * and doing rotational shape casts. The latter is called time of impact (TOI). + */ + +// Result of computing the distance between two line segments +SegmentDistanceResult :: struct { + // The closest point on the first segment + closest1: Vec2, + + // The closest point on the second segment + closest2: Vec2, + + // The barycentric coordinate on the first segment + fraction1: f32, + + // The barycentric coordinate on the second segment + fraction2: f32, + + // The squared distance between the closest points + distanceSquared: f32, +} + +@(link_prefix="b2", default_calling_convention="c") +foreign lib { + // Compute the distance between two line segments, clamping at the end points if needed. + SegmentDistance :: proc(p1, q1: Vec2, p2, q2: Vec2) -> SegmentDistanceResult --- +} + +// A distance proxy is used by the GJK algorithm. It encapsulates any shape. +DistanceProxy :: struct { + // The point cloud + points: [maxPolygonVertices]Vec2 `fmt:"v,count"`, + + // The number of points + count: i32, + + // The external radius of the point cloud + radius: f32, +} + +// Used to warm start b2Distance. Set count to zero on first call or +// use zero initialization. +DistanceCache :: struct { + // The number of stored simplex points + count: u16, + + // The cached simplex indices on shape A + indexA: [3]u8 `fmt:"v,count"`, + + // The cached simplex indices on shape B + indexB: [3]u8 `fmt:"v,count"`, +} + +emptyDistanceCache :: DistanceCache{} + +// Input for b2ShapeDistance +DistanceInput :: struct { + // The proxy for shape A + proxyA: DistanceProxy, + + // The proxy for shape B + proxyB: DistanceProxy, + + // The world transform for shape A + transformA: Transform, + + // The world transform for shape B + transformB: Transform, + + // Should the proxy radius be considered? + useRadii: bool, +} + +// Output for b2ShapeDistance +DistanceOutput :: struct { + pointA: Vec2, // Closest point on shapeA + pointB: Vec2, // Closest point on shapeB + distance: f32, // The final distance, zero if overlapped + iterations: i32, // Number of GJK iterations used + simplexCount: i32, // The number of simplexes stored in the simplex array +} + +// Simplex vertex for debugging the GJK algorithm +SimplexVertex :: struct { + wA: Vec2, // support point in proxyA + wB: Vec2, // support point in proxyB + w: Vec2, // wB - wA + a: f32, // barycentric coordinate for closest point + indexA: i32, // wA index + indexB: i32, // wB index +} + +// Simplex from the GJK algorithm +Simplex :: struct { + v1, v2, v3: SimplexVertex `fmt:"v,count"`, // vertices + count: i32, // number of valid vertices +} + +// Input parameters for b2ShapeCast +ShapeCastPairInput :: struct { + proxyA: DistanceProxy, // The proxy for shape A + proxyB: DistanceProxy, // The proxy for shape B + transformA: Transform, // The world transform for shape A + transformB: Transform, // The world transform for shape B + translationB: Vec2, // The translation of shape B + maxFraction: f32, // The fraction of the translation to consider, typically 1 +} + + +// 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: Vec2, // Local center of mass position + c1: Vec2, // Starting center of mass world position + c2: Vec2, // Ending center of mass world position + q1: Rot, // Starting world rotation + q2: Rot, // Ending world rotation +} + +// Input parameters for b2TimeOfImpact +TOIInput :: struct { + proxyA: DistanceProxy, // The proxy for shape A + proxyB: DistanceProxy, // The proxy for shape B + sweepA: Sweep, // The movement of shape A + sweepB: Sweep, // The movement of shape B + tMax: f32, // Defines the sweep interval [0, tMax] +} + +// Describes the TOI output +TOIState :: enum c.int { + Unknown, + Failed, + Overlapped, + Hit, + Separated, +} + +// Output parameters for b2TimeOfImpact. +TOIOutput :: struct { + state: TOIState, // The type of result + t: f32, // The time of the collision +} + +// Compute the closest points between two shapes represented as point clouds. +// DistanceCache cache is input/output. On the first call set DistanceCache.count to zero. +// 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 "c" (cache: ^DistanceCache, #by_ptr input: DistanceInput, simplexes: []Simplex) -> DistanceOutput { + foreign lib { + b2ShapeDistance :: proc "c" (cache: ^DistanceCache, #by_ptr input: DistanceInput, simplexes: [^]Simplex, simplexCapacity: c.int) -> DistanceOutput --- + } + return b2ShapeDistance(cache, input, raw_data(simplexes), i32(len(simplexes))) +} + + +// Make a proxy for use in GJK and related functions. +MakeProxy :: proc "c" (vertices: []Vec2, radius: f32) -> DistanceProxy { + foreign lib { + b2MakeProxy :: proc "c" (vertices: [^]Vec2, count: i32, radius: f32) -> DistanceProxy --- + } + return b2MakeProxy(raw_data(vertices), i32(len(vertices)), radius) +} + + +@(link_prefix="b2", default_calling_convention="c") +foreign lib { + // Perform a linear shape cast of shape B moving and shape A fixed. Determines the hit point, normal, and translation fraction. + 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 --- +} + + +/** + * @defgroup collision Collision + * @brief Functions for colliding 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. +ManifoldPoint :: struct { + // Location of the contact point in world space. Subject to precision loss at large coordinates. + // @note Should only be used for debugging. + point: Vec2, + + // Location of the contact point relative to bodyA's origin in world space + // @note When used internally to the Box2D solver, these are relative to the center of mass. + anchorA: Vec2, + + // Location of the contact point relative to bodyB's origin in world space + anchorB: Vec2, + + // The separation of the contact point, negative if penetrating + separation: f32, + + // The impulse along the manifold normal vector. + normalImpulse: f32, + + // The friction impulse + tangentImpulse: f32, + + // The maximum normal impulse applied during sub-stepping + // todo not sure this is needed + maxNormalImpulse: 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, + + // Uniquely identifies a contact point between two shapes + id: u16, + + // Did this contact point exist the previous step? + persisted: bool, +} + +// A contact manifold describes the contact points between colliding shapes +Manifold :: struct { + // The manifold points, up to two are possible in 2D + points: [2]ManifoldPoint, + + // The unit normal vector in world space, points from shape A to bodyB + normal: Vec2, + + // The number of contacts points, will be 0, 1, or 2 + pointCount: i32, +} + +@(link_prefix="b2", default_calling_convention="c") +foreign lib { + // Compute the contact manifold between two circles + CollideCircles :: proc(#by_ptr circleA: Circle, xfA: Transform, #by_ptr circleB: Circle, xfB: Transform) -> Manifold --- + + // Compute the contact manifold between a capsule and circle + CollideCapsuleAndCircle :: proc(#by_ptr capsuleA: Capsule, xfA: Transform, #by_ptr circleB: Circle, xfB: Transform) -> Manifold --- + + // Compute the contact manifold between an segment and a circle + CollideSegmentAndCircle :: proc(#by_ptr segmentA: Segment, xfA: Transform, #by_ptr circleB: Circle, xfB: Transform) -> Manifold --- + + // Compute the contact manifold between a polygon and a circle + CollidePolygonAndCircle :: proc(#by_ptr polygonA: Polygon, xfA: Transform, #by_ptr circleB: Circle, xfB: Transform) -> Manifold --- + + // Compute the contact manifold between a capsule and circle + CollideCapsules :: proc(#by_ptr capsuleA: Capsule, xfA: Transform, #by_ptr capsuleB: Capsule, xfB: Transform) -> Manifold --- + + // Compute the contact manifold between an segment and a capsule + CollideSegmentAndCapsule :: proc(#by_ptr segmentA: Segment, xfA: Transform, #by_ptr capsuleB: Capsule, xfB: Transform) -> Manifold --- + + // Compute the contact manifold between a polygon and capsule + CollidePolygonAndCapsule :: proc(#by_ptr polygonA: Polygon, xfA: Transform, #by_ptr capsuleB: Capsule, xfB: Transform) -> Manifold --- + + // Compute the contact manifold between two polygons + CollidePolygons :: proc(#by_ptr polygonA: Polygon, xfA: Transform, #by_ptr polygonB: Polygon, xfB: Transform) -> Manifold --- + + // Compute the contact manifold between an segment and a polygon + CollideSegmentAndPolygon :: proc(#by_ptr segmentA: Segment, xfA: Transform, #by_ptr polygonB: Polygon, xfB: Transform) -> Manifold --- + + // Compute the contact manifold between a smooth segment and a circle + CollideSmoothSegmentAndCircle :: proc(#by_ptr smoothSegmentA: SmoothSegment, xfA: Transform, #by_ptr circleB: Circle, xfB: Transform) -> Manifold --- + + // Compute the contact manifold between an segment and a capsule + CollideSmoothSegmentAndCapsule :: proc(#by_ptr smoothSegmentA: SmoothSegment, xfA: Transform, #by_ptr capsuleB: Capsule, xfB: Transform, cache: ^DistanceCache) -> Manifold --- + + // Compute the contact manifold between a smooth segment and a rounded polygon + CollideSmoothSegmentAndPolygon :: proc(#by_ptr smoothSegmentA: SmoothSegment, xfA: Transform, #by_ptr polygonB: Polygon, xfB: Transform, cache: ^DistanceCache) -> Manifold --- +} + + +/** + * @defgroup tree Dynamic Tree + * The dynamic tree is a binary AABB tree to organize and query large numbers of geometric objects + * + * Box2D 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 Box2D 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, such as a reference to a b2Shape. + * 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. + * + * @note This is an advanced feature and normally not used by applications directly. + */ + +// The default category bit for a tree proxy. Used for collision filtering. +defaultCategoryBits :: 0x00000001 + +// Convenience mask bits to use when you don't need collision filtering and just want +// all results. +defaultMaskBits :: 0xFFFFFFFF + +// A node in the dynamic tree. This is private data placed here for performance reasons. +// 16 + 16 + 8 + pad(8) +TreeNode :: struct { + // The node bounding box + aabb: AABB, // 16 + + // Category bits for collision filtering + categoryBits: u32, // 4 + + using _: struct #raw_union { + // The node parent index + parent: i32, + + // The node freelist next index + next: i32, + }, // 4 + + // Child 1 index + child1: i32, // 4 + + // Child 2 index + child2: i32, // 4 + + // User data + // todo could be union with child index + userData: i32, // 4 + + // Leaf = 0, free node = -1 + height: i16, // 2 + + // Has the AABB been enlarged? + enlarged: bool, // 1 + + // Padding for clarity + pad: [9]byte, +} + +// The dynamic tree structure. This should be considered private data. +// It is placed here for performance reasons. +DynamicTree :: struct { + // The tree nodes + nodes: [^]TreeNode `fmt"v,nodeCount"`, + + // The root index + root: i32, + + // The number of nodes + nodeCount: i32, + + // The allocated node space + nodeCapacity: i32, + + // Node free list + freeList: i32, + + // Number of proxies created + proxyCount: i32, + + // Leaf indices for rebuild + leafIndices: [^]i32, + + // Leaf bounding boxes for rebuild + leafBoxes: [^]AABB, + + // Leaf bounding box centers for rebuild + leafCenters: [^]Vec2, + + // Bins for sorting during rebuild + binIndices: [^]i32, + + // Allocated space for rebuilding + rebuildCapacity: i32, +} + +// This function receives proxies found in the AABB query. +// @return true if the query should continue +TreeQueryCallbackFcn :: #type proc "c" (proxyId: i32, userData: i32, ctx: rawptr) -> bool + +// 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 +TreeShapeCastCallbackFcn :: #type proc "c" (#by_ptr input: ShapeCastInput, proxyId: i32, userData: i32, ctx: rawptr) -> f32 + + +// This function receives clipped raycast 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 :: #type proc "c" (#by_ptr input: RayCastInput, proxyId: i32, userData: i32, ctx: rawptr) -> f32 + +@(link_prefix="b2", default_calling_convention="c") +foreign lib { + // Constructing the tree initializes the node pool. + DynamicTree_Create :: proc() -> 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: u32, userData: i32) -> i32 --- + + // Destroy a proxy. This asserts if the id is invalid. + DynamicTree_DestroyProxy :: proc(tree: ^DynamicTree, proxyId: i32) --- + + // Move a proxy to a new AABB by removing and reinserting into the tree. + DynamicTree_MoveProxy :: proc(tree: ^DynamicTree, proxyId: i32, aabb: AABB) --- + + // Enlarge a proxy and enlarge ancestors as necessary. + DynamicTree_EnlargeProxy :: proc(tree: ^DynamicTree, proxyId: i32, aabb: AABB) --- + + // Query an AABB for overlapping proxies. The callback class + // is called for each proxy that overlaps the supplied AABB. + DynamicTree_Query :: proc(#by_ptr tree: DynamicTree, aabb: AABB, maskBits: u32, callback: TreeQueryCallbackFcn, ctx: rawptr) --- + + // Ray-cast against the proxies in the tree. This relies on the callback + // to perform a exact ray-cast in the case were the proxy contains a shape. + // The callback also performs the 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. + // @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 filter bits: `bool accept = (maskBits & node->categoryBits) != 0 ---` + // @param callback a callback class that is called for each proxy that is hit by the ray + // @param context user context that is passed to the callback + DynamicTree_RayCast :: proc(#by_ptr tree: DynamicTree, #by_ptr input: RayCastInput, maskBits: u32, callback: TreeRayCastCallbackFcn, ctx: rawptr) --- + + // Ray-cast against the proxies in the tree. This relies on the callback + // to perform a exact ray-cast in the case were the proxy contains a shape. + // The callback also performs the 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. + // @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 filter bits: `bool accept = (maskBits & node->categoryBits) != 0 ---` + // @param callback a callback class that is called for each proxy that is hit by the shape + // @param context user context that is passed to the callback + DynamicTree_ShapeCast :: proc(#by_ptr tree: DynamicTree, #by_ptr input: ShapeCastInput, maskBits: u32, callback: TreeShapeCastCallbackFcn, ctx: rawptr) --- + + // Validate this tree. For testing. + DynamicTree_Validate :: proc(#by_ptr tree: DynamicTree) --- + + // Compute the height of the binary tree in O(N) time. Should not be + // called often. + DynamicTree_GetHeight :: proc(#by_ptr tree: DynamicTree) -> c.int --- + + // Get the maximum balance of the tree. The balance is the difference in height of the two children of a node. + DynamicTree_GetMaxBalance :: 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 --- + + // Build an optimal tree. Very expensive. For testing. + DynamicTree_RebuildBottomUp :: proc(tree: ^DynamicTree) --- + + // 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 --- + + // Shift the world origin. Useful for large worlds. + // The shift formula is: position -= newOrigin + // @param tree the tree to shift + // @param newOrigin the new origin with respect to the old origin + DynamicTree_ShiftOrigin :: proc(tree: ^DynamicTree, newOrigin: Vec2) --- + + // Get the number of bytes used by this tree + DynamicTree_GetByteCount :: proc(#by_ptr tree: DynamicTree) -> c.int --- +} + +// Get proxy user data +// @return the proxy user data or 0 if the id is invalid +DynamicTree_GetUserData :: proc "contextless" (tree: DynamicTree, proxyId: i32) -> i32 { + return tree.nodes[proxyId].userData +} + +// Get the AABB of a proxy +DynamicTree_GetAABB :: proc "contextless" (tree: DynamicTree, proxyId: i32) -> AABB { + return tree.nodes[proxyId].aabb +} diff --git a/vendor/box2d/id.odin b/vendor/box2d/id.odin new file mode 100644 index 000000000..0ac1534f4 --- /dev/null +++ b/vendor/box2d/id.odin @@ -0,0 +1,77 @@ +package vendor_box2d + +/** + * @defgroup id Ids + * These ids serve as handles to internal Box2D objects. + * These should be considered opaque data and passed by value. + * Include this header if you need the id types and not the whole Box2D API. + * All ids are considered null if initialized to zero. + * + * For example in C++: + * + * @code{.cxx} + * b2WorldId worldId = {}; + * @endcode + * + * Or in C: + * + * @code{.c} + * b2WorldId 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 Box2D. 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. +WorldId :: struct { + index1: u16, + revision: u16, +} + +/// Body id references a body instance. This should be treated as an opaque handle. +BodyId :: struct { + index1: i32, + world0: u16, + revision: u16, +} + +/// Shape id references a shape instance. This should be treated as an opaque handle. +ShapeId :: struct { + index1: i32, + world0: u16, + revision: u16, +} + +/// Joint id references a joint instance. This should be treated as an opaque handle. +JointId :: struct { + index1: i32, + world0: u16, + revision: u16, +} + +/// Chain id references a chain instances. This should be treated as an opaque handle. +ChainId :: struct { + index1: i32, + world0: u16, + revision: u16, +} + +/// Use these to make your identifiers null. +/// You may also use zero initialization to get null. +nullWorldId :: WorldId{} +nullBodyId :: BodyId{} +nullShapeId :: ShapeId{} +nullJointId :: JointId{} +nullChainId :: ChainId{} + +/// Macro to determine if any id is null. +IS_NULL :: proc "c" (id: $T) -> bool { return id.index1 == 0 } + +/// Macro to determine if any id is non-null. +IS_NON_NULL :: proc "c" (id: $T) -> bool { return id.index1 != 0 } + +/// Compare two ids for equality. Doesn't work for b2WorldId. +ID_EQUALS :: proc "c" (id1, id2: $T) -> bool { return id1.index1 == id2.index1 && id1.world0 == id2.world0 && id1.revision == id2.revision } diff --git a/vendor/box2d/math_functions.odin b/vendor/box2d/math_functions.odin new file mode 100644 index 000000000..082eccca2 --- /dev/null +++ b/vendor/box2d/math_functions.odin @@ -0,0 +1,460 @@ +package vendor_box2d + +import "core:c" +import "core:math" + +pi :: 3.14159265359 + +Vec2 :: [2]f32 +Rot :: struct { + c, s: f32, // cosine and sine +} + +Transform :: struct { + p: Vec2, + q: Rot, +} + +Mat22 :: matrix[2, 2]f32 +AABB :: struct { + lowerBound: Vec2, + upperBound: Vec2, +} + +Vec2_zero :: Vec2{0, 0} +Rot_identity :: Rot{1, 0} +Transform_identity :: Transform{{0, 0}, {1, 0}} +Mat22_zero :: Mat22{0, 0, 0, 0} + + +// @return the minimum of two floats +MinFloat :: proc "c" (a, b: f32) -> f32 { + return min(a, b) +} + +// @return the maximum of two floats +MaxFloat :: proc "c" (a, b: f32) -> f32 { + return max(a, b) +} + +// @return the absolute value of a float +AbsFloat :: proc "c" (a: f32) -> f32 { + return abs(a) +} + +// @return a f32 clamped between a lower and upper bound +ClampFloat :: proc "c" (a, lower, upper: f32) -> f32 { + return clamp(a, lower, upper) +} + +// @return the minimum of two integers +MinInt :: proc "c" (a, b: c.int) -> c.int { + return min(a, b) +} + +// @return the maximum of two integers +MaxInt :: proc "c" (a, b: c.int) -> c.int { + return max(a, b) +} + +// @return the absolute value of an integer +AbsInt :: proc "c" (a: c.int) -> c.int { + return abs(a) +} + +// @return an integer clamped between a lower and upper bound +ClampInt :: proc "c" (a, lower, upper: c.int) -> c.int { + return clamp(a, lower, upper) +} + +// Vector dot product +Dot :: proc "c" (a, b: Vec2) -> f32 { + return a.x * b.x + a.y * b.y +} + +// Vector cross product. In 2D this yields a scalar. +Cross :: proc "c" (a, b: Vec2) -> f32 { + return a.x * b.y - a.y * b.x +} + +// Perform the cross product on a vector and a scalar. In 2D this produces a vector. +CrossVS :: proc "c" (v: Vec2, s: f32) -> Vec2 { + return {s * v.y, -s * v.x} +} + +// Perform the cross product on a scalar and a vector. In 2D this produces a vector. +CrossSV :: proc "c" (s: f32, v: Vec2) -> Vec2 { + return {-s * v.y, s * v.x} +} + +// Get a left pointing perpendicular vector. Equivalent to b2CrossSV(1, v) +LeftPerp :: proc "c" (v: Vec2) -> Vec2 { + return {-v.y, v.x} +} + +// Get a right pointing perpendicular vector. Equivalent to b2CrossVS(v, 1) +RightPerp :: proc "c" (v: Vec2) -> Vec2 { + return {v.y, -v.x} +} + +// Vector addition +Add :: proc "c" (a, b: Vec2) -> Vec2 { + return a + b +} + +// Vector subtraction +Sub :: proc "c" (a, b: Vec2) -> Vec2 { + return a - b +} + +// Vector negation +Neg :: proc "c" (a: Vec2) -> Vec2 { + return -a +} + +// Vector linear interpolation +// https://fgiesen.wordpress.com/2012/08/15/linear-interpolation-past-present-and-future/ +Lerp :: proc "c" (a, b: Vec2, t: f32) -> Vec2 { + return {(1 - t) * a.x + t * b.x, (1 - t) * a.y + t * b.y} +} + +// Component-wise multiplication +Mul :: proc "c" (a, b: Vec2) -> Vec2 { + return a * b +} + +// Multiply a scalar and vector +MulSV :: proc "c" (s: f32, v: Vec2) -> Vec2 { + return s * v +} + +// a + s * b +MulAdd :: proc "c" (a: Vec2, s: f32, b: Vec2) -> Vec2 { + return a + s * b +} + +// a - s * b +MulSub :: proc "c" (a: Vec2, s: f32, b: Vec2) -> Vec2 { + return a - s * b +} + +// Component-wise absolute vector +Abs :: proc "c" (a: Vec2) -> (b: Vec2) { + b.x = AbsFloat(a.x) + b.y = AbsFloat(a.y) + return +} + +// Component-wise minimum vector +Min :: proc "c" (a, b: Vec2) -> (c: Vec2) { + c.x = MinFloat(a.x, b.x) + c.y = MinFloat(a.y, b.y) + return +} + +// Component-wise maximum vector +Max :: proc "c" (a, b: Vec2) -> (c: Vec2) { + c.x = MaxFloat(a.x, b.x) + c.y = MaxFloat(a.y, b.y) + return +} + +// Component-wise clamp vector v into the range [a, b] +Clamp :: proc "c" (v: Vec2, a, b: Vec2) -> (c: Vec2) { + c.x = ClampFloat(v.x, a.x, b.x) + c.y = ClampFloat(v.y, a.y, b.y) + return +} + +// Get the length of this vector (the norm) +Length :: proc "c" (v: Vec2) -> f32 { + return math.sqrt(v.x * v.x + v.y * v.y) +} + +// Get the length squared of this vector +LengthSquared :: proc "c" (v: Vec2) -> f32 { + return v.x * v.x + v.y * v.y +} + +// Get the distance between two points +Distance :: proc "c" (a, b: Vec2) -> f32 { + dx := b.x - a.x + dy := b.y - a.y + return math.sqrt(dx * dx + dy * dy) +} + +// Get the distance squared between points +DistanceSquared :: proc "c" (a, b: Vec2) -> f32 { + c := Vec2{b.x - a.x, b.y - a.y} + return c.x * c.x + c.y * c.y +} + +// Make a rotation using an angle in radians +MakeRot :: proc "c" (angle: f32) -> Rot { + // todo determinism + return {math.cos(angle), math.sin(angle)} +} + +// Normalize rotation +NormalizeRot :: proc "c" (q: Rot) -> Rot { + mag := math.sqrt(q.s * q.s + q.c * q.c) + invMag := f32(mag > 0.0 ? 1.0 / mag : 0.0) + return {q.c * invMag, q.s * invMag} +} + +// Is this rotation normalized? +IsNormalized :: proc "c" (q: Rot) -> bool { + // larger tolerance due to failure on mingw 32-bit + qq := q.s * q.s + q.c * q.c + return 1.0 - 0.0006 < qq && qq < 1 + 0.0006 +} + +// Normalized linear interpolation +// https://fgiesen.wordpress.com/2012/08/15/linear-interpolation-past-present-and-future/ +NLerp :: proc "c" (q1: Rot, q2: Rot, t: f32) -> Rot { + omt := 1 - t + return NormalizeRot({ + omt * q1.c + t * q2.c, + omt * q1.s + t * q2.s, + }) +} + +// Integration rotation from angular velocity +// @param q1 initial rotation +// @param deltaAngle the angular displacement in radians +IntegrateRotation :: proc "c" (q1: Rot, deltaAngle: f32) -> Rot { + // dc/dt = -omega * sin(t) + // ds/dt = omega * cos(t) + // c2 = c1 - omega * h * s1 + // s2 = s1 + omega * h * c1 + q2 := Rot{q1.c - deltaAngle * q1.s, q1.s + deltaAngle * q1.c} + mag := math.sqrt(q2.s * q2.s + q2.c * q2.c) + invMag := f32(mag > 0.0 ? 1 / mag : 0.0) + return {q2.c * invMag, q2.s * invMag} +} + +// Compute the angular velocity necessary to rotate between two rotations over a give time +// @param q1 initial rotation +// @param q2 final rotation +// @param inv_h inverse time step +ComputeAngularVelocity :: proc "c" (q1: Rot, q2: Rot, inv_h: f32) -> f32 { + // ds/dt = omega * cos(t) + // dc/dt = -omega * sin(t) + // s2 = s1 + omega * h * c1 + // c2 = c1 - omega * h * s1 + + // omega * h * s1 = c1 - c2 + // omega * h * c1 = s2 - s1 + // omega * h = (c1 - c2) * s1 + (s2 - s1) * c1 + // omega * h = s1 * c1 - c2 * s1 + s2 * c1 - s1 * c1 + // omega * h = s2 * c1 - c2 * s1 = sin(a2 - a1) ~= a2 - a1 for small delta + omega := inv_h * (q2.s * q1.c - q2.c * q1.s) + return omega +} + +// Get the angle in radians in the range [-pi, pi] +Rot_GetAngle :: proc "c" (q: Rot) -> f32 { + // todo determinism + return math.atan2(q.s, q.c) +} + +// Get the x-axis +Rot_GetXAxis :: proc "c" (q: Rot) -> Vec2 { + return {q.c, q.s} +} + +// Get the y-axis +Rot_GetYAxis :: proc "c" (q: Rot) -> Vec2 { + return {-q.s, q.c} +} + +// Multiply two rotations: q * r +MulRot :: proc "c" (q, r: Rot) -> (qr: Rot) { + // [qc -qs] * [rc -rs] = [qc*rc-qs*rs -qc*rs-qs*rc] + // [qs qc] [rs rc] [qs*rc+qc*rs -qs*rs+qc*rc] + // s(q + r) = qs * rc + qc * rs + // c(q + r) = qc * rc - qs * rs + qr.s = q.s * r.c + q.c * r.s + qr.c = q.c * r.c - q.s * r.s + return +} + +// Transpose multiply two rotations: qT * r +InvMulRot :: proc "c" (q, r: Rot) -> (qr: Rot) { + // [ qc qs] * [rc -rs] = [qc*rc+qs*rs -qc*rs+qs*rc] + // [-qs qc] [rs rc] [-qs*rc+qc*rs qs*rs+qc*rc] + // s(q - r) = qc * rs - qs * rc + // c(q - r) = qc * rc + qs * rs + qr.s = q.c * r.s - q.s * r.c + qr.c = q.c * r.c + q.s * r.s + return +} + +// relative angle between b and a (rot_b * inv(rot_a)) +RelativeAngle :: proc "c" (b, a: Rot) -> f32 { + // sin(b - a) = bs * ac - bc * as + // cos(b - a) = bc * ac + bs * as + s := b.s * a.c - b.c * a.s + c := b.c * a.c + b.s * a.s + return math.atan2(s, c) +} + +// Convert an angle in the range [-2*pi, 2*pi] into the range [-pi, pi] +UnwindAngle :: proc "c" (angle: f32) -> f32 { + if angle < -pi { + return angle + 2.0 * pi + } else if angle > pi { + return angle - 2.0 * pi + } + return angle +} + +// Rotate a vector +RotateVector :: proc "c" (q: Rot, v: Vec2) -> Vec2 { + return {q.c * v.x - q.s * v.y, q.s * v.x + q.c * v.y} +} + +// Inverse rotate a vector +InvRotateVector :: proc "c" (q: Rot, v: Vec2) -> Vec2 { + return {q.c * v.x + q.s * v.y, -q.s * v.x + q.c * v.y} +} + +// Transform a point (e.g. local space to world space) +TransformPoint :: proc "c" (t: Transform, p: Vec2) -> Vec2 { + x := (t.q.c * p.x - t.q.s * p.y) + t.p.x + y := (t.q.s * p.x + t.q.c * p.y) + t.p.y + return {x, y} +} + +// Inverse transform a point (e.g. world space to local space) +InvTransformPoint :: proc "c" (t: Transform, p: Vec2) -> Vec2 { + vx := p.x - t.p.x + vy := p.y - t.p.y + return {t.q.c * vx + t.q.s * vy, -t.q.s * vx + t.q.c * vy} +} + +// v2 = A.q.Rot(B.q.Rot(v1) + B.p) + A.p +// = (A.q * B.q).Rot(v1) + A.q.Rot(B.p) + A.p +MulTransforms :: proc "c" (A, B: Transform) -> (C: Transform) { + C.q = MulRot(A.q, B.q) + C.p = RotateVector(A.q, B.p) + A.p + return +} + +// v2 = A.q' * (B.q * v1 + B.p - A.p) +// = A.q' * B.q * v1 + A.q' * (B.p - A.p) +InvMulTransforms :: proc "c" (A, B: Transform) -> (C: Transform) { + C.q = InvMulRot(A.q, B.q) + C.p = InvRotateVector(A.q, B.p-A.p) + return +} + +// Multiply a 2-by-2 matrix times a 2D vector +MulMV :: proc "c" (A: Mat22, v: Vec2) -> Vec2 { + return A * v +} + +// Get the inverse of a 2-by-2 matrix +GetInverse22 :: proc "c" (A: Mat22) -> Mat22 { + a := A[0, 0] + b := A[0, 1] + c := A[1, 0] + d := A[1, 1] + det := a * d - b * c + if det != 0.0 { + det = 1 / det + } + + return Mat22{ + det * d, -det * b, + -det * c, det * a, + } +} + +// Solve A * x = b, where b is a column vector. This is more efficient +// than computing the inverse in one-shot cases. +Solve22 :: proc "c" (A: Mat22, b: Vec2) -> Vec2 { + a11 := A[0, 0] + a12 := A[0, 1] + a21 := A[1, 0] + a22 := A[1, 1] + det := a11 * a22 - a12 * a21 + if det != 0.0 { + det = 1 / det + } + return {det * (a22 * b.x - a12 * b.y), det * (a11 * b.y - a21 * b.x)} +} + +// Does a fully contain b +AABB_Contains :: proc "c" (a, b: AABB) -> bool { + (a.lowerBound.x <= b.lowerBound.x) or_return + (a.lowerBound.y <= b.lowerBound.y) or_return + (b.upperBound.x <= a.upperBound.x) or_return + (b.upperBound.y <= a.upperBound.y) or_return + return true +} + +// Get the center of the AABB. +AABB_Center :: proc "c" (a: AABB) -> Vec2 { + return {0.5 * (a.lowerBound.x + a.upperBound.x), 0.5 * (a.lowerBound.y + a.upperBound.y)} +} + +// Get the extents of the AABB (half-widths). +AABB_Extents :: proc "c" (a: AABB) -> Vec2 { + return {0.5 * (a.upperBound.x - a.lowerBound.x), 0.5 * (a.upperBound.y - a.lowerBound.y)} +} + +// Union of two AABBs +AABB_Union :: proc "c" (a, b: AABB) -> (c: AABB) { + c.lowerBound.x = MinFloat(a.lowerBound.x, b.lowerBound.x) + c.lowerBound.y = MinFloat(a.lowerBound.y, b.lowerBound.y) + c.upperBound.x = MaxFloat(a.upperBound.x, b.upperBound.x) + c.upperBound.y = MaxFloat(a.upperBound.y, b.upperBound.y) + return +} + +Float_IsValid :: proc "c" (a: f32) -> bool { + math.is_nan(a) or_return + math.is_inf(a) or_return + return true +} + +Vec2_IsValid :: proc "c" (v: Vec2) -> bool { + (math.is_nan(v.x) || math.is_nan(v.y)) or_return + (math.is_inf(v.x) || math.is_inf(v.y)) or_return + return true +} + +Rot_IsValid :: proc "c" (q: Rot) -> bool { + (math.is_nan(q.s) || math.is_nan(q.c)) or_return + (math.is_inf(q.s) || math.is_inf(q.c)) or_return + return IsNormalized(q) +} + +Normalize :: proc "c" (v: Vec2) -> Vec2 { + length := Length(v) + if length < 1e-23 { + return Vec2_zero + } + invLength := 1 / length + return invLength * v +} + +NormalizeChecked :: proc "odin" (v: Vec2) -> Vec2 { + length := Length(v) + if length < 1e-23 { + panic("zero-length Vec2") + } + invLength := 1 / length + return invLength * v +} + +GetLengthAndNormalize :: proc "c" (v: Vec2) -> (length: f32, vn: Vec2) { + length = Length(v) + if length < 1e-23 { + return + } + invLength := 1 / length + vn = invLength * v + return +} diff --git a/vendor/box2d/types.odin b/vendor/box2d/types.odin new file mode 100644 index 000000000..23f35e847 --- /dev/null +++ b/vendor/box2d/types.odin @@ -0,0 +1,1231 @@ +package vendor_box2d + +import "core:c" + +// Task interface +// This is prototype for a Box2D task. Your task system is expected to invoke the Box2D task with these arguments. +// The task spans a range of the parallel-for: [startIndex, endIndex) +// The worker index must correctly identify each worker in the user thread pool, expected in [0, workerCount). +// A worker must only exist on only one thread at a time and is analogous to the thread index. +// The task context is the context pointer sent from Box2D when it is enqueued. +// The startIndex and endIndex are expected in the range [0, itemCount) where itemCount is the argument to b2EnqueueTaskCallback +// below. Box2D expects startIndex < endIndex and will execute a loop like this: +// +// @code{.odin} +// for i in startIndex ..< endIndex { +// DoWork() +// } +// @endcode +// @ingroup world +TaskCallback :: #type proc "c" (startIndex, endIndex: i32, workerIndex: u32, taskContext: rawptr) + + +// These functions can be provided to Box2D to invoke a task system. These are designed to work well with enkiTS. +// Returns a pointer to the user's task object. May be nullptr. A nullptr indicates to Box2D that the work was executed +// serially within the callback and there is no need to call b2FinishTaskCallback. +// The itemCount is the number of Box2D work items that are to be partitioned among workers by the user's task system. +// This is essentially a parallel-for. The minRange parameter is a suggestion of the minimum number of items to assign +// per worker to reduce overhead. For example, suppose the task is small and that itemCount is 16. A minRange of 8 suggests +// that your task system should split the work items among just two workers, even if you have more available. +// In general the range [startIndex, endIndex) send to TaskCallback should obey: +// endIndex - startIndex >= minRange +// The exception of course is when itemCount < minRange. +// @ingroup world +EnqueueTaskCallback :: #type proc "c" (task: TaskCallback, itemCount: i32, minRange: i32, taskContext: rawptr, userContext: rawptr) -> rawptr + +// Finishes a user task object that wraps a Box2D task. +// @ingroup world +FinishTaskCallback :: #type proc "c" (userTask: rawptr, userContext: rawptr) + +// Result from b2World_RayCastClosest +// @ingroup world +RayResult :: struct { + shapeId: ShapeId, + point: Vec2, + normal: Vec2, + fraction: f32, + hit: bool, +} + +// World definition used to create a simulation world. +// Must be initialized using b2DefaultWorldDef(). +// @ingroup world +WorldDef :: struct { + // Gravity vector. Box2D has no up-vector defined. + gravity: Vec2, + + // Restitution velocity threshold, usually in m/s. Collisions above this + // speed have restitution applied (will bounce). + restitutionThreshold: f32, + + // This parameter controls how fast overlap is resolved and has units of meters per second + contactPushoutVelocity: f32, + + // Threshold velocity for hit events. Usually meters per second. + hitEventThreshold: f32, + + // Contact stiffness. Cycles per second. + contactHertz: f32, + + // Contact bounciness. Non-dimensional. + contactDampingRatio: f32, + + // Joint stiffness. Cycles per second. + jointHertz: f32, + + // Joint bounciness. Non-dimensional. + jointDampingRatio: f32, + + // Can bodies go to sleep to improve performance + enableSleep: bool, + + // Enable continuous collision + enableContinous: bool, + + // Number of workers to use with the provided task system. Box2D 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. + workerCount: i32, + + // Function to spawn tasks + enqueueTask: EnqueueTaskCallback, + + // Function to finish a task + finishTask: FinishTaskCallback, + + // User context that is provided to enqueueTask and finishTask + userTaskContext: rawptr, + + // Used internally to detect a valid definition. DO NOT SET. + internalValue: i32, +} + + + + +// 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, + + // number of body types +} + +bodyTypeCount :: len(BodyType) + +// 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 b2DefaultBodyDef(). +// @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: Vec2, + + // The initial world rotation of the body. Use b2MakeRot() if you have an angle. + rotation: Rot, + + // The initial linear velocity of the body's origin. Typically in meters per second. + linearVelocity: Vec2, + + // The initial angular velocity of the body. Radians per second. + angularVelocity: f32, + + // Linear damping is use 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 f32ing. + linearDamping: f32, + + // Angular damping is use 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 use slow down rotating bodies. + angularDamping: f32, + + // Scale the gravity applied to this body. Non-dimensional. + gravityScale: f32, + + // Sleep velocity threshold, default is 0.05 meter per second + sleepThreshold: f32, + + // Use this to store application specific body data. + userData: rawptr, + + // Set this flag to false if this body should never fall asleep. + enableSleep: bool, + + // Is this body initially awake or sleeping? + isAwake: bool, + + // Should this body be prevented from rotating? Useful for characters. + fixedRotation: bool, + + // Treat this body as 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 may interfere with joint constraints. + isBullet: bool, + + // Used to disable a body. A disabled body does not move or collide. + isEnabled: bool, + + // Automatically compute mass and related properties on this body from shapes. + // Triggers whenever a shape is add/removed/changed. Default is true. + automaticMass: bool, + + // Used internally to detect a valid definition. DO NOT SET. + internalValue: i32, +} + + +// This is used to filter collision on shapes. It affects shape-vs-shape collision +// and shape-versus-query collision (such as b2World_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{.cpp} + // enum MyCategories + // { + // Static = 0x00000001, + // Dynamic = 0x00000002, + // Debris = 0x00000004, + // Player = 0x00000008, + // // etc + // }; + // @endcode + categoryBits: u32, + + // 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 + maskBits: u32, + + // 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: i32, +} + + +// 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. +// @ingroup shape +QueryFilter :: struct { + // The collision category bits of this query. Normally you would just set one bit. + categoryBits: u32, + + // The collision mask bits. This states the shape categories that this + // query would accept for collision. + maskBits: u32, +} + + +// Shape type +// @ingroup shape +ShapeType :: enum c.int { + // A circle with an offset + circleShape, + + // A capsule is an extruded circle + capsuleShape, + + // A line segment + segmentShape, + + // A convex polygon + polygonShape, + + // A smooth segment owned by a chain shape + smoothSegmentShape, +} + +// The number of shape types +shapeTypeCount :: len(ShapeType) + +// Used to create a shape. +// This is a temporary object used to bundle shape creation parameters. You may use +// the same shape definition to create multiple shapes. +// Must be initialized using b2DefaultShapeDef(). +// @ingroup shape +ShapeDef :: struct { + // Use this to store application specific shape data. + userData: rawptr, + + // The Coulomb (dry) friction coefficient, usually in the range [0,1]. + friction: f32, + + // The restitution (bounce) usually in the range [0,1]. + restitution: f32, + + // The density, usually in kg/m^2. + density: f32, + + // Collision filtering data. + filter: Filter, + + // Custom debug draw color. + customColor: u32, + + // A sensor shape generates overlap events but never generates a collision response. + isSensor: bool, + + // Enable sensor events for this shape. Only applies to kinematic and dynamic bodies. Ignored for sensors. + enableSensorEvents: bool, + + // Enable contact events for this shape. Only applies to kinematic and dynamic bodies. Ignored for sensors. + enableContactEvents: bool, + + // Enable hit events for this shape. Only applies to kinematic and dynamic bodies. Ignored for sensors. + 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 threading. Ignored for sensors. + enablePreSolveEvents: bool, + + // Normally shapes on static bodies don't invoke contact creation when they are added to the world. This overrides + // that behavior and causes contact creation. This significantly slows down static body creation which can be important + // when there are many static shapes. + forceContactCreation: bool, + + // Used internally to detect a valid definition. DO NOT SET. + internalValue: i32, +} + + +// Used to create a chain of edges. This is designed to eliminate ghost collisions with some limitations. +// - chains are one-sided +// - chains have no mass and should be used on static bodies +// - chains have a counter-clockwise winding order +// - chains are either a loop or open +// - a chain must have at least 4 points +// - the distance between any two points must be greater than b2_linearSlop +// - a chain shape should not self intersect (this is not validated) +// - an open chain shape has NO COLLISION on the first and final edge +// - you may overlap two open chains on their first three and/or last three points to get smooth collision +// - a chain shape creates multiple smooth edges shapes on the body +// https://en.wikipedia.org/wiki/Polygonal_chain +// Must be initialized using b2DefaultChainDef(). +// @warning Do not use chain shapes unless you understand the limitations. This is an advanced feature. +// @ingroup shape +ChainDef :: struct { + // Use this to store application specific shape data. + userData: rawptr, + + // An array of at least 4 points. These are cloned and may be temporary. + points: [^]Vec2 `fmt:"v,count"`, + + // The point count, must be 4 or more. + count: i32, + + // The friction coefficient, usually in the range [0,1]. + friction: f32, + + // The restitution (elasticity) usually in the range [0,1]. + restitution: f32, + + // Contact filtering data. + filter: Filter, + + // Indicates a closed chain formed by connecting the first and last points + isLoop: bool, + + // Used internally to detect a valid definition. DO NOT SET. + internalValue: i32, +} + + +//! @cond +// Profiling data. Times are in milliseconds. +Profile :: struct { + step: f32, + pairs: f32, + collide: f32, + solve: f32, + buildIslands: f32, + solveConstraints: f32, + prepareTasks: f32, + solverTasks: f32, + prepareConstraints: f32, + integrateVelocities: f32, + warmStart: f32, + solveVelocities: f32, + integratePositions: f32, + relaxVelocities: f32, + applyRestitution: f32, + storeImpulses: f32, + finalizeBodies: f32, + splitIslands: f32, + sleepIslands: f32, + hitEvents: f32, + broadphase: f32, + continuous: f32, +} + +// Counters that give details of the simulation size. +Counters :: struct { + staticBodyCount: i32, + bodyCount: i32, + shapeCount: i32, + contactCount: i32, + jointCount: i32, + islandCount: i32, + stackUsed: i32, + staticTreeHeight: i32, + treeHeight: i32, + byteCount: i32, + taskCount: i32, + colorCounts: [12]i32, +} +//! @endcond + +// Joint type enumeration +// +// This is useful because all joint types use b2JointId and sometimes you +// want to get the type of a joint. +// @ingroup joint +JointType :: enum c.int { + distanceJoint, + motorJoint, + mouseJoint, + prismaticJoint, + revoluteJoint, + weldJoint, + wheelJoint, +} + +// Distance joint definition +// +// This requires defining an anchor point on both +// bodies and the non-zero distance of the distance joint. The definition uses +// local anchor points so that the initial configuration can violate the +// constraint slightly. This helps when saving and loading a game. +// @ingroup distance_joint +DistanceJointDef :: struct { + // The first attached body + bodyIdA: BodyId, + + // The second attached body + bodyIdB: BodyId, + + // The local anchor point relative to bodyA's origin + localAnchorA: Vec2, + + // The local anchor point relative to bodyB's origin + localAnchorB: Vec2, + + // 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 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, + + // Set this flag to true if the attached bodies should collide + collideConnected: bool, + + // User data pointer + userData: rawptr, + + // Used internally to detect a valid definition. DO NOT SET. + internalValue: i32, +} + + +// A motor joint is used to control the relative motion between two bodies +// +// A typical usage is to control the movement of a dynamic body with respect to the ground. +// @ingroup motor_joint +MotorJointDef :: struct { + // The first attached body + bodyIdA: BodyId, + + // The second attached body + bodyIdB: BodyId, + + // Position of bodyB minus the position of bodyA, in bodyA's frame + linearOffset: Vec2, + + // The bodyB angle minus bodyA angle in radians + angularOffset: f32, + + // The maximum motor force in newtons + maxForce: f32, + + // The maximum motor torque in newton-meters + maxTorque: f32, + + // Position correction factor in the range [0,1] + correctionFactor: f32, + + // Set this flag to true if the attached bodies should collide + collideConnected: bool, + + // User data pointer + userData: rawptr, + + // Used internally to detect a valid definition. DO NOT SET. + internalValue: i32, +} + + +// A mouse joint is used to make a point on a body track a specified world point. +// +// This a soft constraint and allows the constraint to stretch without +// applying huge forces. This also applies rotation constraint heuristic to improve control. +// @ingroup mouse_joint +MouseJointDef :: struct { + // The first attached body. + bodyIdA: BodyId, + + // The second attached body. + bodyIdB: BodyId, + + // The initial target point in world space + target: Vec2, + + // Stiffness in hertz + hertz: f32, + + // Damping ratio, non-dimensional + dampingRatio: f32, + + // Maximum force, typically in newtons + maxForce: f32, + + // Set this flag to true if the attached bodies should collide. + collideConnected: bool, + + // User data pointer + userData: rawptr, + + // Used internally to detect a valid definition. DO NOT SET. + internalValue: i32, +} + + +// Prismatic joint definition +// +// This requires defining a line of motion using an axis and an anchor point. +// The definition uses local anchor points and a local axis so that the initial +// configuration can violate the constraint slightly. The joint translation is zero +// when the local anchor points coincide in world space. +// @ingroup prismatic_joint +PrismaticJointDef :: struct { + // The first attached body + bodyIdA: BodyId, + + // The second attached body + bodyIdB: BodyId, + + // The local anchor point relative to bodyA's origin + localAnchorA: Vec2, + + // The local anchor point relative to bodyB's origin + localAnchorB: Vec2, + + // The local translation unit axis in bodyA + localAxisA: Vec2, + + // The constrained angle between the bodies: bodyB_angle - bodyA_angle + referenceAngle: f32, + + // 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, + + // 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, + + // Set this flag to true if the attached bodies should collide + collideConnected: bool, + + // User data pointer + userData: rawptr, + + // Used internally to detect a valid definition. DO NOT SET. + internalValue: i32, +} + + +// Revolute joint definition +// +// This requires defining an anchor point where the bodies are joined. +// The definition uses local anchor points so that the +// initial configuration can violate the constraint slightly. You also need to +// specify the initial relative angle for joint limits. This helps when saving +// and loading a game. +// The local anchor points 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 revolute_joint +RevoluteJointDef :: struct { + // The first attached body + bodyIdA: BodyId, + + // The second attached body + bodyIdB: BodyId, + + // The local anchor point relative to bodyA's origin + localAnchorA: Vec2, + + // The local anchor point relative to bodyB's origin + localAnchorB: Vec2, + + // The bodyB angle minus bodyA angle in the reference state (radians). + // This defines the zero angle for the joint limit. + referenceAngle: 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 + lowerAngle: f32, + + // The upper angle for the joint limit in 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, + + // Scale the debug draw + drawSize: f32, + + // Set this flag to true if the attached bodies should collide + collideConnected: bool, + + // User data pointer + userData: rawptr, + + // Used internally to detect a valid definition. DO NOT SET. + internalValue: i32, +} + + +// Weld joint definition +// +// A weld joint connect to bodies together rigidly. This constraint provides springs to mimic +// soft-body simulation. +// @note The approximate solver in Box2D cannot hold many bodies together rigidly +// @ingroup weld_joint +WeldJointDef :: struct { + // The first attached body + bodyIdA: BodyId, + + // The second attached body + bodyIdB: BodyId, + + // The local anchor point relative to bodyA's origin + localAnchorA: Vec2, + + // The local anchor point relative to bodyB's origin + localAnchorB: Vec2, + + // The bodyB angle minus bodyA angle in the reference state (radians) + referenceAngle: f32, + + // 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, + + // Set this flag to true if the attached bodies should collide + collideConnected: bool, + + // User data pointer + userData: rawptr, + + // Used internally to detect a valid definition. DO NOT SET. + internalValue: i32, +} + + +// Wheel joint definition +// +// This requires defining a line of motion using an axis and an anchor point. +// The definition uses local anchor points and a local axis so that the initial +// configuration can violate the constraint slightly. The joint translation is zero +// when the local anchor points coincide in world space. +// @ingroup wheel_joint +WheelJointDef :: struct { + // The first attached body + bodyIdA: BodyId, + + // The second attached body + bodyIdB: BodyId, + + // The local anchor point relative to bodyA's origin + localAnchorA: Vec2, + + // The local anchor point relative to bodyB's origin + localAnchorB: Vec2, + + // The local translation unit axis in bodyA + localAxisA: Vec2, + + // Enable a linear spring along the local axis + enableSpring: bool, + + // Spring stiffness in Hertz + hertz: f32, + + // Spring damping ratio, non-dimensional + dampingRatio: f32, + + // Enable/disable the joint linear limit + enableLimit: bool, + + // The lower translation limit + lowerTranslation: f32, + + // The upper translation limit + upperTranslation: f32, + + // Enable/disable the joint rotational motor + enableMotor: bool, + + // The maximum motor torque, typically in newton-meters + maxMotorTorque: f32, + + // The desired motor speed in radians per second + motorSpeed: f32, + + // Set this flag to true if the attached bodies should collide + collideConnected: bool, + + // User data pointer + userData: rawptr, + + // Used internally to detect a valid definition. DO NOT SET. + internalValue: i32, +} + + +/** + * @defgroup events 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 Box2D 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 dynamic shape that began touching the sensor shape + visitorShapeId: ShapeId, +} + +// An end touch event is generated when a shape stops overlapping a sensor shape. +SensorEndTouchEvent :: struct { + // The id of the sensor shape + sensorShapeId: ShapeId, + + // The id of the dynamic shape that stopped touching the sensor shape + visitorShapeId: ShapeId, +} + +// Sensor events are buffered in the Box2D 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: i32, + + // The number of end touch events + endCount: i32, +} + +// 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, +} + +// An end touch event is generated when two shapes stop touching. +ContactEndTouchEvent :: struct { + // Id of the first shape + shapeIdA: ShapeId, + + // Id of the second shape + shapeIdB: ShapeId, +} + +// A hit touch event is generated when two shapes collide with a speed faster than the hit speed threshold. +ContactHitEvent :: struct { + // Id of the first shape + shapeIdA: ShapeId, + + // Id of the second shape + shapeIdB: ShapeId, + + // Point where the shapes hit + point: Vec2, + + // Normal vector pointing from shape A to shape B + normal: Vec2, + + // The speed the shapes are approaching. Always positive. Typically in meters per second. + approachSpeed: f32, +} + +// Contact events are buffered in the Box2D 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: i32, + + // Number of end touch events + endCount: i32, + + // Number of hit events + hitCount: i32, +} + +// 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 b2Body_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 { + transform: Transform, + bodyId: BodyId, + userData: rawptr, + fellAsleep: bool, +} + +// Body events are buffered in the Box2D world and are available +// as event arrays after the time step is complete. +// Note: this date becomes invalid if bodies are destroyed +BodyEvents :: struct { + // Array of move events + moveEvents: [^]BodyMoveEvent `fmt:"v,moveCount"`, + + // Number of move events + moveCount: i32, + +} + +// The contact data for two shapes. By convention the manifold normal points +// from shape A to shape B. +// @see b2Shape_GetContactData() and b2Body_GetContactData() +ContactData :: struct { + shapeIdA: ShapeId, + shapeIdB: ShapeId, + manifold: Manifold, +} + +/**@}*/ + +// 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 b2ShapeDef. +// 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 :: #type proc "c" (shapeIdA, 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 +// contact before it goes to the solver. If you are careful, you can modify the +// contact manifold (e.g. modify the normal). +// Notes: +// - this function must be thread-safe +// - this is only called if the shape has enabled pre-solve events +// - this is called only for awake dynamic bodies +// - this is not called for sensors +// - the supplied manifold has impulse values from the previous step +// Return false if you want to disable the contact this step +// @warning Do not attempt to modify the world inside this callback +// @ingroup world +PreSolveFcn :: #type proc "c" (shapeIdA, shapeIdB: ShapeId, manifold: ^Manifold, ctx: rawptr) -> bool + +// Prototype callback for overlap queries. +// Called for each shape found in the query. +// @see b2World_QueryAABB +// @return false to terminate the query. +// @ingroup world +OverlapResultFcn :: #type 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 f32: +// 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 context the user context +// @return -1 to filter, 0 to terminate, fraction to clip the ray for closest hit, 1 to continue +// @see b2World_CastRay +// @ingroup world +CastResultFcn :: #type proc "c" (shapeId: ShapeId, point: Vec2, normal: Vec2, fraction: f32, ctx: rawptr) -> f32 + +// These colors are used for debug draw. +// See https://www.rapidtables.com/web/color/index.html +HexColor :: enum c.int { + 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 = 0xbebebe, + Gray1 = 0x1a1a1a, + Gray2 = 0x333333, + Gray3 = 0x4d4d4d, + Gray4 = 0x666666, + Gray5 = 0x7f7f7f, + Gray6 = 0x999999, + Gray7 = 0xb3b3b3, + Gray8 = 0xcccccc, + Gray9 = 0xe5e5e5, + Green = 0x00ff00, + 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, + LightGoldenrod = 0xeedd82, + LightGoldenrodYellow = 0xfafad2, + LightGray = 0xd3d3d3, + LightGreen = 0x90ee90, + LightPink = 0xffb6c1, + LightSalmon = 0xffa07a, + LightSeaGreen = 0x20b2aa, + LightSkyBlue = 0x87cefa, + LightSlateBlue = 0x8470ff, + LightSlateGray = 0x778899, + LightSteelBlue = 0xb0c4de, + LightYellow = 0xffffe0, + Lime = 0x00ff00, + LimeGreen = 0x32cd32, + Linen = 0xfaf0e6, + Magenta = 0xff00ff, + Maroon = 0xb03060, + 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, + NavyBlue = 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 = 0xa020f0, + 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, + VioletRed = 0xd02090, + Wheat = 0xf5deb3, + White = 0xffffff, + WhiteSmoke = 0xf5f5f5, + Yellow = 0xffff00, + YellowGreen = 0x9acd32, + Box2DRed = 0xdc3132, + Box2DBlue = 0x30aebf, + Box2DGreen = 0x8cc924, + Box2DYellow = 0xffee8c, +} + +// This struct holds callbacks you can implement to draw a Box2D world. +// @ingroup world +DebugDraw :: struct { + // Draw a closed polygon provided in CCW order. + DrawPolygon: proc "c" (vertices: [^]Vec2, vertexCount: c.int, color: HexColor, ctx: rawptr), + + // Draw a solid closed polygon provided in CCW order. + DrawSolidPolygon: proc "c" (transform: Transform, vertices: [^]Vec2, vertexCount: c.int, radius: f32, colr: HexColor, ctx: rawptr ), + + // Draw a circle. + DrawCircle: proc "c" (center: Vec2, radius: f32, color: HexColor, ctx: rawptr), + + // Draw a solid circle. + DrawSolidCircle: proc "c" (transform: Transform, radius: f32, color: HexColor, ctx: rawptr), + + // Draw a capsule. + DrawCapsule: proc "c" (p1, p2: Vec2, radius: f32, color: HexColor, ctx: rawptr), + + // Draw a solid capsule. + DrawSolidCapsule: proc "c" (p1, p2: Vec2, radius: f32, color: HexColor, ctx: rawptr), + + // Draw a line segment. + DrawSegment: proc "c" (p1, p2: Vec2, color: HexColor, ctx: rawptr), + + // Draw a transform. Choose your own length scale. + DrawTransform: proc "c" (transform: Transform, ctx: rawptr), + + // Draw a point. + DrawPoint: proc "c" (p: Vec2, size: f32, color: HexColor, ctx: rawptr), + + // Draw a string. + DrawString: proc "c" (p: Vec2, s: cstring, ctx: rawptr), + + // Bounds to use if restricting drawing to a rectangular region + drawingBounds: AABB, + + // Option to restrict drawing to a rectangular region. May suffer from unstable depth sorting. + useDrawingBounds: bool, + + // 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 + drawAABBs: bool, + + // Option to draw the mass and center of mass of dynamic bodies + drawMass: bool, + + // Option to draw contact points + drawContacts: bool, + + // Option to visualize the graph coloring used for contacts and joints + drawGraphColors: bool, + + // Option to draw contact normals + drawContactNormals: bool, + + // Option to draw contact normal impulses + drawContactImpulses: bool, + + // Option to draw contact friction impulses + drawFrictionImpulses: bool, + + // User context that is passed as an argument to drawing callback functions + userContext: rawptr, +} \ No newline at end of file From 40361f877e79dd784f0887e8e8037780cbc19a56 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 13 Aug 2024 16:34:31 +0100 Subject: [PATCH 02/12] Add libraries for windows --- vendor/box2d/box2d.odin | 300 +++++++++++++++++- vendor/box2d/collision.odin | 284 ----------------- vendor/box2d/lib/box2d_windows_amd64_avx2.lib | Bin 0 -> 731030 bytes vendor/box2d/lib/box2d_windows_amd64_sse2.lib | Bin 0 -> 745478 bytes 4 files changed, 298 insertions(+), 286 deletions(-) create mode 100644 vendor/box2d/lib/box2d_windows_amd64_avx2.lib create mode 100644 vendor/box2d/lib/box2d_windows_amd64_sse2.lib diff --git a/vendor/box2d/box2d.odin b/vendor/box2d/box2d.odin index e7d2c1a7d..1f65a07e3 100644 --- a/vendor/box2d/box2d.odin +++ b/vendor/box2d/box2d.odin @@ -1,9 +1,19 @@ package vendor_box2d -foreign import lib { - "box2d.lib", // dummy +when ODIN_OS == .Windows { + @(private) VECTOR_EXT :: "avx2" when #config(VENDOR_BOX2D_ENABLE_AVX2, false) else "sse2" + @(private) LIB_PATH :: "lib/box2d_windows_amd64_" + VECTOR_EXT + ".lib" + + foreign import lib { + LIB_PATH, + } +} else { + foreign import lib { + "box2d", + } } + import "core:c" @@ -136,6 +146,292 @@ foreign lib { +@(link_prefix="b2", default_calling_convention="c") +foreign lib { + // Validate ray cast input data (NaN, etc) + IsValidRay :: proc(#by_ptr input: RayCastInput) -> bool --- + + // Make a convex polygon from a convex hull. This will assert if the hull is not valid. + // @warning Do not manually fill in the hull data, it must come directly from b2ComputeHull + MakePolygon :: proc(#by_ptr hull: Hull, radius: f32) -> Polygon --- + + // Make an offset convex polygon from a convex hull. This will assert if the hull is not valid. + // @warning Do not manually fill in the hull data, it must come directly from b2ComputeHull + MakeOffsetPolygon :: proc(#by_ptr hull: Hull, radius: f32, transform: Transform) -> Polygon --- + + // Make a square polygon, bypassing the need for a convex hull. + MakeSquare :: proc(h: f32) -> Polygon --- + + // Make a box (rectangle) polygon, bypassing the need for a convex hull. + MakeBox :: proc(hx, hy: f32) -> Polygon --- + + // Make a rounded box, bypassing the need for a convex hull. + MakeRoundedBox :: proc(hx, hy: f32, radius: f32) -> Polygon --- + + // Make an offset box, bypassing the need for a convex hull. + MakeOffsetBox :: proc(hx, hy: f32, center: Vec2, angle: f32) -> Polygon --- + + // Transform a polygon. This is useful for transferring a shape from one body to another. + TransformPolygon :: proc(transform: Transform, #by_ptr polygon: Polygon) -> Polygon --- + + // Compute mass properties of a circle + ComputeCircleMass :: proc(#by_ptr shape: Circle, density: f32) -> MassData --- + + // Compute mass properties of a capsule + ComputeCapsuleMass :: proc(#by_ptr shape: Capsule, density: f32) -> MassData --- + + // Compute mass properties of a polygon + ComputePolygonMass :: proc(#by_ptr shape: Polygon, density: f32) -> MassData --- + + // Compute the bounding box of a transformed circle + ComputeCircleAABB :: proc(#by_ptr shape: Circle, 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 polygon + ComputePolygonAABB :: proc(#by_ptr shape: Polygon, transform: Transform) -> AABB --- + + // Compute the bounding box of a transformed line segment + ComputeSegmentAABB :: proc(#by_ptr shape: Segment, transform: Transform) -> AABB --- + + // Test a point for overlap with a circle in local space + PointInCircle :: proc(point: Vec2, #by_ptr shape: Circle) -> bool --- + + // Test a point for overlap with a capsule in local space + PointInCapsule :: proc(point: Vec2, #by_ptr shape: Capsule) -> bool --- + + // Test a point for overlap with a convex polygon in local space + PointInPolygon :: proc(point: Vec2, #by_ptr shape: Polygon) -> bool --- + + // Ray cast versus circle in shape local space. Initial overlap is treated as a miss. + RayCastCircle :: proc(#by_ptr input: RayCastInput, #by_ptr shape: Circle) -> CastOutput --- + + // Ray cast versus capsule in shape local space. Initial overlap is treated as a miss. + RayCastCapsule :: proc(#by_ptr input: RayCastInput, #by_ptr shape: Capsule) -> CastOutput --- + + // Ray cast versus segment in shape local space. Optionally treat the segment as one-sided with hits from + // the left side being treated as a miss. + RayCastSegment :: proc(#by_ptr input: RayCastInput, #by_ptr shape: Segment, oneSided: bool) -> CastOutput --- + + // Ray cast versus polygon in shape local space. Initial overlap is treated as a miss. + RayCastPolygon :: proc(#by_ptr input: RayCastInput, #by_ptr shape: Polygon) -> CastOutput --- + + // Shape cast versus a circle. Initial overlap is treated as a miss. + ShapeCastCircle :: proc(#by_ptr input: ShapeCastInput, #by_ptr shape: Circle) -> CastOutput --- + + // Shape cast versus a capsule. Initial overlap is treated as a miss. + ShapeCastCapsule :: proc(#by_ptr input: ShapeCastInput, #by_ptr shape: Capsule) -> CastOutput --- + + // Shape cast versus a line segment. Initial overlap is treated as a miss. + ShapeCastSegment :: proc(#by_ptr input: ShapeCastInput, #by_ptr shape: Segment) -> CastOutput --- + + // Shape cast versus a convex polygon. Initial overlap is treated as a miss. + ShapeCastPolygon :: proc(#by_ptr input: ShapeCastInput, #by_ptr shape: Polygon) -> CastOutput --- +} + + +// Compute the convex hull of a set of points. Returns an empty hull if it fails. +// Some failure cases: +// - all points very close together +// - all points on a line +// - less than 3 points +// - more than maxPolygonVertices points +// This welds close points and removes collinear points. +// @warning Do not modify a hull once it has been computed +ComputeHull :: proc "c" (points: []Vec2) -> Hull { + foreign lib { + b2ComputeHull :: proc "c" (points: [^]Vec2, count: i32) -> Hull --- + } + return b2ComputeHull(raw_data(points), i32(len(points))) +} + + +@(link_prefix="b2", default_calling_convention="c") +foreign lib { + // This determines if a hull is valid. Checks for: + // - convexity + // - collinear points + // This is expensive and should not be called at runtime. + ValidateHull :: proc(#by_ptr hull: Hull) -> bool --- +} + +@(link_prefix="b2", default_calling_convention="c") +foreign lib { + // Compute the distance between two line segments, clamping at the end points if needed. + SegmentDistance :: proc(p1, q1: Vec2, p2, q2: Vec2) -> SegmentDistanceResult --- +} + +// Compute the closest points between two shapes represented as point clouds. +// DistanceCache cache is input/output. On the first call set DistanceCache.count to zero. +// 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 "c" (cache: ^DistanceCache, #by_ptr input: DistanceInput, simplexes: []Simplex) -> DistanceOutput { + foreign lib { + b2ShapeDistance :: proc "c" (cache: ^DistanceCache, #by_ptr input: DistanceInput, simplexes: [^]Simplex, simplexCapacity: c.int) -> DistanceOutput --- + } + return b2ShapeDistance(cache, input, raw_data(simplexes), i32(len(simplexes))) +} + + +// Make a proxy for use in GJK and related functions. +MakeProxy :: proc "c" (vertices: []Vec2, radius: f32) -> DistanceProxy { + foreign lib { + b2MakeProxy :: proc "c" (vertices: [^]Vec2, count: i32, radius: f32) -> DistanceProxy --- + } + return b2MakeProxy(raw_data(vertices), i32(len(vertices)), radius) +} + + +@(link_prefix="b2", default_calling_convention="c") +foreign lib { + // Perform a linear shape cast of shape B moving and shape A fixed. Determines the hit point, normal, and translation fraction. + 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 --- +} + +@(link_prefix="b2", default_calling_convention="c") +foreign lib { + // Compute the contact manifold between two circles + CollideCircles :: proc(#by_ptr circleA: Circle, xfA: Transform, #by_ptr circleB: Circle, xfB: Transform) -> Manifold --- + + // Compute the contact manifold between a capsule and circle + CollideCapsuleAndCircle :: proc(#by_ptr capsuleA: Capsule, xfA: Transform, #by_ptr circleB: Circle, xfB: Transform) -> Manifold --- + + // Compute the contact manifold between an segment and a circle + CollideSegmentAndCircle :: proc(#by_ptr segmentA: Segment, xfA: Transform, #by_ptr circleB: Circle, xfB: Transform) -> Manifold --- + + // Compute the contact manifold between a polygon and a circle + CollidePolygonAndCircle :: proc(#by_ptr polygonA: Polygon, xfA: Transform, #by_ptr circleB: Circle, xfB: Transform) -> Manifold --- + + // Compute the contact manifold between a capsule and circle + CollideCapsules :: proc(#by_ptr capsuleA: Capsule, xfA: Transform, #by_ptr capsuleB: Capsule, xfB: Transform) -> Manifold --- + + // Compute the contact manifold between an segment and a capsule + CollideSegmentAndCapsule :: proc(#by_ptr segmentA: Segment, xfA: Transform, #by_ptr capsuleB: Capsule, xfB: Transform) -> Manifold --- + + // Compute the contact manifold between a polygon and capsule + CollidePolygonAndCapsule :: proc(#by_ptr polygonA: Polygon, xfA: Transform, #by_ptr capsuleB: Capsule, xfB: Transform) -> Manifold --- + + // Compute the contact manifold between two polygons + CollidePolygons :: proc(#by_ptr polygonA: Polygon, xfA: Transform, #by_ptr polygonB: Polygon, xfB: Transform) -> Manifold --- + + // Compute the contact manifold between an segment and a polygon + CollideSegmentAndPolygon :: proc(#by_ptr segmentA: Segment, xfA: Transform, #by_ptr polygonB: Polygon, xfB: Transform) -> Manifold --- + + // Compute the contact manifold between a smooth segment and a circle + CollideSmoothSegmentAndCircle :: proc(#by_ptr smoothSegmentA: SmoothSegment, xfA: Transform, #by_ptr circleB: Circle, xfB: Transform) -> Manifold --- + + // Compute the contact manifold between an segment and a capsule + CollideSmoothSegmentAndCapsule :: proc(#by_ptr smoothSegmentA: SmoothSegment, xfA: Transform, #by_ptr capsuleB: Capsule, xfB: Transform, cache: ^DistanceCache) -> Manifold --- + + // Compute the contact manifold between a smooth segment and a rounded polygon + CollideSmoothSegmentAndPolygon :: proc(#by_ptr smoothSegmentA: SmoothSegment, xfA: Transform, #by_ptr polygonB: Polygon, xfB: Transform, cache: ^DistanceCache) -> Manifold --- +} + + + +@(link_prefix="b2", default_calling_convention="c") +foreign lib { + // Constructing the tree initializes the node pool. + DynamicTree_Create :: proc() -> 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: u32, userData: i32) -> i32 --- + + // Destroy a proxy. This asserts if the id is invalid. + DynamicTree_DestroyProxy :: proc(tree: ^DynamicTree, proxyId: i32) --- + + // Move a proxy to a new AABB by removing and reinserting into the tree. + DynamicTree_MoveProxy :: proc(tree: ^DynamicTree, proxyId: i32, aabb: AABB) --- + + // Enlarge a proxy and enlarge ancestors as necessary. + DynamicTree_EnlargeProxy :: proc(tree: ^DynamicTree, proxyId: i32, aabb: AABB) --- + + // Query an AABB for overlapping proxies. The callback class + // is called for each proxy that overlaps the supplied AABB. + DynamicTree_Query :: proc(#by_ptr tree: DynamicTree, aabb: AABB, maskBits: u32, callback: TreeQueryCallbackFcn, ctx: rawptr) --- + + // Ray-cast against the proxies in the tree. This relies on the callback + // to perform a exact ray-cast in the case were the proxy contains a shape. + // The callback also performs the 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. + // @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 filter bits: `bool accept = (maskBits & node->categoryBits) != 0 ---` + // @param callback a callback class that is called for each proxy that is hit by the ray + // @param context user context that is passed to the callback + DynamicTree_RayCast :: proc(#by_ptr tree: DynamicTree, #by_ptr input: RayCastInput, maskBits: u32, callback: TreeRayCastCallbackFcn, ctx: rawptr) --- + + // Ray-cast against the proxies in the tree. This relies on the callback + // to perform a exact ray-cast in the case were the proxy contains a shape. + // The callback also performs the 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. + // @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 filter bits: `bool accept = (maskBits & node->categoryBits) != 0 ---` + // @param callback a callback class that is called for each proxy that is hit by the shape + // @param context user context that is passed to the callback + DynamicTree_ShapeCast :: proc(#by_ptr tree: DynamicTree, #by_ptr input: ShapeCastInput, maskBits: u32, callback: TreeShapeCastCallbackFcn, ctx: rawptr) --- + + // Validate this tree. For testing. + DynamicTree_Validate :: proc(#by_ptr tree: DynamicTree) --- + + // Compute the height of the binary tree in O(N) time. Should not be + // called often. + DynamicTree_GetHeight :: proc(#by_ptr tree: DynamicTree) -> c.int --- + + // Get the maximum balance of the tree. The balance is the difference in height of the two children of a node. + DynamicTree_GetMaxBalance :: 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 --- + + // Build an optimal tree. Very expensive. For testing. + DynamicTree_RebuildBottomUp :: proc(tree: ^DynamicTree) --- + + // 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 --- + + // Shift the world origin. Useful for large worlds. + // The shift formula is: position -= newOrigin + // @param tree the tree to shift + // @param newOrigin the new origin with respect to the old origin + DynamicTree_ShiftOrigin :: proc(tree: ^DynamicTree, newOrigin: Vec2) --- + + // Get the number of bytes used by this tree + DynamicTree_GetByteCount :: proc(#by_ptr tree: DynamicTree) -> c.int --- +} + +// Get proxy user data +// @return the proxy user data or 0 if the id is invalid +DynamicTree_GetUserData :: proc "contextless" (tree: DynamicTree, proxyId: i32) -> i32 { + return tree.nodes[proxyId].userData +} + +// Get the AABB of a proxy +DynamicTree_GetAABB :: proc "contextless" (tree: DynamicTree, proxyId: i32) -> AABB { + return tree.nodes[proxyId].aabb +} + + + @(link_prefix="b2", default_calling_convention="c") foreign lib { diff --git a/vendor/box2d/collision.odin b/vendor/box2d/collision.odin index f2e123ab6..3586f1fea 100644 --- a/vendor/box2d/collision.odin +++ b/vendor/box2d/collision.odin @@ -1,9 +1,5 @@ package vendor_box2d -foreign import lib { - "box2d.lib", // dummy -} - import "core:c" @@ -145,90 +141,6 @@ SmoothSegment :: struct { } -@(link_prefix="b2", default_calling_convention="c") -foreign lib { - // Validate ray cast input data (NaN, etc) - IsValidRay :: proc(#by_ptr input: RayCastInput) -> bool --- - - // Make a convex polygon from a convex hull. This will assert if the hull is not valid. - // @warning Do not manually fill in the hull data, it must come directly from b2ComputeHull - MakePolygon :: proc(#by_ptr hull: Hull, radius: f32) -> Polygon --- - - // Make an offset convex polygon from a convex hull. This will assert if the hull is not valid. - // @warning Do not manually fill in the hull data, it must come directly from b2ComputeHull - MakeOffsetPolygon :: proc(#by_ptr hull: Hull, radius: f32, transform: Transform) -> Polygon --- - - // Make a square polygon, bypassing the need for a convex hull. - MakeSquare :: proc(h: f32) -> Polygon --- - - // Make a box (rectangle) polygon, bypassing the need for a convex hull. - MakeBox :: proc(hx, hy: f32) -> Polygon --- - - // Make a rounded box, bypassing the need for a convex hull. - MakeRoundedBox :: proc(hx, hy: f32, radius: f32) -> Polygon --- - - // Make an offset box, bypassing the need for a convex hull. - MakeOffsetBox :: proc(hx, hy: f32, center: Vec2, angle: f32) -> Polygon --- - - // Transform a polygon. This is useful for transferring a shape from one body to another. - TransformPolygon :: proc(transform: Transform, #by_ptr polygon: Polygon) -> Polygon --- - - // Compute mass properties of a circle - ComputeCircleMass :: proc(#by_ptr shape: Circle, density: f32) -> MassData --- - - // Compute mass properties of a capsule - ComputeCapsuleMass :: proc(#by_ptr shape: Capsule, density: f32) -> MassData --- - - // Compute mass properties of a polygon - ComputePolygonMass :: proc(#by_ptr shape: Polygon, density: f32) -> MassData --- - - // Compute the bounding box of a transformed circle - ComputeCircleAABB :: proc(#by_ptr shape: Circle, 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 polygon - ComputePolygonAABB :: proc(#by_ptr shape: Polygon, transform: Transform) -> AABB --- - - // Compute the bounding box of a transformed line segment - ComputeSegmentAABB :: proc(#by_ptr shape: Segment, transform: Transform) -> AABB --- - - // Test a point for overlap with a circle in local space - PointInCircle :: proc(point: Vec2, #by_ptr shape: Circle) -> bool --- - - // Test a point for overlap with a capsule in local space - PointInCapsule :: proc(point: Vec2, #by_ptr shape: Capsule) -> bool --- - - // Test a point for overlap with a convex polygon in local space - PointInPolygon :: proc(point: Vec2, #by_ptr shape: Polygon) -> bool --- - - // Ray cast versus circle in shape local space. Initial overlap is treated as a miss. - RayCastCircle :: proc(#by_ptr input: RayCastInput, #by_ptr shape: Circle) -> CastOutput --- - - // Ray cast versus capsule in shape local space. Initial overlap is treated as a miss. - RayCastCapsule :: proc(#by_ptr input: RayCastInput, #by_ptr shape: Capsule) -> CastOutput --- - - // Ray cast versus segment in shape local space. Optionally treat the segment as one-sided with hits from - // the left side being treated as a miss. - RayCastSegment :: proc(#by_ptr input: RayCastInput, #by_ptr shape: Segment, oneSided: bool) -> CastOutput --- - - // Ray cast versus polygon in shape local space. Initial overlap is treated as a miss. - RayCastPolygon :: proc(#by_ptr input: RayCastInput, #by_ptr shape: Polygon) -> CastOutput --- - - // Shape cast versus a circle. Initial overlap is treated as a miss. - ShapeCastCircle :: proc(#by_ptr input: ShapeCastInput, #by_ptr shape: Circle) -> CastOutput --- - - // Shape cast versus a capsule. Initial overlap is treated as a miss. - ShapeCastCapsule :: proc(#by_ptr input: ShapeCastInput, #by_ptr shape: Capsule) -> CastOutput --- - - // Shape cast versus a line segment. Initial overlap is treated as a miss. - ShapeCastSegment :: proc(#by_ptr input: ShapeCastInput, #by_ptr shape: Segment) -> CastOutput --- - - // Shape cast versus a convex polygon. Initial overlap is treated as a miss. - ShapeCastPolygon :: proc(#by_ptr input: ShapeCastInput, #by_ptr shape: Polygon) -> CastOutput --- -} - // A convex hull. Used to create convex polygons. // @warning Do not modify these values directly, instead use b2ComputeHull() Hull :: struct { @@ -239,31 +151,6 @@ Hull :: struct { count: i32, } -// Compute the convex hull of a set of points. Returns an empty hull if it fails. -// Some failure cases: -// - all points very close together -// - all points on a line -// - less than 3 points -// - more than maxPolygonVertices points -// This welds close points and removes collinear points. -// @warning Do not modify a hull once it has been computed -ComputeHull :: proc "c" (points: []Vec2) -> Hull { - foreign lib { - b2ComputeHull :: proc "c" (points: [^]Vec2, count: i32) -> Hull --- - } - return b2ComputeHull(raw_data(points), i32(len(points))) -} - - -@(link_prefix="b2", default_calling_convention="c") -foreign lib { - // This determines if a hull is valid. Checks for: - // - convexity - // - collinear points - // This is expensive and should not be called at runtime. - ValidateHull :: proc(#by_ptr hull: Hull) -> bool --- -} - /** * @defgroup distance Distance * Functions for computing the distance between shapes. @@ -291,12 +178,6 @@ SegmentDistanceResult :: struct { distanceSquared: f32, } -@(link_prefix="b2", default_calling_convention="c") -foreign lib { - // Compute the distance between two line segments, clamping at the end points if needed. - SegmentDistance :: proc(p1, q1: Vec2, p2, q2: Vec2) -> SegmentDistanceResult --- -} - // A distance proxy is used by the GJK algorithm. It encapsulates any shape. DistanceProxy :: struct { // The point cloud @@ -413,40 +294,6 @@ TOIOutput :: struct { t: f32, // The time of the collision } -// Compute the closest points between two shapes represented as point clouds. -// DistanceCache cache is input/output. On the first call set DistanceCache.count to zero. -// 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 "c" (cache: ^DistanceCache, #by_ptr input: DistanceInput, simplexes: []Simplex) -> DistanceOutput { - foreign lib { - b2ShapeDistance :: proc "c" (cache: ^DistanceCache, #by_ptr input: DistanceInput, simplexes: [^]Simplex, simplexCapacity: c.int) -> DistanceOutput --- - } - return b2ShapeDistance(cache, input, raw_data(simplexes), i32(len(simplexes))) -} - - -// Make a proxy for use in GJK and related functions. -MakeProxy :: proc "c" (vertices: []Vec2, radius: f32) -> DistanceProxy { - foreign lib { - b2MakeProxy :: proc "c" (vertices: [^]Vec2, count: i32, radius: f32) -> DistanceProxy --- - } - return b2MakeProxy(raw_data(vertices), i32(len(vertices)), radius) -} - - -@(link_prefix="b2", default_calling_convention="c") -foreign lib { - // Perform a linear shape cast of shape B moving and shape A fixed. Determines the hit point, normal, and translation fraction. - 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 --- -} /** @@ -505,45 +352,6 @@ Manifold :: struct { pointCount: i32, } -@(link_prefix="b2", default_calling_convention="c") -foreign lib { - // Compute the contact manifold between two circles - CollideCircles :: proc(#by_ptr circleA: Circle, xfA: Transform, #by_ptr circleB: Circle, xfB: Transform) -> Manifold --- - - // Compute the contact manifold between a capsule and circle - CollideCapsuleAndCircle :: proc(#by_ptr capsuleA: Capsule, xfA: Transform, #by_ptr circleB: Circle, xfB: Transform) -> Manifold --- - - // Compute the contact manifold between an segment and a circle - CollideSegmentAndCircle :: proc(#by_ptr segmentA: Segment, xfA: Transform, #by_ptr circleB: Circle, xfB: Transform) -> Manifold --- - - // Compute the contact manifold between a polygon and a circle - CollidePolygonAndCircle :: proc(#by_ptr polygonA: Polygon, xfA: Transform, #by_ptr circleB: Circle, xfB: Transform) -> Manifold --- - - // Compute the contact manifold between a capsule and circle - CollideCapsules :: proc(#by_ptr capsuleA: Capsule, xfA: Transform, #by_ptr capsuleB: Capsule, xfB: Transform) -> Manifold --- - - // Compute the contact manifold between an segment and a capsule - CollideSegmentAndCapsule :: proc(#by_ptr segmentA: Segment, xfA: Transform, #by_ptr capsuleB: Capsule, xfB: Transform) -> Manifold --- - - // Compute the contact manifold between a polygon and capsule - CollidePolygonAndCapsule :: proc(#by_ptr polygonA: Polygon, xfA: Transform, #by_ptr capsuleB: Capsule, xfB: Transform) -> Manifold --- - - // Compute the contact manifold between two polygons - CollidePolygons :: proc(#by_ptr polygonA: Polygon, xfA: Transform, #by_ptr polygonB: Polygon, xfB: Transform) -> Manifold --- - - // Compute the contact manifold between an segment and a polygon - CollideSegmentAndPolygon :: proc(#by_ptr segmentA: Segment, xfA: Transform, #by_ptr polygonB: Polygon, xfB: Transform) -> Manifold --- - - // Compute the contact manifold between a smooth segment and a circle - CollideSmoothSegmentAndCircle :: proc(#by_ptr smoothSegmentA: SmoothSegment, xfA: Transform, #by_ptr circleB: Circle, xfB: Transform) -> Manifold --- - - // Compute the contact manifold between an segment and a capsule - CollideSmoothSegmentAndCapsule :: proc(#by_ptr smoothSegmentA: SmoothSegment, xfA: Transform, #by_ptr capsuleB: Capsule, xfB: Transform, cache: ^DistanceCache) -> Manifold --- - - // Compute the contact manifold between a smooth segment and a rounded polygon - CollideSmoothSegmentAndPolygon :: proc(#by_ptr smoothSegmentA: SmoothSegment, xfA: Transform, #by_ptr polygonB: Polygon, xfB: Transform, cache: ^DistanceCache) -> Manifold --- -} - /** * @defgroup tree Dynamic Tree @@ -663,95 +471,3 @@ TreeShapeCastCallbackFcn :: #type proc "c" (#by_ptr input: ShapeCastInput, proxy // - 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 :: #type proc "c" (#by_ptr input: RayCastInput, proxyId: i32, userData: i32, ctx: rawptr) -> f32 - -@(link_prefix="b2", default_calling_convention="c") -foreign lib { - // Constructing the tree initializes the node pool. - DynamicTree_Create :: proc() -> 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: u32, userData: i32) -> i32 --- - - // Destroy a proxy. This asserts if the id is invalid. - DynamicTree_DestroyProxy :: proc(tree: ^DynamicTree, proxyId: i32) --- - - // Move a proxy to a new AABB by removing and reinserting into the tree. - DynamicTree_MoveProxy :: proc(tree: ^DynamicTree, proxyId: i32, aabb: AABB) --- - - // Enlarge a proxy and enlarge ancestors as necessary. - DynamicTree_EnlargeProxy :: proc(tree: ^DynamicTree, proxyId: i32, aabb: AABB) --- - - // Query an AABB for overlapping proxies. The callback class - // is called for each proxy that overlaps the supplied AABB. - DynamicTree_Query :: proc(#by_ptr tree: DynamicTree, aabb: AABB, maskBits: u32, callback: TreeQueryCallbackFcn, ctx: rawptr) --- - - // Ray-cast against the proxies in the tree. This relies on the callback - // to perform a exact ray-cast in the case were the proxy contains a shape. - // The callback also performs the 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. - // @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 filter bits: `bool accept = (maskBits & node->categoryBits) != 0 ---` - // @param callback a callback class that is called for each proxy that is hit by the ray - // @param context user context that is passed to the callback - DynamicTree_RayCast :: proc(#by_ptr tree: DynamicTree, #by_ptr input: RayCastInput, maskBits: u32, callback: TreeRayCastCallbackFcn, ctx: rawptr) --- - - // Ray-cast against the proxies in the tree. This relies on the callback - // to perform a exact ray-cast in the case were the proxy contains a shape. - // The callback also performs the 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. - // @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 filter bits: `bool accept = (maskBits & node->categoryBits) != 0 ---` - // @param callback a callback class that is called for each proxy that is hit by the shape - // @param context user context that is passed to the callback - DynamicTree_ShapeCast :: proc(#by_ptr tree: DynamicTree, #by_ptr input: ShapeCastInput, maskBits: u32, callback: TreeShapeCastCallbackFcn, ctx: rawptr) --- - - // Validate this tree. For testing. - DynamicTree_Validate :: proc(#by_ptr tree: DynamicTree) --- - - // Compute the height of the binary tree in O(N) time. Should not be - // called often. - DynamicTree_GetHeight :: proc(#by_ptr tree: DynamicTree) -> c.int --- - - // Get the maximum balance of the tree. The balance is the difference in height of the two children of a node. - DynamicTree_GetMaxBalance :: 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 --- - - // Build an optimal tree. Very expensive. For testing. - DynamicTree_RebuildBottomUp :: proc(tree: ^DynamicTree) --- - - // 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 --- - - // Shift the world origin. Useful for large worlds. - // The shift formula is: position -= newOrigin - // @param tree the tree to shift - // @param newOrigin the new origin with respect to the old origin - DynamicTree_ShiftOrigin :: proc(tree: ^DynamicTree, newOrigin: Vec2) --- - - // Get the number of bytes used by this tree - DynamicTree_GetByteCount :: proc(#by_ptr tree: DynamicTree) -> c.int --- -} - -// Get proxy user data -// @return the proxy user data or 0 if the id is invalid -DynamicTree_GetUserData :: proc "contextless" (tree: DynamicTree, proxyId: i32) -> i32 { - return tree.nodes[proxyId].userData -} - -// Get the AABB of a proxy -DynamicTree_GetAABB :: proc "contextless" (tree: DynamicTree, proxyId: i32) -> AABB { - return tree.nodes[proxyId].aabb -} diff --git a/vendor/box2d/lib/box2d_windows_amd64_avx2.lib b/vendor/box2d/lib/box2d_windows_amd64_avx2.lib new file mode 100644 index 0000000000000000000000000000000000000000..5f6b037e5860f50a9b8c5ecbb206c979694dba97 GIT binary patch literal 731030 zcmY$iNi0gvu;bEKKm~^8M#iRQMrIbKsNx1tuAzmAfeDzMz{SA8w1k0Sg3>4+gkiwA zvyXw+n2C8F1Ibux76TJLY|6vHgbO=mF)-o7A)6SO@ZscZ3{2Q?uLT1Wl`*qN62nNs zEIKb31_amNVql>qKBvXNLJt05#=t@*W|i5(KoINiU|=N|?|8$&ItVeFpB)3qxatH0 z8#-=rV_-wan{yc01_5UG3u2%eez=Q)oer48W*q}r_!tiZ2O)gXjDdp$%xV6J0Vi$~ zVBo}s7d0?&l8bMyV&ELbSi^v8e+dIs@rM)!E;P)|{D}bt3)C@iqhsk725#vVd;552 zhj;@+S65#zM>kJz2YWLI2AH6qzniC{vx}2MIb6)hCBWOu(bv_@!CuALEd?%a;_m9^ z<>}|@3Kq9FF-k*{a(4=FadGm4N*N-g%mO?d-Mzd#{T%E~?M*=@qUf~nclCAlaP)U_ zNY2kINlY#&h8t?>=uoV~8aws7l=foSnQJ1AHBl@>449O^ZtsOHy$t^>uaea}99ugqxa~QjArplY^_f zbAZ3EldD5hLd(^`*~`Vn&C%TpIb?B%n5%<(fTy>Mm$SP=c4l5`Zej^u*SI_QxcGVp z_&WMK6eMOA1*euE;un-cJwd57#ohpxl2n|%kbUm%;N$D<>Ez-Iik{?bd(*_6oc!d( zlKdisF=nV50{or)934Hp9dh%_Qc1MW*TFNu&BNKz-`OE6KQj+|0`qn7c5?J|3~=^$ zNX|&i%)^=reI2|#{oFjA{2W2CkeP}@QGlb9m!r40ze90GVgYtVehyA<-T^+2j^5B* zg4HNL2X8M|S5JRee}|-^{KOP{%Yux=;#8!d@pJGF@bPf<_xDGRXyk0}@8Im@=<4e0 zCCo&gRnuKrGruFfuy2*g=V1vq#+`TMx| zd-}r^;!1br0>Nhb!=O?0=Z(@*aX^@tZ1k-O~kcKL6XoSi)F$Ws}Q*WMTo(2L8@$nV8 zxej2pU?MHeJk8X=z#t_t(G+AvijkS6VJbs>d?i>}T3WI}a*}~TYN~}%Dl`nzz*d7y z1DSx%O9Yu_01;(KGIGjKsf_n54ol3*Okqeeat38wWPVXkU=mxpZw(PRFHrdsN6s@IT)0&k@#R2B$lK)=jY|6CYNNEWtLPj zBpD$IgL4a#P%yZ{3r;O5W=JvuJ0#vYvAD!Jv7op#ClysJvnUx&C?G$lGCe;JMOjcH z$V!A!L5Y>lIr+t@#U*fME=7su2u^8kfiJiM3oc1Sa)xVOVp0ysCncGArTL`@_dz6r zb5c_aGV{{m=0JqQ6N_?#OA?DpP^2mfa`ICUzHv`20Y#Z>S!y1Vh3=^(&XA@HHi^=_ zlGGxEBivI<+=~*S;S2GsdumBQQGQw`QW&|XmISBf73UYBnTSX$5Uu`YsYN-71&)qR zPH_J~#n58{CX5;xP*L>w2!?wpq%;pXL_iXy#U=TyxFoZr6jT~v(OZ&Qz>s7V4=(PD z8PXty7ejF#lmW@jkfOr?T7+QIpqy2dSRS5{nwkU7CJaeNp!@^pyX6-pgOUJ>U`T#Z zVJS#7peVHrYBJk9ODhjtF9+C)sGIKM*sU2OyH@_sm2o%WZ62Tz9g3~fW z#yz#fC%-(k2#aa%sU^ON6=2igK0r7r9wZI2DYzgNTx?*G!l4b~4wuASP}T}cEXmAA zbuB1CgPrP;T2xYnAs1RufYrU8#b8fBLI<2`5Z?4G2Kxht9K=CbC4*B-z@~yTCBnR5 z{9yx<#t}BbsU;BWaQh#w1m=HGYD�jD_R6b2K6hchgJ!6X=xj3DU?NdS?&kOg6E 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

R3?IT@*nKSht44iql)Fw|k5h&Y3Z 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�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